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