diff --git a/configs/dataset_inputs/blender_lego.yaml b/configs/dataset_inputs/blender_lego.yaml
deleted file mode 100644
index 3e495e1fd..000000000
--- a/configs/dataset_inputs/blender_lego.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-data_directory: data/blender/lego
-dataset_format: blender
-downscale_factor: 1
-alpha_color: white
diff --git a/configs/dataset_inputs/friends_TBBT-big_living_room.yaml b/configs/dataset_inputs/friends_TBBT-big_living_room.yaml
deleted file mode 100644
index 07981cf10..000000000
--- a/configs/dataset_inputs/friends_TBBT-big_living_room.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-data_directory: data/friends/TBBT-big_living_room
-dataset_format: friends
-downscale_factor: 1
diff --git a/configs/dataset_inputs/instant_ngp_fox.yaml b/configs/dataset_inputs/instant_ngp_fox.yaml
deleted file mode 100644
index 90674b3d6..000000000
--- a/configs/dataset_inputs/instant_ngp_fox.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-data_directory: data/instant_ngp/fox
-dataset_format: instant_ngp
-downscale_factor: 1
diff --git a/configs/graph_default.yaml b/configs/graph_default.yaml
index 42d5f5d4d..fc7716761 100644
--- a/configs/graph_default.yaml
+++ b/configs/graph_default.yaml
@@ -16,9 +16,9 @@ logging:
# writer logs losses and images per iteration
writer:
TensorboardWriter:
- log_dir: "./"
+ log_dir: './'
LocalWriter:
- log_dir: "./"
+ log_dir: './'
stats_to_track:
[ITER_LOAD_TIME, ITER_TRAIN_TIME, RAYS_PER_SEC, CURR_TEST_PSNR]
max_log_size: 10 # if 0, logs everything with no erasing
@@ -26,7 +26,7 @@ logging:
enable_profiler: True
trainer:
- model_dir: "./checkpoints"
+ model_dir: './checkpoints'
steps_per_save: 1000
steps_per_test: 500
max_num_iterations: 1000000
@@ -46,55 +46,40 @@ hydra:
job:
chdir: True
-data:
- # Train dataloading.
- use_preprocessing_cache: False
- dataset_inputs_train:
- _target_: nerfactory.data.datasets.Dataset
- image_dataset_train:
- _target_: nerfactory.data.image_dataset.ImageDataset
- dataloader_train:
- _target_: nerfactory.data.dataloader.TrainDataloader
- image_sampler:
- _target_: nerfactory.data.image_sampler.CacheImageSampler
- num_images_to_sample_from: -1
- pixel_sampler:
- _target_: nerfactory.data.pixel_sampler.PixelSampler
- num_rays_per_batch: 1024
- # Eval dataloading.
- dataset_inputs_eval:
- _target_: nerfactory.data.datasets.Dataset
- image_dataset_eval:
- _target_: nerfactory.data.image_dataset.ImageDataset
- dataloader_eval:
- _target_: nerfactory.data.dataloader.FixedIndicesEvalDataloader
- image_indices: [0] # which images to evaluate on
- num_rays_per_chunk: 4096
- # dataloader_eval:
- # _target_: nerfactory.data.dataloader.RandIndicesEvalDataloader
- # num_rays_per_chunk: 4096
-
-graph:
- _target_: nerfactory.graphs.vanilla_nerf.NeRFGraph
- enable_collider: True
- collider_config:
- _target_: nerfactory.graphs.modules.scene_colliders.NearFarCollider
- near_plane: 2.0
- far_plane: 6.0
- num_coarse_samples: 64
- num_importance_samples: 128
- loss_coefficients:
- rgb_loss_coarse: 1.0
- rgb_loss_fine: 1.0
- enable_density_field: false
- density_field_config:
- # Please see the docstr for DensityGrid on how to set those arguments.
- _target_: nerfactory.fields.density_fields.density_grid.DensityGrid
- center: 0.0 # simply set it as the center of the scene bbox
- base_scale: 3.0 # simply set it as the scale of the scene bbox
- num_cascades: 1 # if using more than 1 cascade, the `base_scale` can be smaller than scene scale.
- resolution: 128
- update_every_num_iters: 16
+pipeline:
+ _target_: nerfactory.pipelines.base.Pipeline
+ dataloader:
+ _target_: nerfactory.dataloaders.base.VanillaDataloader
+ image_dataset_type: rgb
+ train_dataset:
+ _target_: nerfactory.dataloaders.datasets.Dataset
+ train_num_rays_per_batch: 1024
+ train_num_images_to_sample_from: -1
+ eval_dataset:
+ _target_: nerfactory.dataloaders.datasets.Dataset
+ eval_image_indices: [0]
+ eval_num_rays_per_chunk: 4096
+ model:
+ _target_: nerfactory.models.vanilla_nerf.NeRFModel
+ enable_collider: True
+ collider_config:
+ _target_: nerfactory.models.modules.scene_colliders.NearFarCollider
+ near_plane: 2.0
+ far_plane: 6.0
+ num_coarse_samples: 64
+ num_importance_samples: 128
+ loss_coefficients:
+ rgb_loss_coarse: 1.0
+ rgb_loss_fine: 1.0
+ enable_density_field: false
+ density_field_config:
+ # Please see the docstr for DensityGrid on how to set those arguments.
+ _target_: nerfactory.fields.density_fields.density_grid.DensityGrid
+ center: 0.0 # simply set it as the center of the scene bbox
+ base_scale: 3.0 # simply set it as the scale of the scene bbox
+ num_cascades: 1 # if using more than 1 cascade, the `base_scale` can be smaller than scene scale.
+ resolution: 128
+ update_every_num_iters: 16
optimizers:
fields:
diff --git a/configs/graph_instant_ngp.yaml b/configs/graph_instant_ngp.yaml
index 0b8f04441..0855ef467 100644
--- a/configs/graph_instant_ngp.yaml
+++ b/configs/graph_instant_ngp.yaml
@@ -3,45 +3,41 @@ defaults:
- _self_
method_name: instant_ngp
-data:
- # Train dataloading.
- dataset_inputs_train:
- _target_: nerfactory.data.datasets.Blender
- data_directory: data/blender/lego
- alpha_color: white
- downscale_factor: 1
- dataloader_train:
- pixel_sampler:
- num_rays_per_batch: 8192 # for training
- # Eval dataloading
- dataset_inputs_eval:
- _target_: nerfactory.data.datasets.Blender
- data_directory: data/blender/lego
- alpha_color: white
- downscale_factor: 1
- dataloader_eval:
- num_rays_per_chunk: 8192 # all rays for evaluation
viewer:
enable: true
num_rays_per_chunk: 16384
-graph:
- _target_: nerfactory.graphs.instant_ngp.NGPGraph
- enable_density_field: true
- enable_collider: false
- field_implementation: tcnn # torch, tcnn, ...
- loss_coefficients: # loss coefficients
- rgb_loss: 1.0
+pipeline:
+ dataloader:
+ train_dataset:
+ _target_: nerfactory.dataloaders.datasets.Blender
+ data_directory: data/blender/lego
+ alpha_color: white
+ downscale_factor: 1
+ train_num_rays_per_batch: 8192
+ eval_dataset:
+ _target_: nerfactory.dataloaders.datasets.Blender
+ data_directory: data/blender/lego
+ alpha_color: white
+ downscale_factor: 1
+ eval_num_rays_per_chunk: 8192
+ model:
+ _target_: nerfactory.models.instant_ngp.NGPModel
+ enable_density_field: true
+ enable_collider: false
+ field_implementation: tcnn # torch, tcnn, ...
+ loss_coefficients: # loss coefficients
+ rgb_loss: 1.0
- density_field_config:
- # Please see the docstr for DensityGrid on how to set those arguments.
- _target_: nerfactory.fields.density_fields.density_grid.DensityGrid
- center: 0.0 # simply set it as the center of the scene bbox
- base_scale: 3.0 # simply set it as the scale of the scene bbox
- num_cascades: 1 # if using more than 1 cascade, the `base_scale` can be smaller than scene scale.
- resolution: 128
- update_every_num_iters: 16
+ density_field_config:
+ # Please see the docstr for DensityGrid on how to set those arguments.
+ _target_: nerfactory.fields.density_fields.density_grid.DensityGrid
+ center: 0.0 # simply set it as the center of the scene bbox
+ base_scale: 3.0 # simply set it as the scale of the scene bbox
+ num_cascades: 1 # if using more than 1 cascade, the `base_scale` can be smaller than scene scale.
+ resolution: 128
+ update_every_num_iters: 16
# optimizer options for network
optimizers:
diff --git a/configs/graph_mipnerf.yaml b/configs/graph_mipnerf.yaml
index f853daabf..dd26d2cd9 100644
--- a/configs/graph_mipnerf.yaml
+++ b/configs/graph_mipnerf.yaml
@@ -9,24 +9,24 @@ method_name: mipnerf
# density = softplus(x) density = softplus(x-1)
# rgb = sigmoid(x) rgb = (1 + 2e) / (1 + exp(-x)) -e
-data:
- # Train dataloading.
- dataset_inputs_train:
- _target_: nerfactory.data.datasets.Blender
- data_directory: data/blender/lego
- alpha_color: white
- downscale_factor: 1
- # Eval dataloading
- dataset_inputs_eval:
- _target_: nerfactory.data.datasets.Blender
- data_directory: data/blender/lego
- alpha_color: white
- downscale_factor: 1
-
-graph:
- _target_: nerfactory.graphs.mipnerf.MipNerfGraph
- num_coarse_samples: 128
- num_importance_samples: 128
- loss_coefficients:
- rgb_loss_coarse: 0.1
- rgb_loss_fine: 1.0
+pipeline:
+ dataloader:
+ # Train dataloading.
+ train_dataset:
+ _target_: nerfactory.dataloaders.datasets.Blender
+ data_directory: data/blender/lego
+ alpha_color: white
+ downscale_factor: 1
+ # Eval dataloading
+ eval_dataset:
+ _target_: nerfactory.dataloaders.datasets.Blender
+ data_directory: data/blender/lego
+ alpha_color: white
+ downscale_factor: 1
+ model:
+ _target_: nerfactory.models.mipnerf.MipNerfModel
+ num_coarse_samples: 128
+ num_importance_samples: 128
+ loss_coefficients:
+ rgb_loss_coarse: 0.1
+ rgb_loss_fine: 1.0
diff --git a/configs/graph_mipnerf_360.yaml b/configs/graph_mipnerf_360.yaml
index 767899789..2fb2f23f2 100644
--- a/configs/graph_mipnerf_360.yaml
+++ b/configs/graph_mipnerf_360.yaml
@@ -5,29 +5,29 @@ defaults:
experiment_name: mipnerf_360
method_name: vanilla_nerf
-data:
- # Train dataloading.
- dataset_inputs_train:
- _target_: nerfactory.data.datasets.Mipnerf360
- data_directory: data/mipnerf_360/garden
- downscale_factor: 1
- # Eval dataloading
- dataset_inputs_eval:
- _target_: nerfactory.data.datasets.Mipnerf360
- data_directory: data/mipnerf_360/garden
- downscale_factor: 1
+pipeline:
+ dataloader:
+ # Train dataloading.
+ train_dataset:
+ _target_: nerfactory.dataloaders.datasets.Mipnerf360
+ data_directory: data/mipnerf_360/garden
+ downscale_factor: 1
+ # Eval dataloading
+ eval_dataset:
+ _target_: nerfactory.dataloaders.datasets.Mipnerf360
+ data_directory: data/mipnerf_360/garden
+ downscale_factor: 1
+ model:
+ _target_: nerfactory.models.mipnerf_360.MipNerf360Model
+ num_coarse_samples: 128
+ num_importance_samples: 128
+ collider_config:
+ _target_: nerfactory.models.modules.scene_colliders.NearFarCollider
+ near_plane: 0.5
+ far_plane: 20.0
+ loss_coefficients:
+ ray_loss_coarse: 1.0
+ ray_loss_fine: 1.0
trainer:
steps_per_test: 200
-
-graph:
- _target_: nerfactory.graphs.mipnerf_360.MipNerf360Graph
- num_coarse_samples: 128
- num_importance_samples: 128
- collider_config:
- _target_: nerfactory.graphs.modules.scene_colliders.NearFarCollider
- near_plane: 0.5
- far_plane: 20.0
- loss_coefficients:
- ray_loss_coarse: 1.0
- ray_loss_fine: 1.0
diff --git a/configs/graph_nerfw.yaml b/configs/graph_nerfw.yaml
index 2f412925a..2f3c403e7 100644
--- a/configs/graph_nerfw.yaml
+++ b/configs/graph_nerfw.yaml
@@ -5,31 +5,27 @@ defaults:
experiment_name: friends_TBBT-big_living_room
method_name: nerfw
-# the data
-data:
- # Train dataloading.
- dataset_inputs_train:
- _target_: nerfactory.data.datasets.Friends
- data_directory: data/friends/TBBT-big_living_room
- downscale_factor: 1
- image_dataset_train:
- _target_: nerfactory.data.image_dataset.PanopticImageDataset
- # Eval dataloading
- dataset_inputs_eval:
- _target_: nerfactory.data.datasets.Friends
- data_directory: data/friends/TBBT-big_living_room
- downscale_factor: 1
- image_dataset_eval:
- _target_: nerfactory.data.image_dataset.PanopticImageDataset
-
-graph:
- _target_: nerfactory.graphs.nerfw.NerfWGraph
- collider_config:
- _target_: nerfactory.graphs.modules.scene_colliders.AABBBoxCollider
- num_coarse_samples: 64
- num_importance_samples: 64
- loss_coefficients:
- rgb_loss_coarse: 1.0
- rgb_loss_fine: 1.0
- uncertainty_loss: 1.0
- density_loss: 0.01
+pipeline:
+ dataloader:
+ image_dataset_type: panoptic
+ # Train dataloading.
+ train_dataset:
+ _target_: nerfactory.dataloaders.datasets.Friends
+ data_directory: data/friends/TBBT-big_living_room
+ downscale_factor: 1
+ # Eval dataloading
+ eval_dataset:
+ _target_: nerfactory.dataloaders.datasets.Friends
+ data_directory: data/friends/TBBT-big_living_room
+ downscale_factor: 1
+ model:
+ _target_: nerfactory.models.nerfw.NerfWModel
+ collider_config:
+ _target_: nerfactory.models.modules.scene_colliders.AABBBoxCollider
+ num_coarse_samples: 64
+ num_importance_samples: 64
+ loss_coefficients:
+ rgb_loss_coarse: 1.0
+ rgb_loss_fine: 1.0
+ uncertainty_loss: 1.0
+ density_loss: 0.01
diff --git a/configs/graph_semantic_nerf.yaml b/configs/graph_semantic_nerf.yaml
index 54a5343dd..f26b6f439 100644
--- a/configs/graph_semantic_nerf.yaml
+++ b/configs/graph_semantic_nerf.yaml
@@ -5,30 +5,26 @@ defaults:
experiment_name: friends_TBBT-big_living_room
method_name: nerfw
-# the data
-data:
- # Train dataloading.
- dataset_inputs_train:
- _target_: nerfactory.data.datasets.Friends
- data_directory: data/friends/TBBT-big_living_room
- downscale_factor: 1
- image_dataset_train:
- _target_: nerfactory.data.image_dataset.PanopticImageDataset
- # Eval dataloading
- dataset_inputs_eval:
- _target_: nerfactory.data.datasets.Friends
- data_directory: data/friends/TBBT-big_living_room
- downscale_factor: 1
- image_dataset_eval:
- _target_: nerfactory.data.image_dataset.PanopticImageDataset
-
-graph:
- _target_: nerfactory.graphs.semantic_nerf.SemanticNerfGraph
- collider_config:
- _target_: nerfactory.graphs.modules.scene_colliders.AABBBoxCollider
- num_coarse_samples: 64
- num_importance_samples: 64
- loss_coefficients:
- rgb_loss_coarse: 1.0
- rgb_loss_fine: 1.0
- semantic_loss_fine: 0.05
+pipeline:
+ dataloader:
+ image_dataset_type: panoptic
+ # Train dataloading.
+ train_dataset:
+ _target_: nerfactory.dataloaders.datasets.Friends
+ data_directory: data/friends/TBBT-big_living_room
+ downscale_factor: 1
+ # Eval dataloading
+ eval_dataset:
+ _target_: nerfactory.dataloaders.datasets.Friends
+ data_directory: data/friends/TBBT-big_living_room
+ downscale_factor: 1
+ model:
+ _target_: nerfactory.models.semantic_nerf.SemanticNerfModel
+ collider_config:
+ _target_: nerfactory.models.modules.scene_colliders.AABBBoxCollider
+ num_coarse_samples: 64
+ num_importance_samples: 64
+ loss_coefficients:
+ rgb_loss_coarse: 1.0
+ rgb_loss_fine: 1.0
+ semantic_loss_fine: 0.05
diff --git a/configs/graph_vanilla_nerf.yaml b/configs/graph_vanilla_nerf.yaml
index 59a866788..33ade669b 100644
--- a/configs/graph_vanilla_nerf.yaml
+++ b/configs/graph_vanilla_nerf.yaml
@@ -2,16 +2,17 @@ defaults:
- graph_default
- _self_
-data:
- # Train dataloading.
- dataset_inputs_train:
- _target_: nerfactory.data.datasets.Blender
- data_directory: data/blender/lego
- alpha_color: white
- downscale_factor: 1
- # Eval dataloading
- dataset_inputs_eval:
- _target_: nerfactory.data.datasets.Blender
- data_directory: data/blender/lego
- alpha_color: white
- downscale_factor: 1
+pipeline:
+ dataloader:
+ # Train dataloading.
+ train_dataset:
+ _target_: nerfactory.dataloaders.datasets.Blender
+ data_directory: data/blender/lego
+ alpha_color: white
+ downscale_factor: 1
+ # Eval dataloading
+ eval_dataset:
+ _target_: nerfactory.dataloaders.datasets.Blender
+ data_directory: data/blender/lego
+ alpha_color: white
+ downscale_factor: 1
diff --git a/docs/notebooks/visualize_samplers.ipynb b/docs/notebooks/visualize_samplers.ipynb
index 92ece662c..08b2a7853 100644
--- a/docs/notebooks/visualize_samplers.ipynb
+++ b/docs/notebooks/visualize_samplers.ipynb
@@ -1,7316 +1,7316 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Ray Samplers\n",
- "\n",
- "## Overview\n",
- "\n",
- "Once we have a set of cameras, we want to cast camera rays associated with each pixel. Along these ray we will sample the _field_ and aggregate the samples to predict the pixels value (ie. color). The parameterization of the samples are described [here](./visualize_samples.ipynb) however we must decide where to place these samples along a ray. For this task we will use a [`Sampler`](../reference/api/graphs/modules/ray_sampler.rst).\n",
- "\n",
- "In the ideal world we would compute many dense samples along a ray. Unfortunatly each additional sample adds a computation cost to the system as it needs to be processed by the _field_ which is often a neural network. As a result it is common for NeRF methods to use on the order of 100 samples. Therefore we want to optimize where those samples are placed in the scene.\n",
- "\n",
- "For example, if the sene can be bounded by a box and the objects are all similar scales, uniform sampling along the ray may be a good option. On the other hand if the scene is unbounded (potential extending as far as the the eye can see) uniform sampling does not make sense as the samples would be very sparse for close objects. In this case a different sampling like _Uniform in Disparity_ may perform better.\n",
- "\n",
- "```{image} imgs/samplers_type-light.png\n",
- ":align: center\n",
- ":class: only-light\n",
- "```\n",
- "\n",
- "```{image} imgs/samplers_type-dark.png\n",
- ":align: center\n",
- ":class: only-dark\n",
- "```\n",
- "\n",
- "### Stratified Sampling\n",
- "\n",
- "Most samplers has the option to _stratify_ the samplers. When stratified, each sample is randomly perturbed. The magnitude of the pertubation is such that the sample ordering remains consistent and the overal distribution statistics are not changed. Using stratified samples during training generally improves the reconstructions as it help prevent overfitting. During inference stratified sampling should be disabled (nerfactory samplers will do this) as it can cause noisy artifacts when the camera moves.\n",
- "\n",
- "```{image} imgs/samplers_stratified-light.png\n",
- ":align: center\n",
- ":class: only-light\n",
- "```\n",
- "\n",
- "```{image} imgs/samplers_stratified-dark.png\n",
- ":align: center\n",
- ":class: only-dark\n",
- "```\n",
- "\n",
- "### Heirarchical Sampling\n",
- "\n",
- "It is important to sample the scene where it has content otherwise the reconstruction quality will be reduced. One trick that is often employed in NeRF methods is to do multiple round of sampling. The first round can use a predefined sampler (ie. Uniform) to generate an image. Once the space is sampled, we have an idea which samples contributed to the final color. We can use this information to sample more around those regions using a `PDFSampler`. The PDF sampler is described more below."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Spaced Samplers\n",
- "\n",
- "These are the most basic samplers that spaces samples based on a predefined function. These samplers have all have a starting and ending distance (also known as a near/far plane). The plots below are histograms of points sampled from some predefined samplers. \n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "tags": [
- "hide-input"
- ]
- },
- "outputs": [
- {
- "data": {
- "application/vnd.plotly.v1+json": {
- "config": {
- "plotlyServerURL": "https://plot.ly"
- },
- "data": [
+ "cells": [
{
- "nbinsx": 50,
- "opacity": 0.7,
- "type": "histogram",
- "x": [
- 2,
- 2.003000020980835,
- 2.00600004196167,
- 2.009000062942505,
- 2.01200008392334,
- 2.015000104904175,
- 2.0180001258850098,
- 2.0209999084472656,
- 2.0239999294281006,
- 2.0269999504089355,
- 2.0299999713897705,
- 2.0329999923706055,
- 2.0360000133514404,
- 2.0390000343322754,
- 2.0420000553131104,
- 2.0450000762939453,
- 2.0480000972747803,
- 2.050999879837036,
- 2.053999900817871,
- 2.056999921798706,
- 2.059999942779541,
- 2.062999963760376,
- 2.065999984741211,
- 2.069000005722046,
- 2.072000026702881,
- 2.075000047683716,
- 2.078000068664551,
- 2.0810000896453857,
- 2.0840001106262207,
- 2.0870001316070557,
- 2.0900001525878906,
- 2.0929999351501465,
- 2.0959999561309814,
- 2.0989999771118164,
- 2.1019999980926514,
- 2.1050000190734863,
- 2.1080000400543213,
- 2.1110000610351562,
- 2.114000082015991,
- 2.117000102996826,
- 2.119999885559082,
- 2.122999906539917,
- 2.125999927520752,
- 2.128999948501587,
- 2.131999969482422,
- 2.134999990463257,
- 2.138000011444092,
- 2.1410000324249268,
- 2.1440000534057617,
- 2.1469998359680176,
- 2.1500000953674316,
- 2.1529998779296875,
- 2.1560001373291016,
- 2.1589999198913574,
- 2.1619999408721924,
- 2.1649999618530273,
- 2.1679999828338623,
- 2.1710000038146973,
- 2.1740000247955322,
- 2.177000045776367,
- 2.180000066757202,
- 2.183000087738037,
- 2.186000108718872,
- 2.188999891281128,
- 2.191999912261963,
- 2.194999933242798,
- 2.197999954223633,
- 2.2009999752044678,
- 2.2039999961853027,
- 2.2070000171661377,
- 2.2100000381469727,
- 2.2130000591278076,
- 2.2160000801086426,
- 2.2190001010894775,
- 2.2220001220703125,
- 2.2249999046325684,
- 2.2280001640319824,
- 2.2309999465942383,
- 2.2339999675750732,
- 2.236999988555908,
- 2.240000009536743,
- 2.243000030517578,
- 2.246000051498413,
- 2.249000072479248,
- 2.252000093460083,
- 2.254999876022339,
- 2.257999897003174,
- 2.260999917984009,
- 2.2639999389648438,
- 2.267000198364258,
- 2.2699999809265137,
- 2.2730000019073486,
- 2.2760000228881836,
- 2.2790000438690186,
- 2.2820000648498535,
- 2.2849998474121094,
- 2.2880001068115234,
- 2.2909998893737793,
- 2.2939999103546143,
- 2.296999931335449,
- 2.299999952316284,
- 2.302999973297119,
- 2.305999994277954,
- 2.309000015258789,
- 2.312000036239624,
- 2.315000057220459,
- 2.317999839782715,
- 2.321000099182129,
- 2.324000120162964,
- 2.3269999027252197,
- 2.3299999237060547,
- 2.3329999446868896,
- 2.3359999656677246,
- 2.3389999866485596,
- 2.3420000076293945,
- 2.3450000286102295,
- 2.3480000495910645,
- 2.3510000705718994,
- 2.3540000915527344,
- 2.3569998741149902,
- 2.3600001335144043,
- 2.36299991607666,
- 2.366000175476074,
- 2.36899995803833,
- 2.371999979019165,
- 2.375,
- 2.378000020980835,
- 2.38100004196167,
- 2.384000062942505,
- 2.38700008392334,
- 2.390000104904175,
- 2.3930001258850098,
- 2.3959999084472656,
- 2.3989999294281006,
- 2.4019999504089355,
- 2.4049999713897705,
- 2.4079999923706055,
- 2.4110000133514404,
- 2.4140000343322754,
- 2.4170000553131104,
- 2.4200000762939453,
- 2.422999858856201,
- 2.4260001182556152,
- 2.428999900817871,
- 2.432000160217285,
- 2.434999942779541,
- 2.437999963760376,
- 2.440999984741211,
- 2.444000005722046,
- 2.447000026702881,
- 2.450000047683716,
- 2.453000068664551,
- 2.4560000896453857,
- 2.4590001106262207,
- 2.4619998931884766,
- 2.4650001525878906,
- 2.4679999351501465,
- 2.4709999561309814,
- 2.4739999771118164,
- 2.4769999980926514,
- 2.4800000190734863,
- 2.4830000400543213,
- 2.4860000610351562,
- 2.489000082015991,
- 2.492000102996826,
- 2.494999885559082,
- 2.498000144958496,
- 2.500999927520752,
- 2.504000186920166,
- 2.506999969482422,
- 2.509999990463257,
- 2.513000011444092,
- 2.5160000324249268,
- 2.5190000534057617,
- 2.5220000743865967,
- 2.5250000953674316,
- 2.5280001163482666,
- 2.5310001373291016,
- 2.5339999198913574,
- 2.5370001792907715,
- 2.5399999618530273,
- 2.5429999828338623,
- 2.5460000038146973,
- 2.5490000247955322,
- 2.552000045776367,
- 2.555000066757202,
- 2.558000087738037,
- 2.561000108718872,
- 2.564000129699707,
- 2.566999912261963,
- 2.570000171661377,
- 2.572999954223633,
- 2.5759999752044678,
- 2.5789999961853027,
- 2.5820000171661377,
- 2.5850000381469727,
- 2.5880000591278076,
- 2.5910000801086426,
- 2.5939998626708984,
- 2.5970001220703125,
- 2.5999999046325684,
- 2.6030001640319824,
- 2.6059999465942383,
- 2.6090002059936523,
- 2.611999988555908,
- 2.615000009536743,
- 2.618000030517578,
- 2.620999813079834,
- 2.624000072479248,
- 2.627000093460083,
- 2.630000114440918,
- 2.632999897003174,
- 2.635999917984009,
- 2.6389999389648438,
- 2.642000198364258,
- 2.6449999809265137,
- 2.6480000019073486,
- 2.6510000228881836,
- 2.6540000438690186,
- 2.6570000648498535,
- 2.6599998474121094,
- 2.6630001068115234,
- 2.6659998893737793,
- 2.6690001487731934,
- 2.671999931335449,
- 2.674999952316284,
- 2.677999973297119,
- 2.681000232696533,
- 2.684000015258789,
- 2.687000036239624,
- 2.690000057220459,
- 2.692999839782715,
- 2.696000099182129,
- 2.6989998817443848,
- 2.702000141143799,
- 2.7049999237060547,
- 2.7080001831054688,
- 2.7109999656677246,
- 2.7139999866485596,
- 2.7170000076293945,
- 2.7200000286102295,
- 2.7230000495910645,
- 2.7260000705718994,
- 2.7290000915527344,
- 2.7319998741149902,
- 2.7350001335144043,
- 2.73799991607666,
- 2.741000175476074,
- 2.74399995803833,
- 2.747000217437744,
- 2.75,
- 2.753000020980835,
- 2.75600004196167,
- 2.759000062942505,
- 2.76200008392334,
- 2.765000104904175,
- 2.7680001258850098,
- 2.7709999084472656,
- 2.7740001678466797,
- 2.7769999504089355,
- 2.7800002098083496,
- 2.7829999923706055,
- 2.7860002517700195,
- 2.7890000343322754,
- 2.7919998168945312,
- 2.7950000762939453,
- 2.797999858856201,
- 2.8010001182556152,
- 2.803999900817871,
- 2.807000160217285,
- 2.809999942779541,
- 2.812999963760376,
- 2.815999984741211,
- 2.819000005722046,
- 2.822000026702881,
- 2.825000047683716,
- 2.828000068664551,
- 2.8309998512268066,
- 2.8340001106262207,
- 2.8369998931884766,
- 2.8400001525878906,
- 2.8429999351501465,
- 2.8460001945495605,
- 2.8489999771118164,
- 2.8519999980926514,
- 2.8550000190734863,
- 2.8580000400543213,
- 2.8610000610351562,
- 2.864000082015991,
- 2.867000102996826,
- 2.869999885559082,
- 2.873000144958496,
- 2.875999927520752,
- 2.879000186920166,
- 2.881999969482422,
- 2.885000228881836,
- 2.888000011444092,
- 2.8909997940063477,
- 2.8940000534057617,
- 2.8969998359680176,
- 2.9000000953674316,
- 2.9029998779296875,
- 2.9060001373291016,
- 2.9089999198913574,
- 2.9120001792907715,
- 2.9149999618530273,
- 2.9180002212524414,
- 2.9210000038146973,
- 2.9240002632141113,
- 2.927000045776367,
- 2.930000066757202,
- 2.933000087738037,
- 2.935999870300293,
- 2.939000129699707,
- 2.941999912261963,
- 2.945000171661377,
- 2.947999954223633,
- 2.9509999752044678,
- 2.9539999961853027,
- 2.9570000171661377,
- 2.9600000381469727,
- 2.9630000591278076,
- 2.9660000801086426,
- 2.9689998626708984,
- 2.9720001220703125,
- 2.9749999046325684,
- 2.9780001640319824,
- 2.9809999465942383,
- 2.9840002059936523,
- 2.986999988555908,
- 2.990000009536743,
- 2.993000030517578,
- 2.996000051498413,
- 2.999000072479248,
- 3.002000093460083,
- 3.005000114440918,
- 3.007999897003174,
- 3.011000156402588,
- 3.0139999389648438,
- 3.017000198364258,
- 3.0199999809265137,
- 3.0230002403259277,
- 3.0260000228881836,
- 3.0290000438690186,
- 3.0320000648498535,
- 3.0349998474121094,
- 3.0380001068115234,
- 3.0409998893737793,
- 3.0440001487731934,
- 3.046999931335449,
- 3.0500001907348633,
- 3.052999973297119,
- 3.056000232696533,
- 3.059000015258789,
- 3.062000274658203,
- 3.065000057220459,
- 3.068000078201294,
- 3.071000099182129,
- 3.074000120162964,
- 3.077000141143799,
- 3.0799999237060547,
- 3.0830001831054688,
- 3.0859999656677246,
- 3.0889999866485596,
- 3.0920000076293945,
- 3.0950000286102295,
- 3.0980000495910645,
- 3.1010000705718994,
- 3.1040000915527344,
- 3.1069998741149902,
- 3.1100001335144043,
- 3.11299991607666,
- 3.116000175476074,
- 3.11899995803833,
- 3.122000217437744,
- 3.125,
- 3.128000020980835,
- 3.13100004196167,
- 3.134000062942505,
- 3.13700008392334,
- 3.140000104904175,
- 3.1430001258850098,
- 3.1459999084472656,
- 3.1490001678466797,
- 3.1519999504089355,
- 3.1549999713897705,
- 3.1579999923706055,
- 3.1610000133514404,
- 3.1640000343322754,
- 3.1669998168945312,
- 3.1700000762939453,
- 3.172999858856201,
- 3.1760001182556152,
- 3.178999900817871,
- 3.182000160217285,
- 3.184999942779541,
- 3.188000202178955,
- 3.190999984741211,
- 3.194000244140625,
- 3.197000026702881,
- 3.200000047683716,
- 3.2029998302459717,
- 3.2059998512268066,
- 3.2089998722076416,
- 3.2119998931884766,
- 3.2150001525878906,
- 3.2180001735687256,
- 3.2210001945495605,
- 3.2240002155303955,
- 3.2269999980926514,
- 3.2300000190734863,
- 3.2330000400543213,
- 3.2360000610351562,
- 3.239000082015991,
- 3.242000102996826,
- 3.244999885559082,
- 3.247999906539917,
- 3.250999927520752,
- 3.254000186920166,
- 3.256999969482422,
- 3.260000228881836,
- 3.263000011444092,
- 3.2660000324249268,
- 3.2690000534057617,
- 3.2720000743865967,
- 3.2750000953674316,
- 3.2780001163482666,
- 3.2809998989105225,
- 3.2839999198913574,
- 3.2869999408721924,
- 3.2899999618530273,
- 3.2930002212524414,
- 3.2960000038146973,
- 3.2990000247955322,
- 3.302000045776367,
- 3.304999828338623,
- 3.308000087738037,
- 3.310999870300293,
- 3.314000129699707,
- 3.317000150680542,
- 3.319999933242798,
- 3.323000192642212,
- 3.3259999752044678,
- 3.3289999961853027,
- 3.332000255584717,
- 3.3350000381469727,
- 3.3380002975463867,
- 3.3410000801086426,
- 3.3439998626708984,
- 3.3469998836517334,
- 3.3499999046325684,
- 3.3530001640319824,
- 3.3560001850128174,
- 3.3590002059936523,
- 3.3620002269744873,
- 3.365000009536743,
- 3.368000030517578,
- 3.371000051498413,
- 3.374000072479248,
- 3.377000093460083,
- 3.380000114440918,
- 3.382999897003174,
- 3.386000156402588,
- 3.3889999389648438,
- 3.392000198364258,
- 3.3949999809265137,
- 3.3980002403259277,
- 3.4010000228881836,
- 3.4040000438690186,
- 3.4070000648498535,
- 3.4100000858306885,
- 3.4130001068115234,
- 3.4160001277923584,
- 3.4189999103546143,
- 3.421999931335449,
- 3.424999952316284,
- 3.427999973297119,
- 3.431000232696533,
- 3.434000253677368,
- 3.437000274658203,
- 3.440000057220459,
- 3.442999839782715,
- 3.446000099182129,
- 3.4489998817443848,
- 3.452000141143799,
- 3.455000162124634,
- 3.4579999446868896,
- 3.4610002040863037,
- 3.4639999866485596,
- 3.4670000076293945,
- 3.4700002670288086,
- 3.4730000495910645,
- 3.4760003089904785,
- 3.4790000915527344,
- 3.4820001125335693,
- 3.4850001335144043,
- 3.48799991607666,
- 3.491000175476074,
- 3.494000196456909,
- 3.497000217437744,
- 3.5,
- 3.503000020980835,
- 3.50600004196167,
- 3.509000062942505,
- 3.5119998455047607,
- 3.5149998664855957,
- 3.5179998874664307,
- 3.5209999084472656,
- 3.5239996910095215,
- 3.5269997119903564,
- 3.5299997329711914,
- 3.5329999923706055,
- 3.5360000133514404,
- 3.5390000343322754,
- 3.5419998168945312,
- 3.544999837875366,
- 3.547999858856201,
- 3.550999879837036,
- 3.553999900817871,
- 3.557000160217285,
- 3.559999942779541,
- 3.562999725341797,
- 3.565999746322632,
- 3.569000005722046,
- 3.572000026702881,
- 3.575000047683716,
- 3.578000068664551,
- 3.5809998512268066,
- 3.5839998722076416,
- 3.5869998931884766,
- 3.5899999141693115,
- 3.5930001735687256,
- 3.5960001945495605,
- 3.5989999771118164,
- 3.6019997596740723,
- 3.6050000190734863,
- 3.607999801635742,
- 3.610999822616577,
- 3.613999843597412,
- 3.617000102996826,
- 3.619999885559082,
- 3.622999668121338,
- 3.625999689102173,
- 3.628999948501587,
- 3.631999969482422,
- 3.634999990463257,
- 3.638000011444092,
- 3.6409997940063477,
- 3.6439998149871826,
- 3.6469998359680176,
- 3.6499998569488525,
- 3.6530001163482666,
- 3.6560001373291016,
- 3.6589999198913574,
- 3.6619997024536133,
- 3.6649999618530273,
- 3.6679999828338623,
- 3.6710000038146973,
- 3.6740000247955322,
- 3.677000045776367,
- 3.679999828338623,
- 3.682999849319458,
- 3.685999870300293,
- 3.689000129699707,
- 3.692000150680542,
- 3.695000171661377,
- 3.697999954223633,
- 3.7009999752044678,
- 3.7039997577667236,
- 3.7069997787475586,
- 3.7099997997283936,
- 3.7130000591278076,
- 3.7160000801086426,
- 3.7189998626708984,
- 3.7219996452331543,
- 3.7249999046325684,
- 3.7279999256134033,
- 3.7309999465942383,
- 3.7339999675750732,
- 3.736999988555908,
- 3.739999771118164,
- 3.742999792098999,
- 3.745999813079834,
- 3.749000072479248,
- 3.752000093460083,
- 3.755000114440918,
- 3.757999897003174,
- 3.760999917984009,
- 3.7639999389648438,
- 3.7669999599456787,
- 3.7699999809265137,
- 3.7730002403259277,
- 3.7760000228881836,
- 3.7789998054504395,
- 3.7819998264312744,
- 3.7850000858306885,
- 3.7880001068115234,
- 3.7910001277923584,
- 3.7940001487731934,
- 3.796999931335449,
- 3.799999713897705,
- 3.80299973487854,
- 3.805999755859375,
- 3.809000015258789,
- 3.812000036239624,
- 3.815000057220459,
- 3.817999839782715,
- 3.82099986076355,
- 3.8239998817443848,
- 3.8269999027252197,
- 3.8299999237060547,
- 3.8330001831054688,
- 3.8359999656677246,
- 3.8389997482299805,
- 3.8419997692108154,
- 3.8450000286102295,
- 3.8480000495910645,
- 3.8510000705718994,
- 3.8540000915527344,
- 3.8569998741149902,
- 3.859999895095825,
- 3.86299991607666,
- 3.865999937057495,
- 3.869000196456909,
- 3.871999979019165,
- 3.875,
- 3.877999782562256,
- 3.880999803543091,
- 3.883999824523926,
- 3.8869998455047607,
- 3.8899998664855957,
- 3.8930001258850098,
- 3.8959999084472656,
- 3.8989996910095215,
- 3.9019997119903564,
- 3.9049999713897705,
- 3.9079999923706055,
- 3.9110000133514404,
- 3.9140000343322754,
- 3.9169998168945312,
- 3.919999837875366,
- 3.922999858856201,
- 3.925999879837036,
- 3.92900013923645,
- 3.932000160217285,
- 3.934999942779541,
- 3.937999725341797,
- 3.940999984741211,
- 3.944000005722046,
- 3.947000026702881,
- 3.950000047683716,
- 3.953000068664551,
- 3.9559998512268066,
- 3.9589998722076416,
- 3.9619998931884766,
- 3.9650001525878906,
- 3.9679999351501465,
- 3.9709999561309814,
- 3.9739999771118164,
- 3.9769997596740723,
- 3.9799997806549072,
- 3.982999801635742,
- 3.985999822616577,
- 3.989000082015991,
- 3.992000102996826,
- 3.994999885559082,
- 3.997999668121338,
- 4.000999927520752,
- 4.003999710083008,
- 4.006999969482422,
- 4.010000228881836,
- 4.013000011444092,
- 4.015999794006348,
- 4.019000053405762,
- 4.021999835968018,
- 4.025000095367432,
- 4.0279998779296875,
- 4.031000137329102,
- 4.033999919891357,
- 4.036999702453613,
- 4.039999961853027,
- 4.043000221252441,
- 4.046000003814697,
- 4.049000263214111,
- 4.052000045776367,
- 4.054999828338623,
- 4.057999610900879,
- 4.060999870300293,
- 4.064000129699707,
- 4.066999912261963,
- 4.069999694824219,
- 4.072999954223633,
- 4.075999736785889,
- 4.0789995193481445,
- 4.081999778747559,
- 4.085000038146973,
- 4.088000297546387,
- 4.091000080108643,
- 4.093999862670898,
- 4.0970001220703125,
- 4.099999904632568,
- 4.102999687194824,
- 4.105999946594238,
- 4.109000205993652,
- 4.111999988555908,
- 4.114999771118164,
- 4.118000030517578,
- 4.121000289916992,
- 4.124000072479248,
- 4.126999855041504,
- 4.130000114440918,
- 4.132999897003174,
- 4.13599967956543,
- 4.138999938964844,
- 4.142000198364258,
- 4.145000457763672,
- 4.148000240325928,
- 4.151000022888184,
- 4.1539998054504395,
- 4.1570000648498535,
- 4.159999847412109,
- 4.163000106811523,
- 4.165999889373779,
- 4.169000148773193,
- 4.171999931335449,
- 4.174999713897705,
- 4.177999496459961,
- 4.180999755859375,
- 4.184000015258789,
- 4.187000274658203,
- 4.190000057220459,
- 4.192999839782715,
- 4.196000099182129,
- 4.198999881744385,
- 4.201999664306641,
- 4.204999923706055,
- 4.208000183105469,
- 4.210999965667725,
- 4.2139997482299805,
- 4.2170000076293945,
- 4.220000267028809,
- 4.2230000495910645,
- 4.22599983215332,
- 4.229000091552734,
- 4.23199987411499,
- 4.234999656677246,
- 4.23799991607666,
- 4.241000175476074,
- 4.24399995803833,
- 4.246999740600586,
- 4.25,
- 4.252999782562256,
- 4.255999565124512,
- 4.258999824523926,
- 4.26200008392334,
- 4.265000343322754,
- 4.26800012588501,
- 4.270999908447266,
- 4.2739996910095215,
- 4.2769999504089355,
- 4.279999732971191,
- 4.2829999923706055,
- 4.2860002517700195,
- 4.289000034332275,
- 4.291999816894531,
- 4.295000076293945,
- 4.297999858856201,
- 4.301000118255615,
- 4.303999900817871,
- 4.307000160217285,
- 4.309999942779541,
- 4.312999725341797,
- 4.315999984741211,
- 4.319000244140625,
- 4.322000026702881,
- 4.325000286102295,
- 4.328000068664551,
- 4.330999851226807,
- 4.3339996337890625,
- 4.336999893188477,
- 4.340000152587891,
- 4.3429999351501465,
- 4.345999717712402,
- 4.348999977111816,
- 4.351999759674072,
- 4.354999542236328,
- 4.357999801635742,
- 4.361000061035156,
- 4.36400032043457,
- 4.367000102996826,
- 4.369999885559082,
- 4.373000144958496,
- 4.375999927520752,
- 4.378999710083008,
- 4.381999969482422,
- 4.385000228881836,
- 4.388000011444092,
- 4.390999794006348,
- 4.394000053405762,
- 4.397000312805176,
- 4.400000095367432,
- 4.4029998779296875,
- 4.405999660491943,
- 4.409000396728516,
- 4.411999702453613,
- 4.414999961853027,
- 4.417999744415283,
- 4.4210004806518555,
- 4.423999786376953,
- 4.426999568939209,
- 4.429999828338623,
- 4.432999610900879,
- 4.435999870300293,
- 4.438999652862549,
- 4.441999912261963,
- 4.444999694824219,
- 4.447999954223633,
- 4.451000213623047,
- 4.4539995193481445,
- 4.457000255584717,
- 4.460000038146973,
- 4.463000297546387,
- 4.465999603271484,
- 4.469000339508057,
- 4.4720001220703125,
- 4.474999904632568,
- 4.478000164031982,
- 4.480999946594238,
- 4.483999729156494,
- 4.486999988555908,
- 4.490000247955322,
- 4.493000030517578,
- 4.495999813079834,
- 4.499000072479248,
- 4.501999855041504,
- 4.505000114440918,
- 4.508000373840332,
- 4.51099967956543,
- 4.513999938964844,
- 4.517000198364258,
- 4.519999980926514,
- 4.5229997634887695,
- 4.525999546051025,
- 4.529000282287598,
- 4.531999588012695,
- 4.534999847412109,
- 4.537999629974365,
- 4.5410003662109375,
- 4.543999671936035,
- 4.546999931335449,
- 4.550000190734863,
- 4.552999973297119,
- 4.556000232696533,
- 4.559000015258789,
- 4.562000274658203,
- 4.565000057220459,
- 4.568000316619873,
- 4.571000099182129,
- 4.573999881744385,
- 4.577000141143799,
- 4.579999923706055,
- 4.5829997062683105,
- 4.585999965667725,
- 4.5889997482299805,
- 4.5920000076293945,
- 4.59499979019165,
- 4.5980000495910645,
- 4.60099983215332,
- 4.604000091552734,
- 4.607000350952148,
- 4.609999656677246,
- 4.613000392913818,
- 4.615999698638916,
- 4.61899995803833,
- 4.621999740600586,
- 4.625,
- 4.628000259399414,
- 4.630999565124512,
- 4.633999824523926,
- 4.63700008392334,
- 4.640000343322754,
- 4.642999649047852,
- 4.645999908447266,
- 4.64900016784668,
- 4.6519999504089355,
- 4.65500020980835,
- 4.6579999923706055,
- 4.660999774932861,
- 4.664000034332275,
- 4.6670002937316895,
- 4.670000076293945,
- 4.672999858856201,
- 4.676000118255615,
- 4.678999900817871,
- 4.681999683380127,
- 4.685000419616699,
- 4.688000202178955,
- 4.690999984741211,
- 4.693999767303467,
- 4.697000026702881,
- 4.699999809265137,
- 4.702999591827393,
- 4.705999851226807,
- 4.7089996337890625,
- 4.711999893188477,
- 4.714999675750732,
- 4.7179999351501465,
- 4.720999717712402,
- 4.723999977111816,
- 4.7270002365112305,
- 4.729999542236328,
- 4.7330002784729,
- 4.736000061035156,
- 4.73900032043457,
- 4.741999626159668,
- 4.74500036239624,
- 4.748000144958496,
- 4.750999927520752,
- 4.754000186920166,
- 4.756999969482422,
- 4.759999752044678,
- 4.763000011444092,
- 4.766000270843506,
- 4.769000053405762,
- 4.771999835968018,
- 4.775000095367432,
- 4.7779998779296875,
- 4.781000137329102,
- 4.783999919891357,
- 4.7870001792907715,
- 4.789999961853027,
- 4.792999744415283,
- 4.796000003814697,
- 4.798999786376953,
- 4.801999568939209,
- 4.805000305175781,
- 4.807999610900879,
- 4.810999870300293,
- 4.813999652862549,
- 4.817000389099121,
- 4.819999694824219,
- 4.822999954223633,
- 4.826000213623047,
- 4.828999996185303,
- 4.832000255584717,
- 4.835000038146973,
- 4.838000297546387,
- 4.841000080108643,
- 4.844000339508057,
- 4.8470001220703125,
- 4.849999904632568,
- 4.853000164031982,
- 4.855999946594238,
- 4.858999729156494,
- 4.861999988555908,
- 4.864999771118164,
- 4.868000030517578,
- 4.870999813079834,
- 4.874000072479248,
- 4.876999855041504,
- 4.87999963760376,
- 4.882999897003174,
- 4.886000156402588,
- 4.888999938964844,
- 4.8919997215271,
- 4.894999980926514,
- 4.8979997634887695,
- 4.901000022888184,
- 4.904000282287598,
- 4.906999588012695,
- 4.909999847412109,
- 4.913000106811523,
- 4.9160003662109375,
- 4.918999671936035,
- 4.921999931335449,
- 4.925000190734863,
- 4.927999973297119,
- 4.931000232696533,
- 4.934000015258789,
- 4.936999797821045,
- 4.940000057220459,
- 4.943000316619873,
- 4.946000099182129,
- 4.948999881744385,
- 4.952000141143799,
- 4.954999923706055,
- 4.9579997062683105,
- 4.961000442504883,
- 4.9639997482299805,
- 4.9670000076293945,
- 4.96999979019165,
- 4.973000526428223,
- 4.97599983215332,
- 4.978999614715576,
- 4.982000350952148,
- 4.984999656677246,
- 4.98799991607666,
- 4.990999698638916,
- 4.994000434875488,
- 4.996999740600586
- ],
- "xaxis": "x",
- "yaxis": "y"
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Ray Samplers\n",
+ "\n",
+ "## Overview\n",
+ "\n",
+ "Once we have a set of cameras, we want to cast camera rays associated with each pixel. Along these ray we will sample the _field_ and aggregate the samples to predict the pixels value (ie. color). The parameterization of the samples are described [here](./visualize_samples.ipynb) however we must decide where to place these samples along a ray. For this task we will use a [`Sampler`](../reference/api/graphs/modules/ray_sampler.rst).\n",
+ "\n",
+ "In the ideal world we would compute many dense samples along a ray. Unfortunatly each additional sample adds a computation cost to the system as it needs to be processed by the _field_ which is often a neural network. As a result it is common for NeRF methods to use on the order of 100 samples. Therefore we want to optimize where those samples are placed in the scene.\n",
+ "\n",
+ "For example, if the sene can be bounded by a box and the objects are all similar scales, uniform sampling along the ray may be a good option. On the other hand if the scene is unbounded (potential extending as far as the the eye can see) uniform sampling does not make sense as the samples would be very sparse for close objects. In this case a different sampling like _Uniform in Disparity_ may perform better.\n",
+ "\n",
+ "```{image} imgs/samplers_type-light.png\n",
+ ":align: center\n",
+ ":class: only-light\n",
+ "```\n",
+ "\n",
+ "```{image} imgs/samplers_type-dark.png\n",
+ ":align: center\n",
+ ":class: only-dark\n",
+ "```\n",
+ "\n",
+ "### Stratified Sampling\n",
+ "\n",
+ "Most samplers has the option to _stratify_ the samplers. When stratified, each sample is randomly perturbed. The magnitude of the pertubation is such that the sample ordering remains consistent and the overal distribution statistics are not changed. Using stratified samples during training generally improves the reconstructions as it help prevent overfitting. During inference stratified sampling should be disabled (nerfactory samplers will do this) as it can cause noisy artifacts when the camera moves.\n",
+ "\n",
+ "```{image} imgs/samplers_stratified-light.png\n",
+ ":align: center\n",
+ ":class: only-light\n",
+ "```\n",
+ "\n",
+ "```{image} imgs/samplers_stratified-dark.png\n",
+ ":align: center\n",
+ ":class: only-dark\n",
+ "```\n",
+ "\n",
+ "### Heirarchical Sampling\n",
+ "\n",
+ "It is important to sample the scene where it has content otherwise the reconstruction quality will be reduced. One trick that is often employed in NeRF methods is to do multiple round of sampling. The first round can use a predefined sampler (ie. Uniform) to generate an image. Once the space is sampled, we have an idea which samples contributed to the final color. We can use this information to sample more around those regions using a `PDFSampler`. The PDF sampler is described more below."
+ ]
},
{
- "nbinsx": 50,
- "opacity": 0.7,
- "type": "histogram",
- "x": [
- 2,
- 2.0012006759643555,
- 2.0024027824401855,
- 2.0036065578460693,
- 2.0048115253448486,
- 2.0060181617736816,
- 2.00722599029541,
- 2.0084354877471924,
- 2.009646415710449,
- 2.0108585357666016,
- 2.0120723247528076,
- 2.0132875442504883,
- 2.0145044326782227,
- 2.0157225131988525,
- 2.016942262649536,
- 2.0181634426116943,
- 2.019386053085327,
- 2.0206103324890137,
- 2.0218358039855957,
- 2.0230629444122314,
- 2.024291515350342,
- 2.0255215167999268,
- 2.0267531871795654,
- 2.0279862880706787,
- 2.0292208194732666,
- 2.030456781387329,
- 2.0316944122314453,
- 2.032933473587036,
- 2.0341742038726807,
- 2.0354161262512207,
- 2.0366597175598145,
- 2.037905216217041,
- 2.039151668548584,
- 2.0404000282287598,
- 2.041649580001831,
- 2.042901039123535,
- 2.0441536903381348,
- 2.045408010482788,
- 2.046663761138916,
- 2.0479211807250977,
- 2.049180507659912,
- 2.050440788269043,
- 2.0517029762268066,
- 2.052966594696045,
- 2.054231882095337,
- 2.0554983615875244,
- 2.0567667484283447,
- 2.0580365657806396,
- 2.0593080520629883,
- 2.0605812072753906,
- 2.0618557929992676,
- 2.063131809234619,
- 2.0644094944000244,
- 2.0656888484954834,
- 2.066969871520996,
- 2.0682523250579834,
- 2.0695364475250244,
- 2.07082200050354,
- 2.0721094608306885,
- 2.0733983516693115,
- 2.0746889114379883,
- 2.0759809017181396,
- 2.0772745609283447,
- 2.0785698890686035,
- 2.079866886138916,
- 2.081165313720703,
- 2.082465648651123,
- 2.0837676525115967,
- 2.085071086883545,
- 2.0863759517669678,
- 2.0876827239990234,
- 2.0889909267425537,
- 2.090301036834717,
- 2.0916125774383545,
- 2.092925786972046,
- 2.094240665435791,
- 2.095557451248169,
- 2.0968756675720215,
- 2.0981955528259277,
- 2.0995171070098877,
- 2.1008403301239014,
- 2.1021652221679688,
- 2.10349178314209,
- 2.1048200130462646,
- 2.106149911880493,
- 2.1074817180633545,
- 2.1088149547576904,
- 2.11014986038208,
- 2.1114864349365234,
- 2.1128249168395996,
- 2.1141650676727295,
- 2.115506649017334,
- 2.1168501377105713,
- 2.1181952953338623,
- 2.119542121887207,
- 2.1208908557891846,
- 2.1222410202026367,
- 2.1235930919647217,
- 2.1249468326568604,
- 2.1263022422790527,
- 2.127659559249878,
- 2.129018545150757,
- 2.1303791999816895,
- 2.131741523742676,
- 2.133105754852295,
- 2.1344716548919678,
- 2.1358394622802734,
- 2.1372087001800537,
- 2.138579845428467,
- 2.1399528980255127,
- 2.1413276195526123,
- 2.1427042484283447,
- 2.1440823078155518,
- 2.1454625129699707,
- 2.1468441486358643,
- 2.1482276916503906,
- 2.14961314201355,
- 2.1510000228881836,
- 2.1523890495300293,
- 2.153779983520508,
- 2.15517258644104,
- 2.156566858291626,
- 2.1579627990722656,
- 2.159360885620117,
- 2.1607606410980225,
- 2.1621620655059814,
- 2.1635653972625732,
- 2.164970636367798,
- 2.1663777828216553,
- 2.1677868366241455,
- 2.1691973209381104,
- 2.170609951019287,
- 2.1720242500305176,
- 2.17344069480896,
- 2.174858570098877,
- 2.176278591156006,
- 2.1777002811431885,
- 2.179124116897583,
- 2.1805496215820312,
- 2.181976795196533,
- 2.183406114578247,
- 2.1848373413085938,
- 2.186270236968994,
- 2.1877050399780273,
- 2.1891417503356934,
- 2.190580368041992,
- 2.192021131515503,
- 2.1934635639190674,
- 2.1949079036712646,
- 2.1963541507720947,
- 2.1978020668029785,
- 2.1992523670196533,
- 2.2007040977478027,
- 2.202157974243164,
- 2.2036139965057373,
- 2.2050716876983643,
- 2.206531524658203,
- 2.2079930305480957,
- 2.209456443786621,
- 2.2109220027923584,
- 2.2123894691467285,
- 2.2138588428497314,
- 2.215330123901367,
- 2.2168033123016357,
- 2.218278646469116,
- 2.2197558879852295,
- 2.2212350368499756,
- 2.2227160930633545,
- 2.2241992950439453,
- 2.225684404373169,
- 2.2271714210510254,
- 2.2286605834960938,
- 2.230151653289795,
- 2.231644630432129,
- 2.233139991760254,
- 2.2346370220184326,
- 2.236135959625244,
- 2.2376370429992676,
- 2.239140272140503,
- 2.240645408630371,
- 2.242152452468872,
- 2.243661642074585,
- 2.2451729774475098,
- 2.2466862201690674,
- 2.248201608657837,
- 2.2497189044952393,
- 2.2512381076812744,
- 2.2527596950531006,
- 2.2542831897735596,
- 2.2558085918426514,
- 2.257336139678955,
- 2.25886607170105,
- 2.2603979110717773,
- 2.2619316577911377,
- 2.26346755027771,
- 2.265005588531494,
- 2.2665457725524902,
- 2.2680881023406982,
- 2.269632339477539,
- 2.271178722381592,
- 2.2727272510528564,
- 2.274277925491333,
- 2.2758307456970215,
- 2.2773854732513428,
- 2.278942584991455,
- 2.2805016040802,
- 2.2820627689361572,
- 2.2836263179779053,
- 2.2851920127868652,
- 2.286759614944458,
- 2.288329601287842,
- 2.2899014949798584,
- 2.291475772857666,
- 2.2930519580841064,
- 2.294630527496338,
- 2.2962112426757812,
- 2.2977943420410156,
- 2.299379348754883,
- 2.300966501235962,
- 2.302555799484253,
- 2.304147481918335,
- 2.305741310119629,
- 2.3073372840881348,
- 2.3089354038238525,
- 2.3105359077453613,
- 2.312138795852661,
- 2.313743829727173,
- 2.3153507709503174,
- 2.316960096359253,
- 2.3185715675354004,
- 2.320185661315918,
- 2.3218016624450684,
- 2.3234200477600098,
- 2.325040817260742,
- 2.3266637325286865,
- 2.3282887935638428,
- 2.32991623878479,
- 2.331545829772949,
- 2.3331778049468994,
- 2.3348121643066406,
- 2.3364486694335938,
- 2.338087320327759,
- 2.339728355407715,
- 2.341372013092041,
- 2.343017816543579,
- 2.344666004180908,
- 2.346316337585449,
- 2.3479690551757812,
- 2.3496241569519043,
- 2.3512814044952393,
- 2.3529410362243652,
- 2.3546032905578613,
- 2.3562676906585693,
- 2.3579344749450684,
- 2.3596036434173584,
- 2.3612751960754395,
- 2.3629491329193115,
- 2.3646249771118164,
- 2.3663039207458496,
- 2.3679847717285156,
- 2.3696682453155518,
- 2.371354103088379,
- 2.373042345046997,
- 2.3747329711914062,
- 2.3764257431030273,
- 2.3781211376190186,
- 2.37981915473938,
- 2.381519317626953,
- 2.3832221031188965,
- 2.384927272796631,
- 2.3866348266601562,
- 2.3883450031280518,
- 2.390057325363159,
- 2.3917722702026367,
- 2.3934898376464844,
- 2.395209550857544,
- 2.3969318866729736,
- 2.3986566066741943,
- 2.400383949279785,
- 2.402114152908325,
- 2.403846025466919,
- 2.405580997467041,
- 2.407318353652954,
- 2.409058094024658,
- 2.4108004570007324,
- 2.4125449657440186,
- 2.414292573928833,
- 2.4160425662994385,
- 2.417794942855835,
- 2.4195501804351807,
- 2.4213075637817383,
- 2.423067569732666,
- 2.424830436706543,
- 2.426595449447632,
- 2.42836332321167,
- 2.430133581161499,
- 2.4319067001342773,
- 2.4336822032928467,
- 2.435460329055786,
- 2.4372410774230957,
- 2.4390244483947754,
- 2.440810203552246,
- 2.442599058151245,
- 2.444390058517456,
- 2.446183919906616,
- 2.4479804039001465,
- 2.449779510498047,
- 2.4515814781188965,
- 2.453385829925537,
- 2.455192804336548,
- 2.457002639770508,
- 2.458814859390259,
- 2.460629940032959,
- 2.46244740486145,
- 2.464268207550049,
- 2.4660913944244385,
- 2.467916965484619,
- 2.469745635986328,
- 2.4715769290924072,
- 2.4734108448028564,
- 2.475247621536255,
- 2.4770867824554443,
- 2.478929042816162,
- 2.48077392578125,
- 2.482621431350708,
- 2.4844722747802734,
- 2.486325263977051,
- 2.4881811141967773,
- 2.490039825439453,
- 2.491901159286499,
- 2.4937655925750732,
- 2.4956324100494385,
- 2.497502565383911,
- 2.499375104904175,
- 2.5012505054473877,
- 2.503129005432129,
- 2.5050101280212402,
- 2.5068938732147217,
- 2.5087809562683105,
- 2.5106701850891113,
- 2.5125627517700195,
- 2.514457941055298,
- 2.5163562297821045,
- 2.5182576179504395,
- 2.5201611518859863,
- 2.5220682621002197,
- 2.523977756500244,
- 2.525890350341797,
- 2.527805805206299,
- 2.52972412109375,
- 2.5316457748413086,
- 2.533569812774658,
- 2.535496950149536,
- 2.5374271869659424,
- 2.5393600463867188,
- 2.5412960052490234,
- 2.5432350635528564,
- 2.5451767444610596,
- 2.54712176322937,
- 2.54906964302063,
- 2.551020383834839,
- 2.552974224090576,
- 2.5549309253692627,
- 2.5568909645080566,
- 2.5588536262512207,
- 2.560819387435913,
- 2.562788486480713,
- 2.5647599697113037,
- 2.56673526763916,
- 2.5687131881713867,
- 2.5706942081451416,
- 2.572678327560425,
- 2.5746653079986572,
- 2.576655626296997,
- 2.5786490440368652,
- 2.5806450843811035,
- 2.5826447010040283,
- 2.5846471786499023,
- 2.586652994155884,
- 2.5886616706848145,
- 2.5906734466552734,
- 2.592688798904419,
- 2.5947067737579346,
- 2.5967280864715576,
- 2.598752498626709,
- 2.6007802486419678,
- 2.602811098098755,
- 2.604844808578491,
- 2.606882095336914,
- 2.6089224815368652,
- 2.6109659671783447,
- 2.6130127906799316,
- 2.615062713623047,
- 2.6171159744262695,
- 2.6191723346710205,
- 2.621232032775879,
- 2.6232950687408447,
- 2.6253609657287598,
- 2.6274304389953613,
- 2.629503011703491,
- 2.6315786838531494,
- 2.6336581707000732,
- 2.6357405185699463,
- 2.637826442718506,
- 2.639915704727173,
- 2.642007827758789,
- 2.644103765487671,
- 2.646202564239502,
- 2.6483049392700195,
- 2.6504108905792236,
- 2.652519941329956,
- 2.654632329940796,
- 2.6567482948303223,
- 2.658867359161377,
- 2.660989999771118,
- 2.663115978240967,
- 2.665245294570923,
- 2.6673779487609863,
- 2.6695139408111572,
- 2.6716537475585938,
- 2.6737966537475586,
- 2.675943374633789,
- 2.678093433380127,
- 2.680246591567993,
- 2.682403564453125,
- 2.684563636779785,
- 2.686727523803711,
- 2.6888949871063232,
- 2.691065549850464,
- 2.693240165710449,
- 2.695417881011963,
- 2.697599172592163,
- 2.69978404045105,
- 2.701972246170044,
- 2.704164505004883,
- 2.70635986328125,
- 2.7085587978363037,
- 2.710761785507202,
- 2.712967872619629,
- 2.7151780128479004,
- 2.7173914909362793,
- 2.7196083068847656,
- 2.7218291759490967,
- 2.724053382873535,
- 2.72628116607666,
- 2.72851300239563,
- 2.730748176574707,
- 2.732987403869629,
- 2.735229730606079,
- 2.737476110458374,
- 2.7397260665893555,
- 2.7419795989990234,
- 2.744237184524536,
- 2.7464981079101562,
- 2.748762845993042,
- 2.7510316371917725,
- 2.7533040046691895,
- 2.755580186843872,
- 2.7578601837158203,
- 2.760143518447876,
- 2.7624311447143555,
- 2.7647221088409424,
- 2.767017126083374,
- 2.7693159580230713,
- 2.771618366241455,
- 2.773925304412842,
- 2.776235580444336,
- 2.7785496711730957,
- 2.7808678150177,
- 2.783189296722412,
- 2.785515308380127,
- 2.7878448963165283,
- 2.7901785373687744,
- 2.792515993118286,
- 2.7948575019836426,
- 2.7972028255462646,
- 2.7995524406433105,
- 2.8019051551818848,
- 2.804262638092041,
- 2.806623697280884,
- 2.8089888095855713,
- 2.8113577365875244,
- 2.8137307167053223,
- 2.816108226776123,
- 2.8184893131256104,
- 2.8208744525909424,
- 2.8232638835906982,
- 2.8256568908691406,
- 2.828054428100586,
- 2.830455780029297,
- 2.8328611850738525,
- 2.835270881652832,
- 2.837684392929077,
- 2.840102434158325,
- 2.842524528503418,
- 2.8449501991271973,
- 2.8473806381225586,
- 2.8498146533966064,
- 2.8522531986236572,
- 2.8546957969665527,
- 2.857142925262451,
- 2.8595941066741943,
- 2.8620493412017822,
- 2.864508867263794,
- 2.8669724464416504,
- 2.8694403171539307,
- 2.8719124794006348,
- 2.874389171600342,
- 2.8768699169158936,
- 2.879354953765869,
- 2.8818440437316895,
- 2.884337902069092,
- 2.886835813522339,
- 2.8893380165100098,
- 2.8918449878692627,
- 2.8943560123443604,
- 2.896871328353882,
- 2.899390935897827,
- 2.9019150733947754,
- 2.9044437408447266,
- 2.9069766998291016,
- 2.9095139503479004,
- 2.9120559692382812,
- 2.914602041244507,
- 2.9171526432037354,
- 2.919708013534546,
- 2.9222676753997803,
- 2.9248318672180176,
- 2.9274003505706787,
- 2.929973602294922,
- 2.932551145553589,
- 2.935133457183838,
- 2.93772029876709,
- 2.9403116703033447,
- 2.9429075717926025,
- 2.9455080032348633,
- 2.948112964630127,
- 2.9507226943969727,
- 2.9533369541168213,
- 2.955955982208252,
- 2.9585797786712646,
- 2.9612081050872803,
- 2.963840961456299,
- 2.9664788246154785,
- 2.969120979309082,
- 2.9717681407928467,
- 2.9744198322296143,
- 2.977076530456543,
- 2.9797375202178955,
- 2.982403516769409,
- 2.985074520111084,
- 2.987750291824341,
- 2.9904305934906006,
- 2.9931156635284424,
- 2.9958057403564453,
- 2.9985008239746094,
- 3.0012004375457764,
- 3.0039048194885254,
- 3.0066146850585938,
- 3.009328842163086,
- 3.0120480060577393,
- 3.014772415161133,
- 3.0175013542175293,
- 3.020235776901245,
- 3.022974729537964,
- 3.0257184505462646,
- 3.0284674167633057,
- 3.031221628189087,
- 3.03398060798645,
- 3.0367443561553955,
- 3.039513349533081,
- 3.042287826538086,
- 3.0450668334960938,
- 3.047851085662842,
- 3.050640344619751,
- 3.0534350872039795,
- 3.056234836578369,
- 3.059039354324341,
- 3.0618491172790527,
- 3.064664363861084,
- 3.0674846172332764,
- 3.07030987739563,
- 3.0731406211853027,
- 3.075976610183716,
- 3.07881760597229,
- 3.0816638469696045,
- 3.0845155715942383,
- 3.0873727798461914,
- 3.0902349948883057,
- 3.09310245513916,
- 3.095975160598755,
- 3.098853588104248,
- 3.1017370223999023,
- 3.104625701904297,
- 3.107520341873169,
- 3.110419988632202,
- 3.1133248805999756,
- 3.1162357330322266,
- 3.1191515922546387,
- 3.122073173522949,
- 3.124999761581421,
- 3.12793231010437,
- 3.1308703422546387,
- 3.1338136196136475,
- 3.136762857437134,
- 3.1397173404693604,
- 3.1426773071289062,
- 3.1456432342529297,
- 3.1486144065856934,
- 3.1515913009643555,
- 3.154573917388916,
- 3.157562255859375,
- 3.1605563163757324,
- 3.163555860519409,
- 3.1665608882904053,
- 3.169572114944458,
- 3.17258882522583,
- 3.1756112575531006,
- 3.1786394119262695,
- 3.181673526763916,
- 3.184713363647461,
- 3.187758684158325,
- 3.190810441970825,
- 3.1938679218292236,
- 3.1969306468963623,
- 3.1999998092651367,
- 3.2030749320983887,
- 3.20615553855896,
- 3.209242343902588,
- 3.2123348712921143,
- 3.2154338359832764,
- 3.218538761138916,
- 3.221649408340454,
- 3.2247660160064697,
- 3.227888584136963,
- 3.231017589569092,
- 3.2341527938842773,
- 3.2372937202453613,
- 3.240440607070923,
- 3.243593692779541,
- 3.246752977371216,
- 3.2499186992645264,
- 3.2530901432037354,
- 3.256268262863159,
- 3.2594523429870605,
- 3.2626426219940186,
- 3.265839099884033,
- 3.269042491912842,
- 3.2722513675689697,
- 3.2754666805267334,
- 3.278688430786133,
- 3.281916379928589,
- 3.285151243209839,
- 3.2883918285369873,
- 3.2916393280029297,
- 3.2948930263519287,
- 3.2981529235839844,
- 3.301419496536255,
- 3.304692268371582,
- 3.3079721927642822,
- 3.31125807762146,
- 3.3145508766174316,
- 3.31784987449646,
- 3.321155548095703,
- 3.324467897415161,
- 3.327786684036255,
- 3.3311123847961426,
- 3.334444761276245,
- 3.3377835750579834,
- 3.3411290645599365,
- 3.3444812297821045,
- 3.3478405475616455,
- 3.3512065410614014,
- 3.354578971862793,
- 3.3579583168029785,
- 3.361344337463379,
- 3.3647372722625732,
- 3.3681373596191406,
- 3.371544122695923,
- 3.374957799911499,
- 3.378378391265869,
- 3.381805658340454,
- 3.385240077972412,
- 3.3886821269989014,
- 3.3921303749084473,
- 3.395585775375366,
- 3.399048328399658,
- 3.402517795562744,
- 3.405994176864624,
- 3.409477949142456,
- 3.412968873977661,
- 3.4164674282073975,
- 3.4199726581573486,
- 3.423485040664673,
- 3.42700457572937,
- 3.4305317401885986,
- 3.434065818786621,
- 3.437607526779175,
- 3.4411561489105225,
- 3.4447121620178223,
- 3.448275566101074,
- 3.4518463611602783,
- 3.4554247856140137,
- 3.4590108394622803,
- 3.462603807449341,
- 3.4662044048309326,
- 3.4698123931884766,
- 3.473428249359131,
- 3.4770517349243164,
- 3.480682373046875,
- 3.484320640563965,
- 3.487966299057007,
- 3.491619825363159,
- 3.495281457901001,
- 3.498950242996216,
- 3.50262713432312,
- 3.5063114166259766,
- 3.5100033283233643,
- 3.5137031078338623,
- 3.517411470413208,
- 3.5211267471313477,
- 3.5248498916625977,
- 3.5285816192626953,
- 3.532320737838745,
- 3.5360677242279053,
- 3.539822578430176,
- 3.5435855388641357,
- 3.5473573207855225,
- 3.5511364936828613,
- 3.5549235343933105,
- 3.558718681335449,
- 3.5625221729278564,
- 3.566333770751953,
- 3.5701537132263184,
- 3.573981523513794,
- 3.577817440032959,
- 3.5816617012023926,
- 3.5855140686035156,
- 3.5893752574920654,
- 3.593244791030884,
- 3.5971224308013916,
- 3.601008176803589,
- 3.604902505874634,
- 3.6088054180145264,
- 3.6127161979675293,
- 3.616636276245117,
- 3.6205644607543945,
- 3.6245014667510986,
- 3.6284468173980713,
- 3.6324007511138916,
- 3.6363632678985596,
- 3.6403350830078125,
- 3.644315004348755,
- 3.648303508758545,
- 3.6523008346557617,
- 3.656306743621826,
- 3.6603219509124756,
- 3.6643457412719727,
- 3.6683785915374756,
- 3.672420024871826,
- 3.6764702796936035,
- 3.6805295944213867,
- 3.684597969055176,
- 3.688675880432129,
- 3.6927623748779297,
- 3.6968576908111572,
- 3.7009620666503906,
- 3.705075979232788,
- 3.7091987133026123,
- 3.7133309841156006,
- 3.7174723148345947,
- 3.7216224670410156,
- 3.7257821559906006,
- 3.7299511432647705,
- 3.7341299057006836,
- 3.7383179664611816,
- 3.7425150871276855,
- 3.7467215061187744,
- 3.7509374618530273,
- 3.7551629543304443,
- 3.7593979835510254,
- 3.7636430263519287,
- 3.767897129058838,
- 3.7721614837646484,
- 3.776434898376465,
- 3.7807180881500244,
- 3.785010814666748,
- 3.7893145084381104,
- 3.7936267852783203,
- 3.7979490756988525,
- 3.802281141281128,
- 3.8066232204437256,
- 3.8109755516052246,
- 3.8153374195098877,
- 3.8197097778320312,
- 3.824091672897339,
- 3.828483819961548,
- 3.8328857421875,
- 3.8372981548309326,
- 3.841721296310425,
- 3.846153974533081,
- 3.8505969047546387,
- 3.8550498485565186,
- 3.859513759613037,
- 3.863987684249878,
- 3.8684723377227783,
- 3.872966766357422,
- 3.877471923828125,
- 3.8819873332977295,
- 3.8865134716033936,
- 3.891050100326538,
- 3.8955979347229004,
- 3.900156259536743,
- 3.9047248363494873,
- 3.909303903579712,
- 3.913893938064575,
- 3.918494939804077,
- 3.9231069087982178,
- 3.927729606628418,
- 3.932363271713257,
- 3.9370076656341553,
- 3.9416630268096924,
- 3.9463295936584473,
- 3.951007843017578,
- 3.9556963443756104,
- 3.9603960514068604,
- 3.965106964111328,
- 3.9698290824890137,
- 3.974562883377075,
- 3.9793074131011963,
- 3.9840638637542725,
- 3.9888312816619873,
- 3.993610143661499,
- 3.9984004497528076,
- 4.003202438354492,
- 4.008016109466553,
- 4.01284122467041,
- 4.0176777839660645,
- 4.022526264190674,
- 4.027386665344238,
- 4.032258033752441,
- 4.0371413230896,
- 4.042037010192871,
- 4.046944618225098,
- 4.051863670349121,
- 4.0567946434021,
- 4.06173849105835,
- 4.0666937828063965,
- 4.071661472320557,
- 4.076640605926514,
- 4.081632137298584,
- 4.086636543273926,
- 4.091652870178223,
- 4.096681594848633,
- 4.101722717285156,
- 4.106776237487793,
- 4.111842155456543,
- 4.116920471191406,
- 4.122011184692383,
- 4.127115249633789,
- 4.13223123550415,
- 4.137360095977783,
- 4.1425018310546875,
- 4.147656440734863,
- 4.1528239250183105,
- 4.158004283905029,
- 4.1631975173950195,
- 4.168403625488281,
- 4.173623085021973,
- 4.178854942321777,
- 4.184100151062012,
- 4.189359188079834,
- 4.1946306228637695,
- 4.199915885925293,
- 4.205214023590088,
- 4.210526466369629,
- 4.215851306915283,
- 4.221189975738525,
- 4.2265424728393555,
- 4.231908321380615,
- 4.237287998199463,
- 4.24268102645874,
- 4.248088359832764,
- 4.253509044647217,
- 4.258944034576416,
- 4.264392375946045,
- 4.269854545593262,
- 4.275331497192383,
- 4.280821800231934,
- 4.2863264083862305,
- 4.291845321655273,
- 4.297379016876221,
- 4.302926063537598,
- 4.308487892150879,
- 4.314063549041748,
- 4.319654941558838,
- 4.325259208679199,
- 4.330878734588623,
- 4.336513042449951,
- 4.342162132263184,
- 4.34782600402832,
- 4.353504180908203,
- 4.359197616577148,
- 4.364906311035156,
- 4.37062931060791,
- 4.376367568969727,
- 4.382120609283447,
- 4.387889385223389,
- 4.393672943115234,
- 4.399472236633301,
- 4.4052863121032715,
- 4.411116123199463,
- 4.416961193084717,
- 4.422821521759033,
- 4.42869758605957,
- 4.434589862823486,
- 4.440497398376465,
- 4.446420669555664,
- 4.452359676361084,
- 4.458314895629883,
- 4.464285850524902,
- 4.470272541046143,
- 4.476275444030762,
- 4.482295036315918,
- 4.488330364227295,
- 4.494381904602051,
- 4.500450134277344,
- 4.506534576416016,
- 4.512635231018066,
- 4.518752574920654,
- 4.524886608123779,
- 4.531037330627441,
- 4.537204742431641,
- 4.543388843536377,
- 4.549590110778809,
- 4.5558085441589355,
- 4.5620436668396,
- 4.568295955657959,
- 4.5745649337768555,
- 4.580852031707764,
- 4.587155818939209,
- 4.593477249145508,
- 4.599815845489502,
- 4.606172561645508,
- 4.612545967102051,
- 4.6189374923706055,
- 4.625346660614014,
- 4.631774425506592,
- 4.638218879699707,
- 4.644681453704834,
- 4.651162624359131,
- 4.6576619148254395,
- 4.66417932510376,
- 4.670714378356934,
- 4.6772685050964355,
- 4.683840751647949,
- 4.690431594848633,
- 4.697041034698486,
- 4.703668594360352,
- 4.710315704345703,
- 4.716980934143066,
- 4.723665237426758,
- 4.730368614196777,
- 4.737091541290283,
- 4.743833065032959,
- 4.750593662261963,
- 4.757373809814453,
- 4.7641730308532715,
- 4.770992279052734,
- 4.777830600738525,
- 4.784688949584961,
- 4.791566848754883,
- 4.798464775085449,
- 4.805381774902344,
- 4.812319278717041,
- 4.819277286529541,
- 4.826254844665527,
- 4.833252906799316,
- 4.84027099609375,
- 4.8473100662231445,
- 4.854369163513184,
- 4.861448764801025,
- 4.86854887008667,
- 4.875670909881592,
- 4.8828125,
- 4.889975547790527,
- 4.897159576416016,
- 4.904365062713623,
- 4.911591529846191,
- 4.918838977813721,
- 4.926108360290527,
- 4.933399200439453,
- 4.94071102142334,
- 4.948045253753662,
- 4.955401420593262,
- 4.9627790451049805,
- 4.970178604125977,
- 4.977600574493408,
- 4.985044956207275,
- 4.99251127243042
- ],
- "xaxis": "x2",
- "yaxis": "y2"
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Spaced Samplers\n",
+ "\n",
+ "These are the most basic samplers that spaces samples based on a predefined function. These samplers have all have a starting and ending distance (also known as a near/far plane). The plots below are histograms of points sampled from some predefined samplers. \n"
+ ]
},
{
- "nbinsx": 50,
- "opacity": 0.7,
- "type": "histogram",
- "x": [
- 1.9999998807907104,
- 2.0023250579833984,
- 2.0046520233154297,
- 2.006979465484619,
- 2.0093090534210205,
- 2.0116395950317383,
- 2.0139718055725098,
- 2.0163047313690186,
- 2.0186398029327393,
- 2.020975351333618,
- 2.023313045501709,
- 2.025651693344116,
- 2.027991771697998,
- 2.0303330421447754,
- 2.0326759815216064,
- 2.035020112991333,
- 2.0373659133911133,
- 2.039712429046631,
- 2.0420608520507812,
- 2.0444107055664062,
- 2.0467615127563477,
- 2.0491137504577637,
- 2.051467180252075,
- 2.0538220405578613,
- 2.056178331375122,
- 2.0585358142852783,
- 2.060894727706909,
- 2.0632550716400146,
- 2.065617084503174,
- 2.0679800510406494,
- 2.0703446865081787,
- 2.0727100372314453,
- 2.0750772953033447,
- 2.0774457454681396,
- 2.0798158645629883,
- 2.082186698913574,
- 2.084559440612793,
- 2.086933135986328,
- 2.089308261871338,
- 2.0916848182678223,
- 2.094062566757202,
- 2.0964417457580566,
- 2.098822832107544,
- 2.1012046337127686,
- 2.1035878658294678,
- 2.1059725284576416,
- 2.108358860015869,
- 2.110746145248413,
- 2.1131350994110107,
- 2.1155247688293457,
- 2.1179163455963135,
- 2.1203091144561768,
- 2.1227030754089355,
- 2.125098466873169,
- 2.127495288848877,
- 2.1298933029174805,
- 2.132293224334717,
- 2.1346940994262695,
- 2.1370961666107178,
- 2.1394996643066406,
- 2.141904830932617,
- 2.1443111896514893,
- 2.146718978881836,
- 2.14912748336792,
- 2.151538133621216,
- 2.1539502143859863,
- 2.156363010406494,
- 2.1587769985198975,
- 2.1611931324005127,
- 2.1636102199554443,
- 2.1660284996032715,
- 2.1684482097625732,
- 2.1708693504333496,
- 2.1732916831970215,
- 2.175715684890747,
- 2.178140878677368,
- 2.180567741394043,
- 2.182995557785034,
- 2.1854248046875,
- 2.1878552436828613,
- 2.1902875900268555,
- 2.192720413208008,
- 2.195155382156372,
- 2.1975908279418945,
- 2.200028419494629,
- 2.2024667263031006,
- 2.204907178878784,
- 2.207348346710205,
- 2.209791421890259,
- 2.212235450744629,
- 2.2146809101104736,
- 2.217127561569214,
- 2.219576120376587,
- 2.2220258712768555,
- 2.2244765758514404,
- 2.226928472518921,
- 2.229382276535034,
- 2.231837034225464,
- 2.234293222427368,
- 2.236750841140747,
- 2.2392096519470215,
- 2.2416698932647705,
- 2.2441320419311523,
- 2.2465949058532715,
- 2.2490594387054443,
- 2.2515249252319336,
- 2.2539920806884766,
- 2.256460428237915,
- 2.2589306831359863,
- 2.2614011764526367,
- 2.263874053955078,
- 2.266347885131836,
- 2.2688229084014893,
- 2.2712996006011963,
- 2.2737772464752197,
- 2.2762563228607178,
- 2.2787370681762695,
- 2.281219005584717,
- 2.2837021350860596,
- 2.286186695098877,
- 2.288673162460327,
- 2.2911605834960938,
- 2.293649196624756,
- 2.2961390018463135,
- 2.298630475997925,
- 2.3011231422424316,
- 2.303617238998413,
- 2.30611252784729,
- 2.3086097240448,
- 2.3111073970794678,
- 2.3136072158813477,
- 2.3161075115203857,
- 2.318610429763794,
- 2.3211135864257812,
- 2.3236186504364014,
- 2.326124906539917,
- 2.328632354736328,
- 2.331141233444214,
- 2.3336517810821533,
- 2.3361637592315674,
- 2.338676691055298,
- 2.3411905765533447,
- 2.3437066078186035,
- 2.3462233543395996,
- 2.3487420082092285,
- 2.351261615753174,
- 2.3537826538085938,
- 2.3563051223754883,
- 2.3588292598724365,
- 2.361354112625122,
- 2.3638811111450195,
- 2.366408348083496,
- 2.3689379692077637,
- 2.3714685440063477,
- 2.374000310897827,
- 2.3765335083007812,
- 2.379068374633789,
- 2.3816041946411133,
- 2.384141445159912,
- 2.3866801261901855,
- 2.3892199993133545,
- 2.3917617797851562,
- 2.3943042755126953,
- 2.396848440170288,
- 2.3993937969207764,
- 2.40194034576416,
- 2.4044888019561768,
- 2.4070382118225098,
- 2.4095892906188965,
- 2.4121413230895996,
- 2.4146947860717773,
- 2.4172496795654297,
- 2.4198057651519775,
- 2.42236328125,
- 2.424922227859497,
- 2.4274823665618896,
- 2.430044412612915,
- 2.4326069355010986,
- 2.435171604156494,
- 2.437737464904785,
- 2.4403045177459717,
- 2.4428727626800537,
- 2.4454424381256104,
- 2.4480133056640625,
- 2.4505860805511475,
- 2.453160285949707,
- 2.455734968185425,
- 2.4583117961883545,
- 2.4608895778656006,
- 2.463468313217163,
- 2.4660491943359375,
- 2.468630790710449,
- 2.4712140560150146,
- 2.4737985134124756,
- 2.4763848781585693,
- 2.4789719581604004,
- 2.4815609455108643,
- 2.4841506481170654,
- 2.4867422580718994,
- 2.48933482170105,
- 2.491929292678833,
- 2.4945242404937744,
- 2.4971210956573486,
- 2.4997189044952393,
- 2.5023181438446045,
- 2.5049192905426025,
- 2.507521867752075,
- 2.510124921798706,
- 2.512730121612549,
- 2.515336036682129,
- 2.5179436206817627,
- 2.520552396774292,
- 2.523162603378296,
- 2.5257744789123535,
- 2.5283877849578857,
- 2.5310018062591553,
- 2.5336177349090576,
- 2.536234140396118,
- 2.5388529300689697,
- 2.5414724349975586,
- 2.544093608856201,
- 2.5467159748077393,
- 2.549339532852173,
- 2.5519649982452393,
- 2.5545918941497803,
- 2.5572192668914795,
- 2.5598485469818115,
- 2.562479019165039,
- 2.565110921859741,
- 2.567744493484497,
- 2.570378541946411,
- 2.573014736175537,
- 2.5756516456604004,
- 2.5782904624938965,
- 2.580930471420288,
- 2.5835721492767334,
- 2.586214780807495,
- 2.5888586044311523,
- 2.591503858566284,
- 2.5941505432128906,
- 2.5967986583709717,
- 2.5994484424591064,
- 2.6020994186401367,
- 2.6047515869140625,
- 2.607404947280884,
- 2.6100597381591797,
- 2.612715721130371,
- 2.615373373031616,
- 2.618032217025757,
- 2.620692253112793,
- 2.6233537197113037,
- 2.626016616821289,
- 2.6286816596984863,
- 2.631347179412842,
- 2.634014129638672,
- 2.6366825103759766,
- 2.6393520832061768,
- 2.6420233249664307,
- 2.64469575881958,
- 2.647369384765625,
- 2.6500449180603027,
- 2.6527209281921387,
- 2.6553988456726074,
- 2.6580777168273926,
- 2.6607584953308105,
- 2.663440227508545,
- 2.666123390197754,
- 2.6688082218170166,
- 2.6714937686920166,
- 2.6741812229156494,
- 2.676870107650757,
- 2.6795597076416016,
- 2.682251214981079,
- 2.684943914413452,
- 2.6876378059387207,
- 2.690333127975464,
- 2.6930301189422607,
- 2.695727825164795,
- 2.698427438735962,
- 2.7011282444000244,
- 2.7038307189941406,
- 2.706533193588257,
- 2.7092387676239014,
- 2.711944818496704,
- 2.7146522998809814,
- 2.7173614501953125,
- 2.720071315765381,
- 2.722783088684082,
- 2.725496530532837,
- 2.728210210800171,
- 2.730926275253296,
- 2.733643054962158,
- 2.736361265182495,
- 2.7390809059143066,
- 2.7418019771575928,
- 2.7445242404937744,
- 2.7472479343414307,
- 2.7499728202819824,
- 2.752700090408325,
- 2.755427360534668,
- 2.7581567764282227,
- 2.7608871459960938,
- 2.7636189460754395,
- 2.7663521766662598,
- 2.7690865993499756,
- 2.771822452545166,
- 2.7745602130889893,
- 2.7772979736328125,
- 2.780038595199585,
- 2.7827799320220947,
- 2.7855224609375,
- 2.78826642036438,
- 2.7910118103027344,
- 2.7937586307525635,
- 2.796506404876709,
- 2.7992560863494873,
- 2.8020071983337402,
- 2.8047587871551514,
- 2.8075125217437744,
- 2.810267210006714,
- 2.813023328781128,
- 2.8157806396484375,
- 2.818539619445801,
- 2.8212995529174805,
- 2.824061870574951,
- 2.8268239498138428,
- 2.8295888900756836,
- 2.8323545455932617,
- 2.8351213932037354,
- 2.8378896713256836,
- 2.8406591415405273,
- 2.8434300422668457,
- 2.8462023735046387,
- 2.8489761352539062,
- 2.8517513275146484,
- 2.854527473449707,
- 2.8573057651519775,
- 2.8600850105285645,
- 2.8628652095794678,
- 2.865647077560425,
- 2.8684301376342773,
- 2.8712146282196045,
- 2.8740007877349854,
- 2.8767879009246826,
- 2.8795769214630127,
- 2.882366418838501,
- 2.885157823562622,
- 2.8879504203796387,
- 2.89074444770813,
- 2.8935396671295166,
- 2.896336317062378,
- 2.8991341590881348,
- 2.9019343852996826,
- 2.9047341346740723,
- 2.9075369834899902,
- 2.9103403091430664,
- 2.913145065307617,
- 2.9159510135650635,
- 2.9187583923339844,
- 2.92156720161438,
- 2.92437744140625,
- 2.927189350128174,
- 2.930001974105835,
- 2.93281626701355,
- 2.93563175201416,
- 2.938448905944824,
- 2.941267251968384,
- 2.944086790084839,
- 2.9469077587127686,
- 2.9497299194335938,
- 2.9525539875030518,
- 2.955378532409668,
- 2.9582056999206543,
- 2.9610331058502197,
- 2.963862419128418,
- 2.9666926860809326,
- 2.969524621963501,
- 2.9723575115203857,
- 2.975192070007324,
- 2.978027820587158,
- 2.980865240097046,
- 2.983703374862671,
- 2.986544132232666,
- 2.9893853664398193,
- 2.992227792739868,
- 2.9950716495513916,
- 2.9979169368743896,
- 3.000763416290283,
- 3.0036113262176514,
- 3.006460666656494,
- 3.009312152862549,
- 3.0121636390686035,
- 3.015017509460449,
- 3.0178720951080322,
- 3.020728349685669,
- 3.023585557937622,
- 3.026444435119629,
- 3.0293045043945312,
- 3.0321667194366455,
- 3.0350286960601807,
- 3.037893772125244,
- 3.0407583713531494,
- 3.043626070022583,
- 3.046494245529175,
- 3.049363851547241,
- 3.052234649658203,
- 3.0551068782806396,
- 3.057981014251709,
- 3.0608558654785156,
- 3.063732147216797,
- 3.0666098594665527,
- 3.0694892406463623,
- 3.072369337081909,
- 3.075251340866089,
- 3.078134298324585,
- 3.0810189247131348,
- 3.083904504776001,
- 3.086791753768921,
- 3.0896809101104736,
- 3.0925700664520264,
- 3.0954620838165283,
- 3.0983545780181885,
- 3.101248264312744,
- 3.1041436195373535,
- 3.1070401668548584,
- 3.109938144683838,
- 3.112837791442871,
- 3.1157379150390625,
- 3.118640661239624,
- 3.121544122695923,
- 3.124448776245117,
- 3.127354860305786,
- 3.1302621364593506,
- 3.1331708431243896,
- 3.1360809803009033,
- 3.1389923095703125,
- 3.1419055461883545,
- 3.1448192596435547,
- 3.147735595703125,
- 3.1506524085998535,
- 3.1535706520080566,
- 3.1564900875091553,
- 3.1594109535217285,
- 3.1623332500457764,
- 3.165257692337036,
- 3.1681816577911377,
- 3.1711089611053467,
- 3.1740360260009766,
- 3.1769649982452393,
- 3.1798958778381348,
- 3.1828272342681885,
- 3.185760498046875,
- 3.1886954307556152,
- 3.1916308403015137,
- 3.194568634033203,
- 3.1975061893463135,
- 3.200446844100952,
- 3.203387975692749,
- 3.2063305377960205,
- 3.2092742919921875,
- 3.212219476699829,
- 3.2151660919189453,
- 3.2181143760681152,
- 3.2210633754730225,
- 3.2240142822265625,
- 3.226966381072998,
- 3.229919672012329,
- 3.232874631881714,
- 3.235830545425415,
- 3.23878812789917,
- 3.241746664047241,
- 3.244706869125366,
- 3.247668981552124,
- 3.2506308555603027,
- 3.2535958290100098,
- 3.256561279296875,
- 3.259528160095215,
- 3.26249623298645,
- 3.26546573638916,
- 3.2684366703033447,
- 3.271409034729004,
- 3.2743828296661377,
- 3.277357339859009,
- 3.280333995819092,
- 3.2833120822906494,
- 3.2862911224365234,
- 3.289271354675293,
- 3.292253017425537,
- 3.295236110687256,
- 3.29822039604187,
- 3.301206588745117,
- 3.3041932582855225,
- 3.3071820735931396,
- 3.3101718425750732,
- 3.3131635189056396,
- 3.3161559104919434,
- 3.3191492557525635,
- 3.3221449851989746,
- 3.325141429901123,
- 3.328139305114746,
- 3.3311386108398438,
- 3.334139108657837,
- 3.337141990661621,
- 3.3401453495025635,
- 3.343149423599243,
- 3.3461554050445557,
- 3.349163293838501,
- 3.3521718978881836,
- 3.355181932449341,
- 3.3581933975219727,
- 3.3612060546875,
- 3.364220142364502,
- 3.3672356605529785,
- 3.370253324508667,
- 3.3732714653015137,
- 3.376291036605835,
- 3.3793118000030518,
- 3.382333993911743,
- 3.385357618331909,
- 3.3883824348449707,
- 3.391409158706665,
- 3.3944365978240967,
- 3.397465705871582,
- 3.400496006011963,
- 3.4035279750823975,
- 3.4065611362457275,
- 3.409595489501953,
- 3.412631034851074,
- 3.415668249130249,
- 3.4187066555023193,
- 3.421746253967285,
- 3.424788236618042,
- 3.427830696105957,
- 3.4308745861053467,
- 3.433919668197632,
- 3.4369661808013916,
- 3.440014123916626,
- 3.443063259124756,
- 3.4461138248443604,
- 3.4491662979125977,
- 3.452219009399414,
- 3.4552736282348633,
- 3.4583306312561035,
- 3.461387872695923,
- 3.464446544647217,
- 3.4675066471099854,
- 3.4705679416656494,
- 3.473630666732788,
- 3.4766948223114014,
- 3.4797606468200684,
- 3.4828274250030518,
- 3.4858953952789307,
- 3.4889655113220215,
- 3.4920363426208496,
- 3.4951083660125732,
- 3.4981822967529297,
- 3.5012567043304443,
- 3.504333019256592,
- 3.5074105262756348,
- 3.5104904174804688,
- 3.513570785522461,
- 3.5166523456573486,
- 3.5197348594665527,
- 3.522819757461548,
- 3.5259053707122803,
- 3.5289924144744873,
- 3.532081127166748,
- 3.5351710319519043,
- 3.538261651992798,
- 3.541353940963745,
- 3.5444488525390625,
- 3.547544002532959,
- 3.550640344619751,
- 3.5537381172180176,
- 3.556837320327759,
- 3.5599379539489746,
- 3.563039779663086,
- 3.56614351272583,
- 3.5692481994628906,
- 3.5723540782928467,
- 3.5754618644714355,
- 3.578570604324341,
- 3.5816805362701416,
- 3.584791898727417,
- 3.587904930114746,
- 3.5910186767578125,
- 3.5941340923309326,
- 3.5972516536712646,
- 3.600369691848755,
- 3.6034891605377197,
- 3.606610059738159,
- 3.609732151031494,
- 3.6128556728363037,
- 3.615980625152588,
- 3.6191067695617676,
- 3.6222352981567383,
- 3.62536358833313,
- 3.6284940242767334,
- 3.6316261291503906,
- 3.634758949279785,
- 3.6378931999206543,
- 3.641028881072998,
- 3.6441659927368164,
- 3.6473042964935303,
- 3.6504440307617188,
- 3.6535861492156982,
- 3.6567280292510986,
- 3.65987229347229,
- 3.6630170345306396,
- 3.666163921356201,
- 3.669311761856079,
- 3.6724607944488525,
- 3.675611734390259,
- 3.6787636280059814,
- 3.6819164752960205,
- 3.6850714683532715,
- 3.688227891921997,
- 3.691385269165039,
- 3.6945438385009766,
- 3.6977038383483887,
- 3.7008650302886963,
- 3.7040278911590576,
- 3.7071919441223145,
- 3.710358142852783,
- 3.713524341583252,
- 3.7166924476623535,
- 3.7198615074157715,
- 3.7230331897735596,
- 3.726205348968506,
- 3.7293789386749268,
- 3.732553720474243,
- 3.735729932785034,
- 3.7389073371887207,
- 3.742086410522461,
- 3.745266914367676,
- 3.7484490871429443,
- 3.75163197517395,
- 3.7548162937164307,
- 3.7580020427703857,
- 3.7611889839172363,
- 3.7643773555755615,
- 3.7675673961639404,
- 3.770758628845215,
- 3.7739508152008057,
- 3.7771451473236084,
- 3.7803401947021484,
- 3.783536672592163,
- 3.7867345809936523,
- 3.789933681488037,
- 3.7931342124938965,
- 3.7963359355926514,
- 3.7995402812957764,
- 3.8027443885803223,
- 3.805950164794922,
- 3.809157371520996,
- 3.812366485595703,
- 3.8155765533447266,
- 3.8187878131866455,
- 3.822000503540039,
- 3.8252148628234863,
- 3.828429937362671,
- 3.831646680831909,
- 3.834865093231201,
- 3.8380849361419678,
- 3.841305732727051,
- 3.84452748298645,
- 3.8477513790130615,
- 3.8509762287139893,
- 3.8542022705078125,
- 3.8574302196502686,
- 3.860659122467041,
- 3.863889455795288,
- 3.8671209812164307,
- 3.870354413986206,
- 3.873588800430298,
- 3.876824378967285,
- 3.8800618648529053,
- 3.8832995891571045,
- 3.8865392208099365,
- 3.8897812366485596,
- 3.893023729324341,
- 3.8962669372558594,
- 3.8995120525360107,
- 3.902758836746216,
- 3.9060068130493164,
- 3.9092557430267334,
- 3.912506341934204,
- 3.9157586097717285,
- 3.9190118312835693,
- 3.9222660064697266,
- 3.9255218505859375,
- 3.9287800788879395,
- 3.9320385456085205,
- 3.935297966003418,
- 3.9385597705841064,
- 3.9418225288391113,
- 3.9450864791870117,
- 3.9483518600463867,
- 3.9516189098358154,
- 3.9548871517181396,
- 3.9581563472747803,
- 3.961427688598633,
- 3.9646997451782227,
- 3.967973232269287,
- 3.9712483882904053,
- 3.974524736404419,
- 3.97780179977417,
- 3.981081008911133,
- 3.9843616485595703,
- 3.987643241882324,
- 3.9909257888793945,
- 3.9942104816436768,
- 3.9974961280822754,
- 4.0007829666137695,
- 4.004071235656738,
- 4.007361888885498,
- 4.010653018951416,
- 4.01394510269165,
- 4.017238140106201,
- 4.020534038543701,
- 4.023830413818359,
- 4.027128219604492,
- 4.0304274559021,
- 4.033727645874023,
- 4.03702974319458,
- 4.040332794189453,
- 4.043638229370117,
- 4.0469441413879395,
- 4.050251483917236,
- 4.053560256958008,
- 4.056869983673096,
- 4.060181140899658,
- 4.063493728637695,
- 4.066807746887207,
- 4.070123195648193,
- 4.073440074920654,
- 4.076758861541748,
- 4.080078125,
- 4.083398818969727,
- 4.086720943450928,
- 4.0900444984436035,
- 4.093369483947754,
- 4.096695423126221,
- 4.1000237464904785,
- 4.1033525466918945,
- 4.106681823730469,
- 4.110013484954834,
- 4.11334753036499,
- 4.1166815757751465,
- 4.120017051696777,
- 4.123353958129883,
- 4.126692295074463,
- 4.130032062530518,
- 4.133372783660889,
- 4.136716365814209,
- 4.140059947967529,
- 4.143404960632324,
- 4.146751403808594,
- 4.150099277496338,
- 4.153448104858398,
- 4.156798839569092,
- 4.160150527954102,
- 4.163503646850586,
- 4.166858196258545,
- 4.1702141761779785,
- 4.173572063446045,
- 4.176930904388428,
- 4.180290699005127,
- 4.183651924133301,
- 4.187014579772949,
- 4.190378665924072,
- 4.193743705749512,
- 4.1971116065979,
- 4.200479507446289,
- 4.203847885131836,
- 4.20721960067749,
- 4.210591793060303,
- 4.213964939117432,
- 4.217339992523193,
- 4.2207159996032715,
- 4.224093437194824,
- 4.227472305297852,
- 4.2308526039123535,
- 4.234234809875488,
- 4.2376179695129395,
- 4.241002082824707,
- 4.244387626647949,
- 4.247774600982666,
- 4.251163005828857,
- 4.254552364349365,
- 4.257943630218506,
- 4.261336803436279,
- 4.2647294998168945,
- 4.268125534057617,
- 4.27152156829834,
- 4.274919509887695,
- 4.278318405151367,
- 4.281719207763672,
- 4.285120964050293,
- 4.288524150848389,
- 4.291929244995117,
- 4.295335292816162,
- 4.298742294311523,
- 4.302151203155518,
- 4.305561065673828,
- 4.308972358703613,
- 4.312384605407715,
- 4.315799713134766,
- 4.3192138671875,
- 4.322630405426025,
- 4.326048374176025,
- 4.329468727111816,
- 4.332889556884766,
- 4.3363118171691895,
- 4.33973503112793,
- 4.3431596755981445,
- 4.346585750579834,
- 4.350013256072998,
- 4.353443145751953,
- 4.356873512268066,
- 4.360304832458496,
- 4.363736629486084,
- 4.367171764373779,
- 4.370607376098633,
- 4.374044418334961,
- 4.3774824142456055,
- 4.380922317504883,
- 4.384363174438477,
- 4.387806415557861,
- 4.391250133514404,
- 4.394695281982422,
- 4.398141384124756,
- 4.401589393615723,
- 4.405038356781006,
- 4.408488750457764,
- 4.4119415283203125,
- 4.4153947830200195,
- 4.418848037719727,
- 4.422303676605225,
- 4.425762176513672,
- 4.429220676422119,
- 4.432680606842041,
- 4.436141490936279,
- 4.43960428237915,
- 4.443068027496338,
- 4.446533203125,
- 4.449999809265137,
- 4.4534687995910645,
- 4.45693826675415,
- 4.460409164428711,
- 4.463881015777588,
- 4.4673542976379395,
- 4.470829010009766,
- 4.474305152893066,
- 4.477782726287842,
- 4.481261253356934,
- 4.484741687774658,
- 4.488224029541016,
- 4.491706848144531,
- 4.4951910972595215,
- 4.498676776885986,
- 4.502163410186768,
- 4.505651950836182,
- 4.509141445159912,
- 4.512633323669434,
- 4.516125679016113,
- 4.519618034362793,
- 4.523114204406738,
- 4.526610374450684,
- 4.530108451843262,
- 4.533607482910156,
- 4.537107467651367,
- 4.540609359741211,
- 4.544112682342529,
- 4.547616958618164,
- 4.55112361907959,
- 4.554630756378174,
- 4.558139324188232,
- 4.561649322509766,
- 4.565160274505615,
- 4.568673133850098,
- 4.5721869468688965,
- 4.57570219039917,
- 4.579218864440918,
- 4.582736968994141,
- 4.586256980895996,
- 4.589777946472168,
- 4.593299865722656,
- 4.596823215484619,
- 4.600347995758057,
- 4.6038737297058105,
- 4.607401371002197,
- 4.610930919647217,
- 4.614461421966553,
- 4.617992877960205,
- 4.621525287628174,
- 4.625059604644775,
- 4.628593921661377,
- 4.632132053375244,
- 4.635670185089111,
- 4.639209747314453,
- 4.642751693725586,
- 4.6462931632995605,
- 4.649836540222168,
- 4.653382778167725,
- 4.656929016113281,
- 4.6604766845703125,
- 4.664025783538818,
- 4.667575836181641,
- 4.671127796173096,
- 4.674680709838867,
- 4.6782355308532715,
- 4.681791305541992,
- 4.685349464416504,
- 4.688906669616699,
- 4.69246768951416,
- 4.696028709411621,
- 4.699591159820557,
- 4.703155040740967,
- 4.706721305847168,
- 4.710287094116211,
- 4.713855743408203,
- 4.717424392700195,
- 4.720995903015137,
- 4.724567890167236,
- 4.7281413078308105,
- 4.731715679168701,
- 4.735292911529541,
- 4.7388691902160645,
- 4.742447853088379,
- 4.746027946472168,
- 4.749609470367432,
- 4.753193378448486,
- 4.756777763366699,
- 4.7603631019592285,
- 4.763949871063232,
- 4.767538070678711,
- 4.7711286544799805,
- 4.774718761444092,
- 4.778310775756836,
- 4.781904697418213,
- 4.785500526428223,
- 4.789095878601074,
- 4.792693614959717,
- 4.796293258666992,
- 4.799893856048584,
- 4.803495407104492,
- 4.80709981918335,
- 4.810702800750732,
- 4.814309597015381,
- 4.817915916442871,
- 4.821525573730469,
- 4.825135231018066,
- 4.828746318817139,
- 4.832359790802002,
- 4.835973739624023,
- 4.839588165283203,
- 4.843204498291016,
- 4.846823692321777,
- 4.850442886352539,
- 4.854063510894775,
- 4.857684135437012,
- 4.861308574676514,
- 4.864933490753174,
- 4.86855936050415,
- 4.872187614440918,
- 4.875815391540527,
- 4.879445552825928,
- 4.883078098297119,
- 4.8867106437683105,
- 4.89034366607666,
- 4.893980503082275,
- 4.897617340087891,
- 4.9012556076049805,
- 4.904894828796387,
- 4.908535957336426,
- 4.912178039550781,
- 4.915822505950928,
- 4.919466495513916,
- 4.923113822937012,
- 4.926761627197266,
- 4.930410385131836,
- 4.934061050415039,
- 4.937713623046875,
- 4.941365718841553,
- 4.945021152496338,
- 4.948677062988281,
- 4.952333927154541,
- 4.955991268157959,
- 4.959651947021484,
- 4.963313102722168,
- 4.966975688934326,
- 4.970639705657959,
- 4.974304676055908,
- 4.977972507476807,
- 4.981639385223389,
- 4.985309600830078,
- 4.988980293273926,
- 4.992652416229248,
- 4.996325492858887
- ],
- "xaxis": "x3",
- "yaxis": "y3"
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "tags": [
+ "hide-input"
+ ]
+ },
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ },
+ "data": [
+ {
+ "nbinsx": 50,
+ "opacity": 0.7,
+ "type": "histogram",
+ "x": [
+ 2,
+ 2.003000020980835,
+ 2.00600004196167,
+ 2.009000062942505,
+ 2.01200008392334,
+ 2.015000104904175,
+ 2.0180001258850098,
+ 2.0209999084472656,
+ 2.0239999294281006,
+ 2.0269999504089355,
+ 2.0299999713897705,
+ 2.0329999923706055,
+ 2.0360000133514404,
+ 2.0390000343322754,
+ 2.0420000553131104,
+ 2.0450000762939453,
+ 2.0480000972747803,
+ 2.050999879837036,
+ 2.053999900817871,
+ 2.056999921798706,
+ 2.059999942779541,
+ 2.062999963760376,
+ 2.065999984741211,
+ 2.069000005722046,
+ 2.072000026702881,
+ 2.075000047683716,
+ 2.078000068664551,
+ 2.0810000896453857,
+ 2.0840001106262207,
+ 2.0870001316070557,
+ 2.0900001525878906,
+ 2.0929999351501465,
+ 2.0959999561309814,
+ 2.0989999771118164,
+ 2.1019999980926514,
+ 2.1050000190734863,
+ 2.1080000400543213,
+ 2.1110000610351562,
+ 2.114000082015991,
+ 2.117000102996826,
+ 2.119999885559082,
+ 2.122999906539917,
+ 2.125999927520752,
+ 2.128999948501587,
+ 2.131999969482422,
+ 2.134999990463257,
+ 2.138000011444092,
+ 2.1410000324249268,
+ 2.1440000534057617,
+ 2.1469998359680176,
+ 2.1500000953674316,
+ 2.1529998779296875,
+ 2.1560001373291016,
+ 2.1589999198913574,
+ 2.1619999408721924,
+ 2.1649999618530273,
+ 2.1679999828338623,
+ 2.1710000038146973,
+ 2.1740000247955322,
+ 2.177000045776367,
+ 2.180000066757202,
+ 2.183000087738037,
+ 2.186000108718872,
+ 2.188999891281128,
+ 2.191999912261963,
+ 2.194999933242798,
+ 2.197999954223633,
+ 2.2009999752044678,
+ 2.2039999961853027,
+ 2.2070000171661377,
+ 2.2100000381469727,
+ 2.2130000591278076,
+ 2.2160000801086426,
+ 2.2190001010894775,
+ 2.2220001220703125,
+ 2.2249999046325684,
+ 2.2280001640319824,
+ 2.2309999465942383,
+ 2.2339999675750732,
+ 2.236999988555908,
+ 2.240000009536743,
+ 2.243000030517578,
+ 2.246000051498413,
+ 2.249000072479248,
+ 2.252000093460083,
+ 2.254999876022339,
+ 2.257999897003174,
+ 2.260999917984009,
+ 2.2639999389648438,
+ 2.267000198364258,
+ 2.2699999809265137,
+ 2.2730000019073486,
+ 2.2760000228881836,
+ 2.2790000438690186,
+ 2.2820000648498535,
+ 2.2849998474121094,
+ 2.2880001068115234,
+ 2.2909998893737793,
+ 2.2939999103546143,
+ 2.296999931335449,
+ 2.299999952316284,
+ 2.302999973297119,
+ 2.305999994277954,
+ 2.309000015258789,
+ 2.312000036239624,
+ 2.315000057220459,
+ 2.317999839782715,
+ 2.321000099182129,
+ 2.324000120162964,
+ 2.3269999027252197,
+ 2.3299999237060547,
+ 2.3329999446868896,
+ 2.3359999656677246,
+ 2.3389999866485596,
+ 2.3420000076293945,
+ 2.3450000286102295,
+ 2.3480000495910645,
+ 2.3510000705718994,
+ 2.3540000915527344,
+ 2.3569998741149902,
+ 2.3600001335144043,
+ 2.36299991607666,
+ 2.366000175476074,
+ 2.36899995803833,
+ 2.371999979019165,
+ 2.375,
+ 2.378000020980835,
+ 2.38100004196167,
+ 2.384000062942505,
+ 2.38700008392334,
+ 2.390000104904175,
+ 2.3930001258850098,
+ 2.3959999084472656,
+ 2.3989999294281006,
+ 2.4019999504089355,
+ 2.4049999713897705,
+ 2.4079999923706055,
+ 2.4110000133514404,
+ 2.4140000343322754,
+ 2.4170000553131104,
+ 2.4200000762939453,
+ 2.422999858856201,
+ 2.4260001182556152,
+ 2.428999900817871,
+ 2.432000160217285,
+ 2.434999942779541,
+ 2.437999963760376,
+ 2.440999984741211,
+ 2.444000005722046,
+ 2.447000026702881,
+ 2.450000047683716,
+ 2.453000068664551,
+ 2.4560000896453857,
+ 2.4590001106262207,
+ 2.4619998931884766,
+ 2.4650001525878906,
+ 2.4679999351501465,
+ 2.4709999561309814,
+ 2.4739999771118164,
+ 2.4769999980926514,
+ 2.4800000190734863,
+ 2.4830000400543213,
+ 2.4860000610351562,
+ 2.489000082015991,
+ 2.492000102996826,
+ 2.494999885559082,
+ 2.498000144958496,
+ 2.500999927520752,
+ 2.504000186920166,
+ 2.506999969482422,
+ 2.509999990463257,
+ 2.513000011444092,
+ 2.5160000324249268,
+ 2.5190000534057617,
+ 2.5220000743865967,
+ 2.5250000953674316,
+ 2.5280001163482666,
+ 2.5310001373291016,
+ 2.5339999198913574,
+ 2.5370001792907715,
+ 2.5399999618530273,
+ 2.5429999828338623,
+ 2.5460000038146973,
+ 2.5490000247955322,
+ 2.552000045776367,
+ 2.555000066757202,
+ 2.558000087738037,
+ 2.561000108718872,
+ 2.564000129699707,
+ 2.566999912261963,
+ 2.570000171661377,
+ 2.572999954223633,
+ 2.5759999752044678,
+ 2.5789999961853027,
+ 2.5820000171661377,
+ 2.5850000381469727,
+ 2.5880000591278076,
+ 2.5910000801086426,
+ 2.5939998626708984,
+ 2.5970001220703125,
+ 2.5999999046325684,
+ 2.6030001640319824,
+ 2.6059999465942383,
+ 2.6090002059936523,
+ 2.611999988555908,
+ 2.615000009536743,
+ 2.618000030517578,
+ 2.620999813079834,
+ 2.624000072479248,
+ 2.627000093460083,
+ 2.630000114440918,
+ 2.632999897003174,
+ 2.635999917984009,
+ 2.6389999389648438,
+ 2.642000198364258,
+ 2.6449999809265137,
+ 2.6480000019073486,
+ 2.6510000228881836,
+ 2.6540000438690186,
+ 2.6570000648498535,
+ 2.6599998474121094,
+ 2.6630001068115234,
+ 2.6659998893737793,
+ 2.6690001487731934,
+ 2.671999931335449,
+ 2.674999952316284,
+ 2.677999973297119,
+ 2.681000232696533,
+ 2.684000015258789,
+ 2.687000036239624,
+ 2.690000057220459,
+ 2.692999839782715,
+ 2.696000099182129,
+ 2.6989998817443848,
+ 2.702000141143799,
+ 2.7049999237060547,
+ 2.7080001831054688,
+ 2.7109999656677246,
+ 2.7139999866485596,
+ 2.7170000076293945,
+ 2.7200000286102295,
+ 2.7230000495910645,
+ 2.7260000705718994,
+ 2.7290000915527344,
+ 2.7319998741149902,
+ 2.7350001335144043,
+ 2.73799991607666,
+ 2.741000175476074,
+ 2.74399995803833,
+ 2.747000217437744,
+ 2.75,
+ 2.753000020980835,
+ 2.75600004196167,
+ 2.759000062942505,
+ 2.76200008392334,
+ 2.765000104904175,
+ 2.7680001258850098,
+ 2.7709999084472656,
+ 2.7740001678466797,
+ 2.7769999504089355,
+ 2.7800002098083496,
+ 2.7829999923706055,
+ 2.7860002517700195,
+ 2.7890000343322754,
+ 2.7919998168945312,
+ 2.7950000762939453,
+ 2.797999858856201,
+ 2.8010001182556152,
+ 2.803999900817871,
+ 2.807000160217285,
+ 2.809999942779541,
+ 2.812999963760376,
+ 2.815999984741211,
+ 2.819000005722046,
+ 2.822000026702881,
+ 2.825000047683716,
+ 2.828000068664551,
+ 2.8309998512268066,
+ 2.8340001106262207,
+ 2.8369998931884766,
+ 2.8400001525878906,
+ 2.8429999351501465,
+ 2.8460001945495605,
+ 2.8489999771118164,
+ 2.8519999980926514,
+ 2.8550000190734863,
+ 2.8580000400543213,
+ 2.8610000610351562,
+ 2.864000082015991,
+ 2.867000102996826,
+ 2.869999885559082,
+ 2.873000144958496,
+ 2.875999927520752,
+ 2.879000186920166,
+ 2.881999969482422,
+ 2.885000228881836,
+ 2.888000011444092,
+ 2.8909997940063477,
+ 2.8940000534057617,
+ 2.8969998359680176,
+ 2.9000000953674316,
+ 2.9029998779296875,
+ 2.9060001373291016,
+ 2.9089999198913574,
+ 2.9120001792907715,
+ 2.9149999618530273,
+ 2.9180002212524414,
+ 2.9210000038146973,
+ 2.9240002632141113,
+ 2.927000045776367,
+ 2.930000066757202,
+ 2.933000087738037,
+ 2.935999870300293,
+ 2.939000129699707,
+ 2.941999912261963,
+ 2.945000171661377,
+ 2.947999954223633,
+ 2.9509999752044678,
+ 2.9539999961853027,
+ 2.9570000171661377,
+ 2.9600000381469727,
+ 2.9630000591278076,
+ 2.9660000801086426,
+ 2.9689998626708984,
+ 2.9720001220703125,
+ 2.9749999046325684,
+ 2.9780001640319824,
+ 2.9809999465942383,
+ 2.9840002059936523,
+ 2.986999988555908,
+ 2.990000009536743,
+ 2.993000030517578,
+ 2.996000051498413,
+ 2.999000072479248,
+ 3.002000093460083,
+ 3.005000114440918,
+ 3.007999897003174,
+ 3.011000156402588,
+ 3.0139999389648438,
+ 3.017000198364258,
+ 3.0199999809265137,
+ 3.0230002403259277,
+ 3.0260000228881836,
+ 3.0290000438690186,
+ 3.0320000648498535,
+ 3.0349998474121094,
+ 3.0380001068115234,
+ 3.0409998893737793,
+ 3.0440001487731934,
+ 3.046999931335449,
+ 3.0500001907348633,
+ 3.052999973297119,
+ 3.056000232696533,
+ 3.059000015258789,
+ 3.062000274658203,
+ 3.065000057220459,
+ 3.068000078201294,
+ 3.071000099182129,
+ 3.074000120162964,
+ 3.077000141143799,
+ 3.0799999237060547,
+ 3.0830001831054688,
+ 3.0859999656677246,
+ 3.0889999866485596,
+ 3.0920000076293945,
+ 3.0950000286102295,
+ 3.0980000495910645,
+ 3.1010000705718994,
+ 3.1040000915527344,
+ 3.1069998741149902,
+ 3.1100001335144043,
+ 3.11299991607666,
+ 3.116000175476074,
+ 3.11899995803833,
+ 3.122000217437744,
+ 3.125,
+ 3.128000020980835,
+ 3.13100004196167,
+ 3.134000062942505,
+ 3.13700008392334,
+ 3.140000104904175,
+ 3.1430001258850098,
+ 3.1459999084472656,
+ 3.1490001678466797,
+ 3.1519999504089355,
+ 3.1549999713897705,
+ 3.1579999923706055,
+ 3.1610000133514404,
+ 3.1640000343322754,
+ 3.1669998168945312,
+ 3.1700000762939453,
+ 3.172999858856201,
+ 3.1760001182556152,
+ 3.178999900817871,
+ 3.182000160217285,
+ 3.184999942779541,
+ 3.188000202178955,
+ 3.190999984741211,
+ 3.194000244140625,
+ 3.197000026702881,
+ 3.200000047683716,
+ 3.2029998302459717,
+ 3.2059998512268066,
+ 3.2089998722076416,
+ 3.2119998931884766,
+ 3.2150001525878906,
+ 3.2180001735687256,
+ 3.2210001945495605,
+ 3.2240002155303955,
+ 3.2269999980926514,
+ 3.2300000190734863,
+ 3.2330000400543213,
+ 3.2360000610351562,
+ 3.239000082015991,
+ 3.242000102996826,
+ 3.244999885559082,
+ 3.247999906539917,
+ 3.250999927520752,
+ 3.254000186920166,
+ 3.256999969482422,
+ 3.260000228881836,
+ 3.263000011444092,
+ 3.2660000324249268,
+ 3.2690000534057617,
+ 3.2720000743865967,
+ 3.2750000953674316,
+ 3.2780001163482666,
+ 3.2809998989105225,
+ 3.2839999198913574,
+ 3.2869999408721924,
+ 3.2899999618530273,
+ 3.2930002212524414,
+ 3.2960000038146973,
+ 3.2990000247955322,
+ 3.302000045776367,
+ 3.304999828338623,
+ 3.308000087738037,
+ 3.310999870300293,
+ 3.314000129699707,
+ 3.317000150680542,
+ 3.319999933242798,
+ 3.323000192642212,
+ 3.3259999752044678,
+ 3.3289999961853027,
+ 3.332000255584717,
+ 3.3350000381469727,
+ 3.3380002975463867,
+ 3.3410000801086426,
+ 3.3439998626708984,
+ 3.3469998836517334,
+ 3.3499999046325684,
+ 3.3530001640319824,
+ 3.3560001850128174,
+ 3.3590002059936523,
+ 3.3620002269744873,
+ 3.365000009536743,
+ 3.368000030517578,
+ 3.371000051498413,
+ 3.374000072479248,
+ 3.377000093460083,
+ 3.380000114440918,
+ 3.382999897003174,
+ 3.386000156402588,
+ 3.3889999389648438,
+ 3.392000198364258,
+ 3.3949999809265137,
+ 3.3980002403259277,
+ 3.4010000228881836,
+ 3.4040000438690186,
+ 3.4070000648498535,
+ 3.4100000858306885,
+ 3.4130001068115234,
+ 3.4160001277923584,
+ 3.4189999103546143,
+ 3.421999931335449,
+ 3.424999952316284,
+ 3.427999973297119,
+ 3.431000232696533,
+ 3.434000253677368,
+ 3.437000274658203,
+ 3.440000057220459,
+ 3.442999839782715,
+ 3.446000099182129,
+ 3.4489998817443848,
+ 3.452000141143799,
+ 3.455000162124634,
+ 3.4579999446868896,
+ 3.4610002040863037,
+ 3.4639999866485596,
+ 3.4670000076293945,
+ 3.4700002670288086,
+ 3.4730000495910645,
+ 3.4760003089904785,
+ 3.4790000915527344,
+ 3.4820001125335693,
+ 3.4850001335144043,
+ 3.48799991607666,
+ 3.491000175476074,
+ 3.494000196456909,
+ 3.497000217437744,
+ 3.5,
+ 3.503000020980835,
+ 3.50600004196167,
+ 3.509000062942505,
+ 3.5119998455047607,
+ 3.5149998664855957,
+ 3.5179998874664307,
+ 3.5209999084472656,
+ 3.5239996910095215,
+ 3.5269997119903564,
+ 3.5299997329711914,
+ 3.5329999923706055,
+ 3.5360000133514404,
+ 3.5390000343322754,
+ 3.5419998168945312,
+ 3.544999837875366,
+ 3.547999858856201,
+ 3.550999879837036,
+ 3.553999900817871,
+ 3.557000160217285,
+ 3.559999942779541,
+ 3.562999725341797,
+ 3.565999746322632,
+ 3.569000005722046,
+ 3.572000026702881,
+ 3.575000047683716,
+ 3.578000068664551,
+ 3.5809998512268066,
+ 3.5839998722076416,
+ 3.5869998931884766,
+ 3.5899999141693115,
+ 3.5930001735687256,
+ 3.5960001945495605,
+ 3.5989999771118164,
+ 3.6019997596740723,
+ 3.6050000190734863,
+ 3.607999801635742,
+ 3.610999822616577,
+ 3.613999843597412,
+ 3.617000102996826,
+ 3.619999885559082,
+ 3.622999668121338,
+ 3.625999689102173,
+ 3.628999948501587,
+ 3.631999969482422,
+ 3.634999990463257,
+ 3.638000011444092,
+ 3.6409997940063477,
+ 3.6439998149871826,
+ 3.6469998359680176,
+ 3.6499998569488525,
+ 3.6530001163482666,
+ 3.6560001373291016,
+ 3.6589999198913574,
+ 3.6619997024536133,
+ 3.6649999618530273,
+ 3.6679999828338623,
+ 3.6710000038146973,
+ 3.6740000247955322,
+ 3.677000045776367,
+ 3.679999828338623,
+ 3.682999849319458,
+ 3.685999870300293,
+ 3.689000129699707,
+ 3.692000150680542,
+ 3.695000171661377,
+ 3.697999954223633,
+ 3.7009999752044678,
+ 3.7039997577667236,
+ 3.7069997787475586,
+ 3.7099997997283936,
+ 3.7130000591278076,
+ 3.7160000801086426,
+ 3.7189998626708984,
+ 3.7219996452331543,
+ 3.7249999046325684,
+ 3.7279999256134033,
+ 3.7309999465942383,
+ 3.7339999675750732,
+ 3.736999988555908,
+ 3.739999771118164,
+ 3.742999792098999,
+ 3.745999813079834,
+ 3.749000072479248,
+ 3.752000093460083,
+ 3.755000114440918,
+ 3.757999897003174,
+ 3.760999917984009,
+ 3.7639999389648438,
+ 3.7669999599456787,
+ 3.7699999809265137,
+ 3.7730002403259277,
+ 3.7760000228881836,
+ 3.7789998054504395,
+ 3.7819998264312744,
+ 3.7850000858306885,
+ 3.7880001068115234,
+ 3.7910001277923584,
+ 3.7940001487731934,
+ 3.796999931335449,
+ 3.799999713897705,
+ 3.80299973487854,
+ 3.805999755859375,
+ 3.809000015258789,
+ 3.812000036239624,
+ 3.815000057220459,
+ 3.817999839782715,
+ 3.82099986076355,
+ 3.8239998817443848,
+ 3.8269999027252197,
+ 3.8299999237060547,
+ 3.8330001831054688,
+ 3.8359999656677246,
+ 3.8389997482299805,
+ 3.8419997692108154,
+ 3.8450000286102295,
+ 3.8480000495910645,
+ 3.8510000705718994,
+ 3.8540000915527344,
+ 3.8569998741149902,
+ 3.859999895095825,
+ 3.86299991607666,
+ 3.865999937057495,
+ 3.869000196456909,
+ 3.871999979019165,
+ 3.875,
+ 3.877999782562256,
+ 3.880999803543091,
+ 3.883999824523926,
+ 3.8869998455047607,
+ 3.8899998664855957,
+ 3.8930001258850098,
+ 3.8959999084472656,
+ 3.8989996910095215,
+ 3.9019997119903564,
+ 3.9049999713897705,
+ 3.9079999923706055,
+ 3.9110000133514404,
+ 3.9140000343322754,
+ 3.9169998168945312,
+ 3.919999837875366,
+ 3.922999858856201,
+ 3.925999879837036,
+ 3.92900013923645,
+ 3.932000160217285,
+ 3.934999942779541,
+ 3.937999725341797,
+ 3.940999984741211,
+ 3.944000005722046,
+ 3.947000026702881,
+ 3.950000047683716,
+ 3.953000068664551,
+ 3.9559998512268066,
+ 3.9589998722076416,
+ 3.9619998931884766,
+ 3.9650001525878906,
+ 3.9679999351501465,
+ 3.9709999561309814,
+ 3.9739999771118164,
+ 3.9769997596740723,
+ 3.9799997806549072,
+ 3.982999801635742,
+ 3.985999822616577,
+ 3.989000082015991,
+ 3.992000102996826,
+ 3.994999885559082,
+ 3.997999668121338,
+ 4.000999927520752,
+ 4.003999710083008,
+ 4.006999969482422,
+ 4.010000228881836,
+ 4.013000011444092,
+ 4.015999794006348,
+ 4.019000053405762,
+ 4.021999835968018,
+ 4.025000095367432,
+ 4.0279998779296875,
+ 4.031000137329102,
+ 4.033999919891357,
+ 4.036999702453613,
+ 4.039999961853027,
+ 4.043000221252441,
+ 4.046000003814697,
+ 4.049000263214111,
+ 4.052000045776367,
+ 4.054999828338623,
+ 4.057999610900879,
+ 4.060999870300293,
+ 4.064000129699707,
+ 4.066999912261963,
+ 4.069999694824219,
+ 4.072999954223633,
+ 4.075999736785889,
+ 4.0789995193481445,
+ 4.081999778747559,
+ 4.085000038146973,
+ 4.088000297546387,
+ 4.091000080108643,
+ 4.093999862670898,
+ 4.0970001220703125,
+ 4.099999904632568,
+ 4.102999687194824,
+ 4.105999946594238,
+ 4.109000205993652,
+ 4.111999988555908,
+ 4.114999771118164,
+ 4.118000030517578,
+ 4.121000289916992,
+ 4.124000072479248,
+ 4.126999855041504,
+ 4.130000114440918,
+ 4.132999897003174,
+ 4.13599967956543,
+ 4.138999938964844,
+ 4.142000198364258,
+ 4.145000457763672,
+ 4.148000240325928,
+ 4.151000022888184,
+ 4.1539998054504395,
+ 4.1570000648498535,
+ 4.159999847412109,
+ 4.163000106811523,
+ 4.165999889373779,
+ 4.169000148773193,
+ 4.171999931335449,
+ 4.174999713897705,
+ 4.177999496459961,
+ 4.180999755859375,
+ 4.184000015258789,
+ 4.187000274658203,
+ 4.190000057220459,
+ 4.192999839782715,
+ 4.196000099182129,
+ 4.198999881744385,
+ 4.201999664306641,
+ 4.204999923706055,
+ 4.208000183105469,
+ 4.210999965667725,
+ 4.2139997482299805,
+ 4.2170000076293945,
+ 4.220000267028809,
+ 4.2230000495910645,
+ 4.22599983215332,
+ 4.229000091552734,
+ 4.23199987411499,
+ 4.234999656677246,
+ 4.23799991607666,
+ 4.241000175476074,
+ 4.24399995803833,
+ 4.246999740600586,
+ 4.25,
+ 4.252999782562256,
+ 4.255999565124512,
+ 4.258999824523926,
+ 4.26200008392334,
+ 4.265000343322754,
+ 4.26800012588501,
+ 4.270999908447266,
+ 4.2739996910095215,
+ 4.2769999504089355,
+ 4.279999732971191,
+ 4.2829999923706055,
+ 4.2860002517700195,
+ 4.289000034332275,
+ 4.291999816894531,
+ 4.295000076293945,
+ 4.297999858856201,
+ 4.301000118255615,
+ 4.303999900817871,
+ 4.307000160217285,
+ 4.309999942779541,
+ 4.312999725341797,
+ 4.315999984741211,
+ 4.319000244140625,
+ 4.322000026702881,
+ 4.325000286102295,
+ 4.328000068664551,
+ 4.330999851226807,
+ 4.3339996337890625,
+ 4.336999893188477,
+ 4.340000152587891,
+ 4.3429999351501465,
+ 4.345999717712402,
+ 4.348999977111816,
+ 4.351999759674072,
+ 4.354999542236328,
+ 4.357999801635742,
+ 4.361000061035156,
+ 4.36400032043457,
+ 4.367000102996826,
+ 4.369999885559082,
+ 4.373000144958496,
+ 4.375999927520752,
+ 4.378999710083008,
+ 4.381999969482422,
+ 4.385000228881836,
+ 4.388000011444092,
+ 4.390999794006348,
+ 4.394000053405762,
+ 4.397000312805176,
+ 4.400000095367432,
+ 4.4029998779296875,
+ 4.405999660491943,
+ 4.409000396728516,
+ 4.411999702453613,
+ 4.414999961853027,
+ 4.417999744415283,
+ 4.4210004806518555,
+ 4.423999786376953,
+ 4.426999568939209,
+ 4.429999828338623,
+ 4.432999610900879,
+ 4.435999870300293,
+ 4.438999652862549,
+ 4.441999912261963,
+ 4.444999694824219,
+ 4.447999954223633,
+ 4.451000213623047,
+ 4.4539995193481445,
+ 4.457000255584717,
+ 4.460000038146973,
+ 4.463000297546387,
+ 4.465999603271484,
+ 4.469000339508057,
+ 4.4720001220703125,
+ 4.474999904632568,
+ 4.478000164031982,
+ 4.480999946594238,
+ 4.483999729156494,
+ 4.486999988555908,
+ 4.490000247955322,
+ 4.493000030517578,
+ 4.495999813079834,
+ 4.499000072479248,
+ 4.501999855041504,
+ 4.505000114440918,
+ 4.508000373840332,
+ 4.51099967956543,
+ 4.513999938964844,
+ 4.517000198364258,
+ 4.519999980926514,
+ 4.5229997634887695,
+ 4.525999546051025,
+ 4.529000282287598,
+ 4.531999588012695,
+ 4.534999847412109,
+ 4.537999629974365,
+ 4.5410003662109375,
+ 4.543999671936035,
+ 4.546999931335449,
+ 4.550000190734863,
+ 4.552999973297119,
+ 4.556000232696533,
+ 4.559000015258789,
+ 4.562000274658203,
+ 4.565000057220459,
+ 4.568000316619873,
+ 4.571000099182129,
+ 4.573999881744385,
+ 4.577000141143799,
+ 4.579999923706055,
+ 4.5829997062683105,
+ 4.585999965667725,
+ 4.5889997482299805,
+ 4.5920000076293945,
+ 4.59499979019165,
+ 4.5980000495910645,
+ 4.60099983215332,
+ 4.604000091552734,
+ 4.607000350952148,
+ 4.609999656677246,
+ 4.613000392913818,
+ 4.615999698638916,
+ 4.61899995803833,
+ 4.621999740600586,
+ 4.625,
+ 4.628000259399414,
+ 4.630999565124512,
+ 4.633999824523926,
+ 4.63700008392334,
+ 4.640000343322754,
+ 4.642999649047852,
+ 4.645999908447266,
+ 4.64900016784668,
+ 4.6519999504089355,
+ 4.65500020980835,
+ 4.6579999923706055,
+ 4.660999774932861,
+ 4.664000034332275,
+ 4.6670002937316895,
+ 4.670000076293945,
+ 4.672999858856201,
+ 4.676000118255615,
+ 4.678999900817871,
+ 4.681999683380127,
+ 4.685000419616699,
+ 4.688000202178955,
+ 4.690999984741211,
+ 4.693999767303467,
+ 4.697000026702881,
+ 4.699999809265137,
+ 4.702999591827393,
+ 4.705999851226807,
+ 4.7089996337890625,
+ 4.711999893188477,
+ 4.714999675750732,
+ 4.7179999351501465,
+ 4.720999717712402,
+ 4.723999977111816,
+ 4.7270002365112305,
+ 4.729999542236328,
+ 4.7330002784729,
+ 4.736000061035156,
+ 4.73900032043457,
+ 4.741999626159668,
+ 4.74500036239624,
+ 4.748000144958496,
+ 4.750999927520752,
+ 4.754000186920166,
+ 4.756999969482422,
+ 4.759999752044678,
+ 4.763000011444092,
+ 4.766000270843506,
+ 4.769000053405762,
+ 4.771999835968018,
+ 4.775000095367432,
+ 4.7779998779296875,
+ 4.781000137329102,
+ 4.783999919891357,
+ 4.7870001792907715,
+ 4.789999961853027,
+ 4.792999744415283,
+ 4.796000003814697,
+ 4.798999786376953,
+ 4.801999568939209,
+ 4.805000305175781,
+ 4.807999610900879,
+ 4.810999870300293,
+ 4.813999652862549,
+ 4.817000389099121,
+ 4.819999694824219,
+ 4.822999954223633,
+ 4.826000213623047,
+ 4.828999996185303,
+ 4.832000255584717,
+ 4.835000038146973,
+ 4.838000297546387,
+ 4.841000080108643,
+ 4.844000339508057,
+ 4.8470001220703125,
+ 4.849999904632568,
+ 4.853000164031982,
+ 4.855999946594238,
+ 4.858999729156494,
+ 4.861999988555908,
+ 4.864999771118164,
+ 4.868000030517578,
+ 4.870999813079834,
+ 4.874000072479248,
+ 4.876999855041504,
+ 4.87999963760376,
+ 4.882999897003174,
+ 4.886000156402588,
+ 4.888999938964844,
+ 4.8919997215271,
+ 4.894999980926514,
+ 4.8979997634887695,
+ 4.901000022888184,
+ 4.904000282287598,
+ 4.906999588012695,
+ 4.909999847412109,
+ 4.913000106811523,
+ 4.9160003662109375,
+ 4.918999671936035,
+ 4.921999931335449,
+ 4.925000190734863,
+ 4.927999973297119,
+ 4.931000232696533,
+ 4.934000015258789,
+ 4.936999797821045,
+ 4.940000057220459,
+ 4.943000316619873,
+ 4.946000099182129,
+ 4.948999881744385,
+ 4.952000141143799,
+ 4.954999923706055,
+ 4.9579997062683105,
+ 4.961000442504883,
+ 4.9639997482299805,
+ 4.9670000076293945,
+ 4.96999979019165,
+ 4.973000526428223,
+ 4.97599983215332,
+ 4.978999614715576,
+ 4.982000350952148,
+ 4.984999656677246,
+ 4.98799991607666,
+ 4.990999698638916,
+ 4.994000434875488,
+ 4.996999740600586
+ ],
+ "xaxis": "x",
+ "yaxis": "y"
+ },
+ {
+ "nbinsx": 50,
+ "opacity": 0.7,
+ "type": "histogram",
+ "x": [
+ 2,
+ 2.0012006759643555,
+ 2.0024027824401855,
+ 2.0036065578460693,
+ 2.0048115253448486,
+ 2.0060181617736816,
+ 2.00722599029541,
+ 2.0084354877471924,
+ 2.009646415710449,
+ 2.0108585357666016,
+ 2.0120723247528076,
+ 2.0132875442504883,
+ 2.0145044326782227,
+ 2.0157225131988525,
+ 2.016942262649536,
+ 2.0181634426116943,
+ 2.019386053085327,
+ 2.0206103324890137,
+ 2.0218358039855957,
+ 2.0230629444122314,
+ 2.024291515350342,
+ 2.0255215167999268,
+ 2.0267531871795654,
+ 2.0279862880706787,
+ 2.0292208194732666,
+ 2.030456781387329,
+ 2.0316944122314453,
+ 2.032933473587036,
+ 2.0341742038726807,
+ 2.0354161262512207,
+ 2.0366597175598145,
+ 2.037905216217041,
+ 2.039151668548584,
+ 2.0404000282287598,
+ 2.041649580001831,
+ 2.042901039123535,
+ 2.0441536903381348,
+ 2.045408010482788,
+ 2.046663761138916,
+ 2.0479211807250977,
+ 2.049180507659912,
+ 2.050440788269043,
+ 2.0517029762268066,
+ 2.052966594696045,
+ 2.054231882095337,
+ 2.0554983615875244,
+ 2.0567667484283447,
+ 2.0580365657806396,
+ 2.0593080520629883,
+ 2.0605812072753906,
+ 2.0618557929992676,
+ 2.063131809234619,
+ 2.0644094944000244,
+ 2.0656888484954834,
+ 2.066969871520996,
+ 2.0682523250579834,
+ 2.0695364475250244,
+ 2.07082200050354,
+ 2.0721094608306885,
+ 2.0733983516693115,
+ 2.0746889114379883,
+ 2.0759809017181396,
+ 2.0772745609283447,
+ 2.0785698890686035,
+ 2.079866886138916,
+ 2.081165313720703,
+ 2.082465648651123,
+ 2.0837676525115967,
+ 2.085071086883545,
+ 2.0863759517669678,
+ 2.0876827239990234,
+ 2.0889909267425537,
+ 2.090301036834717,
+ 2.0916125774383545,
+ 2.092925786972046,
+ 2.094240665435791,
+ 2.095557451248169,
+ 2.0968756675720215,
+ 2.0981955528259277,
+ 2.0995171070098877,
+ 2.1008403301239014,
+ 2.1021652221679688,
+ 2.10349178314209,
+ 2.1048200130462646,
+ 2.106149911880493,
+ 2.1074817180633545,
+ 2.1088149547576904,
+ 2.11014986038208,
+ 2.1114864349365234,
+ 2.1128249168395996,
+ 2.1141650676727295,
+ 2.115506649017334,
+ 2.1168501377105713,
+ 2.1181952953338623,
+ 2.119542121887207,
+ 2.1208908557891846,
+ 2.1222410202026367,
+ 2.1235930919647217,
+ 2.1249468326568604,
+ 2.1263022422790527,
+ 2.127659559249878,
+ 2.129018545150757,
+ 2.1303791999816895,
+ 2.131741523742676,
+ 2.133105754852295,
+ 2.1344716548919678,
+ 2.1358394622802734,
+ 2.1372087001800537,
+ 2.138579845428467,
+ 2.1399528980255127,
+ 2.1413276195526123,
+ 2.1427042484283447,
+ 2.1440823078155518,
+ 2.1454625129699707,
+ 2.1468441486358643,
+ 2.1482276916503906,
+ 2.14961314201355,
+ 2.1510000228881836,
+ 2.1523890495300293,
+ 2.153779983520508,
+ 2.15517258644104,
+ 2.156566858291626,
+ 2.1579627990722656,
+ 2.159360885620117,
+ 2.1607606410980225,
+ 2.1621620655059814,
+ 2.1635653972625732,
+ 2.164970636367798,
+ 2.1663777828216553,
+ 2.1677868366241455,
+ 2.1691973209381104,
+ 2.170609951019287,
+ 2.1720242500305176,
+ 2.17344069480896,
+ 2.174858570098877,
+ 2.176278591156006,
+ 2.1777002811431885,
+ 2.179124116897583,
+ 2.1805496215820312,
+ 2.181976795196533,
+ 2.183406114578247,
+ 2.1848373413085938,
+ 2.186270236968994,
+ 2.1877050399780273,
+ 2.1891417503356934,
+ 2.190580368041992,
+ 2.192021131515503,
+ 2.1934635639190674,
+ 2.1949079036712646,
+ 2.1963541507720947,
+ 2.1978020668029785,
+ 2.1992523670196533,
+ 2.2007040977478027,
+ 2.202157974243164,
+ 2.2036139965057373,
+ 2.2050716876983643,
+ 2.206531524658203,
+ 2.2079930305480957,
+ 2.209456443786621,
+ 2.2109220027923584,
+ 2.2123894691467285,
+ 2.2138588428497314,
+ 2.215330123901367,
+ 2.2168033123016357,
+ 2.218278646469116,
+ 2.2197558879852295,
+ 2.2212350368499756,
+ 2.2227160930633545,
+ 2.2241992950439453,
+ 2.225684404373169,
+ 2.2271714210510254,
+ 2.2286605834960938,
+ 2.230151653289795,
+ 2.231644630432129,
+ 2.233139991760254,
+ 2.2346370220184326,
+ 2.236135959625244,
+ 2.2376370429992676,
+ 2.239140272140503,
+ 2.240645408630371,
+ 2.242152452468872,
+ 2.243661642074585,
+ 2.2451729774475098,
+ 2.2466862201690674,
+ 2.248201608657837,
+ 2.2497189044952393,
+ 2.2512381076812744,
+ 2.2527596950531006,
+ 2.2542831897735596,
+ 2.2558085918426514,
+ 2.257336139678955,
+ 2.25886607170105,
+ 2.2603979110717773,
+ 2.2619316577911377,
+ 2.26346755027771,
+ 2.265005588531494,
+ 2.2665457725524902,
+ 2.2680881023406982,
+ 2.269632339477539,
+ 2.271178722381592,
+ 2.2727272510528564,
+ 2.274277925491333,
+ 2.2758307456970215,
+ 2.2773854732513428,
+ 2.278942584991455,
+ 2.2805016040802,
+ 2.2820627689361572,
+ 2.2836263179779053,
+ 2.2851920127868652,
+ 2.286759614944458,
+ 2.288329601287842,
+ 2.2899014949798584,
+ 2.291475772857666,
+ 2.2930519580841064,
+ 2.294630527496338,
+ 2.2962112426757812,
+ 2.2977943420410156,
+ 2.299379348754883,
+ 2.300966501235962,
+ 2.302555799484253,
+ 2.304147481918335,
+ 2.305741310119629,
+ 2.3073372840881348,
+ 2.3089354038238525,
+ 2.3105359077453613,
+ 2.312138795852661,
+ 2.313743829727173,
+ 2.3153507709503174,
+ 2.316960096359253,
+ 2.3185715675354004,
+ 2.320185661315918,
+ 2.3218016624450684,
+ 2.3234200477600098,
+ 2.325040817260742,
+ 2.3266637325286865,
+ 2.3282887935638428,
+ 2.32991623878479,
+ 2.331545829772949,
+ 2.3331778049468994,
+ 2.3348121643066406,
+ 2.3364486694335938,
+ 2.338087320327759,
+ 2.339728355407715,
+ 2.341372013092041,
+ 2.343017816543579,
+ 2.344666004180908,
+ 2.346316337585449,
+ 2.3479690551757812,
+ 2.3496241569519043,
+ 2.3512814044952393,
+ 2.3529410362243652,
+ 2.3546032905578613,
+ 2.3562676906585693,
+ 2.3579344749450684,
+ 2.3596036434173584,
+ 2.3612751960754395,
+ 2.3629491329193115,
+ 2.3646249771118164,
+ 2.3663039207458496,
+ 2.3679847717285156,
+ 2.3696682453155518,
+ 2.371354103088379,
+ 2.373042345046997,
+ 2.3747329711914062,
+ 2.3764257431030273,
+ 2.3781211376190186,
+ 2.37981915473938,
+ 2.381519317626953,
+ 2.3832221031188965,
+ 2.384927272796631,
+ 2.3866348266601562,
+ 2.3883450031280518,
+ 2.390057325363159,
+ 2.3917722702026367,
+ 2.3934898376464844,
+ 2.395209550857544,
+ 2.3969318866729736,
+ 2.3986566066741943,
+ 2.400383949279785,
+ 2.402114152908325,
+ 2.403846025466919,
+ 2.405580997467041,
+ 2.407318353652954,
+ 2.409058094024658,
+ 2.4108004570007324,
+ 2.4125449657440186,
+ 2.414292573928833,
+ 2.4160425662994385,
+ 2.417794942855835,
+ 2.4195501804351807,
+ 2.4213075637817383,
+ 2.423067569732666,
+ 2.424830436706543,
+ 2.426595449447632,
+ 2.42836332321167,
+ 2.430133581161499,
+ 2.4319067001342773,
+ 2.4336822032928467,
+ 2.435460329055786,
+ 2.4372410774230957,
+ 2.4390244483947754,
+ 2.440810203552246,
+ 2.442599058151245,
+ 2.444390058517456,
+ 2.446183919906616,
+ 2.4479804039001465,
+ 2.449779510498047,
+ 2.4515814781188965,
+ 2.453385829925537,
+ 2.455192804336548,
+ 2.457002639770508,
+ 2.458814859390259,
+ 2.460629940032959,
+ 2.46244740486145,
+ 2.464268207550049,
+ 2.4660913944244385,
+ 2.467916965484619,
+ 2.469745635986328,
+ 2.4715769290924072,
+ 2.4734108448028564,
+ 2.475247621536255,
+ 2.4770867824554443,
+ 2.478929042816162,
+ 2.48077392578125,
+ 2.482621431350708,
+ 2.4844722747802734,
+ 2.486325263977051,
+ 2.4881811141967773,
+ 2.490039825439453,
+ 2.491901159286499,
+ 2.4937655925750732,
+ 2.4956324100494385,
+ 2.497502565383911,
+ 2.499375104904175,
+ 2.5012505054473877,
+ 2.503129005432129,
+ 2.5050101280212402,
+ 2.5068938732147217,
+ 2.5087809562683105,
+ 2.5106701850891113,
+ 2.5125627517700195,
+ 2.514457941055298,
+ 2.5163562297821045,
+ 2.5182576179504395,
+ 2.5201611518859863,
+ 2.5220682621002197,
+ 2.523977756500244,
+ 2.525890350341797,
+ 2.527805805206299,
+ 2.52972412109375,
+ 2.5316457748413086,
+ 2.533569812774658,
+ 2.535496950149536,
+ 2.5374271869659424,
+ 2.5393600463867188,
+ 2.5412960052490234,
+ 2.5432350635528564,
+ 2.5451767444610596,
+ 2.54712176322937,
+ 2.54906964302063,
+ 2.551020383834839,
+ 2.552974224090576,
+ 2.5549309253692627,
+ 2.5568909645080566,
+ 2.5588536262512207,
+ 2.560819387435913,
+ 2.562788486480713,
+ 2.5647599697113037,
+ 2.56673526763916,
+ 2.5687131881713867,
+ 2.5706942081451416,
+ 2.572678327560425,
+ 2.5746653079986572,
+ 2.576655626296997,
+ 2.5786490440368652,
+ 2.5806450843811035,
+ 2.5826447010040283,
+ 2.5846471786499023,
+ 2.586652994155884,
+ 2.5886616706848145,
+ 2.5906734466552734,
+ 2.592688798904419,
+ 2.5947067737579346,
+ 2.5967280864715576,
+ 2.598752498626709,
+ 2.6007802486419678,
+ 2.602811098098755,
+ 2.604844808578491,
+ 2.606882095336914,
+ 2.6089224815368652,
+ 2.6109659671783447,
+ 2.6130127906799316,
+ 2.615062713623047,
+ 2.6171159744262695,
+ 2.6191723346710205,
+ 2.621232032775879,
+ 2.6232950687408447,
+ 2.6253609657287598,
+ 2.6274304389953613,
+ 2.629503011703491,
+ 2.6315786838531494,
+ 2.6336581707000732,
+ 2.6357405185699463,
+ 2.637826442718506,
+ 2.639915704727173,
+ 2.642007827758789,
+ 2.644103765487671,
+ 2.646202564239502,
+ 2.6483049392700195,
+ 2.6504108905792236,
+ 2.652519941329956,
+ 2.654632329940796,
+ 2.6567482948303223,
+ 2.658867359161377,
+ 2.660989999771118,
+ 2.663115978240967,
+ 2.665245294570923,
+ 2.6673779487609863,
+ 2.6695139408111572,
+ 2.6716537475585938,
+ 2.6737966537475586,
+ 2.675943374633789,
+ 2.678093433380127,
+ 2.680246591567993,
+ 2.682403564453125,
+ 2.684563636779785,
+ 2.686727523803711,
+ 2.6888949871063232,
+ 2.691065549850464,
+ 2.693240165710449,
+ 2.695417881011963,
+ 2.697599172592163,
+ 2.69978404045105,
+ 2.701972246170044,
+ 2.704164505004883,
+ 2.70635986328125,
+ 2.7085587978363037,
+ 2.710761785507202,
+ 2.712967872619629,
+ 2.7151780128479004,
+ 2.7173914909362793,
+ 2.7196083068847656,
+ 2.7218291759490967,
+ 2.724053382873535,
+ 2.72628116607666,
+ 2.72851300239563,
+ 2.730748176574707,
+ 2.732987403869629,
+ 2.735229730606079,
+ 2.737476110458374,
+ 2.7397260665893555,
+ 2.7419795989990234,
+ 2.744237184524536,
+ 2.7464981079101562,
+ 2.748762845993042,
+ 2.7510316371917725,
+ 2.7533040046691895,
+ 2.755580186843872,
+ 2.7578601837158203,
+ 2.760143518447876,
+ 2.7624311447143555,
+ 2.7647221088409424,
+ 2.767017126083374,
+ 2.7693159580230713,
+ 2.771618366241455,
+ 2.773925304412842,
+ 2.776235580444336,
+ 2.7785496711730957,
+ 2.7808678150177,
+ 2.783189296722412,
+ 2.785515308380127,
+ 2.7878448963165283,
+ 2.7901785373687744,
+ 2.792515993118286,
+ 2.7948575019836426,
+ 2.7972028255462646,
+ 2.7995524406433105,
+ 2.8019051551818848,
+ 2.804262638092041,
+ 2.806623697280884,
+ 2.8089888095855713,
+ 2.8113577365875244,
+ 2.8137307167053223,
+ 2.816108226776123,
+ 2.8184893131256104,
+ 2.8208744525909424,
+ 2.8232638835906982,
+ 2.8256568908691406,
+ 2.828054428100586,
+ 2.830455780029297,
+ 2.8328611850738525,
+ 2.835270881652832,
+ 2.837684392929077,
+ 2.840102434158325,
+ 2.842524528503418,
+ 2.8449501991271973,
+ 2.8473806381225586,
+ 2.8498146533966064,
+ 2.8522531986236572,
+ 2.8546957969665527,
+ 2.857142925262451,
+ 2.8595941066741943,
+ 2.8620493412017822,
+ 2.864508867263794,
+ 2.8669724464416504,
+ 2.8694403171539307,
+ 2.8719124794006348,
+ 2.874389171600342,
+ 2.8768699169158936,
+ 2.879354953765869,
+ 2.8818440437316895,
+ 2.884337902069092,
+ 2.886835813522339,
+ 2.8893380165100098,
+ 2.8918449878692627,
+ 2.8943560123443604,
+ 2.896871328353882,
+ 2.899390935897827,
+ 2.9019150733947754,
+ 2.9044437408447266,
+ 2.9069766998291016,
+ 2.9095139503479004,
+ 2.9120559692382812,
+ 2.914602041244507,
+ 2.9171526432037354,
+ 2.919708013534546,
+ 2.9222676753997803,
+ 2.9248318672180176,
+ 2.9274003505706787,
+ 2.929973602294922,
+ 2.932551145553589,
+ 2.935133457183838,
+ 2.93772029876709,
+ 2.9403116703033447,
+ 2.9429075717926025,
+ 2.9455080032348633,
+ 2.948112964630127,
+ 2.9507226943969727,
+ 2.9533369541168213,
+ 2.955955982208252,
+ 2.9585797786712646,
+ 2.9612081050872803,
+ 2.963840961456299,
+ 2.9664788246154785,
+ 2.969120979309082,
+ 2.9717681407928467,
+ 2.9744198322296143,
+ 2.977076530456543,
+ 2.9797375202178955,
+ 2.982403516769409,
+ 2.985074520111084,
+ 2.987750291824341,
+ 2.9904305934906006,
+ 2.9931156635284424,
+ 2.9958057403564453,
+ 2.9985008239746094,
+ 3.0012004375457764,
+ 3.0039048194885254,
+ 3.0066146850585938,
+ 3.009328842163086,
+ 3.0120480060577393,
+ 3.014772415161133,
+ 3.0175013542175293,
+ 3.020235776901245,
+ 3.022974729537964,
+ 3.0257184505462646,
+ 3.0284674167633057,
+ 3.031221628189087,
+ 3.03398060798645,
+ 3.0367443561553955,
+ 3.039513349533081,
+ 3.042287826538086,
+ 3.0450668334960938,
+ 3.047851085662842,
+ 3.050640344619751,
+ 3.0534350872039795,
+ 3.056234836578369,
+ 3.059039354324341,
+ 3.0618491172790527,
+ 3.064664363861084,
+ 3.0674846172332764,
+ 3.07030987739563,
+ 3.0731406211853027,
+ 3.075976610183716,
+ 3.07881760597229,
+ 3.0816638469696045,
+ 3.0845155715942383,
+ 3.0873727798461914,
+ 3.0902349948883057,
+ 3.09310245513916,
+ 3.095975160598755,
+ 3.098853588104248,
+ 3.1017370223999023,
+ 3.104625701904297,
+ 3.107520341873169,
+ 3.110419988632202,
+ 3.1133248805999756,
+ 3.1162357330322266,
+ 3.1191515922546387,
+ 3.122073173522949,
+ 3.124999761581421,
+ 3.12793231010437,
+ 3.1308703422546387,
+ 3.1338136196136475,
+ 3.136762857437134,
+ 3.1397173404693604,
+ 3.1426773071289062,
+ 3.1456432342529297,
+ 3.1486144065856934,
+ 3.1515913009643555,
+ 3.154573917388916,
+ 3.157562255859375,
+ 3.1605563163757324,
+ 3.163555860519409,
+ 3.1665608882904053,
+ 3.169572114944458,
+ 3.17258882522583,
+ 3.1756112575531006,
+ 3.1786394119262695,
+ 3.181673526763916,
+ 3.184713363647461,
+ 3.187758684158325,
+ 3.190810441970825,
+ 3.1938679218292236,
+ 3.1969306468963623,
+ 3.1999998092651367,
+ 3.2030749320983887,
+ 3.20615553855896,
+ 3.209242343902588,
+ 3.2123348712921143,
+ 3.2154338359832764,
+ 3.218538761138916,
+ 3.221649408340454,
+ 3.2247660160064697,
+ 3.227888584136963,
+ 3.231017589569092,
+ 3.2341527938842773,
+ 3.2372937202453613,
+ 3.240440607070923,
+ 3.243593692779541,
+ 3.246752977371216,
+ 3.2499186992645264,
+ 3.2530901432037354,
+ 3.256268262863159,
+ 3.2594523429870605,
+ 3.2626426219940186,
+ 3.265839099884033,
+ 3.269042491912842,
+ 3.2722513675689697,
+ 3.2754666805267334,
+ 3.278688430786133,
+ 3.281916379928589,
+ 3.285151243209839,
+ 3.2883918285369873,
+ 3.2916393280029297,
+ 3.2948930263519287,
+ 3.2981529235839844,
+ 3.301419496536255,
+ 3.304692268371582,
+ 3.3079721927642822,
+ 3.31125807762146,
+ 3.3145508766174316,
+ 3.31784987449646,
+ 3.321155548095703,
+ 3.324467897415161,
+ 3.327786684036255,
+ 3.3311123847961426,
+ 3.334444761276245,
+ 3.3377835750579834,
+ 3.3411290645599365,
+ 3.3444812297821045,
+ 3.3478405475616455,
+ 3.3512065410614014,
+ 3.354578971862793,
+ 3.3579583168029785,
+ 3.361344337463379,
+ 3.3647372722625732,
+ 3.3681373596191406,
+ 3.371544122695923,
+ 3.374957799911499,
+ 3.378378391265869,
+ 3.381805658340454,
+ 3.385240077972412,
+ 3.3886821269989014,
+ 3.3921303749084473,
+ 3.395585775375366,
+ 3.399048328399658,
+ 3.402517795562744,
+ 3.405994176864624,
+ 3.409477949142456,
+ 3.412968873977661,
+ 3.4164674282073975,
+ 3.4199726581573486,
+ 3.423485040664673,
+ 3.42700457572937,
+ 3.4305317401885986,
+ 3.434065818786621,
+ 3.437607526779175,
+ 3.4411561489105225,
+ 3.4447121620178223,
+ 3.448275566101074,
+ 3.4518463611602783,
+ 3.4554247856140137,
+ 3.4590108394622803,
+ 3.462603807449341,
+ 3.4662044048309326,
+ 3.4698123931884766,
+ 3.473428249359131,
+ 3.4770517349243164,
+ 3.480682373046875,
+ 3.484320640563965,
+ 3.487966299057007,
+ 3.491619825363159,
+ 3.495281457901001,
+ 3.498950242996216,
+ 3.50262713432312,
+ 3.5063114166259766,
+ 3.5100033283233643,
+ 3.5137031078338623,
+ 3.517411470413208,
+ 3.5211267471313477,
+ 3.5248498916625977,
+ 3.5285816192626953,
+ 3.532320737838745,
+ 3.5360677242279053,
+ 3.539822578430176,
+ 3.5435855388641357,
+ 3.5473573207855225,
+ 3.5511364936828613,
+ 3.5549235343933105,
+ 3.558718681335449,
+ 3.5625221729278564,
+ 3.566333770751953,
+ 3.5701537132263184,
+ 3.573981523513794,
+ 3.577817440032959,
+ 3.5816617012023926,
+ 3.5855140686035156,
+ 3.5893752574920654,
+ 3.593244791030884,
+ 3.5971224308013916,
+ 3.601008176803589,
+ 3.604902505874634,
+ 3.6088054180145264,
+ 3.6127161979675293,
+ 3.616636276245117,
+ 3.6205644607543945,
+ 3.6245014667510986,
+ 3.6284468173980713,
+ 3.6324007511138916,
+ 3.6363632678985596,
+ 3.6403350830078125,
+ 3.644315004348755,
+ 3.648303508758545,
+ 3.6523008346557617,
+ 3.656306743621826,
+ 3.6603219509124756,
+ 3.6643457412719727,
+ 3.6683785915374756,
+ 3.672420024871826,
+ 3.6764702796936035,
+ 3.6805295944213867,
+ 3.684597969055176,
+ 3.688675880432129,
+ 3.6927623748779297,
+ 3.6968576908111572,
+ 3.7009620666503906,
+ 3.705075979232788,
+ 3.7091987133026123,
+ 3.7133309841156006,
+ 3.7174723148345947,
+ 3.7216224670410156,
+ 3.7257821559906006,
+ 3.7299511432647705,
+ 3.7341299057006836,
+ 3.7383179664611816,
+ 3.7425150871276855,
+ 3.7467215061187744,
+ 3.7509374618530273,
+ 3.7551629543304443,
+ 3.7593979835510254,
+ 3.7636430263519287,
+ 3.767897129058838,
+ 3.7721614837646484,
+ 3.776434898376465,
+ 3.7807180881500244,
+ 3.785010814666748,
+ 3.7893145084381104,
+ 3.7936267852783203,
+ 3.7979490756988525,
+ 3.802281141281128,
+ 3.8066232204437256,
+ 3.8109755516052246,
+ 3.8153374195098877,
+ 3.8197097778320312,
+ 3.824091672897339,
+ 3.828483819961548,
+ 3.8328857421875,
+ 3.8372981548309326,
+ 3.841721296310425,
+ 3.846153974533081,
+ 3.8505969047546387,
+ 3.8550498485565186,
+ 3.859513759613037,
+ 3.863987684249878,
+ 3.8684723377227783,
+ 3.872966766357422,
+ 3.877471923828125,
+ 3.8819873332977295,
+ 3.8865134716033936,
+ 3.891050100326538,
+ 3.8955979347229004,
+ 3.900156259536743,
+ 3.9047248363494873,
+ 3.909303903579712,
+ 3.913893938064575,
+ 3.918494939804077,
+ 3.9231069087982178,
+ 3.927729606628418,
+ 3.932363271713257,
+ 3.9370076656341553,
+ 3.9416630268096924,
+ 3.9463295936584473,
+ 3.951007843017578,
+ 3.9556963443756104,
+ 3.9603960514068604,
+ 3.965106964111328,
+ 3.9698290824890137,
+ 3.974562883377075,
+ 3.9793074131011963,
+ 3.9840638637542725,
+ 3.9888312816619873,
+ 3.993610143661499,
+ 3.9984004497528076,
+ 4.003202438354492,
+ 4.008016109466553,
+ 4.01284122467041,
+ 4.0176777839660645,
+ 4.022526264190674,
+ 4.027386665344238,
+ 4.032258033752441,
+ 4.0371413230896,
+ 4.042037010192871,
+ 4.046944618225098,
+ 4.051863670349121,
+ 4.0567946434021,
+ 4.06173849105835,
+ 4.0666937828063965,
+ 4.071661472320557,
+ 4.076640605926514,
+ 4.081632137298584,
+ 4.086636543273926,
+ 4.091652870178223,
+ 4.096681594848633,
+ 4.101722717285156,
+ 4.106776237487793,
+ 4.111842155456543,
+ 4.116920471191406,
+ 4.122011184692383,
+ 4.127115249633789,
+ 4.13223123550415,
+ 4.137360095977783,
+ 4.1425018310546875,
+ 4.147656440734863,
+ 4.1528239250183105,
+ 4.158004283905029,
+ 4.1631975173950195,
+ 4.168403625488281,
+ 4.173623085021973,
+ 4.178854942321777,
+ 4.184100151062012,
+ 4.189359188079834,
+ 4.1946306228637695,
+ 4.199915885925293,
+ 4.205214023590088,
+ 4.210526466369629,
+ 4.215851306915283,
+ 4.221189975738525,
+ 4.2265424728393555,
+ 4.231908321380615,
+ 4.237287998199463,
+ 4.24268102645874,
+ 4.248088359832764,
+ 4.253509044647217,
+ 4.258944034576416,
+ 4.264392375946045,
+ 4.269854545593262,
+ 4.275331497192383,
+ 4.280821800231934,
+ 4.2863264083862305,
+ 4.291845321655273,
+ 4.297379016876221,
+ 4.302926063537598,
+ 4.308487892150879,
+ 4.314063549041748,
+ 4.319654941558838,
+ 4.325259208679199,
+ 4.330878734588623,
+ 4.336513042449951,
+ 4.342162132263184,
+ 4.34782600402832,
+ 4.353504180908203,
+ 4.359197616577148,
+ 4.364906311035156,
+ 4.37062931060791,
+ 4.376367568969727,
+ 4.382120609283447,
+ 4.387889385223389,
+ 4.393672943115234,
+ 4.399472236633301,
+ 4.4052863121032715,
+ 4.411116123199463,
+ 4.416961193084717,
+ 4.422821521759033,
+ 4.42869758605957,
+ 4.434589862823486,
+ 4.440497398376465,
+ 4.446420669555664,
+ 4.452359676361084,
+ 4.458314895629883,
+ 4.464285850524902,
+ 4.470272541046143,
+ 4.476275444030762,
+ 4.482295036315918,
+ 4.488330364227295,
+ 4.494381904602051,
+ 4.500450134277344,
+ 4.506534576416016,
+ 4.512635231018066,
+ 4.518752574920654,
+ 4.524886608123779,
+ 4.531037330627441,
+ 4.537204742431641,
+ 4.543388843536377,
+ 4.549590110778809,
+ 4.5558085441589355,
+ 4.5620436668396,
+ 4.568295955657959,
+ 4.5745649337768555,
+ 4.580852031707764,
+ 4.587155818939209,
+ 4.593477249145508,
+ 4.599815845489502,
+ 4.606172561645508,
+ 4.612545967102051,
+ 4.6189374923706055,
+ 4.625346660614014,
+ 4.631774425506592,
+ 4.638218879699707,
+ 4.644681453704834,
+ 4.651162624359131,
+ 4.6576619148254395,
+ 4.66417932510376,
+ 4.670714378356934,
+ 4.6772685050964355,
+ 4.683840751647949,
+ 4.690431594848633,
+ 4.697041034698486,
+ 4.703668594360352,
+ 4.710315704345703,
+ 4.716980934143066,
+ 4.723665237426758,
+ 4.730368614196777,
+ 4.737091541290283,
+ 4.743833065032959,
+ 4.750593662261963,
+ 4.757373809814453,
+ 4.7641730308532715,
+ 4.770992279052734,
+ 4.777830600738525,
+ 4.784688949584961,
+ 4.791566848754883,
+ 4.798464775085449,
+ 4.805381774902344,
+ 4.812319278717041,
+ 4.819277286529541,
+ 4.826254844665527,
+ 4.833252906799316,
+ 4.84027099609375,
+ 4.8473100662231445,
+ 4.854369163513184,
+ 4.861448764801025,
+ 4.86854887008667,
+ 4.875670909881592,
+ 4.8828125,
+ 4.889975547790527,
+ 4.897159576416016,
+ 4.904365062713623,
+ 4.911591529846191,
+ 4.918838977813721,
+ 4.926108360290527,
+ 4.933399200439453,
+ 4.94071102142334,
+ 4.948045253753662,
+ 4.955401420593262,
+ 4.9627790451049805,
+ 4.970178604125977,
+ 4.977600574493408,
+ 4.985044956207275,
+ 4.99251127243042
+ ],
+ "xaxis": "x2",
+ "yaxis": "y2"
+ },
+ {
+ "nbinsx": 50,
+ "opacity": 0.7,
+ "type": "histogram",
+ "x": [
+ 1.9999998807907104,
+ 2.0023250579833984,
+ 2.0046520233154297,
+ 2.006979465484619,
+ 2.0093090534210205,
+ 2.0116395950317383,
+ 2.0139718055725098,
+ 2.0163047313690186,
+ 2.0186398029327393,
+ 2.020975351333618,
+ 2.023313045501709,
+ 2.025651693344116,
+ 2.027991771697998,
+ 2.0303330421447754,
+ 2.0326759815216064,
+ 2.035020112991333,
+ 2.0373659133911133,
+ 2.039712429046631,
+ 2.0420608520507812,
+ 2.0444107055664062,
+ 2.0467615127563477,
+ 2.0491137504577637,
+ 2.051467180252075,
+ 2.0538220405578613,
+ 2.056178331375122,
+ 2.0585358142852783,
+ 2.060894727706909,
+ 2.0632550716400146,
+ 2.065617084503174,
+ 2.0679800510406494,
+ 2.0703446865081787,
+ 2.0727100372314453,
+ 2.0750772953033447,
+ 2.0774457454681396,
+ 2.0798158645629883,
+ 2.082186698913574,
+ 2.084559440612793,
+ 2.086933135986328,
+ 2.089308261871338,
+ 2.0916848182678223,
+ 2.094062566757202,
+ 2.0964417457580566,
+ 2.098822832107544,
+ 2.1012046337127686,
+ 2.1035878658294678,
+ 2.1059725284576416,
+ 2.108358860015869,
+ 2.110746145248413,
+ 2.1131350994110107,
+ 2.1155247688293457,
+ 2.1179163455963135,
+ 2.1203091144561768,
+ 2.1227030754089355,
+ 2.125098466873169,
+ 2.127495288848877,
+ 2.1298933029174805,
+ 2.132293224334717,
+ 2.1346940994262695,
+ 2.1370961666107178,
+ 2.1394996643066406,
+ 2.141904830932617,
+ 2.1443111896514893,
+ 2.146718978881836,
+ 2.14912748336792,
+ 2.151538133621216,
+ 2.1539502143859863,
+ 2.156363010406494,
+ 2.1587769985198975,
+ 2.1611931324005127,
+ 2.1636102199554443,
+ 2.1660284996032715,
+ 2.1684482097625732,
+ 2.1708693504333496,
+ 2.1732916831970215,
+ 2.175715684890747,
+ 2.178140878677368,
+ 2.180567741394043,
+ 2.182995557785034,
+ 2.1854248046875,
+ 2.1878552436828613,
+ 2.1902875900268555,
+ 2.192720413208008,
+ 2.195155382156372,
+ 2.1975908279418945,
+ 2.200028419494629,
+ 2.2024667263031006,
+ 2.204907178878784,
+ 2.207348346710205,
+ 2.209791421890259,
+ 2.212235450744629,
+ 2.2146809101104736,
+ 2.217127561569214,
+ 2.219576120376587,
+ 2.2220258712768555,
+ 2.2244765758514404,
+ 2.226928472518921,
+ 2.229382276535034,
+ 2.231837034225464,
+ 2.234293222427368,
+ 2.236750841140747,
+ 2.2392096519470215,
+ 2.2416698932647705,
+ 2.2441320419311523,
+ 2.2465949058532715,
+ 2.2490594387054443,
+ 2.2515249252319336,
+ 2.2539920806884766,
+ 2.256460428237915,
+ 2.2589306831359863,
+ 2.2614011764526367,
+ 2.263874053955078,
+ 2.266347885131836,
+ 2.2688229084014893,
+ 2.2712996006011963,
+ 2.2737772464752197,
+ 2.2762563228607178,
+ 2.2787370681762695,
+ 2.281219005584717,
+ 2.2837021350860596,
+ 2.286186695098877,
+ 2.288673162460327,
+ 2.2911605834960938,
+ 2.293649196624756,
+ 2.2961390018463135,
+ 2.298630475997925,
+ 2.3011231422424316,
+ 2.303617238998413,
+ 2.30611252784729,
+ 2.3086097240448,
+ 2.3111073970794678,
+ 2.3136072158813477,
+ 2.3161075115203857,
+ 2.318610429763794,
+ 2.3211135864257812,
+ 2.3236186504364014,
+ 2.326124906539917,
+ 2.328632354736328,
+ 2.331141233444214,
+ 2.3336517810821533,
+ 2.3361637592315674,
+ 2.338676691055298,
+ 2.3411905765533447,
+ 2.3437066078186035,
+ 2.3462233543395996,
+ 2.3487420082092285,
+ 2.351261615753174,
+ 2.3537826538085938,
+ 2.3563051223754883,
+ 2.3588292598724365,
+ 2.361354112625122,
+ 2.3638811111450195,
+ 2.366408348083496,
+ 2.3689379692077637,
+ 2.3714685440063477,
+ 2.374000310897827,
+ 2.3765335083007812,
+ 2.379068374633789,
+ 2.3816041946411133,
+ 2.384141445159912,
+ 2.3866801261901855,
+ 2.3892199993133545,
+ 2.3917617797851562,
+ 2.3943042755126953,
+ 2.396848440170288,
+ 2.3993937969207764,
+ 2.40194034576416,
+ 2.4044888019561768,
+ 2.4070382118225098,
+ 2.4095892906188965,
+ 2.4121413230895996,
+ 2.4146947860717773,
+ 2.4172496795654297,
+ 2.4198057651519775,
+ 2.42236328125,
+ 2.424922227859497,
+ 2.4274823665618896,
+ 2.430044412612915,
+ 2.4326069355010986,
+ 2.435171604156494,
+ 2.437737464904785,
+ 2.4403045177459717,
+ 2.4428727626800537,
+ 2.4454424381256104,
+ 2.4480133056640625,
+ 2.4505860805511475,
+ 2.453160285949707,
+ 2.455734968185425,
+ 2.4583117961883545,
+ 2.4608895778656006,
+ 2.463468313217163,
+ 2.4660491943359375,
+ 2.468630790710449,
+ 2.4712140560150146,
+ 2.4737985134124756,
+ 2.4763848781585693,
+ 2.4789719581604004,
+ 2.4815609455108643,
+ 2.4841506481170654,
+ 2.4867422580718994,
+ 2.48933482170105,
+ 2.491929292678833,
+ 2.4945242404937744,
+ 2.4971210956573486,
+ 2.4997189044952393,
+ 2.5023181438446045,
+ 2.5049192905426025,
+ 2.507521867752075,
+ 2.510124921798706,
+ 2.512730121612549,
+ 2.515336036682129,
+ 2.5179436206817627,
+ 2.520552396774292,
+ 2.523162603378296,
+ 2.5257744789123535,
+ 2.5283877849578857,
+ 2.5310018062591553,
+ 2.5336177349090576,
+ 2.536234140396118,
+ 2.5388529300689697,
+ 2.5414724349975586,
+ 2.544093608856201,
+ 2.5467159748077393,
+ 2.549339532852173,
+ 2.5519649982452393,
+ 2.5545918941497803,
+ 2.5572192668914795,
+ 2.5598485469818115,
+ 2.562479019165039,
+ 2.565110921859741,
+ 2.567744493484497,
+ 2.570378541946411,
+ 2.573014736175537,
+ 2.5756516456604004,
+ 2.5782904624938965,
+ 2.580930471420288,
+ 2.5835721492767334,
+ 2.586214780807495,
+ 2.5888586044311523,
+ 2.591503858566284,
+ 2.5941505432128906,
+ 2.5967986583709717,
+ 2.5994484424591064,
+ 2.6020994186401367,
+ 2.6047515869140625,
+ 2.607404947280884,
+ 2.6100597381591797,
+ 2.612715721130371,
+ 2.615373373031616,
+ 2.618032217025757,
+ 2.620692253112793,
+ 2.6233537197113037,
+ 2.626016616821289,
+ 2.6286816596984863,
+ 2.631347179412842,
+ 2.634014129638672,
+ 2.6366825103759766,
+ 2.6393520832061768,
+ 2.6420233249664307,
+ 2.64469575881958,
+ 2.647369384765625,
+ 2.6500449180603027,
+ 2.6527209281921387,
+ 2.6553988456726074,
+ 2.6580777168273926,
+ 2.6607584953308105,
+ 2.663440227508545,
+ 2.666123390197754,
+ 2.6688082218170166,
+ 2.6714937686920166,
+ 2.6741812229156494,
+ 2.676870107650757,
+ 2.6795597076416016,
+ 2.682251214981079,
+ 2.684943914413452,
+ 2.6876378059387207,
+ 2.690333127975464,
+ 2.6930301189422607,
+ 2.695727825164795,
+ 2.698427438735962,
+ 2.7011282444000244,
+ 2.7038307189941406,
+ 2.706533193588257,
+ 2.7092387676239014,
+ 2.711944818496704,
+ 2.7146522998809814,
+ 2.7173614501953125,
+ 2.720071315765381,
+ 2.722783088684082,
+ 2.725496530532837,
+ 2.728210210800171,
+ 2.730926275253296,
+ 2.733643054962158,
+ 2.736361265182495,
+ 2.7390809059143066,
+ 2.7418019771575928,
+ 2.7445242404937744,
+ 2.7472479343414307,
+ 2.7499728202819824,
+ 2.752700090408325,
+ 2.755427360534668,
+ 2.7581567764282227,
+ 2.7608871459960938,
+ 2.7636189460754395,
+ 2.7663521766662598,
+ 2.7690865993499756,
+ 2.771822452545166,
+ 2.7745602130889893,
+ 2.7772979736328125,
+ 2.780038595199585,
+ 2.7827799320220947,
+ 2.7855224609375,
+ 2.78826642036438,
+ 2.7910118103027344,
+ 2.7937586307525635,
+ 2.796506404876709,
+ 2.7992560863494873,
+ 2.8020071983337402,
+ 2.8047587871551514,
+ 2.8075125217437744,
+ 2.810267210006714,
+ 2.813023328781128,
+ 2.8157806396484375,
+ 2.818539619445801,
+ 2.8212995529174805,
+ 2.824061870574951,
+ 2.8268239498138428,
+ 2.8295888900756836,
+ 2.8323545455932617,
+ 2.8351213932037354,
+ 2.8378896713256836,
+ 2.8406591415405273,
+ 2.8434300422668457,
+ 2.8462023735046387,
+ 2.8489761352539062,
+ 2.8517513275146484,
+ 2.854527473449707,
+ 2.8573057651519775,
+ 2.8600850105285645,
+ 2.8628652095794678,
+ 2.865647077560425,
+ 2.8684301376342773,
+ 2.8712146282196045,
+ 2.8740007877349854,
+ 2.8767879009246826,
+ 2.8795769214630127,
+ 2.882366418838501,
+ 2.885157823562622,
+ 2.8879504203796387,
+ 2.89074444770813,
+ 2.8935396671295166,
+ 2.896336317062378,
+ 2.8991341590881348,
+ 2.9019343852996826,
+ 2.9047341346740723,
+ 2.9075369834899902,
+ 2.9103403091430664,
+ 2.913145065307617,
+ 2.9159510135650635,
+ 2.9187583923339844,
+ 2.92156720161438,
+ 2.92437744140625,
+ 2.927189350128174,
+ 2.930001974105835,
+ 2.93281626701355,
+ 2.93563175201416,
+ 2.938448905944824,
+ 2.941267251968384,
+ 2.944086790084839,
+ 2.9469077587127686,
+ 2.9497299194335938,
+ 2.9525539875030518,
+ 2.955378532409668,
+ 2.9582056999206543,
+ 2.9610331058502197,
+ 2.963862419128418,
+ 2.9666926860809326,
+ 2.969524621963501,
+ 2.9723575115203857,
+ 2.975192070007324,
+ 2.978027820587158,
+ 2.980865240097046,
+ 2.983703374862671,
+ 2.986544132232666,
+ 2.9893853664398193,
+ 2.992227792739868,
+ 2.9950716495513916,
+ 2.9979169368743896,
+ 3.000763416290283,
+ 3.0036113262176514,
+ 3.006460666656494,
+ 3.009312152862549,
+ 3.0121636390686035,
+ 3.015017509460449,
+ 3.0178720951080322,
+ 3.020728349685669,
+ 3.023585557937622,
+ 3.026444435119629,
+ 3.0293045043945312,
+ 3.0321667194366455,
+ 3.0350286960601807,
+ 3.037893772125244,
+ 3.0407583713531494,
+ 3.043626070022583,
+ 3.046494245529175,
+ 3.049363851547241,
+ 3.052234649658203,
+ 3.0551068782806396,
+ 3.057981014251709,
+ 3.0608558654785156,
+ 3.063732147216797,
+ 3.0666098594665527,
+ 3.0694892406463623,
+ 3.072369337081909,
+ 3.075251340866089,
+ 3.078134298324585,
+ 3.0810189247131348,
+ 3.083904504776001,
+ 3.086791753768921,
+ 3.0896809101104736,
+ 3.0925700664520264,
+ 3.0954620838165283,
+ 3.0983545780181885,
+ 3.101248264312744,
+ 3.1041436195373535,
+ 3.1070401668548584,
+ 3.109938144683838,
+ 3.112837791442871,
+ 3.1157379150390625,
+ 3.118640661239624,
+ 3.121544122695923,
+ 3.124448776245117,
+ 3.127354860305786,
+ 3.1302621364593506,
+ 3.1331708431243896,
+ 3.1360809803009033,
+ 3.1389923095703125,
+ 3.1419055461883545,
+ 3.1448192596435547,
+ 3.147735595703125,
+ 3.1506524085998535,
+ 3.1535706520080566,
+ 3.1564900875091553,
+ 3.1594109535217285,
+ 3.1623332500457764,
+ 3.165257692337036,
+ 3.1681816577911377,
+ 3.1711089611053467,
+ 3.1740360260009766,
+ 3.1769649982452393,
+ 3.1798958778381348,
+ 3.1828272342681885,
+ 3.185760498046875,
+ 3.1886954307556152,
+ 3.1916308403015137,
+ 3.194568634033203,
+ 3.1975061893463135,
+ 3.200446844100952,
+ 3.203387975692749,
+ 3.2063305377960205,
+ 3.2092742919921875,
+ 3.212219476699829,
+ 3.2151660919189453,
+ 3.2181143760681152,
+ 3.2210633754730225,
+ 3.2240142822265625,
+ 3.226966381072998,
+ 3.229919672012329,
+ 3.232874631881714,
+ 3.235830545425415,
+ 3.23878812789917,
+ 3.241746664047241,
+ 3.244706869125366,
+ 3.247668981552124,
+ 3.2506308555603027,
+ 3.2535958290100098,
+ 3.256561279296875,
+ 3.259528160095215,
+ 3.26249623298645,
+ 3.26546573638916,
+ 3.2684366703033447,
+ 3.271409034729004,
+ 3.2743828296661377,
+ 3.277357339859009,
+ 3.280333995819092,
+ 3.2833120822906494,
+ 3.2862911224365234,
+ 3.289271354675293,
+ 3.292253017425537,
+ 3.295236110687256,
+ 3.29822039604187,
+ 3.301206588745117,
+ 3.3041932582855225,
+ 3.3071820735931396,
+ 3.3101718425750732,
+ 3.3131635189056396,
+ 3.3161559104919434,
+ 3.3191492557525635,
+ 3.3221449851989746,
+ 3.325141429901123,
+ 3.328139305114746,
+ 3.3311386108398438,
+ 3.334139108657837,
+ 3.337141990661621,
+ 3.3401453495025635,
+ 3.343149423599243,
+ 3.3461554050445557,
+ 3.349163293838501,
+ 3.3521718978881836,
+ 3.355181932449341,
+ 3.3581933975219727,
+ 3.3612060546875,
+ 3.364220142364502,
+ 3.3672356605529785,
+ 3.370253324508667,
+ 3.3732714653015137,
+ 3.376291036605835,
+ 3.3793118000030518,
+ 3.382333993911743,
+ 3.385357618331909,
+ 3.3883824348449707,
+ 3.391409158706665,
+ 3.3944365978240967,
+ 3.397465705871582,
+ 3.400496006011963,
+ 3.4035279750823975,
+ 3.4065611362457275,
+ 3.409595489501953,
+ 3.412631034851074,
+ 3.415668249130249,
+ 3.4187066555023193,
+ 3.421746253967285,
+ 3.424788236618042,
+ 3.427830696105957,
+ 3.4308745861053467,
+ 3.433919668197632,
+ 3.4369661808013916,
+ 3.440014123916626,
+ 3.443063259124756,
+ 3.4461138248443604,
+ 3.4491662979125977,
+ 3.452219009399414,
+ 3.4552736282348633,
+ 3.4583306312561035,
+ 3.461387872695923,
+ 3.464446544647217,
+ 3.4675066471099854,
+ 3.4705679416656494,
+ 3.473630666732788,
+ 3.4766948223114014,
+ 3.4797606468200684,
+ 3.4828274250030518,
+ 3.4858953952789307,
+ 3.4889655113220215,
+ 3.4920363426208496,
+ 3.4951083660125732,
+ 3.4981822967529297,
+ 3.5012567043304443,
+ 3.504333019256592,
+ 3.5074105262756348,
+ 3.5104904174804688,
+ 3.513570785522461,
+ 3.5166523456573486,
+ 3.5197348594665527,
+ 3.522819757461548,
+ 3.5259053707122803,
+ 3.5289924144744873,
+ 3.532081127166748,
+ 3.5351710319519043,
+ 3.538261651992798,
+ 3.541353940963745,
+ 3.5444488525390625,
+ 3.547544002532959,
+ 3.550640344619751,
+ 3.5537381172180176,
+ 3.556837320327759,
+ 3.5599379539489746,
+ 3.563039779663086,
+ 3.56614351272583,
+ 3.5692481994628906,
+ 3.5723540782928467,
+ 3.5754618644714355,
+ 3.578570604324341,
+ 3.5816805362701416,
+ 3.584791898727417,
+ 3.587904930114746,
+ 3.5910186767578125,
+ 3.5941340923309326,
+ 3.5972516536712646,
+ 3.600369691848755,
+ 3.6034891605377197,
+ 3.606610059738159,
+ 3.609732151031494,
+ 3.6128556728363037,
+ 3.615980625152588,
+ 3.6191067695617676,
+ 3.6222352981567383,
+ 3.62536358833313,
+ 3.6284940242767334,
+ 3.6316261291503906,
+ 3.634758949279785,
+ 3.6378931999206543,
+ 3.641028881072998,
+ 3.6441659927368164,
+ 3.6473042964935303,
+ 3.6504440307617188,
+ 3.6535861492156982,
+ 3.6567280292510986,
+ 3.65987229347229,
+ 3.6630170345306396,
+ 3.666163921356201,
+ 3.669311761856079,
+ 3.6724607944488525,
+ 3.675611734390259,
+ 3.6787636280059814,
+ 3.6819164752960205,
+ 3.6850714683532715,
+ 3.688227891921997,
+ 3.691385269165039,
+ 3.6945438385009766,
+ 3.6977038383483887,
+ 3.7008650302886963,
+ 3.7040278911590576,
+ 3.7071919441223145,
+ 3.710358142852783,
+ 3.713524341583252,
+ 3.7166924476623535,
+ 3.7198615074157715,
+ 3.7230331897735596,
+ 3.726205348968506,
+ 3.7293789386749268,
+ 3.732553720474243,
+ 3.735729932785034,
+ 3.7389073371887207,
+ 3.742086410522461,
+ 3.745266914367676,
+ 3.7484490871429443,
+ 3.75163197517395,
+ 3.7548162937164307,
+ 3.7580020427703857,
+ 3.7611889839172363,
+ 3.7643773555755615,
+ 3.7675673961639404,
+ 3.770758628845215,
+ 3.7739508152008057,
+ 3.7771451473236084,
+ 3.7803401947021484,
+ 3.783536672592163,
+ 3.7867345809936523,
+ 3.789933681488037,
+ 3.7931342124938965,
+ 3.7963359355926514,
+ 3.7995402812957764,
+ 3.8027443885803223,
+ 3.805950164794922,
+ 3.809157371520996,
+ 3.812366485595703,
+ 3.8155765533447266,
+ 3.8187878131866455,
+ 3.822000503540039,
+ 3.8252148628234863,
+ 3.828429937362671,
+ 3.831646680831909,
+ 3.834865093231201,
+ 3.8380849361419678,
+ 3.841305732727051,
+ 3.84452748298645,
+ 3.8477513790130615,
+ 3.8509762287139893,
+ 3.8542022705078125,
+ 3.8574302196502686,
+ 3.860659122467041,
+ 3.863889455795288,
+ 3.8671209812164307,
+ 3.870354413986206,
+ 3.873588800430298,
+ 3.876824378967285,
+ 3.8800618648529053,
+ 3.8832995891571045,
+ 3.8865392208099365,
+ 3.8897812366485596,
+ 3.893023729324341,
+ 3.8962669372558594,
+ 3.8995120525360107,
+ 3.902758836746216,
+ 3.9060068130493164,
+ 3.9092557430267334,
+ 3.912506341934204,
+ 3.9157586097717285,
+ 3.9190118312835693,
+ 3.9222660064697266,
+ 3.9255218505859375,
+ 3.9287800788879395,
+ 3.9320385456085205,
+ 3.935297966003418,
+ 3.9385597705841064,
+ 3.9418225288391113,
+ 3.9450864791870117,
+ 3.9483518600463867,
+ 3.9516189098358154,
+ 3.9548871517181396,
+ 3.9581563472747803,
+ 3.961427688598633,
+ 3.9646997451782227,
+ 3.967973232269287,
+ 3.9712483882904053,
+ 3.974524736404419,
+ 3.97780179977417,
+ 3.981081008911133,
+ 3.9843616485595703,
+ 3.987643241882324,
+ 3.9909257888793945,
+ 3.9942104816436768,
+ 3.9974961280822754,
+ 4.0007829666137695,
+ 4.004071235656738,
+ 4.007361888885498,
+ 4.010653018951416,
+ 4.01394510269165,
+ 4.017238140106201,
+ 4.020534038543701,
+ 4.023830413818359,
+ 4.027128219604492,
+ 4.0304274559021,
+ 4.033727645874023,
+ 4.03702974319458,
+ 4.040332794189453,
+ 4.043638229370117,
+ 4.0469441413879395,
+ 4.050251483917236,
+ 4.053560256958008,
+ 4.056869983673096,
+ 4.060181140899658,
+ 4.063493728637695,
+ 4.066807746887207,
+ 4.070123195648193,
+ 4.073440074920654,
+ 4.076758861541748,
+ 4.080078125,
+ 4.083398818969727,
+ 4.086720943450928,
+ 4.0900444984436035,
+ 4.093369483947754,
+ 4.096695423126221,
+ 4.1000237464904785,
+ 4.1033525466918945,
+ 4.106681823730469,
+ 4.110013484954834,
+ 4.11334753036499,
+ 4.1166815757751465,
+ 4.120017051696777,
+ 4.123353958129883,
+ 4.126692295074463,
+ 4.130032062530518,
+ 4.133372783660889,
+ 4.136716365814209,
+ 4.140059947967529,
+ 4.143404960632324,
+ 4.146751403808594,
+ 4.150099277496338,
+ 4.153448104858398,
+ 4.156798839569092,
+ 4.160150527954102,
+ 4.163503646850586,
+ 4.166858196258545,
+ 4.1702141761779785,
+ 4.173572063446045,
+ 4.176930904388428,
+ 4.180290699005127,
+ 4.183651924133301,
+ 4.187014579772949,
+ 4.190378665924072,
+ 4.193743705749512,
+ 4.1971116065979,
+ 4.200479507446289,
+ 4.203847885131836,
+ 4.20721960067749,
+ 4.210591793060303,
+ 4.213964939117432,
+ 4.217339992523193,
+ 4.2207159996032715,
+ 4.224093437194824,
+ 4.227472305297852,
+ 4.2308526039123535,
+ 4.234234809875488,
+ 4.2376179695129395,
+ 4.241002082824707,
+ 4.244387626647949,
+ 4.247774600982666,
+ 4.251163005828857,
+ 4.254552364349365,
+ 4.257943630218506,
+ 4.261336803436279,
+ 4.2647294998168945,
+ 4.268125534057617,
+ 4.27152156829834,
+ 4.274919509887695,
+ 4.278318405151367,
+ 4.281719207763672,
+ 4.285120964050293,
+ 4.288524150848389,
+ 4.291929244995117,
+ 4.295335292816162,
+ 4.298742294311523,
+ 4.302151203155518,
+ 4.305561065673828,
+ 4.308972358703613,
+ 4.312384605407715,
+ 4.315799713134766,
+ 4.3192138671875,
+ 4.322630405426025,
+ 4.326048374176025,
+ 4.329468727111816,
+ 4.332889556884766,
+ 4.3363118171691895,
+ 4.33973503112793,
+ 4.3431596755981445,
+ 4.346585750579834,
+ 4.350013256072998,
+ 4.353443145751953,
+ 4.356873512268066,
+ 4.360304832458496,
+ 4.363736629486084,
+ 4.367171764373779,
+ 4.370607376098633,
+ 4.374044418334961,
+ 4.3774824142456055,
+ 4.380922317504883,
+ 4.384363174438477,
+ 4.387806415557861,
+ 4.391250133514404,
+ 4.394695281982422,
+ 4.398141384124756,
+ 4.401589393615723,
+ 4.405038356781006,
+ 4.408488750457764,
+ 4.4119415283203125,
+ 4.4153947830200195,
+ 4.418848037719727,
+ 4.422303676605225,
+ 4.425762176513672,
+ 4.429220676422119,
+ 4.432680606842041,
+ 4.436141490936279,
+ 4.43960428237915,
+ 4.443068027496338,
+ 4.446533203125,
+ 4.449999809265137,
+ 4.4534687995910645,
+ 4.45693826675415,
+ 4.460409164428711,
+ 4.463881015777588,
+ 4.4673542976379395,
+ 4.470829010009766,
+ 4.474305152893066,
+ 4.477782726287842,
+ 4.481261253356934,
+ 4.484741687774658,
+ 4.488224029541016,
+ 4.491706848144531,
+ 4.4951910972595215,
+ 4.498676776885986,
+ 4.502163410186768,
+ 4.505651950836182,
+ 4.509141445159912,
+ 4.512633323669434,
+ 4.516125679016113,
+ 4.519618034362793,
+ 4.523114204406738,
+ 4.526610374450684,
+ 4.530108451843262,
+ 4.533607482910156,
+ 4.537107467651367,
+ 4.540609359741211,
+ 4.544112682342529,
+ 4.547616958618164,
+ 4.55112361907959,
+ 4.554630756378174,
+ 4.558139324188232,
+ 4.561649322509766,
+ 4.565160274505615,
+ 4.568673133850098,
+ 4.5721869468688965,
+ 4.57570219039917,
+ 4.579218864440918,
+ 4.582736968994141,
+ 4.586256980895996,
+ 4.589777946472168,
+ 4.593299865722656,
+ 4.596823215484619,
+ 4.600347995758057,
+ 4.6038737297058105,
+ 4.607401371002197,
+ 4.610930919647217,
+ 4.614461421966553,
+ 4.617992877960205,
+ 4.621525287628174,
+ 4.625059604644775,
+ 4.628593921661377,
+ 4.632132053375244,
+ 4.635670185089111,
+ 4.639209747314453,
+ 4.642751693725586,
+ 4.6462931632995605,
+ 4.649836540222168,
+ 4.653382778167725,
+ 4.656929016113281,
+ 4.6604766845703125,
+ 4.664025783538818,
+ 4.667575836181641,
+ 4.671127796173096,
+ 4.674680709838867,
+ 4.6782355308532715,
+ 4.681791305541992,
+ 4.685349464416504,
+ 4.688906669616699,
+ 4.69246768951416,
+ 4.696028709411621,
+ 4.699591159820557,
+ 4.703155040740967,
+ 4.706721305847168,
+ 4.710287094116211,
+ 4.713855743408203,
+ 4.717424392700195,
+ 4.720995903015137,
+ 4.724567890167236,
+ 4.7281413078308105,
+ 4.731715679168701,
+ 4.735292911529541,
+ 4.7388691902160645,
+ 4.742447853088379,
+ 4.746027946472168,
+ 4.749609470367432,
+ 4.753193378448486,
+ 4.756777763366699,
+ 4.7603631019592285,
+ 4.763949871063232,
+ 4.767538070678711,
+ 4.7711286544799805,
+ 4.774718761444092,
+ 4.778310775756836,
+ 4.781904697418213,
+ 4.785500526428223,
+ 4.789095878601074,
+ 4.792693614959717,
+ 4.796293258666992,
+ 4.799893856048584,
+ 4.803495407104492,
+ 4.80709981918335,
+ 4.810702800750732,
+ 4.814309597015381,
+ 4.817915916442871,
+ 4.821525573730469,
+ 4.825135231018066,
+ 4.828746318817139,
+ 4.832359790802002,
+ 4.835973739624023,
+ 4.839588165283203,
+ 4.843204498291016,
+ 4.846823692321777,
+ 4.850442886352539,
+ 4.854063510894775,
+ 4.857684135437012,
+ 4.861308574676514,
+ 4.864933490753174,
+ 4.86855936050415,
+ 4.872187614440918,
+ 4.875815391540527,
+ 4.879445552825928,
+ 4.883078098297119,
+ 4.8867106437683105,
+ 4.89034366607666,
+ 4.893980503082275,
+ 4.897617340087891,
+ 4.9012556076049805,
+ 4.904894828796387,
+ 4.908535957336426,
+ 4.912178039550781,
+ 4.915822505950928,
+ 4.919466495513916,
+ 4.923113822937012,
+ 4.926761627197266,
+ 4.930410385131836,
+ 4.934061050415039,
+ 4.937713623046875,
+ 4.941365718841553,
+ 4.945021152496338,
+ 4.948677062988281,
+ 4.952333927154541,
+ 4.955991268157959,
+ 4.959651947021484,
+ 4.963313102722168,
+ 4.966975688934326,
+ 4.970639705657959,
+ 4.974304676055908,
+ 4.977972507476807,
+ 4.981639385223389,
+ 4.985309600830078,
+ 4.988980293273926,
+ 4.992652416229248,
+ 4.996325492858887
+ ],
+ "xaxis": "x3",
+ "yaxis": "y3"
+ },
+ {
+ "nbinsx": 50,
+ "opacity": 0.7,
+ "type": "histogram",
+ "x": [
+ 2,
+ 2.001833438873291,
+ 2.0036685466766357,
+ 2.005505323410034,
+ 2.0073437690734863,
+ 2.009183883666992,
+ 2.011025905609131,
+ 2.012869119644165,
+ 2.014714479446411,
+ 2.016561508178711,
+ 2.0184099674224854,
+ 2.0202603340148926,
+ 2.0221123695373535,
+ 2.023966073989868,
+ 2.0258214473724365,
+ 2.0276784896850586,
+ 2.0295372009277344,
+ 2.031397819519043,
+ 2.033259868621826,
+ 2.0351240634918213,
+ 2.036989688873291,
+ 2.0388569831848145,
+ 2.0407259464263916,
+ 2.0425965785980225,
+ 2.044469118118286,
+ 2.0463433265686035,
+ 2.0482192039489746,
+ 2.0500967502593994,
+ 2.051976203918457,
+ 2.0538573265075684,
+ 2.0557401180267334,
+ 2.057624340057373,
+ 2.0595107078552246,
+ 2.06139874458313,
+ 2.063288450241089,
+ 2.0651798248291016,
+ 2.067073106765747,
+ 2.0689680576324463,
+ 2.070864677429199,
+ 2.072763204574585,
+ 2.0746631622314453,
+ 2.0765652656555176,
+ 2.0784685611724854,
+ 2.080374002456665,
+ 2.0822811126708984,
+ 2.0841898918151855,
+ 2.0861005783081055,
+ 2.088012933731079,
+ 2.0899269580841064,
+ 2.0918428897857666,
+ 2.0937604904174805,
+ 2.095679759979248,
+ 2.0976009368896484,
+ 2.0995237827301025,
+ 2.1014485359191895,
+ 2.10337495803833,
+ 2.1053032875061035,
+ 2.1072332859039307,
+ 2.1091647148132324,
+ 2.111098289489746,
+ 2.1130335330963135,
+ 2.1149706840515137,
+ 2.1169095039367676,
+ 2.118849992752075,
+ 2.1207923889160156,
+ 2.122736692428589,
+ 2.124682664871216,
+ 2.1266300678253174,
+ 2.128579616546631,
+ 2.130530834197998,
+ 2.132483959197998,
+ 2.134438991546631,
+ 2.1363956928253174,
+ 2.1383540630340576,
+ 2.1403143405914307,
+ 2.1422765254974365,
+ 2.144240379333496,
+ 2.1462059020996094,
+ 2.1481733322143555,
+ 2.1501426696777344,
+ 2.152113676071167,
+ 2.1540863513946533,
+ 2.1560611724853516,
+ 2.1580376625061035,
+ 2.1600160598754883,
+ 2.1619961261749268,
+ 2.163978099822998,
+ 2.165961742401123,
+ 2.167947292327881,
+ 2.1699347496032715,
+ 2.171923875808716,
+ 2.173914909362793,
+ 2.175907850265503,
+ 2.1779024600982666,
+ 2.179898977279663,
+ 2.1818971633911133,
+ 2.1838972568511963,
+ 2.185899496078491,
+ 2.1879031658172607,
+ 2.189908981323242,
+ 2.1919164657592773,
+ 2.1939258575439453,
+ 2.195936918258667,
+ 2.1979501247406006,
+ 2.199965000152588,
+ 2.201981544494629,
+ 2.204000234603882,
+ 2.2060208320617676,
+ 2.208043098449707,
+ 2.2100670337677,
+ 2.2120931148529053,
+ 2.214120864868164,
+ 2.2161505222320557,
+ 2.218182325363159,
+ 2.2202155590057373,
+ 2.2222509384155273,
+ 2.22428822517395,
+ 2.2263271808624268,
+ 2.228368043899536,
+ 2.2304108142852783,
+ 2.2324554920196533,
+ 2.234502077102661,
+ 2.2365503311157227,
+ 2.238600492477417,
+ 2.2406527996063232,
+ 2.242706775665283,
+ 2.244762659072876,
+ 2.2468204498291016,
+ 2.248880386352539,
+ 2.250941753387451,
+ 2.253005266189575,
+ 2.255070686340332,
+ 2.2571377754211426,
+ 2.259207010269165,
+ 2.261277914047241,
+ 2.2633509635925293,
+ 2.26542592048645,
+ 2.267502546310425,
+ 2.2695813179016113,
+ 2.2716617584228516,
+ 2.2737441062927246,
+ 2.2758283615112305,
+ 2.2779147624969482,
+ 2.2800028324127197,
+ 2.2820932865142822,
+ 2.2841851711273193,
+ 2.2862789630889893,
+ 2.288374900817871,
+ 2.2904727458953857,
+ 2.292572259902954,
+ 2.2946739196777344,
+ 2.2967774868011475,
+ 2.2988831996917725,
+ 2.300990581512451,
+ 2.3030998706817627,
+ 2.305211067199707,
+ 2.3073244094848633,
+ 2.3094394207000732,
+ 2.311556577682495,
+ 2.3136754035949707,
+ 2.3157966136932373,
+ 2.3179194927215576,
+ 2.32004451751709,
+ 2.322171211242676,
+ 2.3242998123168945,
+ 2.326430559158325,
+ 2.3285632133483887,
+ 2.330698013305664,
+ 2.332834482192993,
+ 2.334972858428955,
+ 2.337113618850708,
+ 2.3392558097839355,
+ 2.341400384902954,
+ 2.3435468673706055,
+ 2.3456952571868896,
+ 2.3478455543518066,
+ 2.3499977588653564,
+ 2.352151870727539,
+ 2.3543083667755127,
+ 2.356466293334961,
+ 2.3586268424987793,
+ 2.3607888221740723,
+ 2.362952947616577,
+ 2.365119218826294,
+ 2.3672873973846436,
+ 2.369457483291626,
+ 2.371629476547241,
+ 2.3738036155700684,
+ 2.3759796619415283,
+ 2.3781578540802,
+ 2.380337953567505,
+ 2.3825199604034424,
+ 2.3847038745880127,
+ 2.386890172958374,
+ 2.389078140258789,
+ 2.391268253326416,
+ 2.393460512161255,
+ 2.3956544399261475,
+ 2.397850513458252,
+ 2.4000487327575684,
+ 2.4022488594055176,
+ 2.4044508934020996,
+ 2.4066553115844727,
+ 2.4088613986968994,
+ 2.411069631576538,
+ 2.4132800102233887,
+ 2.415492296218872,
+ 2.4177064895629883,
+ 2.4199228286743164,
+ 2.4221413135528564,
+ 2.4243617057800293,
+ 2.426584005355835,
+ 2.4288084506988525,
+ 2.431035041809082,
+ 2.4332635402679443,
+ 2.4354941844940186,
+ 2.4377267360687256,
+ 2.4399616718292236,
+ 2.4421985149383545,
+ 2.444437265396118,
+ 2.4466779232025146,
+ 2.448920726776123,
+ 2.4511656761169434,
+ 2.4534127712249756,
+ 2.4556617736816406,
+ 2.4579129219055176,
+ 2.4601662158966064,
+ 2.462421417236328,
+ 2.4646787643432617,
+ 2.4669382572174072,
+ 2.4691996574401855,
+ 2.4714629650115967,
+ 2.473728895187378,
+ 2.475996494293213,
+ 2.4782662391662598,
+ 2.4805381298065186,
+ 2.48281192779541,
+ 2.4850881099700928,
+ 2.487366199493408,
+ 2.4896464347839355,
+ 2.4919285774230957,
+ 2.494213104248047,
+ 2.496499538421631,
+ 2.4987881183624268,
+ 2.5010786056518555,
+ 2.503371477127075,
+ 2.5056662559509277,
+ 2.5079634189605713,
+ 2.5102622509002686,
+ 2.512563705444336,
+ 2.514866828918457,
+ 2.51717209815979,
+ 2.519479751586914,
+ 2.52178955078125,
+ 2.5241012573242188,
+ 2.5264151096343994,
+ 2.528730869293213,
+ 2.5310492515563965,
+ 2.533369302749634,
+ 2.535691738128662,
+ 2.5380163192749023,
+ 2.5403428077697754,
+ 2.5426716804504395,
+ 2.5450026988983154,
+ 2.547335624694824,
+ 2.549670696258545,
+ 2.5520079135894775,
+ 2.554347515106201,
+ 2.5566890239715576,
+ 2.559032917022705,
+ 2.5613789558410645,
+ 2.5637266635894775,
+ 2.5660769939422607,
+ 2.5684292316436768,
+ 2.570783853530884,
+ 2.5731403827667236,
+ 2.5754995346069336,
+ 2.5778603553771973,
+ 2.580223798751831,
+ 2.5825886726379395,
+ 2.584956169128418,
+ 2.5873258113861084,
+ 2.58969783782959,
+ 2.592071771621704,
+ 2.5944480895996094,
+ 2.5968263149261475,
+ 2.5992069244384766,
+ 2.6015896797180176,
+ 2.6039745807647705,
+ 2.6063616275787354,
+ 2.608750820159912,
+ 2.61114239692688,
+ 2.6135358810424805,
+ 2.615931987762451,
+ 2.6183300018310547,
+ 2.62073016166687,
+ 2.6231327056884766,
+ 2.625537157058716,
+ 2.627944231033325,
+ 2.6303532123565674,
+ 2.6327643394470215,
+ 2.6351780891418457,
+ 2.6375935077667236,
+ 2.6400115489959717,
+ 2.6424317359924316,
+ 2.6448538303375244,
+ 2.6472787857055664,
+ 2.649705410003662,
+ 2.652134656906128,
+ 2.6545655727386475,
+ 2.656999111175537,
+ 2.6594347953796387,
+ 2.661872625350952,
+ 2.6643130779266357,
+ 2.666755437850952,
+ 2.6691999435424805,
+ 2.6716468334198,
+ 2.674095869064331,
+ 2.6765475273132324,
+ 2.6790008544921875,
+ 2.6814568042755127,
+ 2.68391489982605,
+ 2.686375379562378,
+ 2.688838005065918,
+ 2.691303014755249,
+ 2.693769931793213,
+ 2.696239471435547,
+ 2.6987109184265137,
+ 2.7011852264404297,
+ 2.7036612033843994,
+ 2.70613956451416,
+ 2.708620548248291,
+ 2.7111034393310547,
+ 2.7135889530181885,
+ 2.716076374053955,
+ 2.718566417694092,
+ 2.7210583686828613,
+ 2.723552703857422,
+ 2.7260496616363525,
+ 2.728548526763916,
+ 2.7310500144958496,
+ 2.733553409576416,
+ 2.7360594272613525,
+ 2.7385671138763428,
+ 2.7410778999328613,
+ 2.7435903549194336,
+ 2.746105670928955,
+ 2.7486228942871094,
+ 2.751142978668213,
+ 2.75366473197937,
+ 2.7561888694763184,
+ 2.7587156295776367,
+ 2.761244535446167,
+ 2.763775587081909,
+ 2.7663094997406006,
+ 2.768845558166504,
+ 2.771383762359619,
+ 2.7739243507385254,
+ 2.7764670848846436,
+ 2.779012680053711,
+ 2.781559944152832,
+ 2.7841098308563232,
+ 2.7866618633270264,
+ 2.7892162799835205,
+ 2.7917733192443848,
+ 2.794332504272461,
+ 2.7968943119049072,
+ 2.7994580268859863,
+ 2.8020246028900146,
+ 2.804593086242676,
+ 2.807164192199707,
+ 2.80973744392395,
+ 2.8123130798339844,
+ 2.8148913383483887,
+ 2.817471742630005,
+ 2.820054769515991,
+ 2.8226397037506104,
+ 2.8252270221710205,
+ 2.82781720161438,
+ 2.830409288406372,
+ 2.8330042362213135,
+ 2.8356010913848877,
+ 2.838200569152832,
+ 2.8408024311065674,
+ 2.8434064388275146,
+ 2.846013307571411,
+ 2.8486220836639404,
+ 2.851233720779419,
+ 2.8538472652435303,
+ 2.8564634323120117,
+ 2.8590822219848633,
+ 2.8617029190063477,
+ 2.8643264770507812,
+ 2.8669521808624268,
+ 2.8695805072784424,
+ 2.87221097946167,
+ 2.8748438358306885,
+ 2.877479076385498,
+ 2.8801169395446777,
+ 2.8827571868896484,
+ 2.8854000568389893,
+ 2.888044834136963,
+ 2.8906922340393066,
+ 2.8933424949645996,
+ 2.8959946632385254,
+ 2.8986496925354004,
+ 2.901306629180908,
+ 2.9039666652679443,
+ 2.9066286087036133,
+ 2.9092929363250732,
+ 2.9119601249694824,
+ 2.9146294593811035,
+ 2.9173014163970947,
+ 2.919975757598877,
+ 2.9226527214050293,
+ 2.9253318309783936,
+ 2.928013324737549,
+ 2.930697202682495,
+ 2.933384418487549,
+ 2.936073064804077,
+ 2.938764810562134,
+ 2.9414587020874023,
+ 2.944154977798462,
+ 2.9468541145324707,
+ 2.9495556354522705,
+ 2.9522595405578613,
+ 2.954965591430664,
+ 2.957674741744995,
+ 2.960386037826538,
+ 2.963099479675293,
+ 2.965816020965576,
+ 2.9685347080230713,
+ 2.9712560176849365,
+ 2.973979949951172,
+ 2.9767065048217773,
+ 2.9794349670410156,
+ 2.982166051864624,
+ 2.9848997592926025,
+ 2.9876363277435303,
+ 2.990375280380249,
+ 2.9931163787841797,
+ 2.9958600997924805,
+ 2.9986066818237305,
+ 3.0013554096221924,
+ 3.0041069984436035,
+ 3.0068607330322266,
+ 3.0096170902252197,
+ 3.012376308441162,
+ 3.0151374340057373,
+ 3.017901659011841,
+ 3.0206682682037354,
+ 3.023437023162842,
+ 3.0262088775634766,
+ 3.0289828777313232,
+ 3.031759738922119,
+ 3.034538984298706,
+ 3.037320613861084,
+ 3.040104866027832,
+ 3.0428919792175293,
+ 3.0456814765930176,
+ 3.048473358154297,
+ 3.0512678623199463,
+ 3.054065227508545,
+ 3.0568647384643555,
+ 3.0596671104431152,
+ 3.062471866607666,
+ 3.065279245376587,
+ 3.068089246749878,
+ 3.070901870727539,
+ 3.0737171173095703,
+ 3.0765347480773926,
+ 3.079354763031006,
+ 3.0821778774261475,
+ 3.085003137588501,
+ 3.087831497192383,
+ 3.0906620025634766,
+ 3.0934951305389404,
+ 3.0963311195373535,
+ 3.0991697311401367,
+ 3.102010726928711,
+ 3.104854106903076,
+ 3.1077003479003906,
+ 3.1105494499206543,
+ 3.11340069770813,
+ 3.116255044937134,
+ 3.1191115379333496,
+ 3.1219706535339355,
+ 3.12483286857605,
+ 3.127697229385376,
+ 3.1305646896362305,
+ 3.133434534072876,
+ 3.1363067626953125,
+ 3.1391820907592773,
+ 3.1420600414276123,
+ 3.144940137863159,
+ 3.1478230953216553,
+ 3.1507084369659424,
+ 3.153597116470337,
+ 3.1564881801605225,
+ 3.159381628036499,
+ 3.1622776985168457,
+ 3.1651768684387207,
+ 3.1680781841278076,
+ 3.1709823608398438,
+ 3.173888921737671,
+ 3.1767988204956055,
+ 3.179710865020752,
+ 3.1826255321502686,
+ 3.1855432987213135,
+ 3.1884634494781494,
+ 3.1913864612579346,
+ 3.1943118572235107,
+ 3.1972403526306152,
+ 3.2001712322235107,
+ 3.2031047344207764,
+ 3.2060413360595703,
+ 3.208980083465576,
+ 3.2119216918945312,
+ 3.2148663997650146,
+ 3.217813491821289,
+ 3.2207632064819336,
+ 3.2237155437469482,
+ 3.226670742034912,
+ 3.229628801345825,
+ 3.2325897216796875,
+ 3.2355527877807617,
+ 3.238518714904785,
+ 3.241487741470337,
+ 3.244459629058838,
+ 3.247433662414551,
+ 3.250410318374634,
+ 3.253390312194824,
+ 3.2563726902008057,
+ 3.2593576908111572,
+ 3.262345790863037,
+ 3.265336275100708,
+ 3.268329381942749,
+ 3.2713253498077393,
+ 3.274324417114258,
+ 3.2773263454437256,
+ 3.2803304195404053,
+ 3.283337354660034,
+ 3.2863476276397705,
+ 3.289360284805298,
+ 3.2923755645751953,
+ 3.295393705368042,
+ 3.298414468765259,
+ 3.301438331604004,
+ 3.30446457862854,
+ 3.3074941635131836,
+ 3.310525894165039,
+ 3.3135604858398438,
+ 3.316598415374756,
+ 3.319638729095459,
+ 3.3226819038391113,
+ 3.325727701187134,
+ 3.3287768363952637,
+ 3.3318281173706055,
+ 3.3348822593688965,
+ 3.337939739227295,
+ 3.3409993648529053,
+ 3.344061851501465,
+ 3.347127676010132,
+ 3.350196361541748,
+ 3.3532674312591553,
+ 3.3563411235809326,
+ 3.359417676925659,
+ 3.362497568130493,
+ 3.365579843521118,
+ 3.3686654567718506,
+ 3.371753215789795,
+ 3.374844551086426,
+ 3.3779380321502686,
+ 3.3810346126556396,
+ 3.384134292602539,
+ 3.3872363567352295,
+ 3.390341281890869,
+ 3.393449544906616,
+ 3.3965601921081543,
+ 3.3996739387512207,
+ 3.4027903079986572,
+ 3.405909538269043,
+ 3.409032106399536,
+ 3.4121572971343994,
+ 3.415285110473633,
+ 3.4184157848358154,
+ 3.4215493202209473,
+ 3.4246866703033447,
+ 3.427825927734375,
+ 3.4309680461883545,
+ 3.434113025665283,
+ 3.4372613430023193,
+ 3.4404122829437256,
+ 3.443565845489502,
+ 3.446722984313965,
+ 3.4498822689056396,
+ 3.453045129776001,
+ 3.4562103748321533,
+ 3.459378957748413,
+ 3.462550163269043,
+ 3.465724229812622,
+ 3.4689009189605713,
+ 3.472081184387207,
+ 3.475264310836792,
+ 3.478450059890747,
+ 3.4816386699676514,
+ 3.484830141067505,
+ 3.488024950027466,
+ 3.4912221431732178,
+ 3.4944229125976562,
+ 3.4976260662078857,
+ 3.5008327960968018,
+ 3.504041910171509,
+ 3.507254123687744,
+ 3.5104691982269287,
+ 3.5136871337890625,
+ 3.5169084072113037,
+ 3.520132303237915,
+ 3.5233592987060547,
+ 3.5265891551971436,
+ 3.52982234954834,
+ 3.533057928085327,
+ 3.5362966060638428,
+ 3.539538621902466,
+ 3.542782783508301,
+ 3.5460307598114014,
+ 3.549281120300293,
+ 3.5525355339050293,
+ 3.5557916164398193,
+ 3.559051513671875,
+ 3.5623137950897217,
+ 3.565579414367676,
+ 3.568848133087158,
+ 3.572119951248169,
+ 3.57539439201355,
+ 3.578671932220459,
+ 3.5819528102874756,
+ 3.585236072540283,
+ 3.5885231494903564,
+ 3.5918126106262207,
+ 3.595104932785034,
+ 3.598400831222534,
+ 3.6016998291015625,
+ 3.605001449584961,
+ 3.6083059310913086,
+ 3.6116139888763428,
+ 3.614924192428589,
+ 3.618238687515259,
+ 3.6215555667877197,
+ 3.624875545501709,
+ 3.6281979084014893,
+ 3.6315243244171143,
+ 3.6348536014556885,
+ 3.6381850242614746,
+ 3.6415205001831055,
+ 3.6448590755462646,
+ 3.648200035095215,
+ 3.6515438556671143,
+ 3.6548914909362793,
+ 3.6582422256469727,
+ 3.6615960597991943,
+ 3.664952039718628,
+ 3.6683120727539062,
+ 3.671674966812134,
+ 3.6750407218933105,
+ 3.6784095764160156,
+ 3.681781768798828,
+ 3.685157299041748,
+ 3.688534736633301,
+ 3.6919164657592773,
+ 3.695300579071045,
+ 3.698688507080078,
+ 3.7020788192749023,
+ 3.705472946166992,
+ 3.708869457244873,
+ 3.7122693061828613,
+ 3.715672731399536,
+ 3.71907901763916,
+ 3.7224881649017334,
+ 3.725900411605835,
+ 3.729316473007202,
+ 3.7327349185943604,
+ 3.736156940460205,
+ 3.739581823348999,
+ 3.7430098056793213,
+ 3.746441125869751,
+ 3.749875545501709,
+ 3.7533133029937744,
+ 3.75675368309021,
+ 3.760197401046753,
+ 3.7636446952819824,
+ 3.767094850540161,
+ 3.7705483436584473,
+ 3.7740046977996826,
+ 3.7774641513824463,
+ 3.7809271812438965,
+ 3.784393072128296,
+ 3.787862539291382,
+ 3.791334390640259,
+ 3.7948100566864014,
+ 3.7982890605926514,
+ 3.8017709255218506,
+ 3.805255889892578,
+ 3.808744430541992,
+ 3.8122363090515137,
+ 3.815730333328247,
+ 3.819228410720825,
+ 3.8227298259735107,
+ 3.8262341022491455,
+ 3.8297414779663086,
+ 3.833252429962158,
+ 3.8367667198181152,
+ 3.8402836322784424,
+ 3.843803882598877,
+ 3.847327470779419,
+ 3.8508546352386475,
+ 3.854384422302246,
+ 3.8579182624816895,
+ 3.861454486846924,
+ 3.8649942874908447,
+ 3.868537187576294,
+ 3.8720836639404297,
+ 3.875633478164673,
+ 3.8791861534118652,
+ 3.882742166519165,
+ 3.8863017559051514,
+ 3.889864206314087,
+ 3.893429756164551,
+ 3.8969993591308594,
+ 3.900571584701538,
+ 3.9041473865509033,
+ 3.907726287841797,
+ 3.911308765411377,
+ 3.9148941040039062,
+ 3.918482780456543,
+ 3.9220752716064453,
+ 3.925670862197876,
+ 3.929269313812256,
+ 3.932871103286743,
+ 3.936476707458496,
+ 3.9400851726531982,
+ 3.943696975708008,
+ 3.9473118782043457,
+ 3.9509313106536865,
+ 3.954552412033081,
+ 3.9581780433654785,
+ 3.961805820465088,
+ 3.9654383659362793,
+ 3.9690732955932617,
+ 3.9727115631103516,
+ 3.976353168487549,
+ 3.97999906539917,
+ 3.983647584915161,
+ 3.9872992038726807,
+ 3.9909541606903076,
+ 3.9946129322052,
+ 3.998274803161621,
+ 4.00193977355957,
+ 4.005608558654785,
+ 4.009281158447266,
+ 4.012956142425537,
+ 4.016634464263916,
+ 4.020317077636719,
+ 4.0240020751953125,
+ 4.027690887451172,
+ 4.031383514404297,
+ 4.035079479217529,
+ 4.038778305053711,
+ 4.04248046875,
+ 4.046186447143555,
+ 4.049895286560059,
+ 4.053608417510986,
+ 4.057323932647705,
+ 4.061043739318848,
+ 4.0647664070129395,
+ 4.068492412567139,
+ 4.072221755981445,
+ 4.075955390930176,
+ 4.079691410064697,
+ 4.083431243896484,
+ 4.087174892425537,
+ 4.090921878814697,
+ 4.094671249389648,
+ 4.098425388336182,
+ 4.102182388305664,
+ 4.105942726135254,
+ 4.109706878662109,
+ 4.113474369049072,
+ 4.117245197296143,
+ 4.12101936340332,
+ 4.124797344207764,
+ 4.1285786628723145,
+ 4.132363319396973,
+ 4.136151313781738,
+ 4.139942646026611,
+ 4.143738746643066,
+ 4.147536754608154,
+ 4.151339054107666,
+ 4.155144214630127,
+ 4.158953666687012,
+ 4.162765979766846,
+ 4.1665825843811035,
+ 4.170401573181152,
+ 4.174224376678467,
+ 4.178051471710205,
+ 4.181881427764893,
+ 4.185715198516846,
+ 4.189551830291748,
+ 4.193392276763916,
+ 4.19723653793335,
+ 4.201084136962891,
+ 4.204935550689697,
+ 4.208790302276611,
+ 4.212648391723633,
+ 4.21651029586792,
+ 4.2203755378723145,
+ 4.224244594573975,
+ 4.228116989135742,
+ 4.231992721557617,
+ 4.235872745513916,
+ 4.239755153656006,
+ 4.243642330169678,
+ 4.247532367706299,
+ 4.251425743103027,
+ 4.25532341003418,
+ 4.259224891662598,
+ 4.263128280639648,
+ 4.2670369148254395,
+ 4.270948886871338,
+ 4.2748637199401855,
+ 4.278782367706299,
+ 4.282705307006836,
+ 4.2866315841674805,
+ 4.290560245513916,
+ 4.294493675231934,
+ 4.298430919647217,
+ 4.302371025085449,
+ 4.306314945220947,
+ 4.310262203216553,
+ 4.31421422958374,
+ 4.318169116973877,
+ 4.322126865386963,
+ 4.326089382171631,
+ 4.330055236816406,
+ 4.334023952484131,
+ 4.3379974365234375,
+ 4.341973781585693,
+ 4.345954895019531,
+ 4.34993839263916,
+ 4.353926181793213,
+ 4.357917308807373,
+ 4.361912250518799,
+ 4.36591100692749,
+ 4.369913101196289,
+ 4.373919486999512,
+ 4.377928733825684,
+ 4.381942272186279,
+ 4.385959148406982,
+ 4.389980316162109,
+ 4.3940043449401855,
+ 4.3980326652526855,
+ 4.402064323425293,
+ 4.406099796295166,
+ 4.4101386070251465,
+ 4.414181232452393,
+ 4.4182281494140625,
+ 4.422277927398682,
+ 4.426332473754883,
+ 4.430389881134033,
+ 4.434451580047607,
+ 4.438516139984131,
+ 4.442584991455078,
+ 4.446657657623291,
+ 4.4507341384887695,
+ 4.454813480377197,
+ 4.458898067474365,
+ 4.462985515594482,
+ 4.467076778411865,
+ 4.4711713790893555,
+ 4.4752702713012695,
+ 4.479372978210449,
+ 4.483478546142578,
+ 4.487588882446289,
+ 4.491703033447266,
+ 4.495820999145508,
+ 4.499941825866699,
+ 4.5040669441223145,
+ 4.5081963539123535,
+ 4.512328147888184,
+ 4.516465187072754,
+ 4.52060604095459,
+ 4.524750232696533,
+ 4.528897285461426,
+ 4.533049583435059,
+ 4.537204742431641,
+ 4.541363716125488,
+ 4.545526504516602,
+ 4.549694061279297,
+ 4.553864479064941,
+ 4.558039665222168,
+ 4.562217712402344,
+ 4.566400051116943,
+ 4.57058572769165,
+ 4.574775695800781,
+ 4.578969478607178,
+ 4.58316707611084,
+ 4.587368965148926,
+ 4.591573715209961,
+ 4.595783233642578,
+ 4.599996089935303,
+ 4.604213237762451,
+ 4.608433723449707,
+ 4.612658500671387,
+ 4.616887092590332,
+ 4.621119022369385,
+ 4.6253557205200195,
+ 4.629595756530762,
+ 4.633840084075928,
+ 4.638086795806885,
+ 4.642339706420898,
+ 4.646595001220703,
+ 4.650854587554932,
+ 4.655117511749268,
+ 4.659385681152344,
+ 4.663657188415527,
+ 4.66793155670166,
+ 4.672211170196533,
+ 4.676494598388672,
+ 4.680781364440918,
+ 4.68507194519043,
+ 4.689366340637207,
+ 4.693665504455566,
+ 4.69796895980835,
+ 4.702274799346924,
+ 4.70658540725708,
+ 4.71090030670166,
+ 4.715219020843506,
+ 4.719541072845459,
+ 4.723867893218994,
+ 4.728198528289795,
+ 4.732532024383545,
+ 4.736870765686035,
+ 4.741212844848633,
+ 4.7455596923828125,
+ 4.7499098777771,
+ 4.7542643547058105,
+ 4.758622646331787,
+ 4.762984275817871,
+ 4.767351150512695,
+ 4.771721839904785,
+ 4.776095867156982,
+ 4.780473709106445,
+ 4.78485631942749,
+ 4.789242744445801,
+ 4.793633460998535,
+ 4.798027515411377,
+ 4.802426338195801,
+ 4.806828498840332,
+ 4.811234474182129,
+ 4.815645694732666,
+ 4.820059776306152,
+ 4.8244781494140625,
+ 4.828900337219238,
+ 4.833327770233154,
+ 4.837758541107178,
+ 4.842193126678467,
+ 4.84663200378418,
+ 4.851075172424316,
+ 4.855522155761719,
+ 4.859972953796387,
+ 4.8644280433654785,
+ 4.868887901306152,
+ 4.873351097106934,
+ 4.877818584442139,
+ 4.882289886474609,
+ 4.886765956878662,
+ 4.891245365142822,
+ 4.895729064941406,
+ 4.900217056274414,
+ 4.904709815979004,
+ 4.909205436706543,
+ 4.913705825805664,
+ 4.918210506439209,
+ 4.9227190017700195,
+ 4.927231311798096,
+ 4.931748390197754,
+ 4.936269760131836,
+ 4.940794944763184,
+ 4.945323944091797,
+ 4.949857711791992,
+ 4.954394817352295,
+ 4.958937168121338,
+ 4.963481903076172,
+ 4.968032360076904,
+ 4.9725871086120605,
+ 4.977145195007324,
+ 4.981707572937012,
+ 4.986274719238281,
+ 4.990845680236816,
+ 4.995420455932617
+ ],
+ "xaxis": "x4",
+ "yaxis": "y4"
+ }
+ ],
+ "layout": {
+ "annotations": [
+ {
+ "font": {
+ "size": 16
+ },
+ "showarrow": false,
+ "text": "Uniform",
+ "x": 0.225,
+ "xanchor": "center",
+ "xref": "paper",
+ "y": 1,
+ "yanchor": "bottom",
+ "yref": "paper"
+ },
+ {
+ "font": {
+ "size": 16
+ },
+ "showarrow": false,
+ "text": "Linear in Disparity",
+ "x": 0.775,
+ "xanchor": "center",
+ "xref": "paper",
+ "y": 1,
+ "yanchor": "bottom",
+ "yref": "paper"
+ },
+ {
+ "font": {
+ "size": 16
+ },
+ "showarrow": false,
+ "text": "Square Root",
+ "x": 0.225,
+ "xanchor": "center",
+ "xref": "paper",
+ "y": 0.45,
+ "yanchor": "bottom",
+ "yref": "paper"
+ },
+ {
+ "font": {
+ "size": 16
+ },
+ "showarrow": false,
+ "text": "Log Sampler",
+ "x": 0.775,
+ "xanchor": "center",
+ "xref": "paper",
+ "y": 0.45,
+ "yanchor": "bottom",
+ "yref": "paper"
+ }
+ ],
+ "height": 700,
+ "hovermode": false,
+ "margin": {
+ "b": 20,
+ "l": 20,
+ "r": 20,
+ "t": 50
+ },
+ "showlegend": false,
+ "template": {
+ "data": {
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "geo": {
+ "bgcolor": "white",
+ "lakecolor": "white",
+ "landcolor": "#E5ECF6",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "white"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "light"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "bgcolor": "#E5ECF6",
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "gridwidth": 2,
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white"
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "gridwidth": 2,
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white"
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "gridwidth": 2,
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "bgcolor": "#E5ECF6",
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "xaxis": {
+ "anchor": "y",
+ "domain": [
+ 0,
+ 0.45
+ ],
+ "matches": "x3",
+ "showticklabels": false
+ },
+ "xaxis2": {
+ "anchor": "y2",
+ "domain": [
+ 0.55,
+ 1
+ ],
+ "matches": "x4",
+ "showticklabels": false
+ },
+ "xaxis3": {
+ "anchor": "y3",
+ "domain": [
+ 0,
+ 0.45
+ ],
+ "title": {
+ "text": "Distance"
+ }
+ },
+ "xaxis4": {
+ "anchor": "y4",
+ "domain": [
+ 0.55,
+ 1
+ ],
+ "title": {
+ "text": "Distance"
+ }
+ },
+ "yaxis": {
+ "anchor": "x",
+ "domain": [
+ 0.55,
+ 1
+ ],
+ "range": [
+ 0,
+ 80
+ ],
+ "title": {
+ "text": "# Samples"
+ }
+ },
+ "yaxis2": {
+ "anchor": "x2",
+ "domain": [
+ 0.55,
+ 1
+ ],
+ "matches": "y",
+ "range": [
+ 0,
+ 80
+ ],
+ "showticklabels": false
+ },
+ "yaxis3": {
+ "anchor": "x3",
+ "domain": [
+ 0,
+ 0.45
+ ],
+ "range": [
+ 0,
+ 80
+ ],
+ "title": {
+ "text": "# Samples"
+ }
+ },
+ "yaxis4": {
+ "anchor": "x4",
+ "domain": [
+ 0,
+ 0.45
+ ],
+ "matches": "y3",
+ "range": [
+ 0,
+ 80
+ ],
+ "showticklabels": false
+ }
+ }
+ },
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# COLLAPSED\n",
+ "import torch\n",
+ "from nerfactory.cameras.rays import RayBundle\n",
+ "from nerfactory.models.modules import ray_sampler\n",
+ "import plotly.graph_objects as go\n",
+ "from plotly.subplots import make_subplots\n",
+ "\n",
+ "\n",
+ "num_samples = 1000\n",
+ "near = 2\n",
+ "far = 5\n",
+ "train_stratified = False\n",
+ "\n",
+ "samplers = [\n",
+ " ray_sampler.UniformSampler,\n",
+ " ray_sampler.LinearDisparitySampler,\n",
+ " ray_sampler.SqrtSampler,\n",
+ " ray_sampler.LogSampler,\n",
+ "]\n",
+ "\n",
+ "fig = make_subplots(\n",
+ " rows=2,\n",
+ " cols=2,\n",
+ " subplot_titles=(\"Uniform\", \"Linear in Disparity\", \"Square Root\", \"Log Sampler\"),\n",
+ " shared_xaxes=True,\n",
+ " shared_yaxes=True,\n",
+ " vertical_spacing=0.1,\n",
+ ")\n",
+ "\n",
+ "for i, Sampler in enumerate(samplers):\n",
+ " sampler = Sampler(num_samples=num_samples, train_stratified=train_stratified)\n",
+ "\n",
+ " ray_bundle = RayBundle(\n",
+ " origins=torch.ones([1, 3]),\n",
+ " directions=torch.ones([1, 3]),\n",
+ " pixel_area=torch.ones([1, 1]),\n",
+ " nears=torch.ones([1, 1]) * near,\n",
+ " fars=torch.ones([1, 1]) * far,\n",
+ " )\n",
+ "\n",
+ " samples = sampler.generate_ray_samples(ray_bundle)\n",
+ "\n",
+ " trace = go.Histogram(x=samples.frustums.starts[0, :, 0], nbinsx=50)\n",
+ " fig.append_trace(trace, i // 2 + 1, i % 2 + 1)\n",
+ "\n",
+ "fig.update_yaxes(title_text=\"# Samples\", row=1, col=1)\n",
+ "fig.update_yaxes(title_text=\"# Samples\", row=2, col=1)\n",
+ "fig.update_xaxes(title_text=\"Distance\", row=2, col=1)\n",
+ "fig.update_xaxes(title_text=\"Distance\", row=2, col=2)\n",
+ "\n",
+ "# Overlay both histograms\n",
+ "fig.update_layout(height=700, hovermode=False, showlegend=False, margin=dict(l=20, r=20, t=50, b=20))\n",
+ "fig.update_yaxes(range=[0, 80])\n",
+ "fig.update_traces(opacity=0.7)\n",
+ "fig.show()"
+ ]
},
{
- "nbinsx": 50,
- "opacity": 0.7,
- "type": "histogram",
- "x": [
- 2,
- 2.001833438873291,
- 2.0036685466766357,
- 2.005505323410034,
- 2.0073437690734863,
- 2.009183883666992,
- 2.011025905609131,
- 2.012869119644165,
- 2.014714479446411,
- 2.016561508178711,
- 2.0184099674224854,
- 2.0202603340148926,
- 2.0221123695373535,
- 2.023966073989868,
- 2.0258214473724365,
- 2.0276784896850586,
- 2.0295372009277344,
- 2.031397819519043,
- 2.033259868621826,
- 2.0351240634918213,
- 2.036989688873291,
- 2.0388569831848145,
- 2.0407259464263916,
- 2.0425965785980225,
- 2.044469118118286,
- 2.0463433265686035,
- 2.0482192039489746,
- 2.0500967502593994,
- 2.051976203918457,
- 2.0538573265075684,
- 2.0557401180267334,
- 2.057624340057373,
- 2.0595107078552246,
- 2.06139874458313,
- 2.063288450241089,
- 2.0651798248291016,
- 2.067073106765747,
- 2.0689680576324463,
- 2.070864677429199,
- 2.072763204574585,
- 2.0746631622314453,
- 2.0765652656555176,
- 2.0784685611724854,
- 2.080374002456665,
- 2.0822811126708984,
- 2.0841898918151855,
- 2.0861005783081055,
- 2.088012933731079,
- 2.0899269580841064,
- 2.0918428897857666,
- 2.0937604904174805,
- 2.095679759979248,
- 2.0976009368896484,
- 2.0995237827301025,
- 2.1014485359191895,
- 2.10337495803833,
- 2.1053032875061035,
- 2.1072332859039307,
- 2.1091647148132324,
- 2.111098289489746,
- 2.1130335330963135,
- 2.1149706840515137,
- 2.1169095039367676,
- 2.118849992752075,
- 2.1207923889160156,
- 2.122736692428589,
- 2.124682664871216,
- 2.1266300678253174,
- 2.128579616546631,
- 2.130530834197998,
- 2.132483959197998,
- 2.134438991546631,
- 2.1363956928253174,
- 2.1383540630340576,
- 2.1403143405914307,
- 2.1422765254974365,
- 2.144240379333496,
- 2.1462059020996094,
- 2.1481733322143555,
- 2.1501426696777344,
- 2.152113676071167,
- 2.1540863513946533,
- 2.1560611724853516,
- 2.1580376625061035,
- 2.1600160598754883,
- 2.1619961261749268,
- 2.163978099822998,
- 2.165961742401123,
- 2.167947292327881,
- 2.1699347496032715,
- 2.171923875808716,
- 2.173914909362793,
- 2.175907850265503,
- 2.1779024600982666,
- 2.179898977279663,
- 2.1818971633911133,
- 2.1838972568511963,
- 2.185899496078491,
- 2.1879031658172607,
- 2.189908981323242,
- 2.1919164657592773,
- 2.1939258575439453,
- 2.195936918258667,
- 2.1979501247406006,
- 2.199965000152588,
- 2.201981544494629,
- 2.204000234603882,
- 2.2060208320617676,
- 2.208043098449707,
- 2.2100670337677,
- 2.2120931148529053,
- 2.214120864868164,
- 2.2161505222320557,
- 2.218182325363159,
- 2.2202155590057373,
- 2.2222509384155273,
- 2.22428822517395,
- 2.2263271808624268,
- 2.228368043899536,
- 2.2304108142852783,
- 2.2324554920196533,
- 2.234502077102661,
- 2.2365503311157227,
- 2.238600492477417,
- 2.2406527996063232,
- 2.242706775665283,
- 2.244762659072876,
- 2.2468204498291016,
- 2.248880386352539,
- 2.250941753387451,
- 2.253005266189575,
- 2.255070686340332,
- 2.2571377754211426,
- 2.259207010269165,
- 2.261277914047241,
- 2.2633509635925293,
- 2.26542592048645,
- 2.267502546310425,
- 2.2695813179016113,
- 2.2716617584228516,
- 2.2737441062927246,
- 2.2758283615112305,
- 2.2779147624969482,
- 2.2800028324127197,
- 2.2820932865142822,
- 2.2841851711273193,
- 2.2862789630889893,
- 2.288374900817871,
- 2.2904727458953857,
- 2.292572259902954,
- 2.2946739196777344,
- 2.2967774868011475,
- 2.2988831996917725,
- 2.300990581512451,
- 2.3030998706817627,
- 2.305211067199707,
- 2.3073244094848633,
- 2.3094394207000732,
- 2.311556577682495,
- 2.3136754035949707,
- 2.3157966136932373,
- 2.3179194927215576,
- 2.32004451751709,
- 2.322171211242676,
- 2.3242998123168945,
- 2.326430559158325,
- 2.3285632133483887,
- 2.330698013305664,
- 2.332834482192993,
- 2.334972858428955,
- 2.337113618850708,
- 2.3392558097839355,
- 2.341400384902954,
- 2.3435468673706055,
- 2.3456952571868896,
- 2.3478455543518066,
- 2.3499977588653564,
- 2.352151870727539,
- 2.3543083667755127,
- 2.356466293334961,
- 2.3586268424987793,
- 2.3607888221740723,
- 2.362952947616577,
- 2.365119218826294,
- 2.3672873973846436,
- 2.369457483291626,
- 2.371629476547241,
- 2.3738036155700684,
- 2.3759796619415283,
- 2.3781578540802,
- 2.380337953567505,
- 2.3825199604034424,
- 2.3847038745880127,
- 2.386890172958374,
- 2.389078140258789,
- 2.391268253326416,
- 2.393460512161255,
- 2.3956544399261475,
- 2.397850513458252,
- 2.4000487327575684,
- 2.4022488594055176,
- 2.4044508934020996,
- 2.4066553115844727,
- 2.4088613986968994,
- 2.411069631576538,
- 2.4132800102233887,
- 2.415492296218872,
- 2.4177064895629883,
- 2.4199228286743164,
- 2.4221413135528564,
- 2.4243617057800293,
- 2.426584005355835,
- 2.4288084506988525,
- 2.431035041809082,
- 2.4332635402679443,
- 2.4354941844940186,
- 2.4377267360687256,
- 2.4399616718292236,
- 2.4421985149383545,
- 2.444437265396118,
- 2.4466779232025146,
- 2.448920726776123,
- 2.4511656761169434,
- 2.4534127712249756,
- 2.4556617736816406,
- 2.4579129219055176,
- 2.4601662158966064,
- 2.462421417236328,
- 2.4646787643432617,
- 2.4669382572174072,
- 2.4691996574401855,
- 2.4714629650115967,
- 2.473728895187378,
- 2.475996494293213,
- 2.4782662391662598,
- 2.4805381298065186,
- 2.48281192779541,
- 2.4850881099700928,
- 2.487366199493408,
- 2.4896464347839355,
- 2.4919285774230957,
- 2.494213104248047,
- 2.496499538421631,
- 2.4987881183624268,
- 2.5010786056518555,
- 2.503371477127075,
- 2.5056662559509277,
- 2.5079634189605713,
- 2.5102622509002686,
- 2.512563705444336,
- 2.514866828918457,
- 2.51717209815979,
- 2.519479751586914,
- 2.52178955078125,
- 2.5241012573242188,
- 2.5264151096343994,
- 2.528730869293213,
- 2.5310492515563965,
- 2.533369302749634,
- 2.535691738128662,
- 2.5380163192749023,
- 2.5403428077697754,
- 2.5426716804504395,
- 2.5450026988983154,
- 2.547335624694824,
- 2.549670696258545,
- 2.5520079135894775,
- 2.554347515106201,
- 2.5566890239715576,
- 2.559032917022705,
- 2.5613789558410645,
- 2.5637266635894775,
- 2.5660769939422607,
- 2.5684292316436768,
- 2.570783853530884,
- 2.5731403827667236,
- 2.5754995346069336,
- 2.5778603553771973,
- 2.580223798751831,
- 2.5825886726379395,
- 2.584956169128418,
- 2.5873258113861084,
- 2.58969783782959,
- 2.592071771621704,
- 2.5944480895996094,
- 2.5968263149261475,
- 2.5992069244384766,
- 2.6015896797180176,
- 2.6039745807647705,
- 2.6063616275787354,
- 2.608750820159912,
- 2.61114239692688,
- 2.6135358810424805,
- 2.615931987762451,
- 2.6183300018310547,
- 2.62073016166687,
- 2.6231327056884766,
- 2.625537157058716,
- 2.627944231033325,
- 2.6303532123565674,
- 2.6327643394470215,
- 2.6351780891418457,
- 2.6375935077667236,
- 2.6400115489959717,
- 2.6424317359924316,
- 2.6448538303375244,
- 2.6472787857055664,
- 2.649705410003662,
- 2.652134656906128,
- 2.6545655727386475,
- 2.656999111175537,
- 2.6594347953796387,
- 2.661872625350952,
- 2.6643130779266357,
- 2.666755437850952,
- 2.6691999435424805,
- 2.6716468334198,
- 2.674095869064331,
- 2.6765475273132324,
- 2.6790008544921875,
- 2.6814568042755127,
- 2.68391489982605,
- 2.686375379562378,
- 2.688838005065918,
- 2.691303014755249,
- 2.693769931793213,
- 2.696239471435547,
- 2.6987109184265137,
- 2.7011852264404297,
- 2.7036612033843994,
- 2.70613956451416,
- 2.708620548248291,
- 2.7111034393310547,
- 2.7135889530181885,
- 2.716076374053955,
- 2.718566417694092,
- 2.7210583686828613,
- 2.723552703857422,
- 2.7260496616363525,
- 2.728548526763916,
- 2.7310500144958496,
- 2.733553409576416,
- 2.7360594272613525,
- 2.7385671138763428,
- 2.7410778999328613,
- 2.7435903549194336,
- 2.746105670928955,
- 2.7486228942871094,
- 2.751142978668213,
- 2.75366473197937,
- 2.7561888694763184,
- 2.7587156295776367,
- 2.761244535446167,
- 2.763775587081909,
- 2.7663094997406006,
- 2.768845558166504,
- 2.771383762359619,
- 2.7739243507385254,
- 2.7764670848846436,
- 2.779012680053711,
- 2.781559944152832,
- 2.7841098308563232,
- 2.7866618633270264,
- 2.7892162799835205,
- 2.7917733192443848,
- 2.794332504272461,
- 2.7968943119049072,
- 2.7994580268859863,
- 2.8020246028900146,
- 2.804593086242676,
- 2.807164192199707,
- 2.80973744392395,
- 2.8123130798339844,
- 2.8148913383483887,
- 2.817471742630005,
- 2.820054769515991,
- 2.8226397037506104,
- 2.8252270221710205,
- 2.82781720161438,
- 2.830409288406372,
- 2.8330042362213135,
- 2.8356010913848877,
- 2.838200569152832,
- 2.8408024311065674,
- 2.8434064388275146,
- 2.846013307571411,
- 2.8486220836639404,
- 2.851233720779419,
- 2.8538472652435303,
- 2.8564634323120117,
- 2.8590822219848633,
- 2.8617029190063477,
- 2.8643264770507812,
- 2.8669521808624268,
- 2.8695805072784424,
- 2.87221097946167,
- 2.8748438358306885,
- 2.877479076385498,
- 2.8801169395446777,
- 2.8827571868896484,
- 2.8854000568389893,
- 2.888044834136963,
- 2.8906922340393066,
- 2.8933424949645996,
- 2.8959946632385254,
- 2.8986496925354004,
- 2.901306629180908,
- 2.9039666652679443,
- 2.9066286087036133,
- 2.9092929363250732,
- 2.9119601249694824,
- 2.9146294593811035,
- 2.9173014163970947,
- 2.919975757598877,
- 2.9226527214050293,
- 2.9253318309783936,
- 2.928013324737549,
- 2.930697202682495,
- 2.933384418487549,
- 2.936073064804077,
- 2.938764810562134,
- 2.9414587020874023,
- 2.944154977798462,
- 2.9468541145324707,
- 2.9495556354522705,
- 2.9522595405578613,
- 2.954965591430664,
- 2.957674741744995,
- 2.960386037826538,
- 2.963099479675293,
- 2.965816020965576,
- 2.9685347080230713,
- 2.9712560176849365,
- 2.973979949951172,
- 2.9767065048217773,
- 2.9794349670410156,
- 2.982166051864624,
- 2.9848997592926025,
- 2.9876363277435303,
- 2.990375280380249,
- 2.9931163787841797,
- 2.9958600997924805,
- 2.9986066818237305,
- 3.0013554096221924,
- 3.0041069984436035,
- 3.0068607330322266,
- 3.0096170902252197,
- 3.012376308441162,
- 3.0151374340057373,
- 3.017901659011841,
- 3.0206682682037354,
- 3.023437023162842,
- 3.0262088775634766,
- 3.0289828777313232,
- 3.031759738922119,
- 3.034538984298706,
- 3.037320613861084,
- 3.040104866027832,
- 3.0428919792175293,
- 3.0456814765930176,
- 3.048473358154297,
- 3.0512678623199463,
- 3.054065227508545,
- 3.0568647384643555,
- 3.0596671104431152,
- 3.062471866607666,
- 3.065279245376587,
- 3.068089246749878,
- 3.070901870727539,
- 3.0737171173095703,
- 3.0765347480773926,
- 3.079354763031006,
- 3.0821778774261475,
- 3.085003137588501,
- 3.087831497192383,
- 3.0906620025634766,
- 3.0934951305389404,
- 3.0963311195373535,
- 3.0991697311401367,
- 3.102010726928711,
- 3.104854106903076,
- 3.1077003479003906,
- 3.1105494499206543,
- 3.11340069770813,
- 3.116255044937134,
- 3.1191115379333496,
- 3.1219706535339355,
- 3.12483286857605,
- 3.127697229385376,
- 3.1305646896362305,
- 3.133434534072876,
- 3.1363067626953125,
- 3.1391820907592773,
- 3.1420600414276123,
- 3.144940137863159,
- 3.1478230953216553,
- 3.1507084369659424,
- 3.153597116470337,
- 3.1564881801605225,
- 3.159381628036499,
- 3.1622776985168457,
- 3.1651768684387207,
- 3.1680781841278076,
- 3.1709823608398438,
- 3.173888921737671,
- 3.1767988204956055,
- 3.179710865020752,
- 3.1826255321502686,
- 3.1855432987213135,
- 3.1884634494781494,
- 3.1913864612579346,
- 3.1943118572235107,
- 3.1972403526306152,
- 3.2001712322235107,
- 3.2031047344207764,
- 3.2060413360595703,
- 3.208980083465576,
- 3.2119216918945312,
- 3.2148663997650146,
- 3.217813491821289,
- 3.2207632064819336,
- 3.2237155437469482,
- 3.226670742034912,
- 3.229628801345825,
- 3.2325897216796875,
- 3.2355527877807617,
- 3.238518714904785,
- 3.241487741470337,
- 3.244459629058838,
- 3.247433662414551,
- 3.250410318374634,
- 3.253390312194824,
- 3.2563726902008057,
- 3.2593576908111572,
- 3.262345790863037,
- 3.265336275100708,
- 3.268329381942749,
- 3.2713253498077393,
- 3.274324417114258,
- 3.2773263454437256,
- 3.2803304195404053,
- 3.283337354660034,
- 3.2863476276397705,
- 3.289360284805298,
- 3.2923755645751953,
- 3.295393705368042,
- 3.298414468765259,
- 3.301438331604004,
- 3.30446457862854,
- 3.3074941635131836,
- 3.310525894165039,
- 3.3135604858398438,
- 3.316598415374756,
- 3.319638729095459,
- 3.3226819038391113,
- 3.325727701187134,
- 3.3287768363952637,
- 3.3318281173706055,
- 3.3348822593688965,
- 3.337939739227295,
- 3.3409993648529053,
- 3.344061851501465,
- 3.347127676010132,
- 3.350196361541748,
- 3.3532674312591553,
- 3.3563411235809326,
- 3.359417676925659,
- 3.362497568130493,
- 3.365579843521118,
- 3.3686654567718506,
- 3.371753215789795,
- 3.374844551086426,
- 3.3779380321502686,
- 3.3810346126556396,
- 3.384134292602539,
- 3.3872363567352295,
- 3.390341281890869,
- 3.393449544906616,
- 3.3965601921081543,
- 3.3996739387512207,
- 3.4027903079986572,
- 3.405909538269043,
- 3.409032106399536,
- 3.4121572971343994,
- 3.415285110473633,
- 3.4184157848358154,
- 3.4215493202209473,
- 3.4246866703033447,
- 3.427825927734375,
- 3.4309680461883545,
- 3.434113025665283,
- 3.4372613430023193,
- 3.4404122829437256,
- 3.443565845489502,
- 3.446722984313965,
- 3.4498822689056396,
- 3.453045129776001,
- 3.4562103748321533,
- 3.459378957748413,
- 3.462550163269043,
- 3.465724229812622,
- 3.4689009189605713,
- 3.472081184387207,
- 3.475264310836792,
- 3.478450059890747,
- 3.4816386699676514,
- 3.484830141067505,
- 3.488024950027466,
- 3.4912221431732178,
- 3.4944229125976562,
- 3.4976260662078857,
- 3.5008327960968018,
- 3.504041910171509,
- 3.507254123687744,
- 3.5104691982269287,
- 3.5136871337890625,
- 3.5169084072113037,
- 3.520132303237915,
- 3.5233592987060547,
- 3.5265891551971436,
- 3.52982234954834,
- 3.533057928085327,
- 3.5362966060638428,
- 3.539538621902466,
- 3.542782783508301,
- 3.5460307598114014,
- 3.549281120300293,
- 3.5525355339050293,
- 3.5557916164398193,
- 3.559051513671875,
- 3.5623137950897217,
- 3.565579414367676,
- 3.568848133087158,
- 3.572119951248169,
- 3.57539439201355,
- 3.578671932220459,
- 3.5819528102874756,
- 3.585236072540283,
- 3.5885231494903564,
- 3.5918126106262207,
- 3.595104932785034,
- 3.598400831222534,
- 3.6016998291015625,
- 3.605001449584961,
- 3.6083059310913086,
- 3.6116139888763428,
- 3.614924192428589,
- 3.618238687515259,
- 3.6215555667877197,
- 3.624875545501709,
- 3.6281979084014893,
- 3.6315243244171143,
- 3.6348536014556885,
- 3.6381850242614746,
- 3.6415205001831055,
- 3.6448590755462646,
- 3.648200035095215,
- 3.6515438556671143,
- 3.6548914909362793,
- 3.6582422256469727,
- 3.6615960597991943,
- 3.664952039718628,
- 3.6683120727539062,
- 3.671674966812134,
- 3.6750407218933105,
- 3.6784095764160156,
- 3.681781768798828,
- 3.685157299041748,
- 3.688534736633301,
- 3.6919164657592773,
- 3.695300579071045,
- 3.698688507080078,
- 3.7020788192749023,
- 3.705472946166992,
- 3.708869457244873,
- 3.7122693061828613,
- 3.715672731399536,
- 3.71907901763916,
- 3.7224881649017334,
- 3.725900411605835,
- 3.729316473007202,
- 3.7327349185943604,
- 3.736156940460205,
- 3.739581823348999,
- 3.7430098056793213,
- 3.746441125869751,
- 3.749875545501709,
- 3.7533133029937744,
- 3.75675368309021,
- 3.760197401046753,
- 3.7636446952819824,
- 3.767094850540161,
- 3.7705483436584473,
- 3.7740046977996826,
- 3.7774641513824463,
- 3.7809271812438965,
- 3.784393072128296,
- 3.787862539291382,
- 3.791334390640259,
- 3.7948100566864014,
- 3.7982890605926514,
- 3.8017709255218506,
- 3.805255889892578,
- 3.808744430541992,
- 3.8122363090515137,
- 3.815730333328247,
- 3.819228410720825,
- 3.8227298259735107,
- 3.8262341022491455,
- 3.8297414779663086,
- 3.833252429962158,
- 3.8367667198181152,
- 3.8402836322784424,
- 3.843803882598877,
- 3.847327470779419,
- 3.8508546352386475,
- 3.854384422302246,
- 3.8579182624816895,
- 3.861454486846924,
- 3.8649942874908447,
- 3.868537187576294,
- 3.8720836639404297,
- 3.875633478164673,
- 3.8791861534118652,
- 3.882742166519165,
- 3.8863017559051514,
- 3.889864206314087,
- 3.893429756164551,
- 3.8969993591308594,
- 3.900571584701538,
- 3.9041473865509033,
- 3.907726287841797,
- 3.911308765411377,
- 3.9148941040039062,
- 3.918482780456543,
- 3.9220752716064453,
- 3.925670862197876,
- 3.929269313812256,
- 3.932871103286743,
- 3.936476707458496,
- 3.9400851726531982,
- 3.943696975708008,
- 3.9473118782043457,
- 3.9509313106536865,
- 3.954552412033081,
- 3.9581780433654785,
- 3.961805820465088,
- 3.9654383659362793,
- 3.9690732955932617,
- 3.9727115631103516,
- 3.976353168487549,
- 3.97999906539917,
- 3.983647584915161,
- 3.9872992038726807,
- 3.9909541606903076,
- 3.9946129322052,
- 3.998274803161621,
- 4.00193977355957,
- 4.005608558654785,
- 4.009281158447266,
- 4.012956142425537,
- 4.016634464263916,
- 4.020317077636719,
- 4.0240020751953125,
- 4.027690887451172,
- 4.031383514404297,
- 4.035079479217529,
- 4.038778305053711,
- 4.04248046875,
- 4.046186447143555,
- 4.049895286560059,
- 4.053608417510986,
- 4.057323932647705,
- 4.061043739318848,
- 4.0647664070129395,
- 4.068492412567139,
- 4.072221755981445,
- 4.075955390930176,
- 4.079691410064697,
- 4.083431243896484,
- 4.087174892425537,
- 4.090921878814697,
- 4.094671249389648,
- 4.098425388336182,
- 4.102182388305664,
- 4.105942726135254,
- 4.109706878662109,
- 4.113474369049072,
- 4.117245197296143,
- 4.12101936340332,
- 4.124797344207764,
- 4.1285786628723145,
- 4.132363319396973,
- 4.136151313781738,
- 4.139942646026611,
- 4.143738746643066,
- 4.147536754608154,
- 4.151339054107666,
- 4.155144214630127,
- 4.158953666687012,
- 4.162765979766846,
- 4.1665825843811035,
- 4.170401573181152,
- 4.174224376678467,
- 4.178051471710205,
- 4.181881427764893,
- 4.185715198516846,
- 4.189551830291748,
- 4.193392276763916,
- 4.19723653793335,
- 4.201084136962891,
- 4.204935550689697,
- 4.208790302276611,
- 4.212648391723633,
- 4.21651029586792,
- 4.2203755378723145,
- 4.224244594573975,
- 4.228116989135742,
- 4.231992721557617,
- 4.235872745513916,
- 4.239755153656006,
- 4.243642330169678,
- 4.247532367706299,
- 4.251425743103027,
- 4.25532341003418,
- 4.259224891662598,
- 4.263128280639648,
- 4.2670369148254395,
- 4.270948886871338,
- 4.2748637199401855,
- 4.278782367706299,
- 4.282705307006836,
- 4.2866315841674805,
- 4.290560245513916,
- 4.294493675231934,
- 4.298430919647217,
- 4.302371025085449,
- 4.306314945220947,
- 4.310262203216553,
- 4.31421422958374,
- 4.318169116973877,
- 4.322126865386963,
- 4.326089382171631,
- 4.330055236816406,
- 4.334023952484131,
- 4.3379974365234375,
- 4.341973781585693,
- 4.345954895019531,
- 4.34993839263916,
- 4.353926181793213,
- 4.357917308807373,
- 4.361912250518799,
- 4.36591100692749,
- 4.369913101196289,
- 4.373919486999512,
- 4.377928733825684,
- 4.381942272186279,
- 4.385959148406982,
- 4.389980316162109,
- 4.3940043449401855,
- 4.3980326652526855,
- 4.402064323425293,
- 4.406099796295166,
- 4.4101386070251465,
- 4.414181232452393,
- 4.4182281494140625,
- 4.422277927398682,
- 4.426332473754883,
- 4.430389881134033,
- 4.434451580047607,
- 4.438516139984131,
- 4.442584991455078,
- 4.446657657623291,
- 4.4507341384887695,
- 4.454813480377197,
- 4.458898067474365,
- 4.462985515594482,
- 4.467076778411865,
- 4.4711713790893555,
- 4.4752702713012695,
- 4.479372978210449,
- 4.483478546142578,
- 4.487588882446289,
- 4.491703033447266,
- 4.495820999145508,
- 4.499941825866699,
- 4.5040669441223145,
- 4.5081963539123535,
- 4.512328147888184,
- 4.516465187072754,
- 4.52060604095459,
- 4.524750232696533,
- 4.528897285461426,
- 4.533049583435059,
- 4.537204742431641,
- 4.541363716125488,
- 4.545526504516602,
- 4.549694061279297,
- 4.553864479064941,
- 4.558039665222168,
- 4.562217712402344,
- 4.566400051116943,
- 4.57058572769165,
- 4.574775695800781,
- 4.578969478607178,
- 4.58316707611084,
- 4.587368965148926,
- 4.591573715209961,
- 4.595783233642578,
- 4.599996089935303,
- 4.604213237762451,
- 4.608433723449707,
- 4.612658500671387,
- 4.616887092590332,
- 4.621119022369385,
- 4.6253557205200195,
- 4.629595756530762,
- 4.633840084075928,
- 4.638086795806885,
- 4.642339706420898,
- 4.646595001220703,
- 4.650854587554932,
- 4.655117511749268,
- 4.659385681152344,
- 4.663657188415527,
- 4.66793155670166,
- 4.672211170196533,
- 4.676494598388672,
- 4.680781364440918,
- 4.68507194519043,
- 4.689366340637207,
- 4.693665504455566,
- 4.69796895980835,
- 4.702274799346924,
- 4.70658540725708,
- 4.71090030670166,
- 4.715219020843506,
- 4.719541072845459,
- 4.723867893218994,
- 4.728198528289795,
- 4.732532024383545,
- 4.736870765686035,
- 4.741212844848633,
- 4.7455596923828125,
- 4.7499098777771,
- 4.7542643547058105,
- 4.758622646331787,
- 4.762984275817871,
- 4.767351150512695,
- 4.771721839904785,
- 4.776095867156982,
- 4.780473709106445,
- 4.78485631942749,
- 4.789242744445801,
- 4.793633460998535,
- 4.798027515411377,
- 4.802426338195801,
- 4.806828498840332,
- 4.811234474182129,
- 4.815645694732666,
- 4.820059776306152,
- 4.8244781494140625,
- 4.828900337219238,
- 4.833327770233154,
- 4.837758541107178,
- 4.842193126678467,
- 4.84663200378418,
- 4.851075172424316,
- 4.855522155761719,
- 4.859972953796387,
- 4.8644280433654785,
- 4.868887901306152,
- 4.873351097106934,
- 4.877818584442139,
- 4.882289886474609,
- 4.886765956878662,
- 4.891245365142822,
- 4.895729064941406,
- 4.900217056274414,
- 4.904709815979004,
- 4.909205436706543,
- 4.913705825805664,
- 4.918210506439209,
- 4.9227190017700195,
- 4.927231311798096,
- 4.931748390197754,
- 4.936269760131836,
- 4.940794944763184,
- 4.945323944091797,
- 4.949857711791992,
- 4.954394817352295,
- 4.958937168121338,
- 4.963481903076172,
- 4.968032360076904,
- 4.9725871086120605,
- 4.977145195007324,
- 4.981707572937012,
- 4.986274719238281,
- 4.990845680236816,
- 4.995420455932617
- ],
- "xaxis": "x4",
- "yaxis": "y4"
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## PDF Sampler\n",
+ "\n",
+ "The Probability Distribution Function (PDF) Sampler generates samples that match a given distribution. In the example below we first create a `UniformSampler` to generate a set of initial samples. We then assign weights to each of these samples to define the PDF (here it is an arbitrary funtion, but usually you would use the predicted weights from the field). The left plot the target PDF, on the right we plot a histogram of samples generated from the `PDFSampler`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "tags": [
+ "hide-input"
+ ]
+ },
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ },
+ "data": [
+ {
+ "opacity": 0.7,
+ "type": "scatter",
+ "x": [
+ 2,
+ 2.1500000953674316,
+ 2.1500000953674316,
+ 2.299999952316284,
+ 2.299999952316284,
+ 2.450000047683716,
+ 2.450000047683716,
+ 2.5999999046325684,
+ 2.5999999046325684,
+ 2.75,
+ 2.75,
+ 2.9000000953674316,
+ 2.9000000953674316,
+ 3.049999952316284,
+ 3.049999952316284,
+ 3.200000047683716,
+ 3.200000047683716,
+ 3.3499999046325684,
+ 3.3499999046325684,
+ 3.5,
+ 3.5,
+ 3.6500000953674316,
+ 3.6500000953674316,
+ 3.799999952316284,
+ 3.799999952316284,
+ 3.950000047683716,
+ 3.950000047683716,
+ 4.100000381469727,
+ 4.100000381469727,
+ 4.25,
+ 4.25,
+ 4.400000095367432,
+ 4.400000095367432,
+ 4.550000190734863,
+ 4.550000190734863,
+ 4.699999809265137,
+ 4.699999809265137,
+ 4.849999904632568,
+ 4.849999904632568,
+ 5
+ ],
+ "xaxis": "x",
+ "y": [
+ 0.013052567839622498,
+ 0.013052567839622498,
+ 0.03800889104604721,
+ 0.03800889104604721,
+ 0.057813677936792374,
+ 0.057813677936792374,
+ 0.06855124980211258,
+ 0.06855124980211258,
+ 0.06847988814115524,
+ 0.06847988814115524,
+ 0.058445800095796585,
+ 0.058445800095796585,
+ 0.041673533618450165,
+ 0.041673533618450165,
+ 0.022983169183135033,
+ 0.022983169183135033,
+ 0.007623155601322651,
+ 0.007623155601322651,
+ 0,
+ 0,
+ 0.002611340256407857,
+ 0.002611340256407857,
+ 0.015439355745911598,
+ 0.015439355745911598,
+ 0.03595082834362984,
+ 0.03595082834362984,
+ 0.05970405042171478,
+ 0.05970405042171478,
+ 0.0814160406589508,
+ 0.0814160406589508,
+ 0.09623293578624725,
+ 0.09623293578624725,
+ 0.10089751332998276,
+ 0.10089751332998276,
+ 0.09453219175338745,
+ 0.09453219175338745,
+ 0.07884885370731354,
+ 0.07884885370731354,
+ 0.057734981179237366,
+ 0.057734981179237366
+ ],
+ "yaxis": "y"
+ },
+ {
+ "nbinsx": 100,
+ "opacity": 0.7,
+ "type": "histogram",
+ "x": [
+ 2,
+ 2.007808208465576,
+ 2.0156164169311523,
+ 2.0234246253967285,
+ 2.031233072280884,
+ 2.03904128074646,
+ 2.046849489212036,
+ 2.0546576976776123,
+ 2.0624659061431885,
+ 2.0702741146087646,
+ 2.07808256149292,
+ 2.085890769958496,
+ 2.0936989784240723,
+ 2.1015071868896484,
+ 2.1093153953552246,
+ 2.117123603820801,
+ 2.124931812286377,
+ 2.1327402591705322,
+ 2.1405484676361084,
+ 2.1483566761016846,
+ 2.1529603004455566,
+ 2.156709671020508,
+ 2.16045880317688,
+ 2.164208173751831,
+ 2.1679575443267822,
+ 2.1717066764831543,
+ 2.1754560470581055,
+ 2.1792054176330566,
+ 2.182954788208008,
+ 2.18670392036438,
+ 2.190453290939331,
+ 2.1942026615142822,
+ 2.1979517936706543,
+ 2.2017011642456055,
+ 2.2054505348205566,
+ 2.209199905395508,
+ 2.21294903755188,
+ 2.216698408126831,
+ 2.2204477787017822,
+ 2.2241969108581543,
+ 2.2279462814331055,
+ 2.2316956520080566,
+ 2.235445022583008,
+ 2.23919415473938,
+ 2.242943525314331,
+ 2.2466928958892822,
+ 2.2504420280456543,
+ 2.2541913986206055,
+ 2.2579407691955566,
+ 2.2616899013519287,
+ 2.26543927192688,
+ 2.269188642501831,
+ 2.2729380130767822,
+ 2.2766871452331543,
+ 2.2804365158081055,
+ 2.2841858863830566,
+ 2.287935256958008,
+ 2.29168438911438,
+ 2.295433759689331,
+ 2.2991831302642822,
+ 2.3020758628845215,
+ 2.304730176925659,
+ 2.307384729385376,
+ 2.3100390434265137,
+ 2.3126933574676514,
+ 2.315347671508789,
+ 2.3180019855499268,
+ 2.3206562995910645,
+ 2.323310613632202,
+ 2.32596492767334,
+ 2.3286192417144775,
+ 2.3312735557556152,
+ 2.333927869796753,
+ 2.3365821838378906,
+ 2.3392364978790283,
+ 2.341891050338745,
+ 2.344545364379883,
+ 2.3471996784210205,
+ 2.349853992462158,
+ 2.352508306503296,
+ 2.3551626205444336,
+ 2.3578169345855713,
+ 2.360471248626709,
+ 2.3631255626678467,
+ 2.3657798767089844,
+ 2.368434190750122,
+ 2.3710885047912598,
+ 2.3737430572509766,
+ 2.3763973712921143,
+ 2.379051685333252,
+ 2.3817059993743896,
+ 2.3843603134155273,
+ 2.387014627456665,
+ 2.3896689414978027,
+ 2.3923232555389404,
+ 2.394977569580078,
+ 2.397631883621216,
+ 2.4002861976623535,
+ 2.402940511703491,
+ 2.405594825744629,
+ 2.4082493782043457,
+ 2.4109036922454834,
+ 2.413558006286621,
+ 2.416212320327759,
+ 2.4188666343688965,
+ 2.421520948410034,
+ 2.424175262451172,
+ 2.4268295764923096,
+ 2.4294838905334473,
+ 2.432138204574585,
+ 2.4347925186157227,
+ 2.4374468326568604,
+ 2.440101385116577,
+ 2.442755699157715,
+ 2.4454100131988525,
+ 2.4480643272399902,
+ 2.450620412826538,
+ 2.452911853790283,
+ 2.4552032947540283,
+ 2.4574949741363525,
+ 2.4597864151000977,
+ 2.4620778560638428,
+ 2.464369297027588,
+ 2.466660976409912,
+ 2.4689524173736572,
+ 2.4712438583374023,
+ 2.4735352993011475,
+ 2.4758267402648926,
+ 2.478118419647217,
+ 2.480409860610962,
+ 2.482701301574707,
+ 2.484992742538452,
+ 2.4872844219207764,
+ 2.4895758628845215,
+ 2.4918673038482666,
+ 2.4941587448120117,
+ 2.496450424194336,
+ 2.498741865158081,
+ 2.501033306121826,
+ 2.5033247470855713,
+ 2.5056161880493164,
+ 2.5079078674316406,
+ 2.5101993083953857,
+ 2.512490749359131,
+ 2.514782190322876,
+ 2.5170738697052,
+ 2.5193653106689453,
+ 2.5216567516326904,
+ 2.5239481925964355,
+ 2.5262396335601807,
+ 2.528531312942505,
+ 2.53082275390625,
+ 2.533114194869995,
+ 2.5354056358337402,
+ 2.5376973152160645,
+ 2.5399887561798096,
+ 2.5422801971435547,
+ 2.5445716381073,
+ 2.546863317489624,
+ 2.549154758453369,
+ 2.5514461994171143,
+ 2.5537376403808594,
+ 2.5560293197631836,
+ 2.5583207607269287,
+ 2.560612201690674,
+ 2.562903642654419,
+ 2.565195083618164,
+ 2.5674867630004883,
+ 2.5697782039642334,
+ 2.5720696449279785,
+ 2.5743610858917236,
+ 2.576652765274048,
+ 2.578944206237793,
+ 2.581235647201538,
+ 2.583527088165283,
+ 2.5858187675476074,
+ 2.5881102085113525,
+ 2.5904016494750977,
+ 2.5926930904388428,
+ 2.594984531402588,
+ 2.597276210784912,
+ 2.5995676517486572,
+ 2.601860761642456,
+ 2.604154348373413,
+ 2.60644793510437,
+ 2.608741521835327,
+ 2.611035108566284,
+ 2.613328695297241,
+ 2.6156222820281982,
+ 2.6179158687591553,
+ 2.6202094554901123,
+ 2.6225030422210693,
+ 2.6247966289520264,
+ 2.6270902156829834,
+ 2.6293838024139404,
+ 2.6316773891448975,
+ 2.6339709758758545,
+ 2.6362645626068115,
+ 2.6385581493377686,
+ 2.6408517360687256,
+ 2.6431453227996826,
+ 2.6454389095306396,
+ 2.6477324962615967,
+ 2.6500260829925537,
+ 2.6523196697235107,
+ 2.6546132564544678,
+ 2.656906843185425,
+ 2.659200429916382,
+ 2.661494016647339,
+ 2.663787603378296,
+ 2.666081190109253,
+ 2.66837477684021,
+ 2.670668363571167,
+ 2.672961950302124,
+ 2.675255537033081,
+ 2.677549123764038,
+ 2.679842710494995,
+ 2.682136297225952,
+ 2.684429883956909,
+ 2.686723470687866,
+ 2.689016819000244,
+ 2.691310405731201,
+ 2.693603992462158,
+ 2.6958975791931152,
+ 2.6981911659240723,
+ 2.7004847526550293,
+ 2.7027783393859863,
+ 2.7050719261169434,
+ 2.7073655128479004,
+ 2.7096590995788574,
+ 2.7119526863098145,
+ 2.7142462730407715,
+ 2.7165398597717285,
+ 2.7188334465026855,
+ 2.7211270332336426,
+ 2.7234206199645996,
+ 2.7257142066955566,
+ 2.7280077934265137,
+ 2.7303013801574707,
+ 2.7325949668884277,
+ 2.7348885536193848,
+ 2.737182140350342,
+ 2.739475727081299,
+ 2.741769313812256,
+ 2.744062900543213,
+ 2.74635648727417,
+ 2.748650074005127,
+ 2.751081943511963,
+ 2.7537119388580322,
+ 2.7563416957855225,
+ 2.7589714527130127,
+ 2.761601209640503,
+ 2.7642312049865723,
+ 2.7668609619140625,
+ 2.7694907188415527,
+ 2.772120714187622,
+ 2.7747504711151123,
+ 2.7773802280426025,
+ 2.7800099849700928,
+ 2.782639741897583,
+ 2.7852697372436523,
+ 2.7878994941711426,
+ 2.790529251098633,
+ 2.793159008026123,
+ 2.7957890033721924,
+ 2.7984187602996826,
+ 2.801048517227173,
+ 2.803678274154663,
+ 2.8063082695007324,
+ 2.8089380264282227,
+ 2.811567783355713,
+ 2.814197540283203,
+ 2.8168275356292725,
+ 2.8194572925567627,
+ 2.822087049484253,
+ 2.8247170448303223,
+ 2.8273468017578125,
+ 2.8299765586853027,
+ 2.832606554031372,
+ 2.8352363109588623,
+ 2.8378660678863525,
+ 2.8404958248138428,
+ 2.843125581741333,
+ 2.8457555770874023,
+ 2.8483853340148926,
+ 2.851015090942383,
+ 2.853644847869873,
+ 2.8562748432159424,
+ 2.8589046001434326,
+ 2.861534357070923,
+ 2.864164352416992,
+ 2.8667941093444824,
+ 2.8694238662719727,
+ 2.872053623199463,
+ 2.8746836185455322,
+ 2.8773133754730225,
+ 2.8799431324005127,
+ 2.882572889328003,
+ 2.8852028846740723,
+ 2.8878326416015625,
+ 2.8904623985290527,
+ 2.893092155456543,
+ 2.8957221508026123,
+ 2.8983519077301025,
+ 2.9013004302978516,
+ 2.9047837257385254,
+ 2.9082672595977783,
+ 2.911750555038452,
+ 2.915234088897705,
+ 2.918717384338379,
+ 2.922200918197632,
+ 2.9256842136383057,
+ 2.9291675090789795,
+ 2.9326508045196533,
+ 2.9361343383789062,
+ 2.93961763381958,
+ 2.943101167678833,
+ 2.946584463119507,
+ 2.9500679969787598,
+ 2.9535512924194336,
+ 2.9570348262786865,
+ 2.9605181217193604,
+ 2.9640016555786133,
+ 2.967484951019287,
+ 2.97096848487854,
+ 2.974451780319214,
+ 2.977935314178467,
+ 2.9814186096191406,
+ 2.9849019050598145,
+ 2.9883854389190674,
+ 2.991868734359741,
+ 2.995352268218994,
+ 2.998835563659668,
+ 3.002319097518921,
+ 3.0058023929595947,
+ 3.0092859268188477,
+ 3.0127692222595215,
+ 3.0162527561187744,
+ 3.0197360515594482,
+ 3.023219585418701,
+ 3.026702880859375,
+ 3.030186414718628,
+ 3.0336697101593018,
+ 3.0371532440185547,
+ 3.0406365394592285,
+ 3.0441198348999023,
+ 3.0476033687591553,
+ 3.0517024993896484,
+ 3.057159900665283,
+ 3.062617063522339,
+ 3.0680747032165527,
+ 3.0735318660736084,
+ 3.078989267349243,
+ 3.084446430206299,
+ 3.0899040699005127,
+ 3.0953612327575684,
+ 3.100818634033203,
+ 3.106276035308838,
+ 3.1117334365844727,
+ 3.1171905994415283,
+ 3.122647762298584,
+ 3.1281051635742188,
+ 3.1335625648498535,
+ 3.139019727706909,
+ 3.144477367401123,
+ 3.1499345302581787,
+ 3.1553919315338135,
+ 3.160849094390869,
+ 3.166306734085083,
+ 3.1717638969421387,
+ 3.1772212982177734,
+ 3.182678699493408,
+ 3.188136100769043,
+ 3.1935932636260986,
+ 3.1990506649017334,
+ 3.208436965942383,
+ 3.2186505794525146,
+ 3.2288644313812256,
+ 3.2390782833099365,
+ 3.2492921352386475,
+ 3.2595059871673584,
+ 3.2697198390960693,
+ 3.2799336910247803,
+ 3.290147542953491,
+ 3.300361156463623,
+ 3.310574769973755,
+ 3.320788860321045,
+ 3.3310024738311768,
+ 3.341216564178467,
+ 3.352520704269409,
+ 3.370521068572998,
+ 3.3885207176208496,
+ 3.4065210819244385,
+ 3.424520969390869,
+ 3.442521333694458,
+ 3.4605209827423096,
+ 3.4785213470458984,
+ 3.496521234512329,
+ 3.511514663696289,
+ 3.525787353515625,
+ 3.540060043334961,
+ 3.554332733154297,
+ 3.568605661392212,
+ 3.582878351211548,
+ 3.597151517868042,
+ 3.611424207687378,
+ 3.625697374343872,
+ 3.639970064163208,
+ 3.6521034240722656,
+ 3.6591789722442627,
+ 3.666254758834839,
+ 3.673330307006836,
+ 3.680406093597412,
+ 3.687481641769409,
+ 3.6945574283599854,
+ 3.7016329765319824,
+ 3.7087085247039795,
+ 3.7157840728759766,
+ 3.7228598594665527,
+ 3.72993540763855,
+ 3.737011194229126,
+ 3.744086742401123,
+ 3.751162528991699,
+ 3.7582380771636963,
+ 3.7653138637542725,
+ 3.7723894119262695,
+ 3.7794651985168457,
+ 3.7865407466888428,
+ 3.793616533279419,
+ 3.8003830909729004,
+ 3.804300308227539,
+ 3.8082175254821777,
+ 3.8121347427368164,
+ 3.816051959991455,
+ 3.8199691772460938,
+ 3.8238863945007324,
+ 3.82780385017395,
+ 3.8317208290100098,
+ 3.8356382846832275,
+ 3.839555501937866,
+ 3.843472719192505,
+ 3.8473899364471436,
+ 3.8513071537017822,
+ 3.855224370956421,
+ 3.8591415882110596,
+ 3.8630588054656982,
+ 3.866976261138916,
+ 3.8708932399749756,
+ 3.8748104572296143,
+ 3.878727674484253,
+ 3.8826448917388916,
+ 3.8865621089935303,
+ 3.890479564666748,
+ 3.8943967819213867,
+ 3.8983139991760254,
+ 3.902231216430664,
+ 3.9061484336853027,
+ 3.9100656509399414,
+ 3.91398286819458,
+ 3.9179000854492188,
+ 3.9218175411224365,
+ 3.925734519958496,
+ 3.929651975631714,
+ 3.9335691928863525,
+ 3.937486171722412,
+ 3.941403388977051,
+ 3.9453208446502686,
+ 3.9492380619049072,
+ 3.952080011367798,
+ 3.954662322998047,
+ 3.957244873046875,
+ 3.959827184677124,
+ 3.962409496307373,
+ 3.964991807937622,
+ 3.967574119567871,
+ 3.97015643119812,
+ 3.9727389812469482,
+ 3.9753212928771973,
+ 3.9779036045074463,
+ 3.9804859161376953,
+ 3.9830682277679443,
+ 3.9856505393981934,
+ 3.9882328510284424,
+ 3.9908151626586914,
+ 3.9933977127075195,
+ 3.9959800243377686,
+ 3.9985623359680176,
+ 4.001144886016846,
+ 4.003726959228516,
+ 4.006309509277344,
+ 4.008891582489014,
+ 4.011474132537842,
+ 4.01405668258667,
+ 4.01663875579834,
+ 4.019221305847168,
+ 4.021803379058838,
+ 4.024385929107666,
+ 4.026968002319336,
+ 4.029550552368164,
+ 4.032133102416992,
+ 4.034715175628662,
+ 4.03729772567749,
+ 4.03987979888916,
+ 4.042462348937988,
+ 4.045044422149658,
+ 4.047626972198486,
+ 4.050209045410156,
+ 4.052791595458984,
+ 4.055373668670654,
+ 4.057956218719482,
+ 4.060538291931152,
+ 4.0631208419799805,
+ 4.065703392028809,
+ 4.0682854652404785,
+ 4.070868015289307,
+ 4.073450565338135,
+ 4.076032638549805,
+ 4.078615188598633,
+ 4.081197261810303,
+ 4.083779811859131,
+ 4.086362361907959,
+ 4.088944435119629,
+ 4.091526985168457,
+ 4.094109058380127,
+ 4.096691608428955,
+ 4.099273681640625,
+ 4.101415634155273,
+ 4.103384494781494,
+ 4.105353355407715,
+ 4.107322692871094,
+ 4.1092915534973145,
+ 4.111260414123535,
+ 4.113229751586914,
+ 4.115198612213135,
+ 4.1171674728393555,
+ 4.119136810302734,
+ 4.121105670928955,
+ 4.123074531555176,
+ 4.1250433921813965,
+ 4.127012729644775,
+ 4.128981590270996,
+ 4.130950450897217,
+ 4.132919788360596,
+ 4.134888648986816,
+ 4.136857509613037,
+ 4.138826847076416,
+ 4.140795707702637,
+ 4.142765045166016,
+ 4.144733905792236,
+ 4.146702766418457,
+ 4.148671627044678,
+ 4.150640964508057,
+ 4.152609825134277,
+ 4.154578685760498,
+ 4.156548023223877,
+ 4.158516883850098,
+ 4.160485744476318,
+ 4.162455081939697,
+ 4.164423942565918,
+ 4.166393280029297,
+ 4.168362140655518,
+ 4.170331001281738,
+ 4.172299861907959,
+ 4.174269199371338,
+ 4.176238059997559,
+ 4.178206920623779,
+ 4.180176258087158,
+ 4.182145118713379,
+ 4.1841139793396,
+ 4.1860833168029785,
+ 4.188052177429199,
+ 4.19002103805542,
+ 4.191990375518799,
+ 4.1939592361450195,
+ 4.19592809677124,
+ 4.197897434234619,
+ 4.19986629486084,
+ 4.2018351554870605,
+ 4.203804016113281,
+ 4.20577335357666,
+ 4.207742214202881,
+ 4.20971155166626,
+ 4.2116804122924805,
+ 4.213649272918701,
+ 4.21561861038208,
+ 4.217587471008301,
+ 4.2195563316345215,
+ 4.2215256690979,
+ 4.223494529724121,
+ 4.225463390350342,
+ 4.2274322509765625,
+ 4.229401588439941,
+ 4.231370449066162,
+ 4.233339786529541,
+ 4.235308647155762,
+ 4.237277507781982,
+ 4.239246845245361,
+ 4.241215705871582,
+ 4.243184566497803,
+ 4.245153903961182,
+ 4.247122764587402,
+ 4.249091625213623,
+ 4.250912666320801,
+ 4.252607345581055,
+ 4.25430154800415,
+ 4.255995750427246,
+ 4.2576904296875,
+ 4.259384632110596,
+ 4.26107931137085,
+ 4.262773513793945,
+ 4.264467716217041,
+ 4.266162395477295,
+ 4.267856597900391,
+ 4.269550800323486,
+ 4.27124547958374,
+ 4.272939682006836,
+ 4.27463436126709,
+ 4.2763285636901855,
+ 4.278022766113281,
+ 4.279717445373535,
+ 4.281411647796631,
+ 4.283106327056885,
+ 4.2848005294799805,
+ 4.286495208740234,
+ 4.28818941116333,
+ 4.289883613586426,
+ 4.2915778160095215,
+ 4.293272495269775,
+ 4.294966697692871,
+ 4.296661376953125,
+ 4.298355579376221,
+ 4.300050258636475,
+ 4.30174446105957,
+ 4.303438663482666,
+ 4.30513334274292,
+ 4.306827545166016,
+ 4.3085222244262695,
+ 4.310216426849365,
+ 4.311910629272461,
+ 4.313605308532715,
+ 4.3152995109558105,
+ 4.316993713378906,
+ 4.31868839263916,
+ 4.320382595062256,
+ 4.32207727432251,
+ 4.3237714767456055,
+ 4.325465679168701,
+ 4.327160358428955,
+ 4.328854560852051,
+ 4.330549240112305,
+ 4.3322434425354,
+ 4.333938121795654,
+ 4.33563232421875,
+ 4.337326526641846,
+ 4.3390212059021,
+ 4.340715408325195,
+ 4.342409610748291,
+ 4.344104290008545,
+ 4.345798492431641,
+ 4.3474931716918945,
+ 4.34918737411499,
+ 4.350881576538086,
+ 4.35257625579834,
+ 4.3542704582214355,
+ 4.3559651374816895,
+ 4.357659339904785,
+ 4.359353542327881,
+ 4.361048221588135,
+ 4.3627424240112305,
+ 4.364436626434326,
+ 4.36613130569458,
+ 4.367825508117676,
+ 4.36952018737793,
+ 4.371214389801025,
+ 4.372908592224121,
+ 4.374603271484375,
+ 4.376297473907471,
+ 4.377992153167725,
+ 4.37968635559082,
+ 4.381381034851074,
+ 4.38307523727417,
+ 4.384769439697266,
+ 4.3864641189575195,
+ 4.388158321380615,
+ 4.389853000640869,
+ 4.391547203063965,
+ 4.3932414054870605,
+ 4.3949360847473145,
+ 4.39663028717041,
+ 4.398324489593506,
+ 4.400018215179443,
+ 4.401641368865967,
+ 4.40326452255249,
+ 4.404887676239014,
+ 4.406510829925537,
+ 4.4081339836120605,
+ 4.409757137298584,
+ 4.411380290985107,
+ 4.413002967834473,
+ 4.414626598358154,
+ 4.4162492752075195,
+ 4.417872428894043,
+ 4.419495582580566,
+ 4.42111873626709,
+ 4.422741889953613,
+ 4.424365043640137,
+ 4.42598819732666,
+ 4.427611351013184,
+ 4.429234504699707,
+ 4.4308576583862305,
+ 4.432480812072754,
+ 4.434103965759277,
+ 4.435727119445801,
+ 4.437350273132324,
+ 4.438973426818848,
+ 4.440596580505371,
+ 4.442219257354736,
+ 4.44384241104126,
+ 4.445465564727783,
+ 4.447088718414307,
+ 4.44871187210083,
+ 4.4503350257873535,
+ 4.451958179473877,
+ 4.4535813331604,
+ 4.455204486846924,
+ 4.456827640533447,
+ 4.458450794219971,
+ 4.460073947906494,
+ 4.461697101593018,
+ 4.463319778442383,
+ 4.464942932128906,
+ 4.46656608581543,
+ 4.468189239501953,
+ 4.469812393188477,
+ 4.471435546875,
+ 4.473058700561523,
+ 4.474681854248047,
+ 4.47630500793457,
+ 4.477928161621094,
+ 4.479551315307617,
+ 4.481174468994141,
+ 4.482797622680664,
+ 4.4844207763671875,
+ 4.486043930053711,
+ 4.487666606903076,
+ 4.4892897605896,
+ 4.490912914276123,
+ 4.4925360679626465,
+ 4.49415922164917,
+ 4.495782375335693,
+ 4.497405529022217,
+ 4.49902868270874,
+ 4.500651836395264,
+ 4.502274990081787,
+ 4.5038981437683105,
+ 4.505521297454834,
+ 4.507144451141357,
+ 4.508767604827881,
+ 4.510390281677246,
+ 4.512013912200928,
+ 4.513636589050293,
+ 4.515259742736816,
+ 4.51688289642334,
+ 4.518506050109863,
+ 4.520129203796387,
+ 4.52175235748291,
+ 4.523375511169434,
+ 4.524998664855957,
+ 4.5266218185424805,
+ 4.528244972229004,
+ 4.529868125915527,
+ 4.531491279602051,
+ 4.533114433288574,
+ 4.534737586975098,
+ 4.536360740661621,
+ 4.5379838943481445,
+ 4.53960657119751,
+ 4.541229724884033,
+ 4.542852878570557,
+ 4.54447603225708,
+ 4.5460991859436035,
+ 4.547722339630127,
+ 4.54934549331665,
+ 4.551027774810791,
+ 4.5527496337890625,
+ 4.554471492767334,
+ 4.5561933517456055,
+ 4.557915210723877,
+ 4.559637546539307,
+ 4.561359405517578,
+ 4.56308126449585,
+ 4.564803123474121,
+ 4.566524982452393,
+ 4.568247318267822,
+ 4.569969177246094,
+ 4.571691036224365,
+ 4.573412895202637,
+ 4.575134754180908,
+ 4.576857089996338,
+ 4.578578948974609,
+ 4.580300807952881,
+ 4.582022666931152,
+ 4.583744525909424,
+ 4.5854668617248535,
+ 4.587188720703125,
+ 4.5889105796813965,
+ 4.590632438659668,
+ 4.592354774475098,
+ 4.594076156616211,
+ 4.595798492431641,
+ 4.597520351409912,
+ 4.599242210388184,
+ 4.600964069366455,
+ 4.602685928344727,
+ 4.604408264160156,
+ 4.606130123138428,
+ 4.607851982116699,
+ 4.609573841094971,
+ 4.611295700073242,
+ 4.613018035888672,
+ 4.614739894866943,
+ 4.616461753845215,
+ 4.618183612823486,
+ 4.619905948638916,
+ 4.6216278076171875,
+ 4.623349666595459,
+ 4.6250715255737305,
+ 4.626793384552002,
+ 4.628515720367432,
+ 4.630237579345703,
+ 4.631959438323975,
+ 4.633681297302246,
+ 4.635403156280518,
+ 4.637125492095947,
+ 4.638847351074219,
+ 4.64056921005249,
+ 4.642291069030762,
+ 4.644012928009033,
+ 4.645734786987305,
+ 4.647457122802734,
+ 4.649178981781006,
+ 4.650900840759277,
+ 4.652622699737549,
+ 4.65434455871582,
+ 4.65606689453125,
+ 4.6577887535095215,
+ 4.659510612487793,
+ 4.6612324714660645,
+ 4.662954330444336,
+ 4.664676666259766,
+ 4.666398525238037,
+ 4.668120384216309,
+ 4.66984224319458,
+ 4.671564102172852,
+ 4.673286437988281,
+ 4.675008296966553,
+ 4.676730155944824,
+ 4.678452014923096,
+ 4.680173873901367,
+ 4.681896209716797,
+ 4.683618068695068,
+ 4.68533992767334,
+ 4.687061786651611,
+ 4.688784122467041,
+ 4.6905059814453125,
+ 4.692227840423584,
+ 4.6939496994018555,
+ 4.695671558380127,
+ 4.697393894195557,
+ 4.699115753173828,
+ 4.700985431671143,
+ 4.703011512756348,
+ 4.7050371170043945,
+ 4.7070631980896,
+ 4.7090888023376465,
+ 4.711114883422852,
+ 4.713140964508057,
+ 4.7151665687561035,
+ 4.717192649841309,
+ 4.719218730926514,
+ 4.7212443351745605,
+ 4.723270416259766,
+ 4.725296497344971,
+ 4.727322101593018,
+ 4.729348182678223,
+ 4.731374263763428,
+ 4.733399868011475,
+ 4.73542594909668,
+ 4.737452030181885,
+ 4.739477634429932,
+ 4.741503715515137,
+ 4.743529796600342,
+ 4.745555400848389,
+ 4.747581481933594,
+ 4.749607086181641,
+ 4.751633167266846,
+ 4.753659248352051,
+ 4.755684852600098,
+ 4.757710933685303,
+ 4.759737014770508,
+ 4.761762619018555,
+ 4.76378870010376,
+ 4.765814304351807,
+ 4.767840385437012,
+ 4.769866466522217,
+ 4.771892547607422,
+ 4.773918151855469,
+ 4.775944232940674,
+ 4.777970314025879,
+ 4.779995918273926,
+ 4.782021999359131,
+ 4.784048080444336,
+ 4.786073684692383,
+ 4.788099765777588,
+ 4.790125370025635,
+ 4.79215145111084,
+ 4.794177532196045,
+ 4.796203136444092,
+ 4.798229217529297,
+ 4.800255298614502,
+ 4.802280902862549,
+ 4.804306983947754,
+ 4.806333065032959,
+ 4.808358669281006,
+ 4.810384750366211,
+ 4.812410831451416,
+ 4.814436435699463,
+ 4.816462516784668,
+ 4.818488121032715,
+ 4.82051420211792,
+ 4.822540283203125,
+ 4.824565887451172,
+ 4.826591968536377,
+ 4.828618049621582,
+ 4.830643653869629,
+ 4.832669734954834,
+ 4.834695816040039,
+ 4.836721420288086,
+ 4.838747501373291,
+ 4.840773582458496,
+ 4.842799186706543,
+ 4.844825267791748,
+ 4.846851348876953,
+ 4.848876953125,
+ 4.851184368133545,
+ 4.853841781616211,
+ 4.856499195098877,
+ 4.859157085418701,
+ 4.861814022064209,
+ 4.864471435546875,
+ 4.867128849029541,
+ 4.869786739349365,
+ 4.872444152832031,
+ 4.875101089477539,
+ 4.877758502960205,
+ 4.880416393280029,
+ 4.883073806762695,
+ 4.885731220245361,
+ 4.888388633728027,
+ 4.891046047210693,
+ 4.893702983856201,
+ 4.896360397338867,
+ 4.899017810821533,
+ 4.901675701141357,
+ 4.904332637786865,
+ 4.906990051269531,
+ 4.909647464752197,
+ 4.9123053550720215,
+ 4.9149627685546875,
+ 4.9176201820373535,
+ 4.920277118682861,
+ 4.9229350090026855,
+ 4.925592422485352,
+ 4.928249835968018,
+ 4.930907249450684,
+ 4.93356466293335,
+ 4.936222076416016,
+ 4.938879489898682,
+ 4.941536903381348,
+ 4.944194316864014,
+ 4.94685173034668,
+ 4.949509143829346,
+ 4.952166557312012,
+ 4.954823970794678,
+ 4.957481384277344,
+ 4.96013879776001,
+ 4.962796211242676,
+ 4.965453624725342,
+ 4.968111038208008,
+ 4.970768451690674,
+ 4.97342586517334,
+ 4.976083278656006,
+ 4.978740692138672,
+ 4.981398105621338,
+ 4.984055519104004,
+ 4.98671293258667,
+ 4.989370346069336,
+ 4.992027759552002,
+ 4.994685173034668,
+ 4.997342586517334
+ ],
+ "xaxis": "x2",
+ "yaxis": "y2"
+ }
+ ],
+ "layout": {
+ "annotations": [
+ {
+ "font": {
+ "size": 16
+ },
+ "showarrow": false,
+ "text": "PDF",
+ "x": 0.225,
+ "xanchor": "center",
+ "xref": "paper",
+ "y": 1,
+ "yanchor": "bottom",
+ "yref": "paper"
+ },
+ {
+ "font": {
+ "size": 16
+ },
+ "showarrow": false,
+ "text": "Samples",
+ "x": 0.775,
+ "xanchor": "center",
+ "xref": "paper",
+ "y": 1,
+ "yanchor": "bottom",
+ "yref": "paper"
+ }
+ ],
+ "height": 400,
+ "hovermode": false,
+ "margin": {
+ "b": 20,
+ "l": 20,
+ "r": 20,
+ "t": 50
+ },
+ "showlegend": false,
+ "template": {
+ "data": {
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "geo": {
+ "bgcolor": "white",
+ "lakecolor": "white",
+ "landcolor": "#E5ECF6",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "white"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "light"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "bgcolor": "#E5ECF6",
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "gridwidth": 2,
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white"
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "gridwidth": 2,
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white"
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "gridwidth": 2,
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "bgcolor": "#E5ECF6",
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "xaxis": {
+ "anchor": "y",
+ "domain": [
+ 0,
+ 0.45
+ ],
+ "title": {
+ "text": "Distance"
+ }
+ },
+ "xaxis2": {
+ "anchor": "y2",
+ "domain": [
+ 0.55,
+ 1
+ ],
+ "title": {
+ "text": "Distance"
+ }
+ },
+ "yaxis": {
+ "anchor": "x",
+ "domain": [
+ 0,
+ 1
+ ]
+ },
+ "yaxis2": {
+ "anchor": "x2",
+ "domain": [
+ 0,
+ 1
+ ],
+ "title": {
+ "text": "# Samples"
+ }
+ }
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# COLLAPSED\n",
+ "import torch\n",
+ "from nerfactory.cameras.rays import RayBundle\n",
+ "from nerfactory.models.modules import ray_sampler\n",
+ "import plotly.graph_objects as go\n",
+ "from plotly.subplots import make_subplots\n",
+ "\n",
+ "num_coarse_samples = 20\n",
+ "num_samples = 1000\n",
+ "near = 2\n",
+ "far = 5\n",
+ "train_stratified = False\n",
+ "\n",
+ "fig = make_subplots(\n",
+ " rows=1,\n",
+ " cols=2,\n",
+ " subplot_titles=(\"PDF\", \"Samples\"),\n",
+ ")\n",
+ "\n",
+ "uniform_sampler = ray_sampler.UniformSampler(num_samples=num_coarse_samples, train_stratified=train_stratified)\n",
+ "pdf_sampler = ray_sampler.PDFSampler(num_samples=num_samples, train_stratified=train_stratified, include_original=False)\n",
+ "\n",
+ "ray_bundle = RayBundle(\n",
+ " origins=torch.ones([1, 3]),\n",
+ " directions=torch.ones([1, 3]),\n",
+ " pixel_area=torch.ones([1, 1]),\n",
+ " nears=torch.ones([1, 1]) * near,\n",
+ " fars=torch.ones([1, 1]) * far,\n",
+ ")\n",
+ "\n",
+ "coarse_ray_samples = uniform_sampler(ray_bundle)\n",
+ "\n",
+ "# Generate arbitrary PDF\n",
+ "weights = torch.ones(num_coarse_samples)\n",
+ "weights += torch.sin(torch.linspace(0, 3 * torch.pi, num_coarse_samples))\n",
+ "weights += torch.sin(torch.linspace(0, 0.5 * torch.pi, num_coarse_samples))\n",
+ "weights -= torch.min(weights)\n",
+ "weights /= torch.sum(weights)\n",
+ "\n",
+ "samples = pdf_sampler.generate_ray_samples(ray_bundle, coarse_ray_samples, weights[None, :, None], num_samples)\n",
+ "\n",
+ "# Plotting stuff\n",
+ "x = torch.ones((num_coarse_samples * 2))\n",
+ "x[::2] = coarse_ray_samples.frustums.starts[0, :, 0]\n",
+ "x[1::2] = coarse_ray_samples.frustums.ends[0, :, 0]\n",
+ "\n",
+ "y = torch.ones((num_coarse_samples * 2))\n",
+ "y[::2] = weights\n",
+ "y[1::2] = weights\n",
+ "\n",
+ "pdf_trace = go.Scatter(x=x, y=y)\n",
+ "fig.append_trace(pdf_trace, 1, 1)\n",
+ "\n",
+ "samples_trace = go.Histogram(x=samples.frustums.starts[0, :, 0], nbinsx=100)\n",
+ "fig.append_trace(samples_trace, 1, 2)\n",
+ "\n",
+ "fig.update_yaxes(title_text=\"# Samples\", row=1, col=2)\n",
+ "fig.update_xaxes(title_text=\"Distance\", row=1, col=1)\n",
+ "fig.update_xaxes(title_text=\"Distance\", row=1, col=2)\n",
+ "\n",
+ "# Overlay both histograms\n",
+ "fig.update_layout(height=400, hovermode=False, showlegend=False, margin=dict(l=20, r=20, t=50, b=20))\n",
+ "fig.update_traces(opacity=0.7)\n",
+ "fig.show()"
+ ]
}
- ],
- "layout": {
- "annotations": [
- {
- "font": {
- "size": 16
- },
- "showarrow": false,
- "text": "Uniform",
- "x": 0.225,
- "xanchor": "center",
- "xref": "paper",
- "y": 1,
- "yanchor": "bottom",
- "yref": "paper"
- },
- {
- "font": {
- "size": 16
- },
- "showarrow": false,
- "text": "Linear in Disparity",
- "x": 0.775,
- "xanchor": "center",
- "xref": "paper",
- "y": 1,
- "yanchor": "bottom",
- "yref": "paper"
- },
- {
- "font": {
- "size": 16
- },
- "showarrow": false,
- "text": "Square Root",
- "x": 0.225,
- "xanchor": "center",
- "xref": "paper",
- "y": 0.45,
- "yanchor": "bottom",
- "yref": "paper"
- },
- {
- "font": {
- "size": 16
- },
- "showarrow": false,
- "text": "Log Sampler",
- "x": 0.775,
- "xanchor": "center",
- "xref": "paper",
- "y": 0.45,
- "yanchor": "bottom",
- "yref": "paper"
- }
- ],
- "height": 700,
- "hovermode": false,
- "margin": {
- "b": 20,
- "l": 20,
- "r": 20,
- "t": 50
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3.8.12 64-bit ('nerfactory')",
+ "language": "python",
+ "name": "python3"
},
- "showlegend": false,
- "template": {
- "data": {
- "bar": [
- {
- "error_x": {
- "color": "#2a3f5f"
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
},
- "error_y": {
- "color": "#2a3f5f"
- },
- "marker": {
- "line": {
- "color": "#E5ECF6",
- "width": 0.5
- },
- "pattern": {
- "fillmode": "overlay",
- "size": 10,
- "solidity": 0.2
- }
- },
- "type": "bar"
- }
- ],
- "barpolar": [
- {
- "marker": {
- "line": {
- "color": "#E5ECF6",
- "width": 0.5
- },
- "pattern": {
- "fillmode": "overlay",
- "size": 10,
- "solidity": 0.2
- }
- },
- "type": "barpolar"
- }
- ],
- "carpet": [
- {
- "aaxis": {
- "endlinecolor": "#2a3f5f",
- "gridcolor": "white",
- "linecolor": "white",
- "minorgridcolor": "white",
- "startlinecolor": "#2a3f5f"
- },
- "baxis": {
- "endlinecolor": "#2a3f5f",
- "gridcolor": "white",
- "linecolor": "white",
- "minorgridcolor": "white",
- "startlinecolor": "#2a3f5f"
- },
- "type": "carpet"
- }
- ],
- "choropleth": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "type": "choropleth"
- }
- ],
- "contour": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "contour"
- }
- ],
- "contourcarpet": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "type": "contourcarpet"
- }
- ],
- "heatmap": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "heatmap"
- }
- ],
- "heatmapgl": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "heatmapgl"
- }
- ],
- "histogram": [
- {
- "marker": {
- "pattern": {
- "fillmode": "overlay",
- "size": 10,
- "solidity": 0.2
- }
- },
- "type": "histogram"
- }
- ],
- "histogram2d": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "histogram2d"
- }
- ],
- "histogram2dcontour": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "histogram2dcontour"
- }
- ],
- "mesh3d": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "type": "mesh3d"
- }
- ],
- "parcoords": [
- {
- "line": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "parcoords"
- }
- ],
- "pie": [
- {
- "automargin": true,
- "type": "pie"
- }
- ],
- "scatter": [
- {
- "fillpattern": {
- "fillmode": "overlay",
- "size": 10,
- "solidity": 0.2
- },
- "type": "scatter"
- }
- ],
- "scatter3d": [
- {
- "line": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scatter3d"
- }
- ],
- "scattercarpet": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scattercarpet"
- }
- ],
- "scattergeo": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scattergeo"
- }
- ],
- "scattergl": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scattergl"
- }
- ],
- "scattermapbox": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scattermapbox"
- }
- ],
- "scatterpolar": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scatterpolar"
- }
- ],
- "scatterpolargl": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scatterpolargl"
- }
- ],
- "scatterternary": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scatterternary"
- }
- ],
- "surface": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "surface"
- }
- ],
- "table": [
- {
- "cells": {
- "fill": {
- "color": "#EBF0F8"
- },
- "line": {
- "color": "white"
- }
- },
- "header": {
- "fill": {
- "color": "#C8D4E3"
- },
- "line": {
- "color": "white"
- }
- },
- "type": "table"
- }
- ]
- },
- "layout": {
- "annotationdefaults": {
- "arrowcolor": "#2a3f5f",
- "arrowhead": 0,
- "arrowwidth": 1
- },
- "autotypenumbers": "strict",
- "coloraxis": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "colorscale": {
- "diverging": [
- [
- 0,
- "#8e0152"
- ],
- [
- 0.1,
- "#c51b7d"
- ],
- [
- 0.2,
- "#de77ae"
- ],
- [
- 0.3,
- "#f1b6da"
- ],
- [
- 0.4,
- "#fde0ef"
- ],
- [
- 0.5,
- "#f7f7f7"
- ],
- [
- 0.6,
- "#e6f5d0"
- ],
- [
- 0.7,
- "#b8e186"
- ],
- [
- 0.8,
- "#7fbc41"
- ],
- [
- 0.9,
- "#4d9221"
- ],
- [
- 1,
- "#276419"
- ]
- ],
- "sequential": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "sequentialminus": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ]
- },
- "colorway": [
- "#636efa",
- "#EF553B",
- "#00cc96",
- "#ab63fa",
- "#FFA15A",
- "#19d3f3",
- "#FF6692",
- "#B6E880",
- "#FF97FF",
- "#FECB52"
- ],
- "font": {
- "color": "#2a3f5f"
- },
- "geo": {
- "bgcolor": "white",
- "lakecolor": "white",
- "landcolor": "#E5ECF6",
- "showlakes": true,
- "showland": true,
- "subunitcolor": "white"
- },
- "hoverlabel": {
- "align": "left"
- },
- "hovermode": "closest",
- "mapbox": {
- "style": "light"
- },
- "paper_bgcolor": "white",
- "plot_bgcolor": "#E5ECF6",
- "polar": {
- "angularaxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- },
- "bgcolor": "#E5ECF6",
- "radialaxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- }
- },
- "scene": {
- "xaxis": {
- "backgroundcolor": "#E5ECF6",
- "gridcolor": "white",
- "gridwidth": 2,
- "linecolor": "white",
- "showbackground": true,
- "ticks": "",
- "zerolinecolor": "white"
- },
- "yaxis": {
- "backgroundcolor": "#E5ECF6",
- "gridcolor": "white",
- "gridwidth": 2,
- "linecolor": "white",
- "showbackground": true,
- "ticks": "",
- "zerolinecolor": "white"
- },
- "zaxis": {
- "backgroundcolor": "#E5ECF6",
- "gridcolor": "white",
- "gridwidth": 2,
- "linecolor": "white",
- "showbackground": true,
- "ticks": "",
- "zerolinecolor": "white"
- }
- },
- "shapedefaults": {
- "line": {
- "color": "#2a3f5f"
- }
- },
- "ternary": {
- "aaxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- },
- "baxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- },
- "bgcolor": "#E5ECF6",
- "caxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- }
- },
- "title": {
- "x": 0.05
- },
- "xaxis": {
- "automargin": true,
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": "",
- "title": {
- "standoff": 15
- },
- "zerolinecolor": "white",
- "zerolinewidth": 2
- },
- "yaxis": {
- "automargin": true,
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": "",
- "title": {
- "standoff": 15
- },
- "zerolinecolor": "white",
- "zerolinewidth": 2
- }
- }
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.12"
},
- "xaxis": {
- "anchor": "y",
- "domain": [
- 0,
- 0.45
- ],
- "matches": "x3",
- "showticklabels": false
- },
- "xaxis2": {
- "anchor": "y2",
- "domain": [
- 0.55,
- 1
- ],
- "matches": "x4",
- "showticklabels": false
- },
- "xaxis3": {
- "anchor": "y3",
- "domain": [
- 0,
- 0.45
- ],
- "title": {
- "text": "Distance"
- }
- },
- "xaxis4": {
- "anchor": "y4",
- "domain": [
- 0.55,
- 1
- ],
- "title": {
- "text": "Distance"
- }
- },
- "yaxis": {
- "anchor": "x",
- "domain": [
- 0.55,
- 1
- ],
- "range": [
- 0,
- 80
- ],
- "title": {
- "text": "# Samples"
- }
- },
- "yaxis2": {
- "anchor": "x2",
- "domain": [
- 0.55,
- 1
- ],
- "matches": "y",
- "range": [
- 0,
- 80
- ],
- "showticklabels": false
- },
- "yaxis3": {
- "anchor": "x3",
- "domain": [
- 0,
- 0.45
- ],
- "range": [
- 0,
- 80
- ],
- "title": {
- "text": "# Samples"
- }
- },
- "yaxis4": {
- "anchor": "x4",
- "domain": [
- 0,
- 0.45
- ],
- "matches": "y3",
- "range": [
- 0,
- 80
- ],
- "showticklabels": false
+ "vscode": {
+ "interpreter": {
+ "hash": "3271154905f6ca90bb0c3951bd3f2265caaa6ab68492eb831b8ba5f0e8deab4d"
+ }
}
- }
- },
- "text/html": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# COLLAPSED\n",
- "import torch\n",
- "from nerfactory.cameras.rays import RayBundle\n",
- "from nerfactory.graphs.modules import ray_sampler\n",
- "import plotly.graph_objects as go\n",
- "from plotly.subplots import make_subplots\n",
- "\n",
- "\n",
- "num_samples = 1000\n",
- "near = 2\n",
- "far = 5\n",
- "train_stratified = False\n",
- "\n",
- "samplers = [\n",
- " ray_sampler.UniformSampler,\n",
- " ray_sampler.LinearDisparitySampler,\n",
- " ray_sampler.SqrtSampler,\n",
- " ray_sampler.LogSampler,\n",
- "]\n",
- "\n",
- "fig = make_subplots(\n",
- " rows=2,\n",
- " cols=2,\n",
- " subplot_titles=(\"Uniform\", \"Linear in Disparity\", \"Square Root\", \"Log Sampler\"),\n",
- " shared_xaxes=True,\n",
- " shared_yaxes=True,\n",
- " vertical_spacing=0.1,\n",
- ")\n",
- "\n",
- "for i, Sampler in enumerate(samplers):\n",
- " sampler = Sampler(num_samples=num_samples, train_stratified=train_stratified)\n",
- "\n",
- " ray_bundle = RayBundle(\n",
- " origins=torch.ones([1, 3]),\n",
- " directions=torch.ones([1, 3]),\n",
- " pixel_area=torch.ones([1, 1]),\n",
- " nears=torch.ones([1, 1]) * near,\n",
- " fars=torch.ones([1, 1]) * far,\n",
- " )\n",
- "\n",
- " samples = sampler.generate_ray_samples(ray_bundle)\n",
- "\n",
- " trace = go.Histogram(x=samples.frustums.starts[0, :, 0], nbinsx=50)\n",
- " fig.append_trace(trace, i // 2 + 1, i % 2 + 1)\n",
- "\n",
- "fig.update_yaxes(title_text=\"# Samples\", row=1, col=1)\n",
- "fig.update_yaxes(title_text=\"# Samples\", row=2, col=1)\n",
- "fig.update_xaxes(title_text=\"Distance\", row=2, col=1)\n",
- "fig.update_xaxes(title_text=\"Distance\", row=2, col=2)\n",
- "\n",
- "# Overlay both histograms\n",
- "fig.update_layout(height=700, hovermode=False, showlegend=False, margin=dict(l=20, r=20, t=50, b=20))\n",
- "fig.update_yaxes(range=[0, 80])\n",
- "fig.update_traces(opacity=0.7)\n",
- "fig.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## PDF Sampler\n",
- "\n",
- "The Probability Distribution Function (PDF) Sampler generates samples that match a given distribution. In the example below we first create a `UniformSampler` to generate a set of initial samples. We then assign weights to each of these samples to define the PDF (here it is an arbitrary funtion, but usually you would use the predicted weights from the field). The left plot the target PDF, on the right we plot a histogram of samples generated from the `PDFSampler`."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "tags": [
- "hide-input"
- ]
- },
- "outputs": [
- {
- "data": {
- "application/vnd.plotly.v1+json": {
- "config": {
- "plotlyServerURL": "https://plot.ly"
- },
- "data": [
- {
- "opacity": 0.7,
- "type": "scatter",
- "x": [
- 2,
- 2.1500000953674316,
- 2.1500000953674316,
- 2.299999952316284,
- 2.299999952316284,
- 2.450000047683716,
- 2.450000047683716,
- 2.5999999046325684,
- 2.5999999046325684,
- 2.75,
- 2.75,
- 2.9000000953674316,
- 2.9000000953674316,
- 3.049999952316284,
- 3.049999952316284,
- 3.200000047683716,
- 3.200000047683716,
- 3.3499999046325684,
- 3.3499999046325684,
- 3.5,
- 3.5,
- 3.6500000953674316,
- 3.6500000953674316,
- 3.799999952316284,
- 3.799999952316284,
- 3.950000047683716,
- 3.950000047683716,
- 4.100000381469727,
- 4.100000381469727,
- 4.25,
- 4.25,
- 4.400000095367432,
- 4.400000095367432,
- 4.550000190734863,
- 4.550000190734863,
- 4.699999809265137,
- 4.699999809265137,
- 4.849999904632568,
- 4.849999904632568,
- 5
- ],
- "xaxis": "x",
- "y": [
- 0.013052567839622498,
- 0.013052567839622498,
- 0.03800889104604721,
- 0.03800889104604721,
- 0.057813677936792374,
- 0.057813677936792374,
- 0.06855124980211258,
- 0.06855124980211258,
- 0.06847988814115524,
- 0.06847988814115524,
- 0.058445800095796585,
- 0.058445800095796585,
- 0.041673533618450165,
- 0.041673533618450165,
- 0.022983169183135033,
- 0.022983169183135033,
- 0.007623155601322651,
- 0.007623155601322651,
- 0,
- 0,
- 0.002611340256407857,
- 0.002611340256407857,
- 0.015439355745911598,
- 0.015439355745911598,
- 0.03595082834362984,
- 0.03595082834362984,
- 0.05970405042171478,
- 0.05970405042171478,
- 0.0814160406589508,
- 0.0814160406589508,
- 0.09623293578624725,
- 0.09623293578624725,
- 0.10089751332998276,
- 0.10089751332998276,
- 0.09453219175338745,
- 0.09453219175338745,
- 0.07884885370731354,
- 0.07884885370731354,
- 0.057734981179237366,
- 0.057734981179237366
- ],
- "yaxis": "y"
- },
- {
- "nbinsx": 100,
- "opacity": 0.7,
- "type": "histogram",
- "x": [
- 2,
- 2.007808208465576,
- 2.0156164169311523,
- 2.0234246253967285,
- 2.031233072280884,
- 2.03904128074646,
- 2.046849489212036,
- 2.0546576976776123,
- 2.0624659061431885,
- 2.0702741146087646,
- 2.07808256149292,
- 2.085890769958496,
- 2.0936989784240723,
- 2.1015071868896484,
- 2.1093153953552246,
- 2.117123603820801,
- 2.124931812286377,
- 2.1327402591705322,
- 2.1405484676361084,
- 2.1483566761016846,
- 2.1529603004455566,
- 2.156709671020508,
- 2.16045880317688,
- 2.164208173751831,
- 2.1679575443267822,
- 2.1717066764831543,
- 2.1754560470581055,
- 2.1792054176330566,
- 2.182954788208008,
- 2.18670392036438,
- 2.190453290939331,
- 2.1942026615142822,
- 2.1979517936706543,
- 2.2017011642456055,
- 2.2054505348205566,
- 2.209199905395508,
- 2.21294903755188,
- 2.216698408126831,
- 2.2204477787017822,
- 2.2241969108581543,
- 2.2279462814331055,
- 2.2316956520080566,
- 2.235445022583008,
- 2.23919415473938,
- 2.242943525314331,
- 2.2466928958892822,
- 2.2504420280456543,
- 2.2541913986206055,
- 2.2579407691955566,
- 2.2616899013519287,
- 2.26543927192688,
- 2.269188642501831,
- 2.2729380130767822,
- 2.2766871452331543,
- 2.2804365158081055,
- 2.2841858863830566,
- 2.287935256958008,
- 2.29168438911438,
- 2.295433759689331,
- 2.2991831302642822,
- 2.3020758628845215,
- 2.304730176925659,
- 2.307384729385376,
- 2.3100390434265137,
- 2.3126933574676514,
- 2.315347671508789,
- 2.3180019855499268,
- 2.3206562995910645,
- 2.323310613632202,
- 2.32596492767334,
- 2.3286192417144775,
- 2.3312735557556152,
- 2.333927869796753,
- 2.3365821838378906,
- 2.3392364978790283,
- 2.341891050338745,
- 2.344545364379883,
- 2.3471996784210205,
- 2.349853992462158,
- 2.352508306503296,
- 2.3551626205444336,
- 2.3578169345855713,
- 2.360471248626709,
- 2.3631255626678467,
- 2.3657798767089844,
- 2.368434190750122,
- 2.3710885047912598,
- 2.3737430572509766,
- 2.3763973712921143,
- 2.379051685333252,
- 2.3817059993743896,
- 2.3843603134155273,
- 2.387014627456665,
- 2.3896689414978027,
- 2.3923232555389404,
- 2.394977569580078,
- 2.397631883621216,
- 2.4002861976623535,
- 2.402940511703491,
- 2.405594825744629,
- 2.4082493782043457,
- 2.4109036922454834,
- 2.413558006286621,
- 2.416212320327759,
- 2.4188666343688965,
- 2.421520948410034,
- 2.424175262451172,
- 2.4268295764923096,
- 2.4294838905334473,
- 2.432138204574585,
- 2.4347925186157227,
- 2.4374468326568604,
- 2.440101385116577,
- 2.442755699157715,
- 2.4454100131988525,
- 2.4480643272399902,
- 2.450620412826538,
- 2.452911853790283,
- 2.4552032947540283,
- 2.4574949741363525,
- 2.4597864151000977,
- 2.4620778560638428,
- 2.464369297027588,
- 2.466660976409912,
- 2.4689524173736572,
- 2.4712438583374023,
- 2.4735352993011475,
- 2.4758267402648926,
- 2.478118419647217,
- 2.480409860610962,
- 2.482701301574707,
- 2.484992742538452,
- 2.4872844219207764,
- 2.4895758628845215,
- 2.4918673038482666,
- 2.4941587448120117,
- 2.496450424194336,
- 2.498741865158081,
- 2.501033306121826,
- 2.5033247470855713,
- 2.5056161880493164,
- 2.5079078674316406,
- 2.5101993083953857,
- 2.512490749359131,
- 2.514782190322876,
- 2.5170738697052,
- 2.5193653106689453,
- 2.5216567516326904,
- 2.5239481925964355,
- 2.5262396335601807,
- 2.528531312942505,
- 2.53082275390625,
- 2.533114194869995,
- 2.5354056358337402,
- 2.5376973152160645,
- 2.5399887561798096,
- 2.5422801971435547,
- 2.5445716381073,
- 2.546863317489624,
- 2.549154758453369,
- 2.5514461994171143,
- 2.5537376403808594,
- 2.5560293197631836,
- 2.5583207607269287,
- 2.560612201690674,
- 2.562903642654419,
- 2.565195083618164,
- 2.5674867630004883,
- 2.5697782039642334,
- 2.5720696449279785,
- 2.5743610858917236,
- 2.576652765274048,
- 2.578944206237793,
- 2.581235647201538,
- 2.583527088165283,
- 2.5858187675476074,
- 2.5881102085113525,
- 2.5904016494750977,
- 2.5926930904388428,
- 2.594984531402588,
- 2.597276210784912,
- 2.5995676517486572,
- 2.601860761642456,
- 2.604154348373413,
- 2.60644793510437,
- 2.608741521835327,
- 2.611035108566284,
- 2.613328695297241,
- 2.6156222820281982,
- 2.6179158687591553,
- 2.6202094554901123,
- 2.6225030422210693,
- 2.6247966289520264,
- 2.6270902156829834,
- 2.6293838024139404,
- 2.6316773891448975,
- 2.6339709758758545,
- 2.6362645626068115,
- 2.6385581493377686,
- 2.6408517360687256,
- 2.6431453227996826,
- 2.6454389095306396,
- 2.6477324962615967,
- 2.6500260829925537,
- 2.6523196697235107,
- 2.6546132564544678,
- 2.656906843185425,
- 2.659200429916382,
- 2.661494016647339,
- 2.663787603378296,
- 2.666081190109253,
- 2.66837477684021,
- 2.670668363571167,
- 2.672961950302124,
- 2.675255537033081,
- 2.677549123764038,
- 2.679842710494995,
- 2.682136297225952,
- 2.684429883956909,
- 2.686723470687866,
- 2.689016819000244,
- 2.691310405731201,
- 2.693603992462158,
- 2.6958975791931152,
- 2.6981911659240723,
- 2.7004847526550293,
- 2.7027783393859863,
- 2.7050719261169434,
- 2.7073655128479004,
- 2.7096590995788574,
- 2.7119526863098145,
- 2.7142462730407715,
- 2.7165398597717285,
- 2.7188334465026855,
- 2.7211270332336426,
- 2.7234206199645996,
- 2.7257142066955566,
- 2.7280077934265137,
- 2.7303013801574707,
- 2.7325949668884277,
- 2.7348885536193848,
- 2.737182140350342,
- 2.739475727081299,
- 2.741769313812256,
- 2.744062900543213,
- 2.74635648727417,
- 2.748650074005127,
- 2.751081943511963,
- 2.7537119388580322,
- 2.7563416957855225,
- 2.7589714527130127,
- 2.761601209640503,
- 2.7642312049865723,
- 2.7668609619140625,
- 2.7694907188415527,
- 2.772120714187622,
- 2.7747504711151123,
- 2.7773802280426025,
- 2.7800099849700928,
- 2.782639741897583,
- 2.7852697372436523,
- 2.7878994941711426,
- 2.790529251098633,
- 2.793159008026123,
- 2.7957890033721924,
- 2.7984187602996826,
- 2.801048517227173,
- 2.803678274154663,
- 2.8063082695007324,
- 2.8089380264282227,
- 2.811567783355713,
- 2.814197540283203,
- 2.8168275356292725,
- 2.8194572925567627,
- 2.822087049484253,
- 2.8247170448303223,
- 2.8273468017578125,
- 2.8299765586853027,
- 2.832606554031372,
- 2.8352363109588623,
- 2.8378660678863525,
- 2.8404958248138428,
- 2.843125581741333,
- 2.8457555770874023,
- 2.8483853340148926,
- 2.851015090942383,
- 2.853644847869873,
- 2.8562748432159424,
- 2.8589046001434326,
- 2.861534357070923,
- 2.864164352416992,
- 2.8667941093444824,
- 2.8694238662719727,
- 2.872053623199463,
- 2.8746836185455322,
- 2.8773133754730225,
- 2.8799431324005127,
- 2.882572889328003,
- 2.8852028846740723,
- 2.8878326416015625,
- 2.8904623985290527,
- 2.893092155456543,
- 2.8957221508026123,
- 2.8983519077301025,
- 2.9013004302978516,
- 2.9047837257385254,
- 2.9082672595977783,
- 2.911750555038452,
- 2.915234088897705,
- 2.918717384338379,
- 2.922200918197632,
- 2.9256842136383057,
- 2.9291675090789795,
- 2.9326508045196533,
- 2.9361343383789062,
- 2.93961763381958,
- 2.943101167678833,
- 2.946584463119507,
- 2.9500679969787598,
- 2.9535512924194336,
- 2.9570348262786865,
- 2.9605181217193604,
- 2.9640016555786133,
- 2.967484951019287,
- 2.97096848487854,
- 2.974451780319214,
- 2.977935314178467,
- 2.9814186096191406,
- 2.9849019050598145,
- 2.9883854389190674,
- 2.991868734359741,
- 2.995352268218994,
- 2.998835563659668,
- 3.002319097518921,
- 3.0058023929595947,
- 3.0092859268188477,
- 3.0127692222595215,
- 3.0162527561187744,
- 3.0197360515594482,
- 3.023219585418701,
- 3.026702880859375,
- 3.030186414718628,
- 3.0336697101593018,
- 3.0371532440185547,
- 3.0406365394592285,
- 3.0441198348999023,
- 3.0476033687591553,
- 3.0517024993896484,
- 3.057159900665283,
- 3.062617063522339,
- 3.0680747032165527,
- 3.0735318660736084,
- 3.078989267349243,
- 3.084446430206299,
- 3.0899040699005127,
- 3.0953612327575684,
- 3.100818634033203,
- 3.106276035308838,
- 3.1117334365844727,
- 3.1171905994415283,
- 3.122647762298584,
- 3.1281051635742188,
- 3.1335625648498535,
- 3.139019727706909,
- 3.144477367401123,
- 3.1499345302581787,
- 3.1553919315338135,
- 3.160849094390869,
- 3.166306734085083,
- 3.1717638969421387,
- 3.1772212982177734,
- 3.182678699493408,
- 3.188136100769043,
- 3.1935932636260986,
- 3.1990506649017334,
- 3.208436965942383,
- 3.2186505794525146,
- 3.2288644313812256,
- 3.2390782833099365,
- 3.2492921352386475,
- 3.2595059871673584,
- 3.2697198390960693,
- 3.2799336910247803,
- 3.290147542953491,
- 3.300361156463623,
- 3.310574769973755,
- 3.320788860321045,
- 3.3310024738311768,
- 3.341216564178467,
- 3.352520704269409,
- 3.370521068572998,
- 3.3885207176208496,
- 3.4065210819244385,
- 3.424520969390869,
- 3.442521333694458,
- 3.4605209827423096,
- 3.4785213470458984,
- 3.496521234512329,
- 3.511514663696289,
- 3.525787353515625,
- 3.540060043334961,
- 3.554332733154297,
- 3.568605661392212,
- 3.582878351211548,
- 3.597151517868042,
- 3.611424207687378,
- 3.625697374343872,
- 3.639970064163208,
- 3.6521034240722656,
- 3.6591789722442627,
- 3.666254758834839,
- 3.673330307006836,
- 3.680406093597412,
- 3.687481641769409,
- 3.6945574283599854,
- 3.7016329765319824,
- 3.7087085247039795,
- 3.7157840728759766,
- 3.7228598594665527,
- 3.72993540763855,
- 3.737011194229126,
- 3.744086742401123,
- 3.751162528991699,
- 3.7582380771636963,
- 3.7653138637542725,
- 3.7723894119262695,
- 3.7794651985168457,
- 3.7865407466888428,
- 3.793616533279419,
- 3.8003830909729004,
- 3.804300308227539,
- 3.8082175254821777,
- 3.8121347427368164,
- 3.816051959991455,
- 3.8199691772460938,
- 3.8238863945007324,
- 3.82780385017395,
- 3.8317208290100098,
- 3.8356382846832275,
- 3.839555501937866,
- 3.843472719192505,
- 3.8473899364471436,
- 3.8513071537017822,
- 3.855224370956421,
- 3.8591415882110596,
- 3.8630588054656982,
- 3.866976261138916,
- 3.8708932399749756,
- 3.8748104572296143,
- 3.878727674484253,
- 3.8826448917388916,
- 3.8865621089935303,
- 3.890479564666748,
- 3.8943967819213867,
- 3.8983139991760254,
- 3.902231216430664,
- 3.9061484336853027,
- 3.9100656509399414,
- 3.91398286819458,
- 3.9179000854492188,
- 3.9218175411224365,
- 3.925734519958496,
- 3.929651975631714,
- 3.9335691928863525,
- 3.937486171722412,
- 3.941403388977051,
- 3.9453208446502686,
- 3.9492380619049072,
- 3.952080011367798,
- 3.954662322998047,
- 3.957244873046875,
- 3.959827184677124,
- 3.962409496307373,
- 3.964991807937622,
- 3.967574119567871,
- 3.97015643119812,
- 3.9727389812469482,
- 3.9753212928771973,
- 3.9779036045074463,
- 3.9804859161376953,
- 3.9830682277679443,
- 3.9856505393981934,
- 3.9882328510284424,
- 3.9908151626586914,
- 3.9933977127075195,
- 3.9959800243377686,
- 3.9985623359680176,
- 4.001144886016846,
- 4.003726959228516,
- 4.006309509277344,
- 4.008891582489014,
- 4.011474132537842,
- 4.01405668258667,
- 4.01663875579834,
- 4.019221305847168,
- 4.021803379058838,
- 4.024385929107666,
- 4.026968002319336,
- 4.029550552368164,
- 4.032133102416992,
- 4.034715175628662,
- 4.03729772567749,
- 4.03987979888916,
- 4.042462348937988,
- 4.045044422149658,
- 4.047626972198486,
- 4.050209045410156,
- 4.052791595458984,
- 4.055373668670654,
- 4.057956218719482,
- 4.060538291931152,
- 4.0631208419799805,
- 4.065703392028809,
- 4.0682854652404785,
- 4.070868015289307,
- 4.073450565338135,
- 4.076032638549805,
- 4.078615188598633,
- 4.081197261810303,
- 4.083779811859131,
- 4.086362361907959,
- 4.088944435119629,
- 4.091526985168457,
- 4.094109058380127,
- 4.096691608428955,
- 4.099273681640625,
- 4.101415634155273,
- 4.103384494781494,
- 4.105353355407715,
- 4.107322692871094,
- 4.1092915534973145,
- 4.111260414123535,
- 4.113229751586914,
- 4.115198612213135,
- 4.1171674728393555,
- 4.119136810302734,
- 4.121105670928955,
- 4.123074531555176,
- 4.1250433921813965,
- 4.127012729644775,
- 4.128981590270996,
- 4.130950450897217,
- 4.132919788360596,
- 4.134888648986816,
- 4.136857509613037,
- 4.138826847076416,
- 4.140795707702637,
- 4.142765045166016,
- 4.144733905792236,
- 4.146702766418457,
- 4.148671627044678,
- 4.150640964508057,
- 4.152609825134277,
- 4.154578685760498,
- 4.156548023223877,
- 4.158516883850098,
- 4.160485744476318,
- 4.162455081939697,
- 4.164423942565918,
- 4.166393280029297,
- 4.168362140655518,
- 4.170331001281738,
- 4.172299861907959,
- 4.174269199371338,
- 4.176238059997559,
- 4.178206920623779,
- 4.180176258087158,
- 4.182145118713379,
- 4.1841139793396,
- 4.1860833168029785,
- 4.188052177429199,
- 4.19002103805542,
- 4.191990375518799,
- 4.1939592361450195,
- 4.19592809677124,
- 4.197897434234619,
- 4.19986629486084,
- 4.2018351554870605,
- 4.203804016113281,
- 4.20577335357666,
- 4.207742214202881,
- 4.20971155166626,
- 4.2116804122924805,
- 4.213649272918701,
- 4.21561861038208,
- 4.217587471008301,
- 4.2195563316345215,
- 4.2215256690979,
- 4.223494529724121,
- 4.225463390350342,
- 4.2274322509765625,
- 4.229401588439941,
- 4.231370449066162,
- 4.233339786529541,
- 4.235308647155762,
- 4.237277507781982,
- 4.239246845245361,
- 4.241215705871582,
- 4.243184566497803,
- 4.245153903961182,
- 4.247122764587402,
- 4.249091625213623,
- 4.250912666320801,
- 4.252607345581055,
- 4.25430154800415,
- 4.255995750427246,
- 4.2576904296875,
- 4.259384632110596,
- 4.26107931137085,
- 4.262773513793945,
- 4.264467716217041,
- 4.266162395477295,
- 4.267856597900391,
- 4.269550800323486,
- 4.27124547958374,
- 4.272939682006836,
- 4.27463436126709,
- 4.2763285636901855,
- 4.278022766113281,
- 4.279717445373535,
- 4.281411647796631,
- 4.283106327056885,
- 4.2848005294799805,
- 4.286495208740234,
- 4.28818941116333,
- 4.289883613586426,
- 4.2915778160095215,
- 4.293272495269775,
- 4.294966697692871,
- 4.296661376953125,
- 4.298355579376221,
- 4.300050258636475,
- 4.30174446105957,
- 4.303438663482666,
- 4.30513334274292,
- 4.306827545166016,
- 4.3085222244262695,
- 4.310216426849365,
- 4.311910629272461,
- 4.313605308532715,
- 4.3152995109558105,
- 4.316993713378906,
- 4.31868839263916,
- 4.320382595062256,
- 4.32207727432251,
- 4.3237714767456055,
- 4.325465679168701,
- 4.327160358428955,
- 4.328854560852051,
- 4.330549240112305,
- 4.3322434425354,
- 4.333938121795654,
- 4.33563232421875,
- 4.337326526641846,
- 4.3390212059021,
- 4.340715408325195,
- 4.342409610748291,
- 4.344104290008545,
- 4.345798492431641,
- 4.3474931716918945,
- 4.34918737411499,
- 4.350881576538086,
- 4.35257625579834,
- 4.3542704582214355,
- 4.3559651374816895,
- 4.357659339904785,
- 4.359353542327881,
- 4.361048221588135,
- 4.3627424240112305,
- 4.364436626434326,
- 4.36613130569458,
- 4.367825508117676,
- 4.36952018737793,
- 4.371214389801025,
- 4.372908592224121,
- 4.374603271484375,
- 4.376297473907471,
- 4.377992153167725,
- 4.37968635559082,
- 4.381381034851074,
- 4.38307523727417,
- 4.384769439697266,
- 4.3864641189575195,
- 4.388158321380615,
- 4.389853000640869,
- 4.391547203063965,
- 4.3932414054870605,
- 4.3949360847473145,
- 4.39663028717041,
- 4.398324489593506,
- 4.400018215179443,
- 4.401641368865967,
- 4.40326452255249,
- 4.404887676239014,
- 4.406510829925537,
- 4.4081339836120605,
- 4.409757137298584,
- 4.411380290985107,
- 4.413002967834473,
- 4.414626598358154,
- 4.4162492752075195,
- 4.417872428894043,
- 4.419495582580566,
- 4.42111873626709,
- 4.422741889953613,
- 4.424365043640137,
- 4.42598819732666,
- 4.427611351013184,
- 4.429234504699707,
- 4.4308576583862305,
- 4.432480812072754,
- 4.434103965759277,
- 4.435727119445801,
- 4.437350273132324,
- 4.438973426818848,
- 4.440596580505371,
- 4.442219257354736,
- 4.44384241104126,
- 4.445465564727783,
- 4.447088718414307,
- 4.44871187210083,
- 4.4503350257873535,
- 4.451958179473877,
- 4.4535813331604,
- 4.455204486846924,
- 4.456827640533447,
- 4.458450794219971,
- 4.460073947906494,
- 4.461697101593018,
- 4.463319778442383,
- 4.464942932128906,
- 4.46656608581543,
- 4.468189239501953,
- 4.469812393188477,
- 4.471435546875,
- 4.473058700561523,
- 4.474681854248047,
- 4.47630500793457,
- 4.477928161621094,
- 4.479551315307617,
- 4.481174468994141,
- 4.482797622680664,
- 4.4844207763671875,
- 4.486043930053711,
- 4.487666606903076,
- 4.4892897605896,
- 4.490912914276123,
- 4.4925360679626465,
- 4.49415922164917,
- 4.495782375335693,
- 4.497405529022217,
- 4.49902868270874,
- 4.500651836395264,
- 4.502274990081787,
- 4.5038981437683105,
- 4.505521297454834,
- 4.507144451141357,
- 4.508767604827881,
- 4.510390281677246,
- 4.512013912200928,
- 4.513636589050293,
- 4.515259742736816,
- 4.51688289642334,
- 4.518506050109863,
- 4.520129203796387,
- 4.52175235748291,
- 4.523375511169434,
- 4.524998664855957,
- 4.5266218185424805,
- 4.528244972229004,
- 4.529868125915527,
- 4.531491279602051,
- 4.533114433288574,
- 4.534737586975098,
- 4.536360740661621,
- 4.5379838943481445,
- 4.53960657119751,
- 4.541229724884033,
- 4.542852878570557,
- 4.54447603225708,
- 4.5460991859436035,
- 4.547722339630127,
- 4.54934549331665,
- 4.551027774810791,
- 4.5527496337890625,
- 4.554471492767334,
- 4.5561933517456055,
- 4.557915210723877,
- 4.559637546539307,
- 4.561359405517578,
- 4.56308126449585,
- 4.564803123474121,
- 4.566524982452393,
- 4.568247318267822,
- 4.569969177246094,
- 4.571691036224365,
- 4.573412895202637,
- 4.575134754180908,
- 4.576857089996338,
- 4.578578948974609,
- 4.580300807952881,
- 4.582022666931152,
- 4.583744525909424,
- 4.5854668617248535,
- 4.587188720703125,
- 4.5889105796813965,
- 4.590632438659668,
- 4.592354774475098,
- 4.594076156616211,
- 4.595798492431641,
- 4.597520351409912,
- 4.599242210388184,
- 4.600964069366455,
- 4.602685928344727,
- 4.604408264160156,
- 4.606130123138428,
- 4.607851982116699,
- 4.609573841094971,
- 4.611295700073242,
- 4.613018035888672,
- 4.614739894866943,
- 4.616461753845215,
- 4.618183612823486,
- 4.619905948638916,
- 4.6216278076171875,
- 4.623349666595459,
- 4.6250715255737305,
- 4.626793384552002,
- 4.628515720367432,
- 4.630237579345703,
- 4.631959438323975,
- 4.633681297302246,
- 4.635403156280518,
- 4.637125492095947,
- 4.638847351074219,
- 4.64056921005249,
- 4.642291069030762,
- 4.644012928009033,
- 4.645734786987305,
- 4.647457122802734,
- 4.649178981781006,
- 4.650900840759277,
- 4.652622699737549,
- 4.65434455871582,
- 4.65606689453125,
- 4.6577887535095215,
- 4.659510612487793,
- 4.6612324714660645,
- 4.662954330444336,
- 4.664676666259766,
- 4.666398525238037,
- 4.668120384216309,
- 4.66984224319458,
- 4.671564102172852,
- 4.673286437988281,
- 4.675008296966553,
- 4.676730155944824,
- 4.678452014923096,
- 4.680173873901367,
- 4.681896209716797,
- 4.683618068695068,
- 4.68533992767334,
- 4.687061786651611,
- 4.688784122467041,
- 4.6905059814453125,
- 4.692227840423584,
- 4.6939496994018555,
- 4.695671558380127,
- 4.697393894195557,
- 4.699115753173828,
- 4.700985431671143,
- 4.703011512756348,
- 4.7050371170043945,
- 4.7070631980896,
- 4.7090888023376465,
- 4.711114883422852,
- 4.713140964508057,
- 4.7151665687561035,
- 4.717192649841309,
- 4.719218730926514,
- 4.7212443351745605,
- 4.723270416259766,
- 4.725296497344971,
- 4.727322101593018,
- 4.729348182678223,
- 4.731374263763428,
- 4.733399868011475,
- 4.73542594909668,
- 4.737452030181885,
- 4.739477634429932,
- 4.741503715515137,
- 4.743529796600342,
- 4.745555400848389,
- 4.747581481933594,
- 4.749607086181641,
- 4.751633167266846,
- 4.753659248352051,
- 4.755684852600098,
- 4.757710933685303,
- 4.759737014770508,
- 4.761762619018555,
- 4.76378870010376,
- 4.765814304351807,
- 4.767840385437012,
- 4.769866466522217,
- 4.771892547607422,
- 4.773918151855469,
- 4.775944232940674,
- 4.777970314025879,
- 4.779995918273926,
- 4.782021999359131,
- 4.784048080444336,
- 4.786073684692383,
- 4.788099765777588,
- 4.790125370025635,
- 4.79215145111084,
- 4.794177532196045,
- 4.796203136444092,
- 4.798229217529297,
- 4.800255298614502,
- 4.802280902862549,
- 4.804306983947754,
- 4.806333065032959,
- 4.808358669281006,
- 4.810384750366211,
- 4.812410831451416,
- 4.814436435699463,
- 4.816462516784668,
- 4.818488121032715,
- 4.82051420211792,
- 4.822540283203125,
- 4.824565887451172,
- 4.826591968536377,
- 4.828618049621582,
- 4.830643653869629,
- 4.832669734954834,
- 4.834695816040039,
- 4.836721420288086,
- 4.838747501373291,
- 4.840773582458496,
- 4.842799186706543,
- 4.844825267791748,
- 4.846851348876953,
- 4.848876953125,
- 4.851184368133545,
- 4.853841781616211,
- 4.856499195098877,
- 4.859157085418701,
- 4.861814022064209,
- 4.864471435546875,
- 4.867128849029541,
- 4.869786739349365,
- 4.872444152832031,
- 4.875101089477539,
- 4.877758502960205,
- 4.880416393280029,
- 4.883073806762695,
- 4.885731220245361,
- 4.888388633728027,
- 4.891046047210693,
- 4.893702983856201,
- 4.896360397338867,
- 4.899017810821533,
- 4.901675701141357,
- 4.904332637786865,
- 4.906990051269531,
- 4.909647464752197,
- 4.9123053550720215,
- 4.9149627685546875,
- 4.9176201820373535,
- 4.920277118682861,
- 4.9229350090026855,
- 4.925592422485352,
- 4.928249835968018,
- 4.930907249450684,
- 4.93356466293335,
- 4.936222076416016,
- 4.938879489898682,
- 4.941536903381348,
- 4.944194316864014,
- 4.94685173034668,
- 4.949509143829346,
- 4.952166557312012,
- 4.954823970794678,
- 4.957481384277344,
- 4.96013879776001,
- 4.962796211242676,
- 4.965453624725342,
- 4.968111038208008,
- 4.970768451690674,
- 4.97342586517334,
- 4.976083278656006,
- 4.978740692138672,
- 4.981398105621338,
- 4.984055519104004,
- 4.98671293258667,
- 4.989370346069336,
- 4.992027759552002,
- 4.994685173034668,
- 4.997342586517334
- ],
- "xaxis": "x2",
- "yaxis": "y2"
- }
- ],
- "layout": {
- "annotations": [
- {
- "font": {
- "size": 16
- },
- "showarrow": false,
- "text": "PDF",
- "x": 0.225,
- "xanchor": "center",
- "xref": "paper",
- "y": 1,
- "yanchor": "bottom",
- "yref": "paper"
- },
- {
- "font": {
- "size": 16
- },
- "showarrow": false,
- "text": "Samples",
- "x": 0.775,
- "xanchor": "center",
- "xref": "paper",
- "y": 1,
- "yanchor": "bottom",
- "yref": "paper"
- }
- ],
- "height": 400,
- "hovermode": false,
- "margin": {
- "b": 20,
- "l": 20,
- "r": 20,
- "t": 50
- },
- "showlegend": false,
- "template": {
- "data": {
- "bar": [
- {
- "error_x": {
- "color": "#2a3f5f"
- },
- "error_y": {
- "color": "#2a3f5f"
- },
- "marker": {
- "line": {
- "color": "#E5ECF6",
- "width": 0.5
- },
- "pattern": {
- "fillmode": "overlay",
- "size": 10,
- "solidity": 0.2
- }
- },
- "type": "bar"
- }
- ],
- "barpolar": [
- {
- "marker": {
- "line": {
- "color": "#E5ECF6",
- "width": 0.5
- },
- "pattern": {
- "fillmode": "overlay",
- "size": 10,
- "solidity": 0.2
- }
- },
- "type": "barpolar"
- }
- ],
- "carpet": [
- {
- "aaxis": {
- "endlinecolor": "#2a3f5f",
- "gridcolor": "white",
- "linecolor": "white",
- "minorgridcolor": "white",
- "startlinecolor": "#2a3f5f"
- },
- "baxis": {
- "endlinecolor": "#2a3f5f",
- "gridcolor": "white",
- "linecolor": "white",
- "minorgridcolor": "white",
- "startlinecolor": "#2a3f5f"
- },
- "type": "carpet"
- }
- ],
- "choropleth": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "type": "choropleth"
- }
- ],
- "contour": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "contour"
- }
- ],
- "contourcarpet": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "type": "contourcarpet"
- }
- ],
- "heatmap": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "heatmap"
- }
- ],
- "heatmapgl": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "heatmapgl"
- }
- ],
- "histogram": [
- {
- "marker": {
- "pattern": {
- "fillmode": "overlay",
- "size": 10,
- "solidity": 0.2
- }
- },
- "type": "histogram"
- }
- ],
- "histogram2d": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "histogram2d"
- }
- ],
- "histogram2dcontour": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "histogram2dcontour"
- }
- ],
- "mesh3d": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "type": "mesh3d"
- }
- ],
- "parcoords": [
- {
- "line": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "parcoords"
- }
- ],
- "pie": [
- {
- "automargin": true,
- "type": "pie"
- }
- ],
- "scatter": [
- {
- "fillpattern": {
- "fillmode": "overlay",
- "size": 10,
- "solidity": 0.2
- },
- "type": "scatter"
- }
- ],
- "scatter3d": [
- {
- "line": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scatter3d"
- }
- ],
- "scattercarpet": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scattercarpet"
- }
- ],
- "scattergeo": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scattergeo"
- }
- ],
- "scattergl": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scattergl"
- }
- ],
- "scattermapbox": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scattermapbox"
- }
- ],
- "scatterpolar": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scatterpolar"
- }
- ],
- "scatterpolargl": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scatterpolargl"
- }
- ],
- "scatterternary": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scatterternary"
- }
- ],
- "surface": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "surface"
- }
- ],
- "table": [
- {
- "cells": {
- "fill": {
- "color": "#EBF0F8"
- },
- "line": {
- "color": "white"
- }
- },
- "header": {
- "fill": {
- "color": "#C8D4E3"
- },
- "line": {
- "color": "white"
- }
- },
- "type": "table"
- }
- ]
- },
- "layout": {
- "annotationdefaults": {
- "arrowcolor": "#2a3f5f",
- "arrowhead": 0,
- "arrowwidth": 1
- },
- "autotypenumbers": "strict",
- "coloraxis": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "colorscale": {
- "diverging": [
- [
- 0,
- "#8e0152"
- ],
- [
- 0.1,
- "#c51b7d"
- ],
- [
- 0.2,
- "#de77ae"
- ],
- [
- 0.3,
- "#f1b6da"
- ],
- [
- 0.4,
- "#fde0ef"
- ],
- [
- 0.5,
- "#f7f7f7"
- ],
- [
- 0.6,
- "#e6f5d0"
- ],
- [
- 0.7,
- "#b8e186"
- ],
- [
- 0.8,
- "#7fbc41"
- ],
- [
- 0.9,
- "#4d9221"
- ],
- [
- 1,
- "#276419"
- ]
- ],
- "sequential": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "sequentialminus": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ]
- },
- "colorway": [
- "#636efa",
- "#EF553B",
- "#00cc96",
- "#ab63fa",
- "#FFA15A",
- "#19d3f3",
- "#FF6692",
- "#B6E880",
- "#FF97FF",
- "#FECB52"
- ],
- "font": {
- "color": "#2a3f5f"
- },
- "geo": {
- "bgcolor": "white",
- "lakecolor": "white",
- "landcolor": "#E5ECF6",
- "showlakes": true,
- "showland": true,
- "subunitcolor": "white"
- },
- "hoverlabel": {
- "align": "left"
- },
- "hovermode": "closest",
- "mapbox": {
- "style": "light"
- },
- "paper_bgcolor": "white",
- "plot_bgcolor": "#E5ECF6",
- "polar": {
- "angularaxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- },
- "bgcolor": "#E5ECF6",
- "radialaxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- }
- },
- "scene": {
- "xaxis": {
- "backgroundcolor": "#E5ECF6",
- "gridcolor": "white",
- "gridwidth": 2,
- "linecolor": "white",
- "showbackground": true,
- "ticks": "",
- "zerolinecolor": "white"
- },
- "yaxis": {
- "backgroundcolor": "#E5ECF6",
- "gridcolor": "white",
- "gridwidth": 2,
- "linecolor": "white",
- "showbackground": true,
- "ticks": "",
- "zerolinecolor": "white"
- },
- "zaxis": {
- "backgroundcolor": "#E5ECF6",
- "gridcolor": "white",
- "gridwidth": 2,
- "linecolor": "white",
- "showbackground": true,
- "ticks": "",
- "zerolinecolor": "white"
- }
- },
- "shapedefaults": {
- "line": {
- "color": "#2a3f5f"
- }
- },
- "ternary": {
- "aaxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- },
- "baxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- },
- "bgcolor": "#E5ECF6",
- "caxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- }
- },
- "title": {
- "x": 0.05
- },
- "xaxis": {
- "automargin": true,
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": "",
- "title": {
- "standoff": 15
- },
- "zerolinecolor": "white",
- "zerolinewidth": 2
- },
- "yaxis": {
- "automargin": true,
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": "",
- "title": {
- "standoff": 15
- },
- "zerolinecolor": "white",
- "zerolinewidth": 2
- }
- }
- },
- "xaxis": {
- "anchor": "y",
- "domain": [
- 0,
- 0.45
- ],
- "title": {
- "text": "Distance"
- }
- },
- "xaxis2": {
- "anchor": "y2",
- "domain": [
- 0.55,
- 1
- ],
- "title": {
- "text": "Distance"
- }
- },
- "yaxis": {
- "anchor": "x",
- "domain": [
- 0,
- 1
- ]
- },
- "yaxis2": {
- "anchor": "x2",
- "domain": [
- 0,
- 1
- ],
- "title": {
- "text": "# Samples"
- }
- }
- }
- },
- "text/html": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# COLLAPSED\n",
- "import torch\n",
- "from nerfactory.cameras.rays import RayBundle\n",
- "from nerfactory.graphs.modules import ray_sampler\n",
- "import plotly.graph_objects as go\n",
- "from plotly.subplots import make_subplots\n",
- "\n",
- "num_coarse_samples = 20\n",
- "num_samples = 1000\n",
- "near = 2\n",
- "far = 5\n",
- "train_stratified = False\n",
- "\n",
- "fig = make_subplots(\n",
- " rows=1,\n",
- " cols=2,\n",
- " subplot_titles=(\"PDF\", \"Samples\"),\n",
- ")\n",
- "\n",
- "uniform_sampler = ray_sampler.UniformSampler(num_samples=num_coarse_samples, train_stratified=train_stratified)\n",
- "pdf_sampler = ray_sampler.PDFSampler(num_samples=num_samples, train_stratified=train_stratified, include_original=False)\n",
- "\n",
- "ray_bundle = RayBundle(\n",
- " origins=torch.ones([1, 3]),\n",
- " directions=torch.ones([1, 3]),\n",
- " pixel_area=torch.ones([1, 1]),\n",
- " nears=torch.ones([1, 1]) * near,\n",
- " fars=torch.ones([1, 1]) * far,\n",
- ")\n",
- "\n",
- "coarse_ray_samples = uniform_sampler(ray_bundle)\n",
- "\n",
- "# Generate arbitrary PDF\n",
- "weights = torch.ones(num_coarse_samples)\n",
- "weights += torch.sin(torch.linspace(0, 3 * torch.pi, num_coarse_samples))\n",
- "weights += torch.sin(torch.linspace(0, 0.5 * torch.pi, num_coarse_samples))\n",
- "weights -= torch.min(weights)\n",
- "weights /= torch.sum(weights)\n",
- "\n",
- "samples = pdf_sampler.generate_ray_samples(ray_bundle, coarse_ray_samples, weights[None, :, None], num_samples)\n",
- "\n",
- "# Plotting stuff\n",
- "x = torch.ones((num_coarse_samples * 2))\n",
- "x[::2] = coarse_ray_samples.frustums.starts[0, :, 0]\n",
- "x[1::2] = coarse_ray_samples.frustums.ends[0, :, 0]\n",
- "\n",
- "y = torch.ones((num_coarse_samples * 2))\n",
- "y[::2] = weights\n",
- "y[1::2] = weights\n",
- "\n",
- "pdf_trace = go.Scatter(x=x, y=y)\n",
- "fig.append_trace(pdf_trace, 1, 1)\n",
- "\n",
- "samples_trace = go.Histogram(x=samples.frustums.starts[0, :, 0], nbinsx=100)\n",
- "fig.append_trace(samples_trace, 1, 2)\n",
- "\n",
- "fig.update_yaxes(title_text=\"# Samples\", row=1, col=2)\n",
- "fig.update_xaxes(title_text=\"Distance\", row=1, col=1)\n",
- "fig.update_xaxes(title_text=\"Distance\", row=1, col=2)\n",
- "\n",
- "# Overlay both histograms\n",
- "fig.update_layout(height=400, hovermode=False, showlegend=False, margin=dict(l=20, r=20, t=50, b=20))\n",
- "fig.update_traces(opacity=0.7)\n",
- "fig.show()"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3.8.12 64-bit ('nerfactory')",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.8.12"
- },
- "vscode": {
- "interpreter": {
- "hash": "3271154905f6ca90bb0c3951bd3f2265caaa6ab68492eb831b8ba5f0e8deab4d"
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/docs/reference/api/data.rst b/docs/reference/api/data.rst
index 06ec83bbd..f08638e34 100644
--- a/docs/reference/api/data.rst
+++ b/docs/reference/api/data.rst
@@ -6,27 +6,27 @@ Data
Image Dataset
----------------
-.. automodule:: nerfactory.data.image_dataset
+.. automodule:: nerfactory.dataloaders.image_dataset
:members:
:show-inheritance:
Image Sampler
----------------
-.. automodule:: nerfactory.data.image_sampler
+.. automodule:: nerfactory.dataloaders.image_sampler
:members:
:show-inheritance:
Pixel Sampler
----------------
-.. automodule:: nerfactory.data.pixel_sampler
+.. automodule:: nerfactory.dataloaders.pixel_sampler
:members:
:show-inheritance:
Structures
----------------
-.. automodule:: nerfactory.data.structs
+.. automodule:: nerfactory.dataloaders.structs
:members:
:show-inheritance:
\ No newline at end of file
diff --git a/docs/reference/api/graphs.rst b/docs/reference/api/graphs.rst
index 7bc3ddb67..052926de5 100644
--- a/docs/reference/api/graphs.rst
+++ b/docs/reference/api/graphs.rst
@@ -6,34 +6,34 @@ Graphs
Base
----------------
-.. automodule:: nerfactory.graphs.base
+.. automodule:: nerfactory.models.base
:members:
:show-inheritance:
Instant NGP
----------------
-.. automodule:: nerfactory.graphs.instant_ngp
+.. automodule:: nerfactory.models.instant_ngp
:members:
:show-inheritance:
Semantic NeRF
----------------
-.. automodule:: nerfactory.graphs.semantic_nerf
+.. automodule:: nerfactory.models.semantic_nerf
:members:
:show-inheritance:
TensoRF
----------------
-.. automodule:: nerfactory.graphs.tensorf
+.. automodule:: nerfactory.models.tensorf
:members:
:show-inheritance:
NeRF
----------------
-.. automodule:: nerfactory.graphs.vanilla_nerf
+.. automodule:: nerfactory.models.vanilla_nerf
:members:
:show-inheritance:
\ No newline at end of file
diff --git a/docs/reference/api/graphs/modules/ray_losses.rst b/docs/reference/api/graphs/modules/ray_losses.rst
index ffb5b61ed..e3b1dc42e 100644
--- a/docs/reference/api/graphs/modules/ray_losses.rst
+++ b/docs/reference/api/graphs/modules/ray_losses.rst
@@ -3,6 +3,6 @@
Ray Losses
===================
-.. automodule:: nerfactory.graphs.modules.ray_losses
+.. automodule:: nerfactory.models.modules.ray_losses
:members:
:show-inheritance:
\ No newline at end of file
diff --git a/docs/reference/api/graphs/modules/ray_sampler.rst b/docs/reference/api/graphs/modules/ray_sampler.rst
index a5e018856..c05ccaae8 100644
--- a/docs/reference/api/graphs/modules/ray_sampler.rst
+++ b/docs/reference/api/graphs/modules/ray_sampler.rst
@@ -3,6 +3,6 @@
Ray Sampler
===================
-.. automodule:: nerfactory.graphs.modules.ray_sampler
+.. automodule:: nerfactory.models.modules.ray_sampler
:members:
:show-inheritance:
\ No newline at end of file
diff --git a/nerfactory/data/dataloader.py b/nerfactory/data/dataloader.py
deleted file mode 100644
index f80285c90..000000000
--- a/nerfactory/data/dataloader.py
+++ /dev/null
@@ -1,344 +0,0 @@
-# Copyright 2022 The Plenoptix Team. All rights reserved.
-#
-# 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
-#
-# 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.
-
-"""
-Data loader.
-"""
-
-import random
-from abc import abstractmethod
-from typing import Dict, List, Optional, Tuple, Union
-
-import torch
-from omegaconf import ListConfig
-from torch import nn
-from torchtyping import TensorType
-
-from nerfactory.cameras.cameras import Camera, get_camera
-from nerfactory.cameras.rays import RayBundle
-from nerfactory.data.image_dataset import ImageDataset
-from nerfactory.data.image_sampler import ImageSampler
-from nerfactory.data.pixel_sampler import PixelSampler
-from nerfactory.data.structs import BaseDataContainer, DatasetInputs
-from nerfactory.graphs.modules.ray_generator import RayGenerator
-from nerfactory.utils import profiler
-from nerfactory.utils.config import DataConfig
-from nerfactory.utils.misc import (
- IterableWrapper,
- get_dict_to_torch,
- instantiate_from_dict_config,
-)
-
-
-@profiler.time_function
-def setup_dataset_train(config: DataConfig, device: str) -> Tuple[DatasetInputs, "TrainDataloader"]:
- """Helper method to load train dataset
- Args:
- config (DataConfig): Configuration of training dataset.
- device (str): device to load the dataset to
-
- Returns:
- Tuple[DatasetInputs, "TrainDataloader"]: returns both the dataset input information and associated dataloader
- """
- dataset_train = instantiate_from_dict_config(config.dataset_inputs_train)
- dataset_inputs_train = dataset_train.get_dataset_inputs(
- split="train", use_preprocessing_cache=config.use_preprocessing_cache
- )
- # ImageDataset
- image_dataset_train = instantiate_from_dict_config(config.image_dataset_train, **dataset_inputs_train.as_dict())
- # ImageSampler
- image_sampler_train = instantiate_from_dict_config(
- config.dataloader_train.image_sampler, dataset=image_dataset_train, device=device # type: ignore
- )
- # PixelSampler
- pixel_sampler_train = instantiate_from_dict_config(config.dataloader_train.pixel_sampler) # type: ignore
- # Dataloader
- dataloader_train = TrainDataloader(image_sampler_train, pixel_sampler_train)
- return dataset_inputs_train, dataloader_train
-
-
-@profiler.time_function
-def setup_dataset_eval(config: DataConfig, test_mode: bool, device: str) -> Tuple[DatasetInputs, "EvalDataloader"]:
- """Helper method to load test or val dataset based on test/train mode
- Args:
- config (DataConfig): Configuration of training dataset.
- test_mode (bool): specifies whether you are training/testing mode, to load validation/test data
- device (str): device to load the dataset to
-
- Returns:
- Tuple[DatasetInputs, "TrainDataloader"]: returns both the dataset input information and associated dataloader
- """
- eval_split = "test" if test_mode else "val"
- dataset_eval = instantiate_from_dict_config(config.dataset_inputs_eval)
- dataset_inputs_eval = dataset_eval.get_dataset_inputs(
- split=eval_split, use_preprocessing_cache=config.use_preprocessing_cache
- )
- image_dataset_eval = instantiate_from_dict_config(config.image_dataset_eval, **dataset_inputs_eval.as_dict())
- dataloader_eval = instantiate_from_dict_config(
- config.dataloader_eval,
- image_dataset=image_dataset_eval,
- device=device,
- **dataset_inputs_eval.as_dict(),
- )
- return dataset_inputs_eval, dataloader_eval
-
-
-class AbstractDataloader(nn.Module):
- """Second version of the dataloader class (V2)
-
- This version of the dataloader is designed to subsume both the train and eval dataloaders,
- especially since this may contain learnable parameters which need to be shared across the train
- and test dataloaders. The idea is that we have setup methods for train and eval separatley and
- this can be a combined train/eval if you want.
-
- The default should be for the train and eval dataloaders to be the same, but this can be
- overridden. This is needed when there are learned parameters either in your data itself or in
- the way some of the data (that we will pass to the renderer / Field) was generated. In these
- cases, we want these parameters to be accessible by both the train and eval dataloaders, hence
- why you would want them to be in the same dataloader.
-
- An instance where you may want to have only the eval dataloader is if you are doing evaluation
- and don't have the dataset used to train the model.
-
-
- Train Methods:
- setup_train: sets up for being used as train
- iter_train: returns an iterator of the train dataloader
- next_train: will be called on __next__() for the training iterator
-
- Eval Methods:
- setup_eval: sets up for being used as eval
- iter_eval: returns an iterator of the eval dataloader
- next_eval: will be called on __next__() for the eval iterator
-
-
- Args:
- image_sampler (ImageSampler): image sampler
- pixel_sampler (PixelSampler): pixel sampler
- ray_generator (RayGenerator): ray generator
- use_train (bool): whether this is being used for training
- use_eval (bool): whether this is being used for evaluation
-
-
-
- Attributes:
- image_sampler (ImageSampler): image sampler
- pixel_sampler (PixelSampler): pixel sampler
- ray_generator (RayGenerator): ray generator
- train_count (int): number of times train has been called
- eval_count (int): number of times eval has been called
- """
-
- def __init__(
- self,
- image_sampler: ImageSampler,
- pixel_sampler: PixelSampler,
- ray_generator: RayGenerator,
- use_train: bool,
- use_eval: bool,
- ):
- super().__init__()
- self.image_sampler = image_sampler
- self.pixel_sampler = pixel_sampler
- self.iter_image_sampler = iter(self.image_sampler)
- self.ray_generator = ray_generator
- self.use_train = use_train
- self.use_eval = use_eval
- self.train_count = 0
- self.eval_count = 0
- assert use_train or use_eval
- if use_train:
- self.setup_train()
- if use_eval:
- self.setup_eval()
-
- def iter_train(self) -> IterableWrapper:
- """Returns an iterator that executes the self.next_train function"""
- self.train_count = 0
- return IterableWrapper(self, self.next_train)
-
- def iter_eval(self) -> IterableWrapper:
- """Returns an iterator that executes the self.next_eval function"""
- self.eval_count = 0
- return IterableWrapper(self, self.next_eval)
-
- @abstractmethod
- def setup_train(self):
- """Sets up the dataloader for training"""
-
- @abstractmethod
- def setup_eval(self):
- """Sets up the dataloader for evaluation"""
-
- @abstractmethod
- def next_train(self) -> BaseDataContainer:
- """Returns the next batch of data from the train dataloader"""
-
- @abstractmethod
- def next_eval(self) -> BaseDataContainer:
- """Returns the next batch of data from the eval dataloader"""
-
-
-class AbstractStoredDataloader(AbstractDataloader):
- """Subclass of the new V2 dataloader that is used for when things fit in memory,
- and will be stored in the dataloader itself.
-
- Attributes:
- camera_to_world (torch.Tensor): camera to world transformation
- intrinsics (torch.Tensor): intrinsics matrix
- """
-
- camera_to_world: torch.Tensor
- intrinsics: torch.Tensor
-
- # These abstract methods are only copied over to appease the linter
- @abstractmethod
- def setup_train(self):
- """Sets up the dataloader for training"""
-
- @abstractmethod
- def setup_eval(self):
- """Sets up the dataloader for evaluation"""
-
- @abstractmethod
- def next_train(self) -> BaseDataContainer:
- """Returns the next batch of data from the train dataloader"""
-
- @abstractmethod
- def next_eval(self) -> BaseDataContainer:
- """Returns the next batch of data from the eval dataloader"""
-
-
-class TrainDataloader:
- """Training dataloader base class."""
-
- def __init__(self, image_sampler: ImageSampler, pixel_sampler: PixelSampler):
- self.image_sampler = image_sampler
- self.pixel_sampler = pixel_sampler
- self.iter_image_sampler = iter(self.image_sampler)
- self.count = 0
-
- def __iter__(self):
- self.count = 0
- return self
-
- def __next__(self) -> Tuple[TensorType["num_rays", 3], Dict]:
- self.count += 1
- image_batch = next(self.iter_image_sampler)
- batch = self.pixel_sampler.sample(image_batch)
- ray_indices = batch["indices"]
- return ray_indices, batch
-
-
-class EvalDataloader: # pylint: disable=too-few-public-methods
- """Evaluation dataloader base class"""
-
- def __init__(
- self, image_dataset: ImageDataset, intrinsics, camera_to_world, num_rays_per_chunk: int, device="cpu", **kwargs
- ):
- super().__init__()
- self.image_dataset = image_dataset
- self.intrinsics = intrinsics
- self.camera_to_world = camera_to_world
- self.num_rays_per_chunk = num_rays_per_chunk
- self.device = device
- self.kwargs = kwargs
-
- @abstractmethod
- def __iter__(self):
- """Iterates over the dataset"""
- return self
-
- @abstractmethod
- def __next__(self) -> Tuple[RayBundle, Dict]:
- """Returns the next batch of data"""
-
- def get_camera(self, image_idx) -> Camera:
- """Get camera for the given image index"""
- intrinsics = self.intrinsics[image_idx].to(self.device)
- camera_to_world = self.camera_to_world[image_idx].to(self.device)
- camera = get_camera(intrinsics, camera_to_world, camera_index=image_idx)
- return camera
-
- def get_data_from_image_idx(self, image_idx) -> Tuple[RayBundle, Dict]:
- """Returns the data for a specific image index."""
- camera = self.get_camera(image_idx)
- ray_bundle = camera.get_camera_ray_bundle(device=self.device)
- ray_bundle.num_rays_per_chunk = self.num_rays_per_chunk
- batch = self.image_dataset[image_idx]
- batch = get_dict_to_torch(batch, device=self.device)
- return ray_bundle, batch
-
-
-class FixedIndicesEvalDataloader(EvalDataloader):
- """Dataloader that returns a fixed set of indices."""
-
- def __init__(
- self,
- image_dataset: ImageDataset,
- intrinsics,
- camera_to_world,
- num_rays_per_chunk: int,
- image_indices: Optional[Union[List[int], ListConfig]] = None,
- device="cpu",
- **kwargs,
- ):
- """
- Args:
- image_dataset: ImageDataset to load data from
- image_indices: List of image indices to load data from. If None, then use all images.
- """
- super().__init__(image_dataset, intrinsics, camera_to_world, num_rays_per_chunk, device, **kwargs)
- if image_indices is None:
- self.image_indices = list(range(len(image_dataset)))
- else:
- self.image_indices = image_indices
- self.num_rays_per_chunk = num_rays_per_chunk
- self.count = 0
-
- def __iter__(self):
- self.count = 0
- return self
-
- def __next__(self):
- if self.count < len(self.image_indices):
- image_idx = self.image_indices[self.count]
- ray_bundle, batch = self.get_data_from_image_idx(image_idx)
- ray_bundle.num_rays_per_chunk = self.num_rays_per_chunk
- self.count += 1
- return ray_bundle, batch
- raise StopIteration
-
-
-class RandIndicesEvalDataloader(EvalDataloader):
- """Dataloader that returns random images."""
-
- def __init__(
- self, image_dataset: ImageDataset, intrinsics, camera_to_world, num_rays_per_chunk: int, device="cpu", **kwargs
- ):
- super().__init__(image_dataset, intrinsics, camera_to_world, num_rays_per_chunk, device, **kwargs)
- self.count = 0
-
- def __iter__(self):
- self.count = 0
- return self
-
- def __next__(self):
- if self.count < 1:
- image_indices = range(len(self.camera_to_world))
- image_idx = random.choice(image_indices)
- ray_bundle, batch = self.get_data_from_image_idx(image_idx)
- self.count += 1
- return ray_bundle, batch
- raise StopIteration
diff --git a/nerfactory/data/__init__.py b/nerfactory/dataloaders/__init__.py
similarity index 100%
rename from nerfactory/data/__init__.py
rename to nerfactory/dataloaders/__init__.py
diff --git a/nerfactory/dataloaders/base.py b/nerfactory/dataloaders/base.py
new file mode 100644
index 000000000..eae27e22c
--- /dev/null
+++ b/nerfactory/dataloaders/base.py
@@ -0,0 +1,237 @@
+# Copyright 2022 The Plenoptix Team. All rights reserved.
+#
+# 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
+#
+# 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.
+
+"""
+Data loader.
+"""
+
+from abc import abstractmethod
+from typing import Dict, List, Tuple, Union
+
+import torch
+from omegaconf import DictConfig, ListConfig
+from torch import nn
+from torch.nn import Parameter
+
+from nerfactory.cameras.rays import RayBundle
+from nerfactory.dataloaders.eval import FixedIndicesEvalDataloader
+from nerfactory.dataloaders.image_dataset import ImageDataset, PanopticImageDataset
+from nerfactory.dataloaders.image_sampler import CacheImageSampler
+from nerfactory.dataloaders.pixel_sampler import PixelSampler
+from nerfactory.dataloaders.structs import DatasetInputs
+from nerfactory.models.modules.ray_generator import RayGenerator
+from nerfactory.utils import profiler
+from nerfactory.utils.config import DataloaderConfig
+from nerfactory.utils.misc import IterableWrapper, instantiate_from_dict_config
+
+
+class Dataloader(nn.Module):
+ """Second version of the dataloader class (V2)
+
+ This version of the dataloader is designed to subsume both the train and eval dataloaders,
+ especially since this may contain learnable parameters which need to be shared across the train
+ and test dataloaders. The idea is that we have setup methods for train and eval separatley and
+ this can be a combined train/eval if you want.
+
+ The default should be for the train and eval dataloaders to be the same, but this can be
+ overridden. This is needed when there are learned parameters either in your data itself or in
+ the way some of the data (that we will pass to the renderer / Field) was generated. In these
+ cases, we want these parameters to be accessible by both the train and eval dataloaders, hence
+ why you would want them to be in the same dataloader.
+
+ An instance where you may want to have only the eval dataloader is if you are doing evaluation
+ and don't have the dataset used to train the model.
+
+
+ Train Methods:
+ setup_train: sets up for being used as train
+ iter_train: returns an iterator of the train dataloader
+ next_train: will be called on __next__() for the training iterator
+
+ Eval Methods:
+ setup_eval: sets up for being used as eval
+ iter_eval: returns an iterator of the eval dataloader
+ next_eval: will be called on __next__() for the eval iterator
+
+ Args:
+ image_sampler (ImageSampler): image sampler
+ pixel_sampler (PixelSampler): pixel sampler
+ ray_generator (RayGenerator): ray generator
+ use_train (bool): whether this is being used for training
+ use_eval (bool): whether this is being used for evaluation
+
+ Attributes:
+ image_sampler (ImageSampler): image sampler
+ pixel_sampler (PixelSampler): pixel sampler
+ train_count (int): number of times train has been called
+ eval_count (int): number of times eval has been called
+ """
+
+ def __init__(
+ self,
+ use_train: bool,
+ use_eval: bool,
+ ):
+ super().__init__()
+ self.use_train = use_train
+ self.use_eval = use_eval
+ self.train_count = 0
+ self.eval_count = 0
+ assert use_train or use_eval
+ if use_train:
+ self.setup_train()
+ if use_eval:
+ self.setup_eval()
+
+ def forward(self):
+ """Dummy forward method"""
+ raise NotImplementedError
+
+ def iter_train(self) -> IterableWrapper:
+ """Returns an iterator that executes the self.next_train function"""
+ self.train_count = 0
+ return IterableWrapper(self, self.next_train)
+
+ def iter_eval(self) -> IterableWrapper:
+ """Returns an iterator that executes the self.next_eval function"""
+ self.eval_count = 0
+ return IterableWrapper(self, self.next_eval)
+
+ @abstractmethod
+ def setup_train(self):
+ """Sets up the dataloader for training"""
+ raise NotImplementedError
+
+ @abstractmethod
+ def setup_eval(self):
+ """Sets up the dataloader for evaluation"""
+ raise NotImplementedError
+
+ @abstractmethod
+ def next_train(self) -> Tuple:
+ """Returns the next batch of data from the train dataloader.
+
+ This will be a tuple of all the information that this dataloader outputs.
+ """
+ raise NotImplementedError
+
+ @abstractmethod
+ def next_eval(self) -> Tuple:
+ """Returns the next batch of data from the eval dataloader.
+
+ This will be a tuple of all the information that this dataloader outputs.
+ """
+ raise NotImplementedError
+
+ def get_param_groups(self) -> Dict[str, List[Parameter]]: # pylint: disable=no-self-use
+ """Get the param groups for the dataloader.
+
+ Returns:
+ A list of dictionaries containing the dataloader's param groups.
+ """
+ return {}
+
+
+class VanillaDataloader(Dataloader): # pylint: disable=abstract-method
+ """Basic stored dataloader implementation for instant-ngp test run"""
+
+ def __init__(
+ self,
+ image_dataset_type: str,
+ train_datasetinputs: DatasetInputs,
+ train_num_rays_per_batch: int,
+ train_num_images_to_sample_from: int,
+ eval_datasetinputs: DatasetInputs,
+ eval_image_indices: Union[List[int], ListConfig], # TODO(ethan): get rid of this hydra ListConfig nonsense
+ eval_num_rays_per_chunk: int,
+ device: Union[torch.device, str] = "cpu",
+ **kwargs # pylint: disable=unused-argument
+ ):
+ self.image_dataset_type = image_dataset_type
+ self.train_datasetinputs = train_datasetinputs
+ self.train_num_rays_per_batch = train_num_rays_per_batch
+ self.train_num_images_to_sample_from = train_num_images_to_sample_from
+ self.eval_datasetinputs = eval_datasetinputs
+ self.eval_image_indices = eval_image_indices
+ self.eval_num_rays_per_chunk = eval_num_rays_per_chunk
+ self.device = device
+ use_train = self.train_datasetinputs is not None
+ use_eval = self.eval_datasetinputs is not None
+ super().__init__(use_train, use_eval)
+
+ def setup_train(self):
+ """Sets up the dataloader for training"""
+ if self.image_dataset_type == "rgb":
+ self.train_image_dataset = ImageDataset(**self.train_datasetinputs.as_dict())
+ elif self.image_dataset_type == "panoptic":
+ self.train_image_dataset = PanopticImageDataset(**self.train_datasetinputs.as_dict())
+ self.train_image_sampler = CacheImageSampler(
+ self.train_image_dataset, num_images_to_sample_from=self.train_num_images_to_sample_from, device=self.device
+ ) # TODO(ethan): pass this in
+ self.iter_train_image_sampler = iter(self.train_image_sampler)
+ self.train_pixel_sampler = PixelSampler(self.train_num_rays_per_batch)
+ self.train_ray_generator = RayGenerator(
+ self.train_datasetinputs.intrinsics, self.train_datasetinputs.camera_to_world
+ )
+
+ def setup_eval(self):
+ """Sets up the dataloader for evaluation"""
+ if self.image_dataset_type == "rgb":
+ self.eval_image_dataset = ImageDataset(**self.eval_datasetinputs.as_dict())
+ elif self.image_dataset_type == "panoptic":
+ self.eval_image_dataset = PanopticImageDataset(**self.eval_datasetinputs.as_dict())
+ self.eval_dataloader = FixedIndicesEvalDataloader(
+ image_dataset=self.eval_image_dataset,
+ intrinsics=self.eval_datasetinputs.intrinsics,
+ camera_to_world=self.eval_datasetinputs.camera_to_world,
+ num_rays_per_chunk=self.eval_num_rays_per_chunk,
+ image_indices=self.eval_image_indices,
+ device=self.device,
+ )
+
+ def next_train(self) -> Tuple[RayBundle, Dict]:
+ """Returns the next batch of data from the train dataloader.
+ The RayBundle can be shaped in whatever way."""
+ self.train_count += 1
+ image_batch = next(self.iter_train_image_sampler)
+ batch = self.train_pixel_sampler.sample(image_batch)
+ ray_indices = batch["indices"]
+ ray_bundle = self.train_ray_generator.forward(ray_indices)
+ return ray_bundle, batch
+
+ def next_eval(self) -> Tuple[RayBundle, Dict]:
+ """Returns the next batch of data from the eval dataloader.
+ The RayBundle should be shaped like an image."""
+ self.eval_count += 1
+ camera_ray_bundle, batch = next(self.eval_dataloader)
+ return camera_ray_bundle, batch
+
+
+@profiler.time_function
+def setup_dataloader(config: DataloaderConfig, device: str, test_mode=False) -> Dataloader:
+ """Setup the dataloader."""
+
+ dataset_train = instantiate_from_dict_config(config.train_dataset)
+ train_datasetinputs = dataset_train.get_dataset_inputs(split="train")
+ dataset_eval = instantiate_from_dict_config(config.eval_dataset)
+ eval_datasetinputs = dataset_eval.get_dataset_inputs(split="val" if not test_mode else "test")
+
+ dataloader: Dataloader = instantiate_from_dict_config(
+ DictConfig(config),
+ train_datasetinputs=train_datasetinputs,
+ eval_datasetinputs=eval_datasetinputs,
+ device=device,
+ )
+ dataloader.to(device)
+ return dataloader
diff --git a/nerfactory/data/colmap_utils.py b/nerfactory/dataloaders/colmap_utils.py
similarity index 100%
rename from nerfactory/data/colmap_utils.py
rename to nerfactory/dataloaders/colmap_utils.py
diff --git a/nerfactory/data/datasets.py b/nerfactory/dataloaders/datasets.py
similarity index 99%
rename from nerfactory/data/datasets.py
rename to nerfactory/dataloaders/datasets.py
index 96d884b43..711c35faa 100644
--- a/nerfactory/data/datasets.py
+++ b/nerfactory/dataloaders/datasets.py
@@ -25,12 +25,17 @@ import imageio
import numpy as np
import torch
-from nerfactory.data.colmap_utils import (
+from nerfactory.dataloaders.colmap_utils import (
read_cameras_binary,
read_images_binary,
read_pointsTD_binary,
)
-from nerfactory.data.structs import DatasetInputs, PointCloud, SceneBounds, Semantics
+from nerfactory.dataloaders.structs import (
+ DatasetInputs,
+ PointCloud,
+ SceneBounds,
+ Semantics,
+)
from nerfactory.utils.colors import get_color
from nerfactory.utils.io import (
get_absolute_path,
diff --git a/nerfactory/dataloaders/eval.py b/nerfactory/dataloaders/eval.py
new file mode 100644
index 000000000..a695809e5
--- /dev/null
+++ b/nerfactory/dataloaders/eval.py
@@ -0,0 +1,131 @@
+# Copyright 2022 The Plenoptix Team. All rights reserved.
+#
+# 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
+#
+# 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.
+
+"""
+Data loader.
+"""
+
+import random
+from abc import abstractmethod
+from typing import Dict, List, Optional, Tuple, Union
+
+from omegaconf import ListConfig
+
+from nerfactory.cameras.cameras import Camera, get_camera
+from nerfactory.cameras.rays import RayBundle
+from nerfactory.dataloaders.image_dataset import ImageDataset
+from nerfactory.utils.misc import get_dict_to_torch
+
+
+class EvalDataloader: # pylint: disable=too-few-public-methods
+ """Evaluation dataloader base class"""
+
+ def __init__(
+ self, image_dataset: ImageDataset, intrinsics, camera_to_world, num_rays_per_chunk: int, device="cpu", **kwargs
+ ):
+ super().__init__()
+ self.image_dataset = image_dataset
+ self.intrinsics = intrinsics
+ self.camera_to_world = camera_to_world
+ self.num_rays_per_chunk = num_rays_per_chunk
+ self.device = device
+ self.kwargs = kwargs
+
+ @abstractmethod
+ def __iter__(self):
+ """Iterates over the dataset"""
+ return self
+
+ @abstractmethod
+ def __next__(self) -> Tuple[RayBundle, Dict]:
+ """Returns the next batch of data"""
+
+ def get_camera(self, image_idx) -> Camera:
+ """Get camera for the given image index"""
+ intrinsics = self.intrinsics[image_idx].to(self.device)
+ camera_to_world = self.camera_to_world[image_idx].to(self.device)
+ camera = get_camera(intrinsics, camera_to_world, camera_index=image_idx)
+ return camera
+
+ def get_data_from_image_idx(self, image_idx) -> Tuple[RayBundle, Dict]:
+ """Returns the data for a specific image index."""
+ camera = self.get_camera(image_idx)
+ ray_bundle = camera.get_camera_ray_bundle(device=self.device)
+ ray_bundle.num_rays_per_chunk = self.num_rays_per_chunk
+ batch = self.image_dataset[image_idx]
+ batch = get_dict_to_torch(batch, device=self.device)
+ return ray_bundle, batch
+
+
+class FixedIndicesEvalDataloader(EvalDataloader):
+ """Dataloader that returns a fixed set of indices."""
+
+ def __init__(
+ self,
+ image_dataset: ImageDataset,
+ intrinsics,
+ camera_to_world,
+ num_rays_per_chunk: int,
+ image_indices: Optional[Union[List[int], ListConfig]] = None,
+ device="cpu",
+ **kwargs,
+ ):
+ """
+ Args:
+ image_dataset: ImageDataset to load data from
+ image_indices: List of image indices to load data from. If None, then use all images.
+ """
+ super().__init__(image_dataset, intrinsics, camera_to_world, num_rays_per_chunk, device, **kwargs)
+ if image_indices is None:
+ self.image_indices = list(range(len(image_dataset)))
+ else:
+ self.image_indices = image_indices
+ self.num_rays_per_chunk = num_rays_per_chunk
+ self.count = 0
+
+ def __iter__(self):
+ self.count = 0
+ return self
+
+ def __next__(self):
+ if self.count < len(self.image_indices):
+ image_idx = self.image_indices[self.count]
+ ray_bundle, batch = self.get_data_from_image_idx(image_idx)
+ ray_bundle.num_rays_per_chunk = self.num_rays_per_chunk
+ self.count += 1
+ return ray_bundle, batch
+ raise StopIteration
+
+
+class RandIndicesEvalDataloader(EvalDataloader):
+ """Dataloader that returns random images."""
+
+ def __init__(
+ self, image_dataset: ImageDataset, intrinsics, camera_to_world, num_rays_per_chunk: int, device="cpu", **kwargs
+ ):
+ super().__init__(image_dataset, intrinsics, camera_to_world, num_rays_per_chunk, device, **kwargs)
+ self.count = 0
+
+ def __iter__(self):
+ self.count = 0
+ return self
+
+ def __next__(self):
+ if self.count < 1:
+ image_indices = range(len(self.camera_to_world))
+ image_idx = random.choice(image_indices)
+ ray_bundle, batch = self.get_data_from_image_idx(image_idx)
+ self.count += 1
+ return ray_bundle, batch
+ raise StopIteration
diff --git a/nerfactory/data/image_dataset.py b/nerfactory/dataloaders/image_dataset.py
similarity index 99%
rename from nerfactory/data/image_dataset.py
rename to nerfactory/dataloaders/image_dataset.py
index deb511fb7..416d47ed4 100644
--- a/nerfactory/data/image_dataset.py
+++ b/nerfactory/dataloaders/image_dataset.py
@@ -26,7 +26,7 @@ from PIL import Image
from torch.utils.data import Dataset
from torchtyping import TensorType
-from nerfactory.data.structs import Semantics
+from nerfactory.dataloaders.structs import Semantics
from nerfactory.utils.misc import is_not_none
diff --git a/nerfactory/data/image_sampler.py b/nerfactory/dataloaders/image_sampler.py
similarity index 98%
rename from nerfactory/data/image_sampler.py
rename to nerfactory/dataloaders/image_sampler.py
index be97b7669..436813f96 100644
--- a/nerfactory/data/image_sampler.py
+++ b/nerfactory/dataloaders/image_sampler.py
@@ -23,7 +23,7 @@ from typing import Union
import torch
from torch.utils.data import IterableDataset, default_collate
-from nerfactory.data.image_dataset import ImageDataset
+from nerfactory.dataloaders.image_dataset import ImageDataset
from nerfactory.utils.misc import get_dict_to_torch
diff --git a/nerfactory/data/pixel_sampler.py b/nerfactory/dataloaders/pixel_sampler.py
similarity index 100%
rename from nerfactory/data/pixel_sampler.py
rename to nerfactory/dataloaders/pixel_sampler.py
diff --git a/nerfactory/data/structs.py b/nerfactory/dataloaders/structs.py
similarity index 86%
rename from nerfactory/data/structs.py
rename to nerfactory/dataloaders/structs.py
index d9b84d255..efdcec2a1 100644
--- a/nerfactory/data/structs.py
+++ b/nerfactory/dataloaders/structs.py
@@ -139,7 +139,7 @@ class DatasetInputs:
@dataclass
-class BaseDataContainer:
+class DataloaderOutputs:
"""A container for data that is not specific to any dataset. It should be everything
needed by the renderer and loss calculation. Different datasets and models will probably
need to subclass from this differently, since different Field modules will require different
@@ -153,3 +153,25 @@ class BaseDataContainer:
rays: RayBundle # Raybundle and the cameras will be merged into one thing in a later PR
cameras: torch.Tensor
ground_truth_pixels: Optional[TensorType["num_pixels", 3]] = None
+
+ def check_inputs(self, expected_attr: Dict):
+ """This will check to make sure that the expected attributes exist.
+
+ This will exist in any subclassed version of this"""
+ for attr in expected_attr:
+ assert hasattr(self, attr)
+
+
+@dataclass
+class ModelOutputs:
+ """A container for outputs from the model.
+
+ This will be passed into the loss function along with the base data container. It should be
+ subclassed for when your model outputs different things.
+
+ Args:
+ rays (RayBundle): The rays for the image.
+ ground_truth_pixels (TensorType["num_pixels", 3]): The ground truth pixels for the image.
+ """
+
+ rendered_pixels: Optional[TensorType["num_pixels", 3]] = None
diff --git a/nerfactory/engine/trainer.py b/nerfactory/engine/trainer.py
index 2f98a0f7a..9efb664e5 100644
--- a/nerfactory/engine/trainer.py
+++ b/nerfactory/engine/trainer.py
@@ -19,24 +19,16 @@ import functools
import logging
import os
import typing
-from typing import Dict, List, Optional
+from typing import Dict, List
import torch
import torch.distributed as dist
from torch.cuda.amp.grad_scaler import GradScaler
from torch.nn.parallel import DistributedDataParallel as DDP
-from torchtyping import TensorType
-from nerfactory.cameras.rays import RayBundle
-from nerfactory.data.dataloader import (
- EvalDataloader,
- TrainDataloader,
- setup_dataset_eval,
- setup_dataset_train,
-)
-from nerfactory.data.structs import DatasetInputs
-from nerfactory.graphs.base import Graph, setup_graph
+from nerfactory.dataloaders.structs import DatasetInputs
from nerfactory.optimizers.optimizers import Optimizers, setup_optimizers
+from nerfactory.pipelines.base import Pipeline, setup_pipeline
from nerfactory.utils import profiler, writer
from nerfactory.utils.callbacks import Callback
from nerfactory.utils.config import Config
@@ -67,10 +59,8 @@ class Trainer:
logging.warning("Mixed precision is disabled for CPU training.")
# dataset variables
self.dataset_inputs_train: DatasetInputs
- self.dataloader_train: TrainDataloader
- self.dataloader_eval: EvalDataloader
# model variables
- self.graph: Graph
+ self.pipeline: Pipeline
self.optimizers: Optimizers
self.start_step = 0
# logging variables
@@ -88,55 +78,45 @@ class Trainer:
Args:
test_mode (bool, optional): Whether to setup for testing. Defaults to False.
"""
- self.dataset_inputs_train, self.dataloader_train = setup_dataset_train(self.config.data, device=self.device)
- _, self.dataloader_eval = setup_dataset_eval(self.config.data, test_mode=test_mode, device=self.device)
- self.graph = setup_graph(self.config.graph, self.dataset_inputs_train, device=self.device)
- if not isinstance(self.graph, Graph):
- raise ValueError("Graph was improperly initialized.")
- self.optimizers = setup_optimizers(self.config.optimizers, self.graph.get_param_groups())
+ self.pipeline: Pipeline = setup_pipeline(self.config.pipeline, device=self.device, test_mode=test_mode)
+ self.optimizers = setup_optimizers(self.config.optimizers, self.pipeline.get_param_groups())
self._load_checkpoint()
if self.world_size > 1:
- self.graph = typing.cast(Graph, DDP(self.graph, device_ids=[self.local_rank]))
+ self.pipeline = typing.cast(
+ Pipeline, typing.cast(Pipeline, DDP(self.pipeline, device_ids=[self.local_rank]))
+ )
dist.barrier(device_ids=[self.local_rank])
- self.callbacks = self.graph.get_training_callbacks()
-
- @classmethod
- def get_aggregated_loss(cls, loss_dict: Dict[str, torch.Tensor]) -> torch.Tensor:
- """Returns the aggregated losses and the scalar for calling .backwards() on.
- # TODO: move this out to another file/class/etc.
- """
- # TODO(ethan): add loss weightings here from a config
- # e.g. weighted_losses = map(lambda k: some_weight_dict[k] * loss_dict[k], loss_dict.keys())
- weighted_losses = loss_dict.values()
- return functools.reduce(torch.add, weighted_losses)
+ # TODO(ethan): do this for pipeline, not pipeline.model
+ self.callbacks = self.pipeline.model.get_training_callbacks()
def train(self) -> None:
"""Train the model."""
self.visualizer_state.init_scene(
- image_dataset=self.dataloader_train.image_sampler.dataset, dataset_inputs=self.dataset_inputs_train
+ image_dataset=self.pipeline.dataloader.train_image_dataset,
+ dataset_inputs=self.pipeline.dataloader.train_datasetinputs,
)
with TimeWriter(writer, EventName.TOTAL_TRAIN_TIME):
num_iterations = self.config.trainer.max_num_iterations
- iter_dataloader_train = iter(self.dataloader_train)
for step in range(self.start_step, self.start_step + num_iterations):
- with TimeWriter(writer, EventName.ITER_LOAD_TIME, step=step):
- ray_indices, batch = next(iter_dataloader_train)
+ # with TimeWriter(writer, EventName.ITER_LOAD_TIME, step=step):
+ # ray_indices, batch = next(iter_dataloader_train)
with TimeWriter(writer, EventName.ITER_TRAIN_TIME, step=step) as t:
- loss_metric_dict = self.train_iteration(ray_indices, batch, step)
- writer.put_scalar(name=EventName.RAYS_PER_SEC, scalar=ray_indices.shape[0] / t.duration, step=step)
+ loss_metric_dict = self.train_iteration(step)
+ train_num_rays_per_batch = self.pipeline.dataloader.train_num_rays_per_batch
+ writer.put_scalar(name=EventName.RAYS_PER_SEC, scalar=train_num_rays_per_batch / t.duration, step=step)
if step != 0 and step % self.config.logging.steps_per_log == 0:
- writer.put_dict(name="Loss/train-loss_dict", scalar_dict=loss_metric_dict, step=step)
+ writer.put_dict(name="Loss/train-loss_metrics_dict", scalar_dict=loss_metric_dict, step=step)
if step != 0 and self.config.trainer.steps_per_save and step % self.config.trainer.steps_per_save == 0:
self._save_checkpoint(self.config.trainer.model_dir, step)
if step % self.config.trainer.steps_per_test == 0:
- self.eval_with_dataloader(self.dataloader_eval, step=step)
+ self.pipeline.get_eval_loss_dict(step=step)
self._write_out_storage(step)
- self.visualizer_state.update_scene(step, self.graph)
+ self.visualizer_state.update_scene(step, self.pipeline.model)
self._write_out_storage(num_iterations)
@@ -155,17 +135,17 @@ class Trainer:
writer.write_out_storage()
def _load_checkpoint(self) -> None:
- """Helper function to load graph and optimizer from prespecified checkpoint"""
+ """Helper function to load pipeline and optimizer from prespecified checkpoint"""
load_config = self.config.trainer.resume_train
if load_config.load_dir is not None and load_config.load_step is not None:
load_path = os.path.join(load_config.load_dir, f"step-{load_config.load_step:09d}.ckpt")
assert os.path.exists(load_path), f"Checkpoint {load_path} does not exist"
loaded_state = torch.load(load_path, map_location="cpu")
self.start_step = loaded_state["step"] + 1
- # load the checkpoints for graph and optimizer
- self.graph.load_graph(loaded_state)
- self.optimizers.load_optimizers(loaded_state)
- self.grad_scaler.load_state_dict(loaded_state["scaler"])
+ # load the checkpoints for pipeline, optimizers, and gradient scalar
+ self.pipeline.load_pipeline(loaded_state["pipeline"])
+ self.optimizers.load_optimizers(loaded_state["optimizers"])
+ self.grad_scaler.load_state_dict(loaded_state["scalers"])
logging.info("done loading checkpoint from %s", load_path)
else:
logging.info("No checkpoints to load, training from scratch")
@@ -181,14 +161,14 @@ class Trainer:
if not os.path.exists(output_dir):
os.makedirs(output_dir)
ckpt_path = os.path.join(output_dir, f"step-{step:09d}.ckpt")
- if hasattr(self.graph, "module"):
- model = self.graph.module.state_dict() # type: ignore
+ if hasattr(self.pipeline, "module"):
+ pipeline = self.pipeline.module.state_dict() # type: ignore
else:
- model = self.graph.state_dict()
+ pipeline = self.pipeline.state_dict()
torch.save(
{
"step": step,
- "model": model,
+ "pipeline": pipeline,
"optimizers": {k: v.state_dict() for (k, v) in self.optimizers.optimizers.items()},
"scalers": self.grad_scaler.state_dict(),
},
@@ -196,22 +176,19 @@ class Trainer:
)
@profiler.time_function
- def train_iteration(
- self, ray_indices: TensorType["num_rays", 3], batch: Dict[str, torch.Tensor], step: int
- ) -> Dict[str, torch.Tensor]:
+ def train_iteration(self, step: int) -> Dict[str, torch.Tensor]:
"""Run one iteration with a batch of inputs.
Args:
- ray_indices: Contains camera, row, and col indicies for target rays.
- batch: Batch of training data.
step: Current training step.
Returns:
- Dict[str, float]: Dictionary of model losses and metrics.
+ Dictionary of model losses.
"""
self.optimizers.zero_grad_all()
- with torch.autocast(device_type=ray_indices.device.type, enabled=self.mixed_precision):
- _, loss_dict, metrics_dict = self.graph.forward(ray_indices=ray_indices, batch=batch)
+ cpu_or_cuda_str = self.device.split(":")[0]
+ with torch.autocast(device_type=cpu_or_cuda_str, enabled=self.mixed_precision):
+ _, loss_dict, metrics_dict = self.pipeline.get_train_loss_dict(step=step)
loss = functools.reduce(torch.add, loss_dict.values())
self.grad_scaler.scale(loss).backward() # type: ignore
self.optimizers.optimizer_scaler_step_all(self.grad_scaler)
@@ -225,34 +202,3 @@ class Trainer:
loss_dict["loss"] = loss
loss_dict.update(metrics_dict)
return loss_dict
-
- @profiler.time_function
- def test_image(self, camera_ray_bundle: RayBundle, batch: dict, step: Optional[int] = None) -> float:
- """Test a specific image.
-
- Args:
- camera_ray_bundle: Bundle of test rays.
- batch: Batch of data.
- step: Current training step.
-
- Returns:
- float: PSNR
- """
- self.graph.eval()
- if camera_ray_bundle.camera_indices is None:
- raise ValueError("camera_ray_bundle.camera_indices is None during testing")
- image_idx = int(camera_ray_bundle.camera_indices[0, 0])
- outputs = self.graph.get_outputs_for_camera_ray_bundle(camera_ray_bundle)
- psnr = self.graph.log_test_image_outputs(image_idx, step, batch, outputs)
- self.graph.train()
- return psnr
-
- def eval_with_dataloader(self, dataloader: EvalDataloader, step: Optional[int] = None) -> None:
- """Run evaluation with a given dataloader.
-
- Args:
- dataloader: Evaluation dataloader.
- step: Current training iteration.
- """
- for camera_ray_bundle, batch in dataloader:
- self.test_image(camera_ray_bundle, batch, step=step)
diff --git a/nerfactory/fields/instant_ngp_field.py b/nerfactory/fields/instant_ngp_field.py
index 400ebffd7..553cb1584 100644
--- a/nerfactory/fields/instant_ngp_field.py
+++ b/nerfactory/fields/instant_ngp_field.py
@@ -24,7 +24,7 @@ from torch.nn.parameter import Parameter
from torchtyping import TensorType
from nerfactory.cameras.rays import RaySamples
-from nerfactory.data.structs import SceneBounds
+from nerfactory.dataloaders.structs import SceneBounds
from nerfactory.fields.base import Field
from nerfactory.fields.modules.encoding import Encoding, HashEncoding, SHEncoding
from nerfactory.fields.modules.field_heads import FieldHeadNames
diff --git a/nerfactory/fields/semantic_nerf_field.py b/nerfactory/fields/semantic_nerf_field.py
new file mode 100644
index 000000000..e0f6f5342
--- /dev/null
+++ b/nerfactory/fields/semantic_nerf_field.py
@@ -0,0 +1,94 @@
+# Copyright 2022 The Plenoptix Team. All rights reserved.
+#
+# 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
+#
+# 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.
+
+"""
+Semantic NeRF field implementation.
+"""
+from typing import Dict, Optional, Tuple
+
+import torch
+from torch import nn
+from torchtyping import TensorType
+
+from nerfactory.cameras.rays import RaySamples
+from nerfactory.fields.base import Field
+from nerfactory.fields.modules.encoding import Encoding, Identity
+from nerfactory.fields.modules.field_heads import (
+ DensityFieldHead,
+ FieldHeadNames,
+ RGBFieldHead,
+ SemanticFieldHead,
+)
+from nerfactory.fields.modules.mlp import MLP
+
+
+class SemanticNerfField(Field):
+ """Semantic-NeRF field"""
+
+ def __init__(
+ self,
+ num_semantic_classes: int,
+ position_encoding: Encoding = Identity(in_dim=3),
+ direction_encoding: Encoding = Identity(in_dim=3),
+ base_mlp_num_layers: int = 8,
+ base_mlp_layer_width: int = 256,
+ head_mlp_num_layers: int = 2,
+ head_mlp_layer_width: int = 128,
+ skip_connections: Tuple[int] = (4,),
+ ) -> None:
+ super().__init__()
+ self.num_semantic_classes = num_semantic_classes
+ self.position_encoding = position_encoding
+ self.direction_encoding = direction_encoding
+ self.mlp_base = MLP(
+ in_dim=self.position_encoding.get_out_dim(),
+ num_layers=base_mlp_num_layers,
+ layer_width=base_mlp_layer_width,
+ skip_connections=skip_connections,
+ )
+ self.mlp_head = MLP(
+ in_dim=self.mlp_base.get_out_dim() + self.direction_encoding.get_out_dim(),
+ num_layers=head_mlp_num_layers,
+ layer_width=head_mlp_layer_width,
+ )
+ self.mlp_semantic = MLP(
+ in_dim=self.mlp_head.get_out_dim(),
+ layer_width=self.mlp_head.layer_width // 2,
+ num_layers=1,
+ activation=nn.ReLU(),
+ )
+ self.field_head_density = DensityFieldHead(in_dim=self.mlp_base.get_out_dim())
+ self.field_head_rgb = RGBFieldHead(in_dim=self.mlp_head.get_out_dim())
+ self.field_head_semantic = SemanticFieldHead(
+ in_dim=self.mlp_semantic.get_out_dim(), num_classes=self.num_semantic_classes
+ )
+
+ def get_density(self, ray_samples: RaySamples):
+ encoded_xyz = self.position_encoding(ray_samples.frustums.get_positions())
+ base_mlp_out = self.mlp_base(encoded_xyz)
+ density = self.field_head_density(base_mlp_out)
+ return density, base_mlp_out
+
+ def get_outputs(
+ self, ray_samples: RaySamples, density_embedding: Optional[TensorType] = None
+ ) -> Dict[FieldHeadNames, TensorType]:
+ encoded_dir = self.direction_encoding(ray_samples.frustums.directions)
+ mlp_out = self.mlp_head(torch.cat([encoded_dir, density_embedding], dim=-1)) # type: ignore
+ outputs = {}
+ # rgb
+ outputs[self.field_head_rgb.field_head_name] = self.field_head_rgb(mlp_out)
+ # semantic
+ mlp_out_sem = self.mlp_semantic(mlp_out)
+ outputs[self.field_head_semantic.field_head_name] = self.field_head_semantic(mlp_out_sem)
+ return outputs
diff --git a/nerfactory/graphs/__init__.py b/nerfactory/models/__init__.py
similarity index 100%
rename from nerfactory/graphs/__init__.py
rename to nerfactory/models/__init__.py
diff --git a/nerfactory/graphs/base.py b/nerfactory/models/base.py
similarity index 77%
rename from nerfactory/graphs/base.py
rename to nerfactory/models/base.py
index 6c497c455..9017fa5bf 100644
--- a/nerfactory/graphs/base.py
+++ b/nerfactory/models/base.py
@@ -13,7 +13,7 @@
# limitations under the License.
"""
-The Graph module contains all trainable parameters.
+Base Model implementation which takes in RayBundles
"""
from abc import abstractmethod
from collections import defaultdict
@@ -23,15 +23,13 @@ import torch
from omegaconf import DictConfig
from torch import nn
from torch.nn import Parameter
-from torchtyping import TensorType
from nerfactory.cameras.cameras import Camera
from nerfactory.cameras.rays import RayBundle
-from nerfactory.data.structs import DatasetInputs, SceneBounds
-from nerfactory.graphs.modules.ray_generator import RayGenerator
+from nerfactory.dataloaders.structs import SceneBounds
from nerfactory.utils import profiler
from nerfactory.utils.callbacks import Callback
-from nerfactory.utils.config import GraphConfig
+from nerfactory.utils.config import ModelConfig
from nerfactory.utils.misc import (
get_masked_dict,
instantiate_from_dict_config,
@@ -39,16 +37,14 @@ from nerfactory.utils.misc import (
)
-class Graph(nn.Module):
- """Graph class
+class Model(nn.Module):
+ """Model class
Where everything (Fields, Optimizers, Samplers, Visualization, etc) is linked together. This should be
subclassed for custom NeRF model.
Args:
- intrinsics: Camera intrinsics.
- camera_to_world: Camera to world transformation.
- loss_coefficients: Loss specific weights.
scene_bounds: Bounds of target scene.
+ loss_coefficients: Loss specific weights.
enable_collider: Whether to create a scene collider to filter rays.
collider_config: Configuration of scene collider.
enable_density_field: Whether to create a density field to filter samples.
@@ -57,10 +53,8 @@ class Graph(nn.Module):
def __init__(
self,
- intrinsics: torch.Tensor,
- camera_to_world: torch.Tensor,
- loss_coefficients: DictConfig,
- scene_bounds: Optional[SceneBounds] = None,
+ scene_bounds: SceneBounds,
+ loss_coefficients: DictConfig = DictConfig({}),
enable_collider: bool = True,
collider_config: Optional[DictConfig] = None,
enable_density_field: bool = False,
@@ -68,19 +62,15 @@ class Graph(nn.Module):
**kwargs,
) -> None:
super().__init__()
- assert is_not_none(scene_bounds), "scene_bounds is needed to use the density grid"
- self.intrinsics = intrinsics
- self.camera_to_world = camera_to_world
self.scene_bounds = scene_bounds
+ self.loss_coefficients = loss_coefficients
self.enable_collider = enable_collider
self.collider_config = collider_config
- self.loss_coefficients = loss_coefficients
self.enable_density_field = enable_density_field
self.density_field_config = density_field_config
self.density_field = None
self.kwargs = kwargs
self.collider = None
- self.ray_generator = RayGenerator(self.intrinsics, self.camera_to_world)
self.populate_density_field()
self.populate_collider()
self.populate_fields()
@@ -91,7 +81,7 @@ class Graph(nn.Module):
@property
def device(self):
- """Returns the device that the graph is on."""
+ """Returns the device that the model is on."""
return self.device_indicator_param.device
def get_training_callbacks(self) -> List[Callback]: # pylint:disable=no-self-use
@@ -132,7 +122,7 @@ class Graph(nn.Module):
ray_bundle: Input bundle of rays.
Returns:
- Outputs of graph. (ie. rendered colors)
+ Outputs of model. (ie. rendered colors)
"""
def process_outputs_as_images(self, outputs): # pylint:disable=no-self-use
@@ -144,16 +134,16 @@ class Graph(nn.Module):
outputs[k] = v
@overload
- def forward_after_ray_generator(self, ray_bundle: RayBundle, batch: None = None) -> Dict[str, torch.Tensor]:
+ def forward(self, ray_bundle: RayBundle, batch: None = None) -> Dict[str, torch.Tensor]:
...
@overload
- def forward_after_ray_generator(
+ def forward(
self, ray_bundle: RayBundle, batch: Dict[str, torch.Tensor]
) -> Tuple[Dict[str, torch.Tensor], Dict[str, torch.Tensor], Dict[str, torch.Tensor]]:
...
- def forward_after_ray_generator(
+ def forward(
self, ray_bundle: RayBundle, batch: Optional[Dict[str, torch.Tensor]] = None
) -> Union[
Dict[str, torch.Tensor], Tuple[Dict[str, torch.Tensor], Dict[str, torch.Tensor], Dict[str, torch.Tensor]]
@@ -189,26 +179,6 @@ class Graph(nn.Module):
loss_dict[loss_name] *= self.loss_coefficients[loss_name]
return outputs, loss_dict, metrics_dict
- @overload
- def forward(self, ray_indices: TensorType["num_rays", 3], batch: None = None) -> Dict[str, torch.Tensor]:
- ...
-
- @overload
- def forward(
- self, ray_indices: TensorType["num_rays", 3], batch: Dict[str, torch.Tensor]
- ) -> Tuple[Dict[str, torch.Tensor], Dict[str, torch.Tensor], Dict[str, torch.Tensor]]:
- ...
-
- def forward(
- self, ray_indices: TensorType["num_rays", 3], batch: Optional[Dict[str, torch.Tensor]] = None
- ) -> Union[
- Dict[str, torch.Tensor], Tuple[Dict[str, torch.Tensor], Dict[str, torch.Tensor], Dict[str, torch.Tensor]]
- ]:
- """Process starting with ray indices. Turns them into rays, then performs volume rendering."""
- ray_bundle = self.ray_generator.forward(ray_indices)
- x = self.forward_after_ray_generator(ray_bundle, batch=batch)
- return x
-
def get_metrics_dict(self, outputs, batch) -> Dict[str, torch.Tensor]:
"""Compute and returns metrics."""
# pylint: disable=unused-argument
@@ -221,7 +191,7 @@ class Graph(nn.Module):
@torch.no_grad()
def get_outputs_for_camera_ray_bundle(self, camera_ray_bundle: RayBundle):
- """Takes in camera parameters and computes the output of the graph."""
+ """Takes in camera parameters and computes the output of the model."""
assert is_not_none(camera_ray_bundle.num_rays_per_chunk)
image_height, image_width = camera_ray_bundle.origins.shape[:2]
num_rays = len(camera_ray_bundle)
@@ -231,7 +201,7 @@ class Graph(nn.Module):
start_idx = i
end_idx = i + camera_ray_bundle.num_rays_per_chunk
ray_bundle = camera_ray_bundle.get_row_major_sliced_ray_bundle(start_idx, end_idx)
- outputs = self.forward_after_ray_generator(ray_bundle=ray_bundle)
+ outputs = self.forward(ray_bundle=ray_bundle)
for output_name, output in outputs.items(): # type: ignore
outputs_lists[output_name].append(output)
for output_name, outputs_list in outputs_lists.items():
@@ -239,7 +209,7 @@ class Graph(nn.Module):
return outputs
def get_outputs_for_camera(self, camera: Camera):
- """Get the graph outputs for a Camera."""
+ """Get the model outputs for a Camera."""
camera_ray_bundle = camera.get_camera_ray_bundle(device=self.device)
return self.get_outputs_for_camera_ray_bundle(camera_ray_bundle)
@@ -252,27 +222,25 @@ class Graph(nn.Module):
image_idx: Index of the image.
step: Current step.
batch: Batch of data.
- outputs: Outputs of the graph.
+ outputs: Outputs of the model.
Returns:
The psnr.
"""
- def load_graph(self, loaded_state: Dict[str, Any]) -> None:
+ def load_model(self, loaded_state: Dict[str, Any]) -> None:
"""Load the checkpoint from the given path"""
state = {key.replace("module.", ""): value for key, value in loaded_state["model"].items()}
self.load_state_dict(state) # type: ignore
@profiler.time_function
-def setup_graph(config: GraphConfig, dataset_inputs: DatasetInputs, device: str) -> Graph:
- """Setup the graph. The dataset inputs should be set with the training data.
+def setup_model(config: ModelConfig, scene_bounds: SceneBounds, device: str) -> Model:
+ """Setup the model. The dataset inputs should be set with the training data.
Args:
dataset_inputs: The inputs which will be used to define the camera parameters.
"""
- graph = instantiate_from_dict_config(DictConfig(config), **dataset_inputs.as_dict())
- graph.to(device)
- if not isinstance(graph, Graph):
- raise TypeError(f"Unable to instantiate Graph, got {type(graph)}")
- return graph
+ model = instantiate_from_dict_config(DictConfig(config), scene_bounds=scene_bounds, device=device)
+ model.to(device)
+ return model
diff --git a/nerfactory/graphs/instant_ngp.py b/nerfactory/models/instant_ngp.py
similarity index 95%
rename from nerfactory/graphs/instant_ngp.py
rename to nerfactory/models/instant_ngp.py
index d0c63960e..f852cf685 100644
--- a/nerfactory/graphs/instant_ngp.py
+++ b/nerfactory/models/instant_ngp.py
@@ -28,19 +28,19 @@ import nerfactory.cuda as nerfactory_cuda
from nerfactory.cameras.rays import RayBundle
from nerfactory.fields.instant_ngp_field import field_implementation_to_class
from nerfactory.fields.modules.field_heads import FieldHeadNames
-from nerfactory.graphs.base import Graph
-from nerfactory.graphs.modules.ray_sampler import NGPSpacedSampler
+from nerfactory.models.base import Model
+from nerfactory.models.modules.ray_sampler import NGPSpacedSampler
from nerfactory.optimizers.loss import MSELoss
from nerfactory.utils import colors, misc, visualization, writer
from nerfactory.utils.callbacks import Callback
-class NGPGraph(Graph):
- """Instant NGP graph
+class NGPModel(Model):
+ """Instant NGP model
Args:
field_implementation (str): one of "torch" or "tcnn", or other fields in 'field_implementation_to_class'
- kwargs: additional params to pass up to the parent class Graph
+ kwargs: additional params to pass up to the parent class model
"""
def __init__(self, field_implementation="torch", **kwargs) -> None:
@@ -62,8 +62,6 @@ class NGPGraph(Graph):
def populate_fields(self):
"""Set the fields."""
# torch or tiny-cuda-nn version
- if self.scene_bounds is None:
- raise ValueError("scene_bounds must be set to use an NGPGraph")
self.field = field_implementation_to_class[self.field_implementation](self.scene_bounds.aabb)
def populate_misc_modules(self):
@@ -142,7 +140,7 @@ class NGPGraph(Graph):
def process_outputs_as_images(self, outputs): # pylint:disable=no-self-use
"""Do preprocessing to make images valid"""
# TODO: make log_test_image_outputs use this directly
- # TODO: implement across all the different graph implementations
+ # TODO: implement across all the different model implementations
outputs["accumulation"] = visualization.apply_colormap(outputs["accumulation"])
outputs["depth"] = visualization.apply_depth_colormap(
outputs["depth"],
diff --git a/nerfactory/graphs/mipnerf.py b/nerfactory/models/mipnerf.py
similarity index 96%
rename from nerfactory/graphs/mipnerf.py
rename to nerfactory/models/mipnerf.py
index 203df14bd..d28e293f1 100644
--- a/nerfactory/graphs/mipnerf.py
+++ b/nerfactory/models/mipnerf.py
@@ -29,8 +29,8 @@ from nerfactory.cameras.rays import RayBundle
from nerfactory.fields.modules.encoding import NeRFEncoding
from nerfactory.fields.modules.field_heads import FieldHeadNames
from nerfactory.fields.nerf_field import NeRFField
-from nerfactory.graphs.base import Graph
-from nerfactory.graphs.modules.ray_sampler import PDFSampler, UniformSampler
+from nerfactory.models.base import Model
+from nerfactory.models.modules.ray_sampler import PDFSampler, UniformSampler
from nerfactory.optimizers.loss import MSELoss
from nerfactory.renderers.renderers import (
AccumulationRenderer,
@@ -40,13 +40,11 @@ from nerfactory.renderers.renderers import (
from nerfactory.utils import colors, misc, visualization, writer
-class MipNerfGraph(Graph):
- """mip-NeRF graph"""
+class MipNerfModel(Model):
+ """mip-NeRF model"""
def __init__(
self,
- intrinsics=None,
- camera_to_world=None,
near_plane=2.0,
far_plane=6.0,
num_coarse_samples=64,
@@ -58,7 +56,7 @@ class MipNerfGraph(Graph):
self.num_coarse_samples = num_coarse_samples
self.num_importance_samples = num_importance_samples
self.field = None
- super().__init__(intrinsics=intrinsics, camera_to_world=camera_to_world, **kwargs)
+ super().__init__(**kwargs)
def populate_fields(self):
"""Set the fields."""
diff --git a/nerfactory/graphs/mipnerf_360.py b/nerfactory/models/mipnerf_360.py
similarity index 95%
rename from nerfactory/graphs/mipnerf_360.py
rename to nerfactory/models/mipnerf_360.py
index e656039b4..41447d999 100644
--- a/nerfactory/graphs/mipnerf_360.py
+++ b/nerfactory/models/mipnerf_360.py
@@ -30,9 +30,9 @@ from nerfactory.fields.modules.encoding import NeRFEncoding
from nerfactory.fields.modules.field_heads import FieldHeadNames
from nerfactory.fields.modules.spatial_distortions import SceneContraction
from nerfactory.fields.nerf_field import NeRFField
-from nerfactory.graphs.base import Graph
-from nerfactory.graphs.modules.ray_losses import distortion_loss
-from nerfactory.graphs.modules.ray_sampler import PDFSampler, UniformSampler
+from nerfactory.models.base import Model
+from nerfactory.models.modules.ray_losses import distortion_loss
+from nerfactory.models.modules.ray_sampler import PDFSampler, UniformSampler
from nerfactory.optimizers.loss import MSELoss
from nerfactory.renderers.renderers import (
AccumulationRenderer,
@@ -42,13 +42,11 @@ from nerfactory.renderers.renderers import (
from nerfactory.utils import colors, misc, visualization, writer
-class MipNerf360Graph(Graph):
- """mip-NeRF graph"""
+class MipNerf360Model(Model):
+ """mip-NeRF model"""
def __init__(
self,
- intrinsics=None,
- camera_to_world=None,
near_plane=2.0,
far_plane=6.0,
num_coarse_samples=64,
@@ -60,7 +58,7 @@ class MipNerf360Graph(Graph):
self.num_coarse_samples = num_coarse_samples
self.num_importance_samples = num_importance_samples
self.field = None
- super().__init__(intrinsics=intrinsics, camera_to_world=camera_to_world, **kwargs)
+ super().__init__(**kwargs)
def populate_fields(self):
"""Set the fields."""
diff --git a/nerfactory/graphs/modules/__init__.py b/nerfactory/models/modules/__init__.py
similarity index 100%
rename from nerfactory/graphs/modules/__init__.py
rename to nerfactory/models/modules/__init__.py
diff --git a/nerfactory/graphs/modules/ray_generator.py b/nerfactory/models/modules/ray_generator.py
similarity index 100%
rename from nerfactory/graphs/modules/ray_generator.py
rename to nerfactory/models/modules/ray_generator.py
diff --git a/nerfactory/graphs/modules/ray_losses.py b/nerfactory/models/modules/ray_losses.py
similarity index 100%
rename from nerfactory/graphs/modules/ray_losses.py
rename to nerfactory/models/modules/ray_losses.py
diff --git a/nerfactory/graphs/modules/ray_sampler.py b/nerfactory/models/modules/ray_sampler.py
similarity index 100%
rename from nerfactory/graphs/modules/ray_sampler.py
rename to nerfactory/models/modules/ray_sampler.py
diff --git a/nerfactory/graphs/modules/scene_colliders.py b/nerfactory/models/modules/scene_colliders.py
similarity index 98%
rename from nerfactory/graphs/modules/scene_colliders.py
rename to nerfactory/models/modules/scene_colliders.py
index 00be90ade..146cf5bb0 100644
--- a/nerfactory/graphs/modules/scene_colliders.py
+++ b/nerfactory/models/modules/scene_colliders.py
@@ -20,7 +20,7 @@ from torch import nn
from torchtyping import TensorType
from nerfactory.cameras.rays import RayBundle
-from nerfactory.data.structs import SceneBounds
+from nerfactory.dataloaders.structs import SceneBounds
class SceneBoundsCollider(nn.Module):
diff --git a/nerfactory/graphs/nerfw.py b/nerfactory/models/nerfw.py
similarity index 94%
rename from nerfactory/graphs/nerfw.py
rename to nerfactory/models/nerfw.py
index 7a872baee..b060ba291 100644
--- a/nerfactory/graphs/nerfw.py
+++ b/nerfactory/models/nerfw.py
@@ -26,8 +26,8 @@ from nerfactory.fields.modules.encoding import NeRFEncoding
from nerfactory.fields.modules.field_heads import FieldHeadNames
from nerfactory.fields.nerf_field import NeRFField
from nerfactory.fields.nerfw_field import VanillaNerfWField
-from nerfactory.graphs.base import Graph
-from nerfactory.graphs.modules.ray_sampler import PDFSampler, UniformSampler
+from nerfactory.models.base import Model
+from nerfactory.models.modules.ray_sampler import PDFSampler, UniformSampler
from nerfactory.optimizers.loss import MSELoss
from nerfactory.renderers.renderers import (
AccumulationRenderer,
@@ -38,13 +38,11 @@ from nerfactory.renderers.renderers import (
from nerfactory.utils import colors, misc, visualization, writer
-class NerfWGraph(Graph):
- """NeRF-W graph"""
+class NerfWModel(Model):
+ """NeRF-W model"""
def __init__(
self,
- intrinsics=None,
- camera_to_world=None,
near_plane=2.0,
far_plane=6.0,
num_coarse_samples=64,
@@ -52,7 +50,7 @@ class NerfWGraph(Graph):
uncertainty_min=0.03,
**kwargs,
) -> None:
- """A NeRF-W graph.
+ """A NeRF-W model.
Args:
...
@@ -68,10 +66,10 @@ class NerfWGraph(Graph):
self.uncertainty_min = uncertainty_min
self.field_coarse = None
self.field_fine = None
- self.num_images = len(intrinsics)
+ self.num_images = 10000 # TODO(ethan): fix this
self.appearance_embedding_dim = 48
self.transient_embedding_dim = 16
- super().__init__(intrinsics=intrinsics, camera_to_world=camera_to_world, **kwargs)
+ super().__init__(**kwargs)
def populate_fields(self):
"""Set the fields."""
@@ -120,6 +118,12 @@ class NerfWGraph(Graph):
def get_outputs(self, ray_bundle: RayBundle):
+ if misc.is_not_none(ray_bundle.camera_indices):
+ # TODO(ethan): remove this check
+ assert (
+ torch.max(ray_bundle.camera_indices) < self.num_images
+ ), "num_images must be greater than the largest camera index"
+
if self.field_coarse is None or self.field_fine is None:
raise ValueError("populate_fields() must be called before get_outputs")
diff --git a/nerfactory/graphs/semantic_nerf.py b/nerfactory/models/semantic_nerf.py
similarity index 59%
rename from nerfactory/graphs/semantic_nerf.py
rename to nerfactory/models/semantic_nerf.py
index f8212deaf..8aa2a9923 100644
--- a/nerfactory/graphs/semantic_nerf.py
+++ b/nerfactory/models/semantic_nerf.py
@@ -16,97 +16,27 @@
Semantic NeRF implementation.
"""
-from typing import Dict, Optional, Tuple
-
import torch
from torch import nn
-from torchtyping import TensorType
-from nerfactory.cameras.rays import RayBundle, RaySamples
-from nerfactory.data.structs import Semantics
-from nerfactory.fields.base import Field
-from nerfactory.fields.modules.encoding import Encoding, Identity, NeRFEncoding
-from nerfactory.fields.modules.field_heads import (
- DensityFieldHead,
- FieldHeadNames,
- RGBFieldHead,
- SemanticFieldHead,
-)
-from nerfactory.fields.modules.mlp import MLP
+from nerfactory.cameras.rays import RayBundle
+from nerfactory.dataloaders.structs import Semantics
+from nerfactory.fields.modules.encoding import NeRFEncoding
+from nerfactory.fields.modules.field_heads import FieldHeadNames
from nerfactory.fields.nerf_field import NeRFField
-from nerfactory.graphs.vanilla_nerf import NeRFGraph
+from nerfactory.fields.semantic_nerf_field import SemanticNerfField
+from nerfactory.models.vanilla_nerf import NeRFModel
from nerfactory.renderers.renderers import SemanticRenderer
from nerfactory.utils import misc, writer
-class SemanticNerfField(Field):
- """Semantic-NeRF field"""
+class SemanticNerfModel(NeRFModel):
+ """Semantic-NeRF model"""
- def __init__(
- self,
- num_semantic_classes: int,
- position_encoding: Encoding = Identity(in_dim=3),
- direction_encoding: Encoding = Identity(in_dim=3),
- base_mlp_num_layers: int = 8,
- base_mlp_layer_width: int = 256,
- head_mlp_num_layers: int = 2,
- head_mlp_layer_width: int = 128,
- skip_connections: Tuple[int] = (4,),
- ) -> None:
- super().__init__()
- self.num_semantic_classes = num_semantic_classes
- self.position_encoding = position_encoding
- self.direction_encoding = direction_encoding
- self.mlp_base = MLP(
- in_dim=self.position_encoding.get_out_dim(),
- num_layers=base_mlp_num_layers,
- layer_width=base_mlp_layer_width,
- skip_connections=skip_connections,
- )
- self.mlp_head = MLP(
- in_dim=self.mlp_base.get_out_dim() + self.direction_encoding.get_out_dim(),
- num_layers=head_mlp_num_layers,
- layer_width=head_mlp_layer_width,
- )
- self.mlp_semantic = MLP(
- in_dim=self.mlp_head.get_out_dim(),
- layer_width=self.mlp_head.layer_width // 2,
- num_layers=1,
- activation=nn.ReLU(),
- )
- self.field_head_density = DensityFieldHead(in_dim=self.mlp_base.get_out_dim())
- self.field_head_rgb = RGBFieldHead(in_dim=self.mlp_head.get_out_dim())
- self.field_head_semantic = SemanticFieldHead(
- in_dim=self.mlp_semantic.get_out_dim(), num_classes=self.num_semantic_classes
- )
-
- def get_density(self, ray_samples: RaySamples):
- encoded_xyz = self.position_encoding(ray_samples.frustums.get_positions())
- base_mlp_out = self.mlp_base(encoded_xyz)
- density = self.field_head_density(base_mlp_out)
- return density, base_mlp_out
-
- def get_outputs(
- self, ray_samples: RaySamples, density_embedding: Optional[TensorType] = None
- ) -> Dict[FieldHeadNames, TensorType]:
- encoded_dir = self.direction_encoding(ray_samples.frustums.directions)
- mlp_out = self.mlp_head(torch.cat([encoded_dir, density_embedding], dim=-1)) # type: ignore
- outputs = {}
- # rgb
- outputs[self.field_head_rgb.field_head_name] = self.field_head_rgb(mlp_out)
- # semantic
- mlp_out_sem = self.mlp_semantic(mlp_out)
- outputs[self.field_head_semantic.field_head_name] = self.field_head_semantic(mlp_out_sem)
- return outputs
-
-
-class SemanticNerfGraph(NeRFGraph):
- """Semantic-NeRF graph"""
-
- def __init__(self, intrinsics, camera_to_world, semantics: Semantics, **kwargs) -> None:
+ def __init__(self, semantics: Semantics, **kwargs) -> None:
self.stuff_classes = semantics.stuff_classes
self.stuff_colors = semantics.stuff_colors
- super().__init__(intrinsics=intrinsics, camera_to_world=camera_to_world, **kwargs)
+ super().__init__(**kwargs)
def populate_fields(self):
"""Set the fields."""
diff --git a/nerfactory/graphs/tensorf.py b/nerfactory/models/tensorf.py
similarity index 100%
rename from nerfactory/graphs/tensorf.py
rename to nerfactory/models/tensorf.py
diff --git a/nerfactory/graphs/vanilla_nerf.py b/nerfactory/models/vanilla_nerf.py
similarity index 90%
rename from nerfactory/graphs/vanilla_nerf.py
rename to nerfactory/models/vanilla_nerf.py
index 481004ec1..09eb3cc60 100644
--- a/nerfactory/graphs/vanilla_nerf.py
+++ b/nerfactory/models/vanilla_nerf.py
@@ -30,8 +30,8 @@ from nerfactory.cameras.rays import RayBundle
from nerfactory.fields.modules.encoding import NeRFEncoding
from nerfactory.fields.modules.field_heads import FieldHeadNames
from nerfactory.fields.nerf_field import NeRFField
-from nerfactory.graphs.base import Graph
-from nerfactory.graphs.modules.ray_sampler import PDFSampler, UniformSampler
+from nerfactory.models.base import Model
+from nerfactory.models.modules.ray_sampler import PDFSampler, UniformSampler
from nerfactory.optimizers.loss import MSELoss
from nerfactory.renderers.renderers import (
AccumulationRenderer,
@@ -42,24 +42,20 @@ from nerfactory.utils import colors, misc, visualization, writer
from nerfactory.utils.callbacks import Callback
-class NeRFGraph(Graph):
- """Vanilla NeRF graph
+class NeRFModel(Model):
+ """Vanilla NeRF model
Args:
- intrinsics (torch.Tensor): Camera intrinsics.
- camera_to_world (torch.Tensor): Camera to world transformation.
- near_plane (float, optional): Where to start sampling points. Defaults to a distance of 2,
- far_plane (float, optional): Where to stop sampling points. Defaults to a distance of 6,
- num_coarse_samples (int, optional): Number of samples in coarse field evaluation. Defaults to 64,
- num_importance_samples(int, optional): Number of samples in fine field evaluation. Defaults to 64,
- enable_density_field (bool): Whether to create a density field to filter samples.
- density_field_config (DictConfig): Configuration of density field.
+ near_plane: Where to start sampling points. Defaults to 2.0.
+ far_plane: Where to stop sampling points. Defaults to 6.0.
+ num_coarse_samples: Number of samples in coarse field evaluation. Defaults to 64,
+ num_importance_samples: Number of samples in fine field evaluation. Defaults to 64,
+ enable_density_field: Whether to create a density field to filter samples. Defaults to False.
+ density_field_config: Configuration of density field. Defaults to None.
"""
def __init__(
self,
- intrinsics: torch.Tensor,
- camera_to_world: torch.Tensor,
near_plane: float = 2.0,
far_plane: float = 6.0,
num_coarse_samples: int = 64,
@@ -75,8 +71,6 @@ class NeRFGraph(Graph):
self.field_coarse = None
self.field_fine = None
super().__init__(
- intrinsics=intrinsics,
- camera_to_world=camera_to_world,
enable_density_field=enable_density_field,
density_field_config=density_field_config,
**kwargs,
diff --git a/nerfactory/optimizers/optimizers.py b/nerfactory/optimizers/optimizers.py
index 5c466647b..b358ee2a7 100644
--- a/nerfactory/optimizers/optimizers.py
+++ b/nerfactory/optimizers/optimizers.py
@@ -151,5 +151,5 @@ class Optimizers:
Args:
loaded_state: the state from the previous checkpoint
"""
- for k, v in loaded_state["optimizers"].items():
+ for k, v in loaded_state.items():
self.optimizers[k].load_state_dict(v)
diff --git a/nerfactory/pipelines/__init__.py b/nerfactory/pipelines/__init__.py
new file mode 100644
index 000000000..02655775e
--- /dev/null
+++ b/nerfactory/pipelines/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2022 The Plenoptix Team. All rights reserved.
+#
+# 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
+#
+# 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.
diff --git a/nerfactory/pipelines/base.py b/nerfactory/pipelines/base.py
new file mode 100644
index 000000000..1d895cc2d
--- /dev/null
+++ b/nerfactory/pipelines/base.py
@@ -0,0 +1,142 @@
+# Copyright 2022 The Plenoptix Team. All rights reserved.
+#
+# 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
+#
+# 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.
+
+"""
+Abstracts for the Pipeline class.
+"""
+
+from abc import abstractmethod
+from pydoc import locate
+from typing import Any, Dict, List, Optional
+
+from torch import nn
+from torch.nn import Parameter
+
+from nerfactory.dataloaders.base import Dataloader, setup_dataloader
+from nerfactory.models.base import Model, setup_model
+from nerfactory.utils import profiler
+from nerfactory.utils.config import PipelineConfig
+
+
+class Pipeline(nn.Module):
+ """The intent of this class is to provide a higher level interface for the Model
+ that will be easy to use for our Trainer class.
+
+ This class will contain high level functions for the model like getting the loss
+ dictionaries and visualization code. It should have ways to get the next iterations
+ training loss, evaluation loss, and generate whole images for visualization. Each model
+ class should be 1:1 with a pipeline that can act as a standardized interface and hide
+ differences in how each model takes in and outputs data.
+
+ This class's function is to hide the dataloader and model classes from the trainer,
+ worrying about:
+ 1) Fetching data with the dataloader
+ 2) Feeding the model the data and fetching the loss
+ 3) (TODO) Visualization
+ Hopefully this provides a higher level interface for the trainer to use, and
+ simplifying the model classes, which each may have different forward() methods
+ and so on.
+
+
+ TODO: For visualizer functionality to be added down the line, we should make sure
+ that we are still abstracting away the Model from the end user. The visualizer function
+ should probably be done by adding a new iterator on the base dataloader that will
+ talk to the actual visualizer. This is probably ideal to have the visualizer be
+ primarily located in the dataloader (first because it makes sense as the
+ visualizers main job in this context is to feed in data for the model to load)
+ so that we can have an easier time ensuring that the visualizer is always
+ spitting out the same formatted data as for in train / eval.
+
+
+ Args:
+ model: The model to be used in the pipeline.
+ dataloader: The dataloader to be used in the pipeline.
+ loss_coefficients: A dictionary of loss coefficients that will be used
+
+ Attributes:
+ self.dataloader (Dataloader): The dataloader that will be used
+ self.dataloader_train_iter (Iterator): The iterator for the training dataloader
+ self.dataloader_eval_iter (Iterator): The iterator for the evaluation dataloader
+ self.model (Model): The model that will be used
+ """
+
+ def __init__(self, dataloader: Dataloader, model: Model):
+ super().__init__()
+ self.dataloader: Dataloader = dataloader
+ self.model: Model = model
+
+ @property
+ def device(self):
+ """Returns the device that the model is on."""
+ return self.model.device
+
+ @abstractmethod
+ @profiler.time_function
+ def get_train_loss_dict(self, step: Optional[int] = None):
+ """This function gets your training loss dict. This will be responsible for
+ getting the next batch of data from the dataloader and interfacing with the
+ Model class, feeding the data to the model's forward function."""
+ ray_bundle, batch = self.dataloader.next_train()
+ model_outputs, loss_dict, metrics_dict = self.model(ray_bundle, batch)
+ return model_outputs, loss_dict, metrics_dict
+
+ @abstractmethod
+ @profiler.time_function
+ def get_eval_loss_dict(self, step: Optional[int] = None):
+ """This function gets your evaluation loss dict. It needs to get the data
+ from the dataloader and feed it to the model's forward function"""
+ self.eval()
+ # NOTE(ethan): next_eval() is not being used right now
+ for camera_ray_bundle, batch in self.dataloader.eval_dataloader:
+ image_idx = int(camera_ray_bundle.camera_indices[0, 0])
+ outputs = self.model.get_outputs_for_camera_ray_bundle(camera_ray_bundle)
+ psnr = self.model.log_test_image_outputs(image_idx, step, batch, outputs)
+ # TODO(ethan): this function should probably return something?
+ self.train()
+
+ @abstractmethod
+ def log_test_image_outputs(self) -> None:
+ """Log the test image outputs"""
+
+ def load_pipeline(self, loaded_state: Dict[str, Any]) -> None:
+ """Load the checkpoint from the given path"""
+ state = {key.replace("module.", ""): value for key, value in loaded_state.items()}
+ self.load_state_dict(state) # type: ignore
+
+ def get_param_groups(self) -> Dict[str, List[Parameter]]:
+ """Get the param groups for the pipeline.
+
+ Returns:
+ A list of dictionaries containing the pipeline's param groups.
+ """
+ dataloader_params = self.dataloader.get_param_groups()
+ model_params = self.model.get_param_groups()
+ # TODO(ethan): assert that key names don't overlap
+ return {**dataloader_params, **model_params}
+
+
+@profiler.time_function
+def setup_pipeline(config: PipelineConfig, device: str, test_mode=False) -> Pipeline:
+ """Setup the pipeline. The dataset inputs should be set with the training data.
+
+ Args:
+ config: The pipeline config.
+ """
+ # dataset_inputs
+ dataloader: Dataloader = setup_dataloader(config.dataloader, device=device, test_mode=test_mode)
+ # TODO(ethan): get rid of scene_bounds from the model
+ model: Model = setup_model(config.model, scene_bounds=dataloader.train_datasetinputs.scene_bounds, device=device)
+ pipeline_class = locate(config._target_) # pylint: disable=protected-access
+ pipeline = pipeline_class(dataloader=dataloader, model=model) # type: ignore
+ return pipeline
diff --git a/nerfactory/pipelines/pixel_nerf.py b/nerfactory/pipelines/pixel_nerf.py
new file mode 100644
index 000000000..774e9a5ad
--- /dev/null
+++ b/nerfactory/pipelines/pixel_nerf.py
@@ -0,0 +1,17 @@
+# Copyright 2022 The Plenoptix Team. All rights reserved.
+#
+# 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
+#
+# 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.
+
+"""
+Pipeline for pixel nerf.
+"""
diff --git a/nerfactory/utils/config.py b/nerfactory/utils/config.py
index f71551822..52aa8c2a8 100644
--- a/nerfactory/utils/config.py
+++ b/nerfactory/utils/config.py
@@ -15,7 +15,7 @@
"""Structured config classes"""
from dataclasses import dataclass
-from typing import Any, Dict, Optional
+from typing import Any, Dict, List, Optional
from omegaconf import MISSING, DictConfig
@@ -62,29 +62,21 @@ class TrainerConfig:
@dataclass
-class ImageDatasetConfig:
- """Configuration for type of dataset to instantiate"""
-
- _target_: str = MISSING
-
-
-@dataclass
-class DataConfig:
+class DataloaderConfig:
"""Configuration for train/eval datasets"""
- dataset_inputs_train: Dict[str, Any] = MISSING
- image_dataset_train: ImageDatasetConfig = MISSING
- dataloader_train: Dict[str, Any] = MISSING
- dataset_inputs_eval: Dict[str, Any] = MISSING
- image_dataset_eval: ImageDatasetConfig = MISSING
- dataloader_eval: Dict[str, Any] = MISSING
- # additional optional parameters here
- pixel_sampler: Optional[Dict[str, Any]] = None
- use_preprocessing_cache: bool = False
+ _target_: str = MISSING
+ image_dataset_type: Optional[str] = "rgb"
+ train_dataset: Dict[str, Any] = MISSING
+ train_num_rays_per_batch: int = MISSING
+ train_num_images_to_sample_from: int = MISSING
+ eval_dataset: Dict[str, Any] = MISSING
+ eval_image_indices: List[int] = MISSING
+ eval_num_rays_per_chunk: int = MISSING
@dataclass
-class GraphConfig:
+class ModelConfig:
"""Configuration for graph instantiation"""
_target_: str = MISSING
@@ -99,6 +91,15 @@ class GraphConfig:
density_field_config: Dict[str, Any] = MISSING
+@dataclass
+class PipelineConfig:
+ """Configuration for pipeline instantiation"""
+
+ _target_: str = MISSING
+ dataloader: DataloaderConfig = MISSING
+ model: ModelConfig = MISSING
+
+
@dataclass
class ViewerConfig:
"""Configuration for viewer instantiation"""
@@ -119,10 +120,9 @@ class Config:
trainer: TrainerConfig = MISSING
experiment_name: str = MISSING
method_name: str = MISSING
- data: DataConfig = MISSING
- graph: GraphConfig = MISSING
optimizers: Dict[str, Any] = MISSING
viewer: ViewerConfig = MISSING
+ pipeline: PipelineConfig = MISSING
# additional optional parameters here
hydra: Optional[Dict[str, Any]] = None
@@ -141,18 +141,17 @@ def setup_config(config: DictConfig) -> Config:
trainer = TrainerConfig(**config.trainer)
experiment_name = config.experiment_name
method_name = config.method_name
- data = DataConfig(**config.data)
- graph = GraphConfig(**config.graph)
+ pipeline = PipelineConfig(**config.pipeline)
optimizers = config.optimizers
viewer = ViewerConfig(**config.viewer)
+
return Config(
machine=machine,
logging=logging,
trainer=trainer,
experiment_name=experiment_name,
method_name=method_name,
- data=data,
- graph=graph,
+ pipeline=pipeline,
optimizers=optimizers,
viewer=viewer,
)
diff --git a/nerfactory/utils/io.py b/nerfactory/utils/io.py
index 62f7d8719..1ce9bf579 100644
--- a/nerfactory/utils/io.py
+++ b/nerfactory/utils/io.py
@@ -128,6 +128,9 @@ def make_dir(filename_or_folder: str) -> str:
Args:
filename_or_folder (str): The filename or folder to make.
+
+ Returns:
+ The filename_or_folder, which is the input.
"""
if filename_or_folder[-1] != "/" and filename_or_folder.find(".") < 0:
folder = os.path.dirname(filename_or_folder + "/")
diff --git a/nerfactory/utils/misc.py b/nerfactory/utils/misc.py
index 4678ae34a..e710da34c 100644
--- a/nerfactory/utils/misc.py
+++ b/nerfactory/utils/misc.py
@@ -82,6 +82,9 @@ def instantiate_from_dict_config(dict_config: Any, **kwargs):
"""
dict_config_kwargs = {k: v for k, v in dict_config.items() if k != "_target_"}
uninstantiated_class = locate(dict_config._target_) # pylint: disable=protected-access
+ assert (
+ uninstantiated_class is not None
+ ), f"Could not find class {dict_config._target_}" # pylint: disable=protected-access
all_kwargs = dict_config_kwargs
all_kwargs.update(kwargs)
instantiated_class = uninstantiated_class(**all_kwargs) # type: ignore
diff --git a/nerfactory/viewer/app/src/modules/WebRtcWindow/WebRtcWindow.jsx b/nerfactory/viewer/app/src/modules/WebRtcWindow/WebRtcWindow.jsx
index 6ef8c5308..5c009e1f9 100644
--- a/nerfactory/viewer/app/src/modules/WebRtcWindow/WebRtcWindow.jsx
+++ b/nerfactory/viewer/app/src/modules/WebRtcWindow/WebRtcWindow.jsx
@@ -1,6 +1,6 @@
import React, { createContext, useContext, useEffect, useRef } from 'react';
-import { useDispatch } from 'react-redux';
+import { useDispatch } from 'react-redux';
import { WebSocketContext } from '../WebSocket/WebSocket';
const WebRtcContext = createContext(null);
@@ -74,12 +74,15 @@ export default function WebRtcWindow() {
pcRef.current
.createOffer()
.then((offer) => {
+ console.log('[webrtc] created offer');
return pcRef.current.setLocalDescription(offer);
})
.then(() => {
+ console.log('[webrtc] set local description');
// wait for ICE gathering to complete
return new Promise((resolve) => {
if (pcRef.current.iceGatheringState === 'complete') {
+ console.log('[webrtc] ICE gathering complete');
resolve();
} else {
const checkState = () => {
@@ -100,6 +103,7 @@ export default function WebRtcWindow() {
})
.then(() => {
// send the offer
+ console.log('[webrtc] sending offer');
const offer = pcRef.current.localDescription;
const cmd = 'offer';
const path = '';
@@ -129,6 +133,7 @@ export default function WebRtcWindow() {
websocket.addEventListener('open', () => {
// connect webrtc when the websocket is connected
pcRef.current = getRTCPeerConnection();
+ console.log('sending offer');
sendOffer();
});
}, []); // empty dependency array means only run once
diff --git a/nerfactory/viewer/server/viewer_utils.py b/nerfactory/viewer/server/viewer_utils.py
index 235b97534..6b9ec79ba 100644
--- a/nerfactory/viewer/server/viewer_utils.py
+++ b/nerfactory/viewer/server/viewer_utils.py
@@ -26,9 +26,9 @@ import torch
from nerfactory.cameras.cameras import get_camera, get_intrinsics_from_intrinsics_matrix
from nerfactory.cameras.rays import RayBundle
-from nerfactory.data.image_dataset import ImageDataset
-from nerfactory.data.structs import DatasetInputs
-from nerfactory.graphs.base import Graph
+from nerfactory.dataloaders.image_dataset import ImageDataset
+from nerfactory.dataloaders.structs import DatasetInputs
+from nerfactory.models.base import Model
from nerfactory.utils import profiler
from nerfactory.utils.config import ViewerConfig
from nerfactory.utils.decorators import check_visualizer_enabled, decorate_all
@@ -64,7 +64,7 @@ class RenderThread(threading.Thread):
camera_ray_bundle: input rays to pass through the graph to render out
"""
- def __init__(self, state: "VisualizerState", graph: Graph, camera_ray_bundle: RayBundle):
+ def __init__(self, state: "VisualizerState", graph: Model, camera_ray_bundle: RayBundle):
threading.Thread.__init__(self)
self.state = state
self.graph = graph
@@ -211,7 +211,7 @@ class VisualizerState:
# K = camera.get_intrinsics_matrix()
# set_persp_intrinsics_matrix(self.vis, K.double().numpy())
- def update_scene(self, step: int, graph: Graph) -> None:
+ def update_scene(self, step: int, graph: Model) -> None:
"""updates the scene based on the graph weights
Args:
@@ -291,7 +291,7 @@ class VisualizerState:
self.vis["renderingState/train_eta"].write("Paused")
@profiler.time_function
- def _render_image_in_viewer(self, graph: Graph) -> None:
+ def _render_image_in_viewer(self, graph: Model) -> None:
"""
Draw an image using the current camera pose from the viewer.
The image is sent of a TCP connection and then uses WebRTC to send it to the viewer.
diff --git a/notebooks/creating_pipelines.ipynb b/notebooks/creating_pipelines.ipynb
new file mode 100644
index 000000000..6bc021f23
--- /dev/null
+++ b/notebooks/creating_pipelines.ipynb
@@ -0,0 +1,240 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Creating pipelines\n",
+ "\n",
+ "Here we explain how to create custom pipelines in nerfactory. Pipelines are composed of two components, namely a Dataloader and a Model."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "The autoreload extension is already loaded. To reload it, use:\n",
+ " %reload_ext autoreload\n"
+ ]
+ }
+ ],
+ "source": [
+ "# HIDDEN\n",
+ "%load_ext autoreload\n",
+ "%autoreload 2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from typing import Dict\n",
+ "import torch\n",
+ "\n",
+ "from nerfactory.dataloaders.base import Dataloader\n",
+ "from nerfactory.models.base import Model\n",
+ "from nerfactory.pipelines.base import Pipeline\n",
+ "\n",
+ "from nerfactory.models.instant_ngp import NGPModel\n",
+ "from nerfactory.cameras.rays import RayBundle\n",
+ "\n",
+ "\n",
+ "class SemanticNGPModel(Model):\n",
+ " \"\"\"An instant ngp model modified slightly to output semantics.\"\"\"\n",
+ "\n",
+ " def __init__(self):\n",
+ " self.ngp_model = NGPModel()\n",
+ "\n",
+ " def get_outputs(self, ray_bundle: RayBundle) -> Dict[str, torch.Tensor]:\n",
+ " outputs = self.ngp_model.forward(ray_bundle)\n",
+ " outputs[\"semantics\"] = torch.rand_like(outputs[\"rgb\"])\n",
+ " return outputs\n",
+ "\n",
+ "\n",
+ "class CustomPipeline(Pipeline):\n",
+ " \"\"\"The Instant NGP pipeline.\"\"\"\n",
+ "\n",
+ " dataloader: Dataloader\n",
+ " model: Model\n",
+ "\n",
+ " def get_train_loss_dict(self):\n",
+ " rays, batch = self.dataloader_train_iter.next()\n",
+ " # TODO: do something here\n",
+ " accumulated_color, _, _, mask = self.model(rays, batch)\n",
+ " masked_batch = get_masked_dict(batch, mask)\n",
+ " loss_dict = self.model.get_loss_dict(accumulated_color, masked_batch, mask)\n",
+ " return loss_dict\n",
+ "\n",
+ " def get_eval_loss_dict(self):\n",
+ " rays, batch = self.dataloader_eval_iter.next()\n",
+ " # TODO: do something here\n",
+ " accumulated_color, _, _, mask = self.model(rays, batch)\n",
+ " masked_batch = get_masked_dict(batch, mask)\n",
+ " loss_dict = self.model.get_loss_dict(accumulated_color, masked_batch, mask)\n",
+ " return loss_dict\n",
+ "\n",
+ " def test_image_outputs(self) -> None:\n",
+ " \"\"\"Log the test image outputs\"\"\"\n",
+ " # camera = Camera(self.dataloader.eval_datasetinputs.camera_to_world[0])\n",
+ " pass"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "NotImplementedError",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mNotImplementedError\u001b[0m Traceback (most recent call last)",
+ "\u001b[1;32m/shared/ethanweber/nerfactory/notebooks/creating_pipelines.ipynb Cell 4\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m dataloader \u001b[39m=\u001b[39m Dataloader(use_train\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m, use_eval\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m)\n\u001b[1;32m 2\u001b[0m model \u001b[39m=\u001b[39m SemanticNGPModel()\n\u001b[1;32m 3\u001b[0m pipeline \u001b[39m=\u001b[39m CustomPipeline(dataloader\u001b[39m=\u001b[39mdataloader, model\u001b[39m=\u001b[39mmodel)\n",
+ "File \u001b[0;32m/shared/ethanweber/nerfactory/nerfactory/dataloaders/base.py:95\u001b[0m, in \u001b[0;36mDataloader.__init__\u001b[0;34m(self, use_train, use_eval)\u001b[0m\n\u001b[1;32m 93\u001b[0m \u001b[39massert\u001b[39;00m use_train \u001b[39mor\u001b[39;00m use_eval\n\u001b[1;32m 94\u001b[0m \u001b[39mif\u001b[39;00m use_train:\n\u001b[0;32m---> 95\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49msetup_train()\n\u001b[1;32m 96\u001b[0m \u001b[39mif\u001b[39;00m use_eval:\n\u001b[1;32m 97\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39msetup_eval()\n",
+ "File \u001b[0;32m/shared/ethanweber/nerfactory/nerfactory/dataloaders/base.py:116\u001b[0m, in \u001b[0;36mDataloader.setup_train\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 113\u001b[0m \u001b[39m@abstractmethod\u001b[39m\n\u001b[1;32m 114\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39msetup_train\u001b[39m(\u001b[39mself\u001b[39m):\n\u001b[1;32m 115\u001b[0m \u001b[39m\"\"\"Sets up the dataloader for training\"\"\"\u001b[39;00m\n\u001b[0;32m--> 116\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mNotImplementedError\u001b[39;00m\n",
+ "\u001b[0;31mNotImplementedError\u001b[0m: "
+ ]
+ }
+ ],
+ "source": [
+ "dataloader = Dataloader(use_train=True, use_eval=True)\n",
+ "model = SemanticNGPModel()\n",
+ "pipeline = CustomPipeline(dataloader=dataloader, model=model)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Creating pipelines from a config\n",
+ "\n",
+ "Now we show how to create a pipeline from a config, which has the following form:\n",
+ "\n",
+ "```python\n",
+ "@dataclass\n",
+ "class PipelineConfig:\n",
+ " \"\"\"Configuration for pipeline instantiation\"\"\"\n",
+ "\n",
+ " _target_: str = MISSING\n",
+ " dataloader_config: DataloaderConfig = MISSING\n",
+ " graph_config: GraphConfig = MISSING\n",
+ "```\n",
+ "\n",
+ "See [nerfactory/utils/config.py](nerfactory/utils/config.py) for more details. In this example, we will simply load from an existing configuration from [configs/graph_instant_ngp.yaml](configs/graph_instant_ngp.yaml)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'_target_': 'nerfactory.pipelines.base.Pipeline', 'dataloader': {'_target_': 'nerfactory.dataloaders.base.VanillaDataloader', 'train_dataset': {'_target_': 'nerfactory.dataloaders.datasets.Blender', 'data_directory': 'data/blender/lego', 'alpha_color': 'white', 'downscale_factor': 1}, 'train_num_rays_per_batch': 8192, 'eval_dataset': {'_target_': 'nerfactory.dataloaders.datasets.Blender', 'data_directory': 'data/blender/lego', 'alpha_color': 'white', 'downscale_factor': 1}, 'eval_num_rays_per_chunk': 4096, 'eval_num_rays_per_chunk': 8192}, 'model': {'_target_': 'nerfactory.models.instant_ngp.NGPModel', 'enable_collider': False, 'collider_config': {'_target_': 'nerfactory.models.modules.scene_colliders.NearFarCollider', 'near_plane': 2.0, 'far_plane': 6.0}, 'num_coarse_samples': 64, 'num_importance_samples': 128, 'loss_coefficients': {'rgb_loss_coarse': 1.0, 'rgb_loss_fine': 1.0, 'rgb_loss': 1.0}, 'enable_density_field': True, 'density_field_config': {'_target_': 'nerfactory.fields.density_fields.density_grid.DensityGrid', 'center': 0.0, 'base_scale': 3.0, 'num_cascades': 1, 'resolution': 128, 'update_every_num_iters': 16}, 'field_implementation': 'tcnn'}}\n",
+ "----------------------------------------------------\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/shared/ethanweber/miniconda3/envs/nerfactory/lib/python3.8/site-packages/torchvision/models/_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and will be removed in 0.15, please use 'weights' instead.\n",
+ " warnings.warn(\n",
+ "/shared/ethanweber/miniconda3/envs/nerfactory/lib/python3.8/site-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and will be removed in 0.15. The current behavior is equivalent to passing `weights=AlexNet_Weights.IMAGENET1K_V1`. You can also use `weights=AlexNet_Weights.DEFAULT` to get the most up-to-date weights.\n",
+ " warnings.warn(msg)\n"
+ ]
+ }
+ ],
+ "source": [
+ "import pprint\n",
+ "import hydra\n",
+ "\n",
+ "hydra.core.global_hydra.GlobalHydra.instance().clear()\n",
+ "from hydra import compose, initialize\n",
+ "\n",
+ "initialize(version_base=\"1.2\", config_path=\"../configs/\")\n",
+ "config_name = \"graph_instant_ngp.yaml\"\n",
+ "config = compose(config_name)\n",
+ "pipeline_config = config.pipeline\n",
+ "pprint.pprint(pipeline_config)\n",
+ "print(\"----------------------------------------------------\")\n",
+ "\n",
+ "from nerfactory.pipelines.base import setup_pipeline\n",
+ "\n",
+ "pipeline = setup_pipeline(pipeline_config, device=\"cuda\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "AttributeError",
+ "evalue": "'IterableWrapper' object has no attribute 'next'",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
+ "\u001b[1;32m/shared/ethanweber/nerfactory/notebooks/creating_pipelines.ipynb Cell 8\u001b[0m in \u001b[0;36m| \u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m pipeline\u001b[39m.\u001b[39;49mget_train_loss_dict()\n",
+ "File \u001b[0;32m/shared/ethanweber/nerfactory/nerfactory/pipelines/base.py:81\u001b[0m, in \u001b[0;36mPipeline.get_train_loss_dict\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 76\u001b[0m \u001b[39m@abstractmethod\u001b[39m\n\u001b[1;32m 77\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mget_train_loss_dict\u001b[39m(\u001b[39mself\u001b[39m):\n\u001b[1;32m 78\u001b[0m \u001b[39m\"\"\"This function gets your training loss dict. This will be responsible for\u001b[39;00m\n\u001b[1;32m 79\u001b[0m \u001b[39m getting the next batch of data from the dataloader and interfacing with the\u001b[39;00m\n\u001b[1;32m 80\u001b[0m \u001b[39m Model class, feeding the data to the model's forward function.\"\"\"\u001b[39;00m\n\u001b[0;32m---> 81\u001b[0m rays, batch \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mdataloader_train_iter\u001b[39m.\u001b[39;49mnext()\n\u001b[1;32m 82\u001b[0m accumulated_color, _, _, mask \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mmodel(rays, batch)\n\u001b[1;32m 83\u001b[0m masked_batch \u001b[39m=\u001b[39m get_masked_dict(batch, mask)\n",
+ "\u001b[0;31mAttributeError\u001b[0m: 'IterableWrapper' object has no attribute 'next'"
+ ]
+ }
+ ],
+ "source": [
+ "pipeline.get_train_loss_dict()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3.8.13 ('nerfactory')",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.13"
+ },
+ "orig_nbformat": 4,
+ "vscode": {
+ "interpreter": {
+ "hash": "e691f033e0f2f1b9c0a11e7e81375a1e27aec87a71fd1b1eaa545f7a5e61b3f6"
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/scripts/run_eval.py b/scripts/run_eval.py
index 0e0a9d23d..e150cf2ef 100644
--- a/scripts/run_eval.py
+++ b/scripts/run_eval.py
@@ -4,7 +4,7 @@ run_eval.py
import enum
import json
import os
-from typing import Any, Dict, List, Optional
+from typing import Dict, List, Optional
import dcargs
import mediapy as media
@@ -18,12 +18,8 @@ from nerfactory.cameras.camera_paths import (
get_interpolated_camera_path,
get_spiral_path,
)
-from nerfactory.data.dataloader import (
- EvalDataloader,
- setup_dataset_eval,
- setup_dataset_train,
-)
-from nerfactory.graphs.base import Graph, setup_graph
+from nerfactory.pipelines.base import Pipeline, setup_pipeline
+from nerfactory.utils import io as io_utils
from nerfactory.utils.misc import human_format
from nerfactory.utils.writer import TimeWriter
@@ -42,12 +38,12 @@ def _update_avg(prev_avg: float, new_val: float, step: int) -> float:
return (step * prev_avg + new_val) / (step + 1)
-def _load_checkpoint(config: DictConfig, graph: Graph) -> str:
- """Helper function to load checkpointed graph
+def _load_checkpoint(config: DictConfig, pipeline: Pipeline) -> str:
+ """Helper function to load checkpointed pipeline
Args:
- config (DictConfig): Configuration of graph to load
- graph (Graph): Graph instance of which to load weights
+ config (DictConfig): Configuration of pipeline to load
+ pipeline (Pipeline): Pipeline instance of which to load weights
"""
assert config.load_dir is not None
if config.load_step is None:
@@ -59,41 +55,16 @@ def _load_checkpoint(config: DictConfig, graph: Graph) -> str:
load_path = os.path.join(config.load_dir, f"step-{load_step:09d}.ckpt")
assert os.path.exists(load_path), f"Checkpoint {load_path} does not exist"
loaded_state = torch.load(load_path, map_location="cpu")
- graph.load_graph(loaded_state)
+ pipeline.load_pipeline(loaded_state["pipeline"])
print(f"done loading checkpoint from {load_path}")
return load_path
-def run_inference_from_config(config: DictConfig) -> Dict[str, Any]:
- """helper function to run inference given config specifications (also used in benchmarking)
+def render_stats_dict(pipeline: Pipeline) -> Dict[str, float]:
+ """Helper function to evaluate the pipeline on a dataloader.
Args:
- config (DictConfig): Configuration for loading the evaluation.
-
- Returns:
- Tuple[float, float]: returns both the avg psnr and avg rays per second
- """
- print("Running inference.")
- device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
- # setup graph and dataset
- dataset_inputs_train, _ = setup_dataset_train(config.data, device=device)
- _, dataloader_eval = setup_dataset_eval(config.data, test_mode=True, device=device)
- graph = setup_graph(config.graph, dataset_inputs_train, device=device)
- graph.eval()
-
- # load checkpointed information
- _ = _load_checkpoint(config.trainer.resume_train, graph)
-
- # calculate average psnr across test dataset
- return render_stats_dict(graph, dataloader_eval)
-
-
-def render_stats_dict(graph: Graph, dataloader_eval: EvalDataloader) -> Dict[str, float]:
- """Helper function to evaluate the graph on a dataloader.
-
- Args:
- graph (Graph): Graph to evaluate
- dataloader_eval (EvalDataloader): Dataloader to evaluate on
+ pipeline (Pipeline): Pipeline to evaluate
Returns:
dict: returns the average psnr and average rays per second
@@ -101,12 +72,12 @@ def render_stats_dict(graph: Graph, dataloader_eval: EvalDataloader) -> Dict[str
avg_psnr = 0
avg_rays_per_sec = 0
avg_fps = 0
- for step, (camera_ray_bundle, batch) in tqdm(enumerate(dataloader_eval)):
+ for step, (camera_ray_bundle, batch) in tqdm(enumerate(pipeline.dataloader.eval_dataloader)):
with TimeWriter(writer=None, name=None, write=False) as t:
with torch.no_grad():
image_idx = int(camera_ray_bundle.camera_indices[0, 0])
- outputs = graph.get_outputs_for_camera_ray_bundle(camera_ray_bundle)
- psnr = graph.log_test_image_outputs(image_idx, step, batch, outputs)
+ outputs = pipeline.model.get_outputs_for_camera_ray_bundle(camera_ray_bundle)
+ psnr = pipeline.model.log_test_image_outputs(image_idx, step, batch, outputs)
avg_rays_per_sec = _update_avg(avg_rays_per_sec, camera_ray_bundle.origins.shape[0] / t.duration, step)
avg_psnr = _update_avg(avg_psnr, psnr, step)
avg_fps = _update_avg(avg_fps, 1 / t.duration, step)
@@ -114,17 +85,17 @@ def render_stats_dict(graph: Graph, dataloader_eval: EvalDataloader) -> Dict[str
def render_trajectory_video(
- graph: Graph,
+ pipeline: Pipeline,
camera_path: CameraPath,
- output_filename: Optional[str] = None,
- rendered_output_name: Optional[str] = None,
+ output_filename: str,
+ rendered_output_name: str,
rendered_resolution_scaling_factor: float = 1.0,
num_rays_per_chunk: int = 4096,
) -> None:
"""Helper function to create a video of the spiral trajectory.
Args:
- graph: Graph to evaluate with.
+ pipeline: Pipeline to evaluate with.
camera_path: Index of the image to render.
output_filename: Name of the output file.
rendered_output_name: Name of the renderer output to use.
@@ -136,11 +107,10 @@ def render_trajectory_video(
images = []
for camera in tqdm(camera_path.cameras):
camera.rescale_output_resolution(rendered_resolution_scaling_factor)
- camera_ray_bundle = camera.get_camera_ray_bundle().to(graph.device)
+ camera_ray_bundle = camera.get_camera_ray_bundle().to(pipeline.device)
camera_ray_bundle.num_rays_per_chunk = num_rays_per_chunk
with torch.no_grad():
- outputs = graph.get_outputs_for_camera_ray_bundle(camera_ray_bundle)
- # TODO: don't hardcode the key! this will break for some nerf Graphs
+ outputs = pipeline.model.get_outputs_for_camera_ray_bundle(camera_ray_bundle)
image = outputs[rendered_output_name].cpu().numpy()
images.append(image)
@@ -169,7 +139,7 @@ def main(
rendered_output_name: str,
method: MethodType = MethodType.PSNR,
traj: TrajectoryType = TrajectoryType.SPIRAL,
- output_filename: str = "output.mp4",
+ output_filename: str = "output.json",
rendered_resolution_scaling_factor: float = 1.0,
config_overrides: Optional[List[str]] = None,
):
@@ -186,8 +156,6 @@ def main(
Defaults to 1.0.
config_overrides: List of strings to override config values.
"""
- # parser = my_func_that_returns_a_parser()
- # args = parser.parse_args()
config_path = "../configs"
initialize(version_base="1.2", config_path=config_path)
@@ -195,19 +163,18 @@ def main(
config = compose(config_name, overrides=config_overrides)
config.trainer.resume_train.load_dir = checkpoint_dir
- config.data.dataloader_eval.image_indices = None
+ config.pipeline.dataloader.eval_image_indices = None
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
- # setup graph and dataset
- dataset_inputs_train, _ = setup_dataset_train(config.data, device=device)
- _, dataloader_eval = setup_dataset_eval(config.data, test_mode=True, device=device)
- graph = setup_graph(config.graph, dataset_inputs_train, device=device)
- graph.eval()
+ # setup pipeline (which includes the dataloaders)
+ pipeline = setup_pipeline(config.pipeline, device=device, test_mode=True)
+ pipeline.eval()
# load checkpointed information
- checkpoint_name = _load_checkpoint(config.trainer.resume_train, graph)
+ checkpoint_name = _load_checkpoint(config.trainer.resume_train, pipeline)
if method == MethodType.PSNR:
- stats_dict = render_stats_dict(graph, dataloader_eval)
+ assert output_filename.endswith(".json")
+ stats_dict = render_stats_dict(pipeline)
avg_psnr = stats_dict["avg psnr"]
avg_rays_per_sec = stats_dict["avg rays per sec"]
avg_fps = stats_dict["avg fps"]
@@ -215,9 +182,7 @@ def main(
print(f"Avg. Rays / Sec: {human_format(avg_rays_per_sec)}")
print(f"Avg. FPS: {avg_fps:0.4f}")
# save output to some file
- dirname = os.path.dirname(output_filename)
- if not os.path.exists(dirname):
- os.makedirs(dirname)
+ io_utils.make_dir(output_filename)
benchmark_info = {
"config_name": config_name,
"checkpoint": checkpoint_name,
@@ -228,22 +193,23 @@ def main(
print(f"Saved results to: {output_filename}")
elif method == MethodType.TRAJ:
- # TODO(ethan): pass in camera information into argparse parser
+ assert output_filename.endswith(".mp4")
+ # TODO(ethan): use camera information from parsing args
if traj == TrajectoryType.SPIRAL:
- camera_start = dataloader_eval.get_camera(image_idx=0)
+ camera_start = pipeline.dataloader.eval_dataloader.get_camera(image_idx=0)
# TODO(ethan): pass in the up direction of the camera
camera_path = get_spiral_path(camera_start, steps=30, radius=0.1)
elif traj == TrajectoryType.INTERP:
- camera_start = dataloader_eval.get_camera(image_idx=0)
- camera_end = dataloader_eval.get_camera(image_idx=10)
+ camera_start = pipeline.dataloader.eval_dataloader.get_camera(image_idx=0)
+ camera_end = pipeline.dataloader.eval_dataloader.get_camera(image_idx=10)
camera_path = get_interpolated_camera_path(camera_start, camera_end, steps=30)
render_trajectory_video(
- graph,
+ pipeline,
camera_path,
output_filename=output_filename,
rendered_output_name=rendered_output_name,
rendered_resolution_scaling_factor=rendered_resolution_scaling_factor,
- num_rays_per_chunk=config.data.dataloader_eval.num_rays_per_chunk,
+ num_rays_per_chunk=pipeline.dataloader.eval_num_rays_per_chunk,
)
diff --git a/tests/graphs/modules/test_ray_sampler.py b/tests/graphs/modules/test_ray_sampler.py
index 95f7ec020..f349b9b75 100644
--- a/tests/graphs/modules/test_ray_sampler.py
+++ b/tests/graphs/modules/test_ray_sampler.py
@@ -4,14 +4,14 @@ Test samplers
import torch
from nerfactory.cameras.rays import RayBundle
-from nerfactory.graphs.modules.ray_sampler import (
+from nerfactory.models.modules.ray_sampler import (
LinearDisparitySampler,
LogSampler,
PDFSampler,
SqrtSampler,
UniformSampler,
)
-from nerfactory.graphs.modules.scene_colliders import NearFarCollider
+from nerfactory.models.modules.scene_colliders import NearFarCollider
def test_uniform_sampler():
diff --git a/tests/test_run_train.py b/tests/test_run_train.py
index 1542027ad..83ac9d726 100644
--- a/tests/test_run_train.py
+++ b/tests/test_run_train.py
@@ -20,33 +20,32 @@ def set_reduced_config(config: DictConfig):
config.trainer.max_num_iterations = 2
# reduce dataset factors; set dataset to test
# switch to using the vanilla ImageDataset class
- config.data.image_dataset_train._target_ = "nerfactory.data.image_dataset.ImageDataset"
+ config.pipeline.dataloader.image_dataset_type = "rgb"
- config.data.dataset_inputs_train = {
- "_target_": "nerfactory.data.datasets.Blender",
+ config.pipeline.dataloader.train_dataset = {
+ "_target_": "nerfactory.dataloaders.datasets.Blender",
"data_directory": "tests/data/lego_test",
"downscale_factor": 16,
}
- config.data.dataloader_train.image_sampler.num_images_to_sample_from = 1
- config.data.dataloader_train.pixel_sampler.num_rays_per_batch = 4
- config.data.image_dataset_eval._target_ = "nerfactory.data.image_dataset.ImageDataset"
- config.data.dataset_inputs_eval = {
- "_target_": "nerfactory.data.datasets.Blender",
+ config.pipeline.dataloader.train_num_images_to_sample_from = 1
+ config.pipeline.dataloader.train_num_rays_per_batch = 4
+ config.pipeline.dataloader.eval_dataset = {
+ "_target_": "nerfactory.dataloaders.datasets.Blender",
"data_directory": "tests/data/lego_test",
"downscale_factor": 16,
}
- # reduce graph factors
- config.graph.num_coarse_samples = 4
- config.graph.num_importance_samples = 4
+ # reduce model factors
+ config.pipeline.model.num_coarse_samples = 4
+ config.pipeline.model.num_importance_samples = 4
# set logging to tmp
config.logging.writer.TensorboardWriter.log_dir = "/tmp/"
# remove viewer
config.viewer.enable = False
- # graph specific config settings
+ # model specific config settings
if config.method_name == "instant_ngp":
- config.graph.field_implementation = "torch"
+ config.pipeline.model.field_implementation = "torch"
return config
| |