diff --git a/doc/_autosummary/drift.core.beamtransfer.rst b/doc/_autosummary/drift.core.beamtransfer.rst new file mode 100644 index 00000000..a01a69b1 --- /dev/null +++ b/doc/_autosummary/drift.core.beamtransfer.rst @@ -0,0 +1,23 @@ +drift.core.beamtransfer +======================= + +.. automodule:: drift.core.beamtransfer + + + .. rubric:: Functions + + .. autosummary:: + + matrix_image + matrix_nullspace + svd_gen + + .. rubric:: Classes + + .. autosummary:: + + BeamTransfer + BeamTransferFullSVD + BeamTransferNoSVD + BeamTransferTempSVD + \ No newline at end of file diff --git a/doc/_autosummary/drift.core.crosspower.rst b/doc/_autosummary/drift.core.crosspower.rst new file mode 100644 index 00000000..7cbbe3bf --- /dev/null +++ b/doc/_autosummary/drift.core.crosspower.rst @@ -0,0 +1,12 @@ +drift.core.crosspower +===================== + +.. automodule:: drift.core.crosspower + + + .. rubric:: Classes + + .. autosummary:: + + CrossPower + \ No newline at end of file diff --git a/doc/_autosummary/drift.core.doublekl.rst b/doc/_autosummary/drift.core.doublekl.rst new file mode 100644 index 00000000..4ccab5c3 --- /dev/null +++ b/doc/_autosummary/drift.core.doublekl.rst @@ -0,0 +1,12 @@ +drift.core.doublekl +=================== + +.. automodule:: drift.core.doublekl + + + .. rubric:: Classes + + .. autosummary:: + + DoubleKL + \ No newline at end of file diff --git a/doc/_autosummary/drift.core.kltransform.rst b/doc/_autosummary/drift.core.kltransform.rst new file mode 100644 index 00000000..03df6508 --- /dev/null +++ b/doc/_autosummary/drift.core.kltransform.rst @@ -0,0 +1,21 @@ +drift.core.kltransform +====================== + +.. automodule:: drift.core.kltransform + + + .. rubric:: Functions + + .. autosummary:: + + collect_m_array + collect_m_arrays + eigh_gen + inv_gen + + .. rubric:: Classes + + .. autosummary:: + + KLTransform + \ No newline at end of file diff --git a/doc/_autosummary/drift.core.manager.rst b/doc/_autosummary/drift.core.manager.rst new file mode 100644 index 00000000..39b99962 --- /dev/null +++ b/doc/_autosummary/drift.core.manager.rst @@ -0,0 +1,12 @@ +drift.core.manager +================== + +.. automodule:: drift.core.manager + + + .. rubric:: Classes + + .. autosummary:: + + ProductManager + \ No newline at end of file diff --git a/doc/_autosummary/drift.core.psestimation.rst b/doc/_autosummary/drift.core.psestimation.rst new file mode 100644 index 00000000..5344d179 --- /dev/null +++ b/doc/_autosummary/drift.core.psestimation.rst @@ -0,0 +1,24 @@ +drift.core.psestimation +======================= + +.. automodule:: drift.core.psestimation + + + .. rubric:: Functions + + .. autosummary:: + + bandfunc_2d_cart + bandfunc_2d_polar + decorrelate_ps + decorrelate_ps_file + range_config + uniform_band + + .. rubric:: Classes + + .. autosummary:: + + PSEstimation + PSExact + \ No newline at end of file diff --git a/doc/_autosummary/drift.core.psmc.rst b/doc/_autosummary/drift.core.psmc.rst new file mode 100644 index 00000000..5a3c1904 --- /dev/null +++ b/doc/_autosummary/drift.core.psmc.rst @@ -0,0 +1,20 @@ +drift.core.psmc +=============== + +.. automodule:: drift.core.psmc + + + .. rubric:: Functions + + .. autosummary:: + + block_root + sim_skyvec + + .. rubric:: Classes + + .. autosummary:: + + PSMonteCarlo + PSMonteCarloAlt + \ No newline at end of file diff --git a/doc/_autosummary/drift.core.rst b/doc/_autosummary/drift.core.rst new file mode 100644 index 00000000..ded994c0 --- /dev/null +++ b/doc/_autosummary/drift.core.rst @@ -0,0 +1,6 @@ +drift.core +========== + +.. automodule:: drift.core + + \ No newline at end of file diff --git a/doc/_autosummary/drift.core.skymodel.rst b/doc/_autosummary/drift.core.skymodel.rst new file mode 100644 index 00000000..4443191f --- /dev/null +++ b/doc/_autosummary/drift.core.skymodel.rst @@ -0,0 +1,19 @@ +drift.core.skymodel +=================== + +.. automodule:: drift.core.skymodel + + + .. rubric:: Functions + + .. autosummary:: + + foreground_model + im21cm_model + + .. rubric:: Classes + + .. autosummary:: + + PointSources + \ No newline at end of file diff --git a/doc/_autosummary/drift.core.telescope.rst b/doc/_autosummary/drift.core.telescope.rst new file mode 100644 index 00000000..3824767e --- /dev/null +++ b/doc/_autosummary/drift.core.telescope.rst @@ -0,0 +1,25 @@ +drift.core.telescope +==================== + +.. automodule:: drift.core.telescope + + + .. rubric:: Functions + + .. autosummary:: + + in_range + map_half_plane + max_lm + out_of_range + + .. rubric:: Classes + + .. autosummary:: + + PolarisedTelescope + SimplePolarisedTelescope + SimpleUnpolarisedTelescope + TransitTelescope + UnpolarisedTelescope + \ No newline at end of file diff --git a/doc/_autosummary/drift.core.visibility.rst b/doc/_autosummary/drift.core.visibility.rst new file mode 100644 index 00000000..63d5cefe --- /dev/null +++ b/doc/_autosummary/drift.core.visibility.rst @@ -0,0 +1,15 @@ +drift.core.visibility +===================== + +.. automodule:: drift.core.visibility + + + .. rubric:: Functions + + .. autosummary:: + + cylinder_beam + horizon + pol_IQU + uv_plane_cart + \ No newline at end of file diff --git a/doc/_autosummary/drift.pipeline.pipeline.rst b/doc/_autosummary/drift.pipeline.pipeline.rst new file mode 100644 index 00000000..90e7b68e --- /dev/null +++ b/doc/_autosummary/drift.pipeline.pipeline.rst @@ -0,0 +1,18 @@ +drift.pipeline.pipeline +======================= + +.. automodule:: drift.pipeline.pipeline + + + .. rubric:: Functions + + .. autosummary:: + + fixpath + + .. rubric:: Classes + + .. autosummary:: + + PipelineManager + \ No newline at end of file diff --git a/doc/_autosummary/drift.pipeline.rst b/doc/_autosummary/drift.pipeline.rst new file mode 100644 index 00000000..69fa2f26 --- /dev/null +++ b/doc/_autosummary/drift.pipeline.rst @@ -0,0 +1,6 @@ +drift.pipeline +============== + +.. automodule:: drift.pipeline + + \ No newline at end of file diff --git a/doc/_autosummary/drift.pipeline.timestream.rst b/doc/_autosummary/drift.pipeline.timestream.rst new file mode 100644 index 00000000..3806359e --- /dev/null +++ b/doc/_autosummary/drift.pipeline.timestream.rst @@ -0,0 +1,19 @@ +drift.pipeline.timestream +========================= + +.. automodule:: drift.pipeline.timestream + + + .. rubric:: Functions + + .. autosummary:: + + cross_powerspectrum + simulate + + .. rubric:: Classes + + .. autosummary:: + + Timestream + \ No newline at end of file diff --git a/doc/_autosummary/drift.scripts.rst b/doc/_autosummary/drift.scripts.rst new file mode 100644 index 00000000..2383afb5 --- /dev/null +++ b/doc/_autosummary/drift.scripts.rst @@ -0,0 +1,6 @@ +drift.scripts +============= + +.. automodule:: drift.scripts + + \ No newline at end of file diff --git a/doc/_autosummary/drift.telescope.cylbeam.rst b/doc/_autosummary/drift.telescope.cylbeam.rst new file mode 100644 index 00000000..3cc41b67 --- /dev/null +++ b/doc/_autosummary/drift.telescope.cylbeam.rst @@ -0,0 +1,17 @@ +drift.telescope.cylbeam +======================= + +.. automodule:: drift.telescope.cylbeam + + + .. rubric:: Functions + + .. autosummary:: + + beam_amp + beam_dipole + beam_x + beam_y + fraunhofer_cylinder + polpattern + \ No newline at end of file diff --git a/doc/_autosummary/drift.telescope.cylinder.rst b/doc/_autosummary/drift.telescope.cylinder.rst new file mode 100644 index 00000000..cb325aec --- /dev/null +++ b/doc/_autosummary/drift.telescope.cylinder.rst @@ -0,0 +1,14 @@ +drift.telescope.cylinder +======================== + +.. automodule:: drift.telescope.cylinder + + + .. rubric:: Classes + + .. autosummary:: + + CylinderTelescope + PolarisedCylinderTelescope + UnpolarisedCylinderTelescope + \ No newline at end of file diff --git a/doc/_autosummary/drift.telescope.disharray.rst b/doc/_autosummary/drift.telescope.disharray.rst new file mode 100644 index 00000000..a0be74b2 --- /dev/null +++ b/doc/_autosummary/drift.telescope.disharray.rst @@ -0,0 +1,19 @@ +drift.telescope.disharray +========================= + +.. automodule:: drift.telescope.disharray + + + .. rubric:: Functions + + .. autosummary:: + + beam_circular + jinc + + .. rubric:: Classes + + .. autosummary:: + + DishArray + \ No newline at end of file diff --git a/doc/_autosummary/drift.telescope.exotic_cylinder.rst b/doc/_autosummary/drift.telescope.exotic_cylinder.rst new file mode 100644 index 00000000..1b3370f5 --- /dev/null +++ b/doc/_autosummary/drift.telescope.exotic_cylinder.rst @@ -0,0 +1,16 @@ +drift.telescope.exotic\_cylinder +================================ + +.. automodule:: drift.telescope.exotic_cylinder + + + .. rubric:: Classes + + .. autosummary:: + + CylinderExtra + CylinderPerturbed + CylinderShift + GradientCylinder + RandomCylinder + \ No newline at end of file diff --git a/doc/_autosummary/drift.telescope.focalplane.rst b/doc/_autosummary/drift.telescope.focalplane.rst new file mode 100644 index 00000000..ac5ed4ae --- /dev/null +++ b/doc/_autosummary/drift.telescope.focalplane.rst @@ -0,0 +1,20 @@ +drift.telescope.focalplane +========================== + +.. automodule:: drift.telescope.focalplane + + + .. rubric:: Functions + + .. autosummary:: + + beam_circular + gaussian_beam + jinc + + .. rubric:: Classes + + .. autosummary:: + + FocalPlaneArray + \ No newline at end of file diff --git a/doc/_autosummary/drift.telescope.gmrt.rst b/doc/_autosummary/drift.telescope.gmrt.rst new file mode 100644 index 00000000..c0f94d60 --- /dev/null +++ b/doc/_autosummary/drift.telescope.gmrt.rst @@ -0,0 +1,20 @@ +drift.telescope.gmrt +==================== + +.. automodule:: drift.telescope.gmrt + + + .. rubric:: Functions + + .. autosummary:: + + beam_circular + jinc + + .. rubric:: Classes + + .. autosummary:: + + GmrtArray + GmrtUnpolarised + \ No newline at end of file diff --git a/doc/_autosummary/drift.telescope.oldcylinder.rst b/doc/_autosummary/drift.telescope.oldcylinder.rst new file mode 100644 index 00000000..09d4437f --- /dev/null +++ b/doc/_autosummary/drift.telescope.oldcylinder.rst @@ -0,0 +1,14 @@ +drift.telescope.oldcylinder +=========================== + +.. automodule:: drift.telescope.oldcylinder + + + .. rubric:: Classes + + .. autosummary:: + + CylinderTelescope + PolarisedCylinderTelescope + UnpolarisedCylinderTelescope + \ No newline at end of file diff --git a/doc/_autosummary/drift.telescope.restrictedcylinder.rst b/doc/_autosummary/drift.telescope.restrictedcylinder.rst new file mode 100644 index 00000000..e2c1d86c --- /dev/null +++ b/doc/_autosummary/drift.telescope.restrictedcylinder.rst @@ -0,0 +1,21 @@ +drift.telescope.restrictedcylinder +================================== + +.. automodule:: drift.telescope.restrictedcylinder + + + .. rubric:: Functions + + .. autosummary:: + + gaussian_fwhm + + .. rubric:: Classes + + .. autosummary:: + + RestrictedBeam + RestrictedCylinder + RestrictedExtra + RestrictedPolarisedCylinder + \ No newline at end of file diff --git a/doc/_autosummary/drift.telescope.rst b/doc/_autosummary/drift.telescope.rst new file mode 100644 index 00000000..864ba5c6 --- /dev/null +++ b/doc/_autosummary/drift.telescope.rst @@ -0,0 +1,6 @@ +drift.telescope +=============== + +.. automodule:: drift.telescope + + \ No newline at end of file diff --git a/doc/_autosummary/drift.util.blockla.rst b/doc/_autosummary/drift.util.blockla.rst new file mode 100644 index 00000000..ffed88b9 --- /dev/null +++ b/doc/_autosummary/drift.util.blockla.rst @@ -0,0 +1,15 @@ +drift.util.blockla +================== + +.. automodule:: drift.util.blockla + + + .. rubric:: Functions + + .. autosummary:: + + multiply_dm_dm + multiply_dm_v + pinv_dm + svd_dm + \ No newline at end of file diff --git a/doc/_autosummary/drift.util.plotutil.rst b/doc/_autosummary/drift.util.plotutil.rst new file mode 100644 index 00000000..2f82430e --- /dev/null +++ b/doc/_autosummary/drift.util.plotutil.rst @@ -0,0 +1,12 @@ +drift.util.plotutil +=================== + +.. automodule:: drift.util.plotutil + + + .. rubric:: Functions + + .. autosummary:: + + regrid_polar + \ No newline at end of file diff --git a/doc/_autosummary/drift.util.rst b/doc/_autosummary/drift.util.rst new file mode 100644 index 00000000..d2a90499 --- /dev/null +++ b/doc/_autosummary/drift.util.rst @@ -0,0 +1,6 @@ +drift.util +========== + +.. automodule:: drift.util + + \ No newline at end of file diff --git a/doc/_autosummary/drift.util.util.rst b/doc/_autosummary/drift.util.util.rst new file mode 100644 index 00000000..020f415d --- /dev/null +++ b/doc/_autosummary/drift.util.util.rst @@ -0,0 +1,14 @@ +drift.util.util +=============== + +.. automodule:: drift.util.util + + + .. rubric:: Functions + + .. autosummary:: + + cache_last + intpattern + natpattern + \ No newline at end of file diff --git a/docs/.buildinfo b/docs/.buildinfo new file mode 100644 index 00000000..c2e74ce8 --- /dev/null +++ b/docs/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: e128663a599a5467482212ac0da86677 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/.doctrees/_autosummary/drift.core.beamtransfer.doctree b/docs/.doctrees/_autosummary/drift.core.beamtransfer.doctree new file mode 100644 index 00000000..5004706f Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.core.beamtransfer.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.core.crosspower.doctree b/docs/.doctrees/_autosummary/drift.core.crosspower.doctree new file mode 100644 index 00000000..a0893341 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.core.crosspower.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.core.doctree b/docs/.doctrees/_autosummary/drift.core.doctree new file mode 100644 index 00000000..9c203c4f Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.core.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.core.doublekl.doctree b/docs/.doctrees/_autosummary/drift.core.doublekl.doctree new file mode 100644 index 00000000..3fdb686f Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.core.doublekl.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.core.kltransform.doctree b/docs/.doctrees/_autosummary/drift.core.kltransform.doctree new file mode 100644 index 00000000..6cc84115 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.core.kltransform.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.core.manager.doctree b/docs/.doctrees/_autosummary/drift.core.manager.doctree new file mode 100644 index 00000000..3dd9ec26 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.core.manager.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.core.psestimation.doctree b/docs/.doctrees/_autosummary/drift.core.psestimation.doctree new file mode 100644 index 00000000..643e28d5 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.core.psestimation.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.core.psmc.doctree b/docs/.doctrees/_autosummary/drift.core.psmc.doctree new file mode 100644 index 00000000..a8fac28d Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.core.psmc.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.core.skymodel.doctree b/docs/.doctrees/_autosummary/drift.core.skymodel.doctree new file mode 100644 index 00000000..e9bd2be8 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.core.skymodel.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.core.telescope.doctree b/docs/.doctrees/_autosummary/drift.core.telescope.doctree new file mode 100644 index 00000000..51f4d93e Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.core.telescope.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.core.visibility.doctree b/docs/.doctrees/_autosummary/drift.core.visibility.doctree new file mode 100644 index 00000000..3e96104a Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.core.visibility.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.pipeline.doctree b/docs/.doctrees/_autosummary/drift.pipeline.doctree new file mode 100644 index 00000000..1ffd7838 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.pipeline.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.pipeline.pipeline.doctree b/docs/.doctrees/_autosummary/drift.pipeline.pipeline.doctree new file mode 100644 index 00000000..1f1b753e Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.pipeline.pipeline.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.pipeline.timestream.doctree b/docs/.doctrees/_autosummary/drift.pipeline.timestream.doctree new file mode 100644 index 00000000..329c6778 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.pipeline.timestream.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.scripts.doctree b/docs/.doctrees/_autosummary/drift.scripts.doctree new file mode 100644 index 00000000..e7367b49 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.scripts.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.telescope.cylbeam.doctree b/docs/.doctrees/_autosummary/drift.telescope.cylbeam.doctree new file mode 100644 index 00000000..c45784db Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.telescope.cylbeam.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.telescope.cylinder.doctree b/docs/.doctrees/_autosummary/drift.telescope.cylinder.doctree new file mode 100644 index 00000000..4cfde896 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.telescope.cylinder.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.telescope.disharray.doctree b/docs/.doctrees/_autosummary/drift.telescope.disharray.doctree new file mode 100644 index 00000000..4d77318b Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.telescope.disharray.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.telescope.doctree b/docs/.doctrees/_autosummary/drift.telescope.doctree new file mode 100644 index 00000000..fae82f04 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.telescope.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.telescope.exotic_cylinder.doctree b/docs/.doctrees/_autosummary/drift.telescope.exotic_cylinder.doctree new file mode 100644 index 00000000..15ada9ed Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.telescope.exotic_cylinder.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.telescope.focalplane.doctree b/docs/.doctrees/_autosummary/drift.telescope.focalplane.doctree new file mode 100644 index 00000000..8c6311e1 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.telescope.focalplane.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.telescope.gmrt.doctree b/docs/.doctrees/_autosummary/drift.telescope.gmrt.doctree new file mode 100644 index 00000000..79e0ad18 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.telescope.gmrt.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.telescope.oldcylinder.doctree b/docs/.doctrees/_autosummary/drift.telescope.oldcylinder.doctree new file mode 100644 index 00000000..d63e6707 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.telescope.oldcylinder.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.telescope.restrictedcylinder.doctree b/docs/.doctrees/_autosummary/drift.telescope.restrictedcylinder.doctree new file mode 100644 index 00000000..a9c7bf6e Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.telescope.restrictedcylinder.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.util.blockla.doctree b/docs/.doctrees/_autosummary/drift.util.blockla.doctree new file mode 100644 index 00000000..041df676 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.util.blockla.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.util.doctree b/docs/.doctrees/_autosummary/drift.util.doctree new file mode 100644 index 00000000..1b9d010c Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.util.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.util.plotutil.doctree b/docs/.doctrees/_autosummary/drift.util.plotutil.doctree new file mode 100644 index 00000000..83cffa4a Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.util.plotutil.doctree differ diff --git a/docs/.doctrees/_autosummary/drift.util.util.doctree b/docs/.doctrees/_autosummary/drift.util.util.doctree new file mode 100644 index 00000000..c38b4893 Binary files /dev/null and b/docs/.doctrees/_autosummary/drift.util.util.doctree differ diff --git a/docs/.doctrees/environment.pickle b/docs/.doctrees/environment.pickle new file mode 100644 index 00000000..6f5be9d8 Binary files /dev/null and b/docs/.doctrees/environment.pickle differ diff --git a/docs/.doctrees/index.doctree b/docs/.doctrees/index.doctree new file mode 100644 index 00000000..935e6688 Binary files /dev/null and b/docs/.doctrees/index.doctree differ diff --git a/docs/.doctrees/overview.doctree b/docs/.doctrees/overview.doctree new file mode 100644 index 00000000..74e27e49 Binary files /dev/null and b/docs/.doctrees/overview.doctree differ diff --git a/docs/.doctrees/reference.doctree b/docs/.doctrees/reference.doctree new file mode 100644 index 00000000..f8a44bed Binary files /dev/null and b/docs/.doctrees/reference.doctree differ diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/docs/_autosummary/drift.core.beamtransfer.html b/docs/_autosummary/drift.core.beamtransfer.html new file mode 100644 index 00000000..e1266494 --- /dev/null +++ b/docs/_autosummary/drift.core.beamtransfer.html @@ -0,0 +1,887 @@ + + + + + + + drift.core.beamtransfer — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.core.beamtransfer

+

Calculation and management of Beam Transfer matrices

+

Functions

+ + + + + + + + + + + + +

matrix_image(A[, rtol, atol, errmsg])

matrix_nullspace(A[, rtol, atol, errmsg])

svd_gen(A[, errmsg])

Find the inverse of A.

+

Classes

+ + + + + + + + + + + + + + + +

BeamTransfer(directory[, telescope])

A class for reading and writing Beam Transfer matrices from disk.

BeamTransferFullSVD(directory[, telescope])

BeamTransfer class that performs the old temperature only SVD.

BeamTransferNoSVD(directory[, telescope])

BeamTransferTempSVD(directory[, telescope])

BeamTransfer class that performs the old temperature only SVD.

+
+
+class drift.core.beamtransfer.BeamTransfer(directory, telescope=None)
+

Bases: Reader

+

A class for reading and writing Beam Transfer matrices from disk.

+

In addition this provides methods for projecting vectors and matrices +between the sky and the telescope basis.

+
+
Parameters:
+
    +
  • directory (string) – Path of directory to read and write Beam Transfers from.

  • +
  • telescope (drift.core.telescope.TransitTelescope, optional) – Telescope object to use for calculation. If None (default), try to +load a cached version from the given directory.

  • +
+
+
+
+
+mem_chunk
+

The amount of memory to use per process in this calculation in GB. This is a +target and not a strict upper limit. This will change the number of chunks the +calculation is split into. Default is 3 GB.

+
+
Type:
+

float

+
+
+
+ +
+
+svcut
+

The relative precision below the maximum singular value to exclude low +sensitivity SVD modes. This can be dynamically changed as it is evaluated +when performing projections.

+
+
Type:
+

float

+
+
+
+ +
+
+polsvcut
+

The relative precision below the maximum value to assume the polarisation +sensitivity is zero. This is used to find the polarisation null space. This +is used to generate the cached SVD modes and so cannot be changed after they +are generated.

+
+
Type:
+

float

+
+
+
+ +
+
+truncate
+

Whether precision truncation of the beam transfer matrices should be done.

+
+
Type:
+

bool

+
+
+
+ +
+
+truncate_rel
+

The relative per element precision to use for the truncation.

+
+
Type:
+

float

+
+
+
+ +
+
+truncate_maxl
+

The truncation precision to use relative the maximum value for all l’s of +that mode.

+
+
Type:
+

float

+
+
+
+ +
+
+chunk_cache_size
+

The size of the per m-file HDF5 chunk cache. Default is 128 MB.

+
+
Type:
+

int

+
+
+
+ +
+
+beam_m(mi: int, fi: int | None = None) ndarray
+

Fetch the beam transfer matrix for a given m.

+
+
Parameters:
+
    +
  • mi (integer) – m-mode to fetch.

  • +
  • fi (integer) – frequency block to fetch. fi=None (default) returns all.

  • +
+
+
Returns:
+

beam

+
+
Return type:
+

np.ndarray (nfreq, 2, npairs, npol_sky, lmax+1)

+
+
+
+ +
+
+beam_singularvalues(mi: int) ndarray
+

Fetch the vector of beam singular values for a given m.

+
+
Parameters:
+

mi (integer) – m-mode to fetch.

+
+
Returns:
+

beam

+
+
Return type:
+

np.ndarray (nfreq, svd_len)

+
+
+
+ +
+
+beam_svd(mi: int, fi: int | None = None) ndarray
+

Fetch the SVD beam transfer matrix (S V^H) for a given m. This SVD beam +transfer projects from the sky into the SVD basis.

+

This returns the full SVD spectrum. Cutting based on SVD value must be +done by other routines (see project*svd methods).

+
+
Parameters:
+
    +
  • mi (integer) – m-mode to fetch.

  • +
  • fi (integer) – frequency block to fetch. fi=None (default) returns all.

  • +
+
+
Returns:
+

beam

+
+
Return type:
+

np.ndarray (nfreq, svd_len, npol_sky, lmax+1)

+
+
+
+ +
+
+beam_ut(mi: int, fi: int | None = None) ndarray
+

Fetch the SVD beam transfer matrix (U^H) for a given m. This SVD beam +transfer projects from the telescope space into the SVD basis.

+

This returns the full SVD spectrum. Cutting based on SVD value must be +done by other routines (see project*svd methods).

+
+
Parameters:
+
    +
  • mi (integer) – m-mode to fetch.

  • +
  • fi (integer) – frequency block to fetch. fi=None (default) returns all.

  • +
+
+
Returns:
+

beam

+
+
Return type:
+

np.ndarray (nfreq, svd_len, ntel)

+
+
+
+ +
+
+generate(regen=False, skip_svd=False, skip_svd_inv=False)
+

Save out all beam transfer matrices to disk.

+
+
Parameters:
+
    +
  • regen (boolean, optional) – Force regeneration even if cache files exist (default: False).

  • +
  • skip_svd (boolen, optional) – Skip SVD beam generation. Saves time and space if you are only map making.

  • +
+
+
+
+ +
+
+generate_cache(regen=False, skip_svd=False, skip_svd_inv=False)
+

Save out all beam transfer matrices to disk.

+
+
Parameters:
+
    +
  • regen (boolean, optional) – Force regeneration even if cache files exist (default: False).

  • +
  • skip_svd (boolen, optional) – Skip SVD beam generation. Saves time and space if you are only map making.

  • +
+
+
+
+ +
+
+invbeam_m(mi)
+

Pseudo-inverse of the beam (for a given m).

+

Uses the Moore-Penrose Pseudo-inverse as the optimal inverse for +reconstructing the data. No single option as this only makes sense +when combined.

+
+
Parameters:
+

mi (integer) – m-mode to calculate.

+
+
Returns:
+

invbeam

+
+
Return type:
+

np.ndarray (nfreq, npol_sky, lmax+1, 2, npairs)

+
+
+
+ +
+
+invbeam_svd(mi: int, fi: int | None = None) ndarray
+

Fetch the SVD beam transfer matrix (S V^H) for a given m. This SVD beam +transfer projects from the sky into the SVD basis.

+

This returns the full SVD spectrum. Cutting based on SVD value must be +done by other routines (see project*svd methods).

+
+
Parameters:
+
    +
  • mi (integer) – m-mode to fetch.

  • +
  • fi (integer) – frequency block to fetch. fi=None (default) returns all.

  • +
+
+
Returns:
+

beam

+
+
Return type:
+

np.ndarray (nfreq, svd_len, npol_sky, lmax+1)

+
+
+
+ +
+
+ndof(mi)
+

The number of degrees of freedom at a given m.

+
+ +
+
+property nfreq
+

Number of frequencies measured.

+
+ +
+
+property nsky
+

Degrees of freedom on the sky at each frequency.

+
+ +
+
+property ntel
+

Degrees of freedom measured by the telescope (per frequency)

+
+ +
+
+project_matrix_diagonal_telescope_to_svd(mi, dmat)
+

Project a diagonal matrix from the telescope basis into the SVD basis.

+

This slightly specialised routine is for projecting the noise +covariance into the SVD space.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • mat (np.ndarray) – Sky matrix packed as [nfreq, ntel]

  • +
+
+
Returns:
+

tmat – Covariance in SVD basis.

+
+
Return type:
+

np.ndarray [nsvd, nsvd]

+
+
+
+ +
+
+project_matrix_forward(mi, mat)
+

Project a covariance matrix from the sky into the visibility basis.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • mat (np.ndarray) – Sky matrix packed as [pol, pol, l, freq, freq]

  • +
+
+
Returns:
+

tmat – Covariance in telescope basis.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+project_matrix_sky_to_svd(mi, mat, temponly=False)
+

Project a covariance matrix from the sky into the SVD basis.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • mat (np.ndarray) – Sky matrix packed as [pol, pol, l, freq, freq]. Must have pol +indices even if temponly=True.

  • +
  • temponly (boolean) – Force projection of temperature (TT) part only (default: False)

  • +
+
+
Returns:
+

tmat – Covariance in SVD basis.

+
+
Return type:
+

np.ndarray [nsvd, nsvd]

+
+
+
+ +
+
+project_matrix_sky_to_telescope(mi, mat)
+

Project a covariance matrix from the sky into the visibility basis.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • mat (np.ndarray) – Sky matrix packed as [pol, pol, l, freq, freq]

  • +
+
+
Returns:
+

tmat – Covariance in telescope basis.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+project_vector_backward(mi, vec)
+

Invert a vector from the telescope space onto the sky. This is the +map-making process.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • vec (np.ndarray) – Sky data vector packed as [freq, baseline, polarisation]

  • +
+
+
Returns:
+

tvec – Sky vector to return.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+project_vector_forward(mi, vec)
+

Project a vector from the sky into the visibility basis.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • vec (np.ndarray) – Sky data vector packed as [nfreq, npol, lmax+1]

  • +
+
+
Returns:
+

tvec – Telescope vector to return.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+project_vector_sky_to_svd(mi, vec, temponly=False)
+

Project a vector from the the sky into the SVD basis.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • vec (np.ndarray) – Sky data vector packed as [nfreq, lmax+1]

  • +
  • temponly (boolean) – Force projection of temperature part only (default: False)

  • +
+
+
Returns:
+

svec – SVD vector to return.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+project_vector_sky_to_telescope(mi, vec)
+

Project a vector from the sky into the visibility basis.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • vec (np.ndarray) – Sky data vector packed as [nfreq, npol, lmax+1]

  • +
+
+
Returns:
+

tvec – Telescope vector to return.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+project_vector_svd_to_sky(mi, vec, temponly=False, conj=False)
+

Project a vector from the the sky into the SVD basis.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • vec (np.ndarray) – Sky data vector packed as [nfreq, lmax+1]

  • +
  • temponly (boolean) – Force projection of temperature part only (default: False)

  • +
  • conj (boolean) – Reverse projection by applying conjugation (as opposed to pseudo- +inverse). Default is False.

  • +
+
+
Returns:
+

svec – SVD vector to return.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+project_vector_svd_to_telescope(mi, svec)
+

Map a vector from the SVD basis into the original data basis.

+

This projection may be lose information about the sky, depending on the +polarisation filtering. This essentially uses the pseudo-inverse which +is simply related to the original projection matrix.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • svec (np.ndarray) – SVD data vector.

  • +
+
+
Returns:
+

vec – Data vector to return.

+
+
Return type:
+

np.ndarray[freq, sign, baseline]

+
+
+
+ +
+
+project_vector_telescope_to_sky(mi, vec)
+

Invert a vector from the telescope space onto the sky. This is the +map-making process.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • vec (np.ndarray) – Sky data vector packed as [freq, baseline, polarisation]

  • +
+
+
Returns:
+

tvec – Sky vector to return.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+project_vector_telescope_to_svd(mi, vec)
+

Map a vector from the telescope space into the SVD basis.

+

This projection may be lose information about the sky, depending on +the polarisation filtering.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • vec (np.ndarray) – Telescope data vector packed as [freq, baseline, polarisation]

  • +
+
+
Returns:
+

svec – SVD vector to return.

+
+
Return type:
+

np.ndarray[svdnum]

+
+
+
+ +
+
+svd_all()
+

Collects the full SVD spectrum for all m-modes.

+

Reads in from file on disk.

+
+
Returns:
+

svarray – The full set of singular values across all m-modes.

+
+
Return type:
+

np.ndarray[mmax+1, nfreq, svd_len]

+
+
+
+ +
+
+property svd_len
+

The size of the SVD output matrices.

+
+ +
+ +
+
+class drift.core.beamtransfer.BeamTransferFullSVD(directory, telescope=None)
+

Bases: BeamTransfer

+

BeamTransfer class that performs the old temperature only SVD.

+
+
+property svd_len
+

The size of the SVD output matrices.

+
+ +
+ +
+
+class drift.core.beamtransfer.BeamTransferNoSVD(directory, telescope=None)
+

Bases: BeamTransfer

+
+
+beam_svd(mi, *args, **kwargs)
+

Fetch the SVD beam transfer matrix (S V^H) for a given m. This SVD beam +transfer projects from the sky into the SVD basis.

+

This returns the full SVD spectrum. Cutting based on SVD value must be +done by other routines (see project*svd methods).

+
+
Parameters:
+
    +
  • mi (integer) – m-mode to fetch.

  • +
  • fi (integer) – frequency block to fetch. fi=None (default) returns all.

  • +
+
+
Returns:
+

beam

+
+
Return type:
+

np.ndarray (nfreq, svd_len, npol_sky, lmax+1)

+
+
+
+ +
+
+ndof(mi, *args, **kwargs)
+

The number of degrees of freedom at a given m.

+
+ +
+
+project_matrix_diagonal_telescope_to_svd(mi, dmat, *args, **kwargs)
+

Project a diagonal matrix from the telescope basis into the SVD basis.

+

This slightly specialised routine is for projecting the noise +covariance into the SVD space.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • mat (np.ndarray) – Sky matrix packed as [nfreq, ntel]

  • +
+
+
Returns:
+

tmat – Covariance in SVD basis.

+
+
Return type:
+

np.ndarray [nsvd, nsvd]

+
+
+
+ +
+
+project_matrix_sky_to_svd(mi, mat, *args, **kwargs)
+

Project a covariance matrix from the sky into the SVD basis.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • mat (np.ndarray) – Sky matrix packed as [pol, pol, l, freq, freq]. Must have pol +indices even if temponly=True.

  • +
  • temponly (boolean) – Force projection of temperature (TT) part only (default: False)

  • +
+
+
Returns:
+

tmat – Covariance in SVD basis.

+
+
Return type:
+

np.ndarray [nsvd, nsvd]

+
+
+
+ +
+
+project_vector_sky_to_svd(mi, vec, *args, **kwargs)
+

Project a vector from the the sky into the SVD basis.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • vec (np.ndarray) – Sky data vector packed as [nfreq, lmax+1]

  • +
  • temponly (boolean) – Force projection of temperature part only (default: False)

  • +
+
+
Returns:
+

svec – SVD vector to return.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+project_vector_telescope_to_svd(mi, vec, *args, **kwargs)
+

Map a vector from the telescope space into the SVD basis.

+

This projection may be lose information about the sky, depending on +the polarisation filtering.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • vec (np.ndarray) – Telescope data vector packed as [freq, baseline, polarisation]

  • +
+
+
Returns:
+

svec – SVD vector to return.

+
+
Return type:
+

np.ndarray[svdnum]

+
+
+
+ +
+ +
+
+class drift.core.beamtransfer.BeamTransferTempSVD(directory, telescope=None)
+

Bases: BeamTransfer

+

BeamTransfer class that performs the old temperature only SVD.

+
+ +
+
+drift.core.beamtransfer.svd_gen(A, errmsg=None, *args, **kwargs)
+

Find the inverse of A.

+

If a standard matrix inverse has issues try using the pseudo-inverse.

+
+
Parameters:
+

A (np.ndarray) – Matrix to invert.

+
+
Returns:
+

inv

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.core.crosspower.html b/docs/_autosummary/drift.core.crosspower.html new file mode 100644 index 00000000..c6fb4079 --- /dev/null +++ b/docs/_autosummary/drift.core.crosspower.html @@ -0,0 +1,162 @@ + + + + + + + drift.core.crosspower — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.core.crosspower

+

Classes

+ + + + + + +

CrossPower(kltrans[, subdir])

Initialise a PS estimator class.

+
+
+class drift.core.crosspower.CrossPower(kltrans, subdir='ps')
+

Bases: PSMonteCarlo

+

Initialise a PS estimator class.

+
+
Parameters:
+
    +
  • kltrans (KLTransform) – The KL Transform filter to use.

  • +
  • subdir (string, optional) – Subdirectory of the KLTransform directory to store results in. +Default is ‘ps’.

  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.core.doublekl.html b/docs/_autosummary/drift.core.doublekl.html new file mode 100644 index 00000000..c3f34c42 --- /dev/null +++ b/docs/_autosummary/drift.core.doublekl.html @@ -0,0 +1,167 @@ + + + + + + + drift.core.doublekl — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.core.doublekl

+

Classes

+ + + + + + +

DoubleKL(bt[, subdir])

Modified KL technique that performs a first transformation to remove foreground modes, and a subsequent transformation to diagonalise the full noise (remaining foregrounds+instrumental space).

+
+
+class drift.core.doublekl.DoubleKL(bt, subdir=None)
+

Bases: KLTransform

+

Modified KL technique that performs a first transformation to remove +foreground modes, and a subsequent transformation to diagonalise the full +noise (remaining foregrounds+instrumental space).

+
+
+foreground_threshold
+

Ratio of S/F power below which we throw away modes as being foreground +contaminated.

+
+
Type:
+

scalar

+
+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.core.html b/docs/_autosummary/drift.core.html new file mode 100644 index 00000000..ff29de2f --- /dev/null +++ b/docs/_autosummary/drift.core.html @@ -0,0 +1,173 @@ + + + + + + + drift.core — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.core

+

Core functionality for driftscan modelling.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

beamtransfer

Calculation and management of Beam Transfer matrices

crosspower

doublekl

kltransform

manager

Manage access to and generation of driftscan analysis products.

psestimation

Estimate powerspectra and forecast constraints from real data.

psmc

skymodel

telescope

visibility

Routines for calculating visibilities on the full sky.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.core.kltransform.html b/docs/_autosummary/drift.core.kltransform.html new file mode 100644 index 00000000..f827fb7d --- /dev/null +++ b/docs/_autosummary/drift.core.kltransform.html @@ -0,0 +1,588 @@ + + + + + + + drift.core.kltransform — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.core.kltransform

+

Functions

+ + + + + + + + + + + + + + + +

collect_m_array(mlist, func, shape, dtype)

collect_m_arrays(mlist, func, shapes, dtype)

eigh_gen(A, B[, message])

Solve the generalised eigenvalue problem.

inv_gen(A)

Find the inverse of A.

+

Classes

+ + + + + + +

KLTransform(bt[, subdir])

Perform KL transform.

+
+
+class drift.core.kltransform.KLTransform(bt, subdir=None)
+

Bases: Reader

+

Perform KL transform.

+
+
+subset
+

If True, throw away modes below a S/N threshold.

+
+
Type:
+

boolean

+
+
+
+ +
+
+threshold
+

S/N threshold to cut modes at.

+
+
Type:
+

scalar

+
+
+
+ +
+
+inverse
+

If True construct and cache inverse transformation.

+
+
Type:
+

boolean

+
+
+
+ +
+
+use_thermal, use_foregrounds
+

Whether to use instrumental noise/foregrounds (default: both True)

+
+
Type:
+

boolean

+
+
+
+ +
+
+_foreground_regulariser
+

The regularisation constant for the foregrounds. Adds in a diagonal of +size reg * cf.max(). Default is 2e-15

+
+
Type:
+

scalar

+
+
+
+ +
+
+evals_all()
+

Collects the full eigenvalue spectrum for all m-modes.

+

Reads in from files on disk.

+
+
Returns:
+

evarray – The full set of eigenvalues across all m-modes.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+evals_m(mi, threshold=None)
+

Fetch the KL-modes for a particular m.

+

This attempts to read in the results from disk, if available and if not +will create them.

+

Also, it will cache the previous m-mode in memory, so as to avoid disk +access in many cases. However this is not sensitive to changes in the +threshold, be careful.

+
+
Parameters:
+
    +
  • mi (integer) – m to fetch KL-modes for.

  • +
  • threshold (real scalar, optional) – Returns only KL-modes with S/N greater than threshold. By default +return all modes saved in the file (this maybe be a subset already, +see transform_save).

  • +
+
+
Returns:
+

evals – KL-modes with S/N greater than some threshold. Both evals and evecs +are potentially None, if there are no modes either in the file, or +satisfying S/N > threshold.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+foreground()
+

Compute the foreground covariance matrix (on the sky).

+
+
Returns:
+

cv_fg

+
+
Return type:
+

np.ndarray[pol2, pol1, l, freq1, freq2]

+
+
+
+ +
+
+generate(regen=False)
+

Perform the KL-transform for all m-modes and save the result.

+

Uses MPI to distribute the work (if available).

+
+
Parameters:
+

mlist (array_like, optional) – Set of m’s to calculate KL-modes for By default do all m-modes.

+
+
+
+ +
+
+invmodes_m(mi, threshold=None)
+

Get the inverse modes.

+

If the true inverse has been cached, return the modes for the current +threshold. Otherwise generate the Moore-Penrose pseudo-inverse.

+
+
Parameters:
+
    +
  • mi (integer) – m-mode to generate for.

  • +
  • threshold (scalar) – S/N threshold to use.

  • +
+
+
Returns:
+

invmodes

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+modes_m(mi, threshold=None)
+

Fetch the KL-modes for a particular m.

+

This attempts to read in the results from disk, if available and if not +will create them.

+

Also, it will cache the previous m-mode in memory, so as to avoid disk +access in many cases. However this is not sensitive to changes in the +threshold, be careful.

+
+
Parameters:
+
    +
  • mi (integer) – m to fetch KL-modes for.

  • +
  • threshold (real scalar, optional) – Returns only KL-modes with S/N greater than threshold. By default +return all modes saved in the file (this maybe be a subset already, +see transform_save).

  • +
+
+
Returns:
+

evals, evecs – KL-modes with S/N greater than some threshold. Both evals and evecs +are potentially None, if there are no modes either in the file, or +satisfying S/N > threshold.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+project_matrix_sky_to_kl(mi, mat, threshold=None)
+

Project a covariance matrix from the sky into the eigenbasis.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • mat (np.ndarray) – Sky matrix to project.

  • +
  • threshold (real scalar, optional) – Returns only KL-modes with S/N greater than threshold. By default +return all modes saved in the file (this maybe be a subset already, +see transform_save).

  • +
+
+
Returns:
+

projmatrix – The matrix projected into the eigenbasis.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+project_matrix_svd_to_kl(mi, mat, threshold=None)
+

Project a matrix from the telescope basis into the eigenbasis.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • mat (np.ndarray) – Telescope matrix to project.

  • +
  • threshold (real scalar, optional) – Returns only KL-modes with S/N greater than threshold. By default +return all modes saved in the file (this maybe be a subset already, +see transform_save).

  • +
+
+
Returns:
+

projmatrix – The matrix projected into the eigenbasis.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+project_vector_kl_to_svd(mi, vec, threshold=None)
+

Project a vector in the Eigenbasis back into the telescope space.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • vec (np.ndarray) – Eigenbasis data vector.

  • +
  • threshold (real scalar, optional) – Returns only KL-modes with S/N greater than threshold. By default +return all modes saved in the file (this maybe be a subset already, +see transform_save).

  • +
+
+
Returns:
+

projvector – The vector projected into the eigenbasis.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+project_vector_sky_to_kl(mi, vec, threshold=None)
+

Project an m-vector from the sky into the eigenbasis.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • vec (np.ndarray) – Sky data vector packed as [freq, pol, l]

  • +
  • threshold (real scalar, optional) – Returns only KL-modes with S/N greater than threshold. By default +return all modes saved in the file (this maybe be a subset already, +see transform_save).

  • +
+
+
Returns:
+

projvector – The vector projected into the eigenbasis.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+project_vector_svd_to_kl(mi, vec, threshold=None)
+

Project a telescope data vector into the eigenbasis.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • vec (np.ndarray) – Telescope data vector.

  • +
  • threshold (real scalar, optional) – Returns only KL-modes with S/N greater than threshold. By default +return all modes saved in the file (this maybe be a subset already, +see transform_save).

  • +
+
+
Returns:
+

projvector – The vector projected into the eigenbasis.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+signal()
+

Compute the signal covariance matrix (on the sky).

+
+
Returns:
+

cv_fg

+
+
Return type:
+

np.ndarray[pol2, pol1, l, freq1, freq2]

+
+
+
+ +
+
+skymodes_m(mi, threshold=None)
+

Find the representation of the KL-modes on the sky.

+

Use the beamtransfers to rotate the SN-modes onto the sky. This routine +is based on modes_m, as such the same caching and caveats apply.

+
+
Parameters:
+
    +
  • mi (integer) – Mode index to fetch for.

  • +
  • threshold (real scalar, optional) – Returns only KL-modes with S/N greater than threshold. By default +return all modes saved in the file (this maybe be a subset already, +see transform_save).

  • +
+
+
Returns:
+

skymodes – The modes as found in \(a_{lm}(\nu)\) space. Note this routine does not +return the evals.

+
+
Return type:
+

np.ndarray

+
+
+
+

See also

+

modes_m()

+
+
+ +
+
+sn_covariance(mi)
+

Compute the signal and noise covariances (on the telescope).

+

The signal is formed from the 21cm signal, whereas the noise includes +both foregrounds and instrumental noise. This is for a single m-mode.

+
+
Parameters:
+

mi (integer) – The m-mode to calculate at.

+
+
Returns:
+

s, n – Signal and noice covariance matrices.

+
+
Return type:
+

np.ndarray[nfreq, ntel, nfreq, ntel]

+
+
+
+ +
+
+transform_save(mi)
+

Save the KL-modes for a given m.

+

Perform the transform and cache the results for later use.

+
+
Parameters:
+
    +
  • mi (integer) – m-mode to calculate.

  • +
  • Results

  • +
  • -------

  • +
  • evals (np.ndarray) – See transfom_m for details.

  • +
  • evecs (np.ndarray) – See transfom_m for details.

  • +
+
+
+
+ +
+ +
+
+drift.core.kltransform.eigh_gen(A, B, message='')
+

Solve the generalised eigenvalue problem. \(\mathbf{A} \mathbf{v} = +\lambda \mathbf{B} \mathbf{v}\)

+

This routine will attempt to correct for when B is not positive definite +(usually due to numerical precision), by adding a constant diagonal to make +all of its eigenvalues positive.

+
+
Parameters:
+
    +
  • A (np.ndarray) – Matrices to operate on.

  • +
  • B (np.ndarray) – Matrices to operate on.

  • +
  • message (string, optional) – Optional string to print if an exception is thrown. Default: “”.

  • +
+
+
Returns:
+

    +
  • evals (np.ndarray) – Eigenvalues of the problem.

  • +
  • evecs (np.ndarray) – 2D array of eigenvectors (packed column by column).

  • +
  • add_const (scalar) – The constant added on the diagonal to regularise.

  • +
+

+
+
+
+ +
+
+drift.core.kltransform.inv_gen(A)
+

Find the inverse of A.

+

If a standard matrix inverse has issues try using the pseudo-inverse.

+
+
Parameters:
+

A (np.ndarray) – Matrix to invert.

+
+
Returns:
+

inv

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.core.manager.html b/docs/_autosummary/drift.core.manager.html new file mode 100644 index 00000000..6ed4a4ef --- /dev/null +++ b/docs/_autosummary/drift.core.manager.html @@ -0,0 +1,193 @@ + + + + + + + drift.core.manager — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.core.manager

+

Manage access to and generation of driftscan analysis products.

+

Classes

+ + + + + + +

ProductManager()

Manage access and generation to analysis products.

+
+
+class drift.core.manager.ProductManager
+

Bases: object

+

Manage access and generation to analysis products.

+

This is telescope objects, beam transfer matrices, KL filters and power +spectrum estimators.

+
+
+apply_config(yconf)
+

Apply config from a dictionary.

+

This does not create anything on disk.

+
+
Parameters:
+

yconf (dict) – Dictionary containing the configuration of the Product Manager.

+
+
+
+ +
+
+classmethod from_config(configfile)
+

Create a ProductManager from a config file.

+

This will create both the directory specified as the output directory +and copy the configuration file into it.

+
+
Parameters:
+

configfile (string) – Path to configuration file to load.

+
+
Returns:
+

m

+
+
Return type:
+

ProductManager

+
+
+
+ +
+
+generate()
+

Calculate the analysis products.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.core.psestimation.html b/docs/_autosummary/drift.core.psestimation.html new file mode 100644 index 00000000..0a0ecce3 --- /dev/null +++ b/docs/_autosummary/drift.core.psestimation.html @@ -0,0 +1,453 @@ + + + + + + + drift.core.psestimation — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.core.psestimation

+

Estimate powerspectra and forecast constraints from real data.

+

Functions

+ + + + + + + + + + + + + + + + + + + + + +

bandfunc_2d_cart(kpar_s, kpar_e, kperp_s, ...)

bandfunc_2d_polar(ks, ke, ts, te)

decorrelate_ps(ps, fisher)

Decorrelate the powerspectrum estimate.

decorrelate_ps_file(fname)

Load and decorrelate the powerspectrum in fname.

range_config(lst)

uniform_band(k, kstart, kend)

+

Classes

+ + + + + + + + + +

PSEstimation(kltrans[, subdir])

Base class for quadratic powerspectrum estimation.

PSExact(kltrans[, subdir])

PS Estimation class with exact calculation of the Fisher matrix.

+
+
+class drift.core.psestimation.PSEstimation(kltrans, subdir='ps')
+

Bases: Reader

+

Base class for quadratic powerspectrum estimation.

+

See Tegmark 1997 for details.

+
+
+bandtype
+

Which types of bands to use (default: polar).

+
+
Type:
+

{‘polar’, ‘cartesian’}

+
+
+
+ +
+
k_bandsnp.ndarray

Array of band boundaries. e.g. np.array([0.0, 0.5, ]), polar only

+
+
num_theta: integer

Number of theta bands to use (polar only)

+
+
kpar_bandsnp.ndarray

Array of band boundaries. e.g. np.array([0.0, 0.5, ]), cartesian only

+
+
kperp_bandsnp.ndarray

Array of band boundaries. e.g. np.array([0.0, 0.5, ]), cartesian only

+
+
thresholdscalar

Threshold for including eigenmodes (default is 0.0, i.e. all modes)

+
+
unit_bandsboolean

If True, bands are sections of the exact powerspectrum (such that the +fiducial bin amplitude is 1).

+
+
zero_meanboolean

If True (default), then the fiducial parameters have zero mean.

+
+
+

Initialise a PS estimator class.

+
+
Parameters:
+
    +
  • kltrans (KLTransform) – The KL Transform filter to use.

  • +
  • subdir (string, optional) – Subdirectory of the KLTransform directory to store results in. +Default is ‘ps’.

  • +
+
+
+
+
+delbands()
+

Delete power spectrum bands to save memory.

+
+ +
+
+fisher_bias_m(mi)
+

Generate the Fisher matrix and bias for a specific m.

+
+
Parameters:
+

mi (integer) – m-mode to calculate for.

+
+
+
+ +
+
+fisher_file()
+

Fetch the h5py file handle for the Fisher matrix.

+
+
Returns:
+

file – File pointing at the hdf5 file with the Fisher matrix.

+
+
Return type:
+

h5py.File

+
+
+
+ +
+
+genbands()
+

Precompute the powerspectrum bands, including the P(k, mu) bands +and the angular powerspectrum.

+
+ +
+
+generate(regen=False)
+

Calculate the total Fisher matrix and bias and save to a file.

+
+
Parameters:
+

regen (boolean, optional) – Force regeneration if products already exist (default False).

+
+
+
+ +
+
+make_clzz(pk)
+

Make an angular powerspectrum from the input matter powerspectrum.

+

Uses the lmax and frequencies from the telescope object.

+
+
Parameters:
+

pk (function, np.ndarray -> np.ndarray) – The input powerspectrum (must be vectorized).

+
+
Returns:
+

aps – The angular powerspectrum.

+
+
Return type:
+

np.ndarray[lmax+1, nfreq, nfreq]

+
+
+
+ +
+
+property nbands
+

Number of powerspectrum bands.

+
+ +
+
+num_evals(mi)
+

Number of eigenvalues for this m (and threshold).

+
+
Parameters:
+

mi (integer) – m-mode index.

+
+
Returns:
+

num_evals

+
+
Return type:
+

integer

+
+
+
+ +
+
+q_estimator(mi, vec1, vec2=None, noise=False)
+

Estimate the q-parameters from given data (see paper).

+
+
Parameters:
+
    +
  • mi (integer) – The m-mode we are calculating for.

  • +
  • vec (np.ndarray[num_kl, num_realisatons]) – The vector(s) of data we are estimating from. These are KL-mode +coefficients.

  • +
  • noise (boolean, optional) – Whether we should project against the noise matrix. Used for +estimating the bias by Monte-Carlo. Default is False.

  • +
+
+
Returns:
+

qa – Array of q-parameters. If noise=True then the array is one longer, +and the last parameter is the projection against the noise.

+
+
Return type:
+

np.ndarray[numbands]

+
+
+
+ +
+ +
+
+class drift.core.psestimation.PSExact(kltrans, subdir='ps')
+

Bases: PSEstimation

+

PS Estimation class with exact calculation of the Fisher matrix.

+

Initialise a PS estimator class.

+
+
Parameters:
+
    +
  • kltrans (KLTransform) – The KL Transform filter to use.

  • +
  • subdir (string, optional) – Subdirectory of the KLTransform directory to store results in. +Default is ‘ps’.

  • +
+
+
+
+
+cacheproj(mi)
+

Cache projected covariances on disk.

+
+
Parameters:
+

mi (integer) – m-mode.

+
+
+
+ +
+
+delproj(mi)
+

Deleted cached covariances from disk.

+
+
Parameters:
+

mi (integer) – m-mode.

+
+
+
+ +
+
+getproj(mi, bi)
+

Fetch cached KL-covariance (either from disk or just calculate if small enough).

+
+
Parameters:
+
    +
  • mi (integer) – m-mode.

  • +
  • bi (integer) – band index.

  • +
+
+
Returns:
+

klcov – Covariance in KL-basis.

+
+
Return type:
+

np.ndarray[nevals, nevals]

+
+
+
+ +
+
+makeproj(mi, bi)
+

Project angular powerspectrum band into KL-basis.

+
+
Parameters:
+
    +
  • mi (integer) – m-mode.

  • +
  • bi (integer) – band index.

  • +
+
+
Returns:
+

klcov – Covariance in KL-basis.

+
+
Return type:
+

np.ndarray[nevals, nevals]

+
+
+
+ +
+ +
+
+drift.core.psestimation.decorrelate_ps(ps, fisher)
+

Decorrelate the powerspectrum estimate.

+
+
Parameters:
+
    +
  • ps (np.ndarray[nbands]) – Powerspectrum estimate.

  • +
  • fisher (np.ndarrays[nbands, nbands]) – Fisher matrix.

  • +
+
+
Returns:
+

    +
  • psd (np.narray[nbands]) – Decorrelated powerspectrum estimate.

  • +
  • errors (np.ndarray[nbands]) – Errors on decorrelated bands.

  • +
  • window (np.ndarray[nbands, nbands]) – Window functions for each band row-wise.

  • +
+

+
+
+
+ +
+
+drift.core.psestimation.decorrelate_ps_file(fname)
+

Load and decorrelate the powerspectrum in fname.

+
+
Parameters:
+

fname (string) – Name of file to load.

+
+
Returns:
+

    +
  • psd (np.narray[nbands]) – Decorrelated powerspectrum estimate.

  • +
  • errors (np.ndarray[nbands]) – Errors on decorrelated bands.

  • +
  • window (np.ndarray[nbands, nbands]) – Window functions for each band row-wise.

  • +
+

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.core.psmc.html b/docs/_autosummary/drift.core.psmc.html new file mode 100644 index 00000000..156e4637 --- /dev/null +++ b/docs/_autosummary/drift.core.psmc.html @@ -0,0 +1,286 @@ + + + + + + + drift.core.psmc — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.core.psmc

+

Functions

+ + + + + + + + + +

block_root(clzz)

Calculate the 'square root' of an angular powerspectrum matrix (with nulls).

sim_skyvec(trans, n)

Simulate a set of \(alm(\nu)\) 's for a given \(m\).

+

Classes

+ + + + + + + + + +

PSMonteCarlo(kltrans[, subdir])

An extension of the PSEstimation class to support estimation of the Fisher matrix via Monte-Carlo simulations.

PSMonteCarloAlt(kltrans[, subdir])

An extension of the PSEstimation class to support estimation of the Fisher matrix via Monte-Carlo simulations.

+
+
+class drift.core.psmc.PSMonteCarlo(kltrans, subdir='ps')
+

Bases: PSEstimation

+

An extension of the PSEstimation class to support estimation of the +Fisher matrix via Monte-Carlo simulations.

+

This uses the fact that the covariance of the q-estimator is the Fisher +matrix to Monte-Carlo the Fisher matrix and the bias. See Padmanabhan and +Pen (2003), and Dillon et al. (2012).

+
+
+nsamples
+

The number of samples to draw from each band.

+
+
Type:
+

integer

+
+
+
+ +

Initialise a PS estimator class.

+
+
Parameters:
+
    +
  • kltrans (KLTransform) – The KL Transform filter to use.

  • +
  • subdir (string, optional) – Subdirectory of the KLTransform directory to store results in. +Default is ‘ps’.

  • +
+
+
+
+
+gen_sample(mi, nsamples=None, noiseonly=False)
+

Generate a random set of KL-data for this m-mode.

+

Found by drawing from the eigenvalue distribution.

+
+
Parameters:
+

mi (integer) – The m-mode to draw from.

+
+
Returns:
+

x – The random KL-data. The number of samples is set by the objects +attribute.

+
+
Return type:
+

np.ndarray[nmodes, self.nsamples]

+
+
+
+ +
+ +
+
+class drift.core.psmc.PSMonteCarloAlt(kltrans, subdir='ps')
+

Bases: PSEstimation

+

An extension of the PSEstimation class to support estimation of the +Fisher matrix via Monte-Carlo simulations.

+

This uses a stochastic estimation of the trace which allows us to compute +a reduced set of products between the four covariance matrices.

+
+
+nswitch
+

The threshold number of eigenmodes above which we switch to Monte-Carlo +estimation.

+
+
Type:
+

integer

+
+
+
+ +
+
+nsamples
+

The number of samples to draw from each band.

+
+
Type:
+

integer

+
+
+
+ +

Initialise a PS estimator class.

+
+
Parameters:
+
    +
  • kltrans (KLTransform) – The KL Transform filter to use.

  • +
  • subdir (string, optional) – Subdirectory of the KLTransform directory to store results in. +Default is ‘ps’.

  • +
+
+
+
+
+gen_vecs(mi)
+

Generate a cache of sample vectors for each bandpower.

+
+ +
+ +
+
+drift.core.psmc.block_root(clzz)
+

Calculate the ‘square root’ of an angular powerspectrum matrix (with +nulls).

+
+ +
+
+drift.core.psmc.sim_skyvec(trans, n)
+

Simulate a set of \(alm(\nu)\) ‘s for a given \(m\).

+

Generated as if \(m=0\). For greater \(m\), just ignore entries for \(l < abs(m)\).

+
+
Parameters:
+

trans (np.ndarray) – Transfer matrix generated by block_root from a a particular \(C_l(z,z')\).

+
+
Returns:
+

gaussvars – Vector of alms.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.core.skymodel.html b/docs/_autosummary/drift.core.skymodel.html new file mode 100644 index 00000000..deddd19c --- /dev/null +++ b/docs/_autosummary/drift.core.skymodel.html @@ -0,0 +1,164 @@ + + + + + + + drift.core.skymodel — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.core.skymodel

+

Functions

+ + + + + + + + + +

foreground_model(lmax, frequencies, npol[, ...])

im21cm_model(lmax, frequencies, npol[, cr, ...])

+

Classes

+ + + + + + +

PointSources()

Scale up point source amplitude to a higher S_{cut} = 0.1 Jy

+
+
+class drift.core.skymodel.PointSources
+

Bases: PointSources

+

Scale up point source amplitude to a higher S_{cut} = 0.1 Jy

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.core.telescope.html b/docs/_autosummary/drift.core.telescope.html new file mode 100644 index 00000000..ffa05ff2 --- /dev/null +++ b/docs/_autosummary/drift.core.telescope.html @@ -0,0 +1,1105 @@ + + + + + + + drift.core.telescope — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.core.telescope

+

Functions

+ + + + + + + + + + + + + + + +

in_range(arr, min, max)

Check if array entries are within the given range.

map_half_plane(arr)

max_lm(baselines, wavelengths, uwidth[, vwidth])

Get the maximum (l,m) that a baseline is sensitive to.

out_of_range(arr, min, max)

+

Classes

+ + + + + + + + + + + + + + + + + + +

PolarisedTelescope([latitude, longitude])

A base for a polarised telescope.

SimplePolarisedTelescope([latitude, longitude])

A base for a polarised telescope.

SimpleUnpolarisedTelescope([latitude, longitude])

A base for a polarised telescope.

TransitTelescope([latitude, longitude])

Base class for simulating any transit interferometer.

UnpolarisedTelescope([latitude, longitude])

A base for an unpolarised telescope.

+
+
+class drift.core.telescope.PolarisedTelescope(latitude=45, longitude=0, **kwargs)
+

Bases: TransitTelescope

+

A base for a polarised telescope.

+

Again, an abstract class, but the only things that require implementing +are the feedpositions, _get_unique and the beam function, as well +as the polarization property.

+
+
+skip_V
+

Omit calculation of Stokes V transfer function to a mild computational +saving. As there is almost no Stokes V emission on the sky this is a +reasonable trade off. The entries are left in the transfer matrices, but +they will be filled with zeros.

+
+
Type:
+

bool, optional

+
+
+
+ +
+
+skip_pol
+

Omit calculation of Stokes Q, U and V for a large computational saving. This +means that the effect of the (large) polarized signal from the sky will not +be correctly calculated. Only do this if you are really sure it’s what you +want. The entries are left in the transfer matrices, but they will be filled +with zeros.

+
+ +
+
+beam : methods
+

(abstract method) Routines giving the field pattern for the x and y feeds.

+
+ +

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+included_pol
+

The included polarisation indices.

+
+
Returns:
+

Polarisation indices.

+
+
Return type:
+

pol_ind

+
+
+
+ +
+
+property polarisation
+

Polarisation map.

+
+
Returns:
+

pol – One-dimensional array of strings describing the polarisation.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ +
+
+class drift.core.telescope.SimplePolarisedTelescope(latitude=45, longitude=0, **kwargs)
+

Bases: PolarisedTelescope

+

A base for a polarised telescope.

+

Again, an abstract class, but the only things that require implementing are +the feedpositions, _get_unique and the beam functions beamx and beamy.

+
+
+beamx, beamy : methods
+

(abstract methods) Routines giving the field pattern for the x and y feeds.

+
+ +

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+property beamclass
+

Simple beam mode of dual polarisation feeds.

+
+ +
+
+abstract beamx(feed, freq)
+

Beam for the X polarisation feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – Healpix maps (of size [self._nside, 2]) of the field pattern in the +theta and phi directions.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+abstract beamy(feed, freq)
+

Beam for the Y polarisation feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – Healpix maps (of size [self._nside, 2]) of the field pattern in the +theta and phi directions.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+property feedpositions
+

An (nfeed,2) array of the feed positions relative to an arbitary point (in m)

+
+ +
+
+property polarisation
+

Polarisation map.

+
+
Returns:
+

pol – One-dimensional array with the polarization for each feed (‘X’ or ‘Y’).

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ +
+
+class drift.core.telescope.SimpleUnpolarisedTelescope(latitude=45, longitude=0, **kwargs)
+

Bases: UnpolarisedTelescope

+

A base for a polarised telescope.

+

Again, an abstract class, but the only things that require implementing are +the feedpositions, _get_unique and the beam functions beamx and beamy.

+
+
+beamx, beamy : methods
+

(abstract methods) Routines giving the field pattern for the x and y feeds.

+
+ +

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+property beamclass
+

Simple beam mode of dual polarisation feeds.

+
+ +
+
+property feedpositions
+

An (nfeed,2) array of the feed positions relative to an arbitary point (in m)

+
+ +
+ +
+
+class drift.core.telescope.TransitTelescope(latitude=45, longitude=0, **kwargs)
+

Bases: Reader, Observer

+

Base class for simulating any transit interferometer.

+

This is an abstract class, and several methods must be implemented before it +is usable. These are:

+
    +
  • feedpositions - a property which contains the positions of all the feeds

  • +
  • _get_unique - calculates which baselines are identical

  • +
  • _transfer_single - calculate the beam transfer for a single baseline+freq

  • +
  • _make_matrix_array - makes an array of the right size to hold the +transfer functions

  • +
  • _copy_transfer_into_single - copy a single transfer matrix into a +collection.

  • +
+

The last two are required for supporting polarised beam functions.

+
+
+freq_lower, freq_higher
+

The center of the lowest and highest frequency bands. Deprecated, use +freq_start, freq_end instead.

+
+
Type:
+

scalar

+
+
+
+ +
+
+freq_start, freq_end
+

The start and end frequencies in MHz. Defaults: 800, 400.

+
+
Type:
+

scalar

+
+
+
+ +
+
+num_freq
+

The number of frequency bands (only use for setting up the frequency +binning). Generally using nfreq is preferred. Default: 1024.

+
+
Type:
+

scalar

+
+
+
+ +
+
+freq_mode
+

Choose if freq_start and freq_end are the edges of the band +(“edge”), or whether they are the central frequencies of the first +and last channel, in this case the last (Nyquist) frequency can +either be skipped (“centre”, default) or included (“centre_nyquist”). +The behaviour of the “centre” mode matches the output of the CASPER +PFB-FIR block.

+
+
Type:
+

{“centre”, “edge”}

+
+
+
+ +
+
+channel_bin
+

Number of channels to bin together. This must exactly devide the total number. +Binning is performed prior to selection of any subset. Default: 1.

+
+
Type:
+

int, optional

+
+
+
+ +
+
+channel_list
+

List of channel indices to select. If set, this takes priority over +channel_range. Currently this is not implemented.

+
+
Type:
+

list, optional

+
+
+
+ +
+
+channel_range
+

Select subset of frequencies using a range of frequency channel indices, +either [start, stop, step], [start, stop], or [stop] is acceptable. +Default selects all channels.

+
+
Type:
+

list, optional

+
+
+
+ +
+
+tsys_flat
+

The system temperature (in K). Override tsys for anything more +sophisticated. Default: 50.

+
+
Type:
+

scalar

+
+
+
+ +
+
+ndays
+

Number of days to assume when computing thermal noise. Default: 733.

+
+
Type:
+

int

+
+
+
+ +
+
+accuracy_boost
+

When computing beam transfer function, increase nside of healpix maps by +2**accuracy_boost compared to default determination of nside. Default: 1.0.

+
+
Type:
+

float

+
+
+
+ +
+
+l_boost
+

Increase lmax and mmax for telescope, and lmax/mmax values computed for +individual baselines, by a factor of l_boost compared to default computations. +Default: 1.0.

+
+
Type:
+

float

+
+
+
+ +
+
+force_lmax, force_mmax
+

Use specific values for the telescope’s l_max and m_max, instead of computing +these values based on the angular scales accessible to the longest baseline +at the highest frequency. l_boost is ignored if these values are specified. +This is useful if you intend to combine several sets of beam transfer matrices +that are separately computed over different frequency ranges. Default: None.

+
+
Type:
+

int

+
+
+
+ +
+
+minlength, maxlength
+

Minimum and maximum baseline lengths to include (in metres).

+
+
Type:
+

scalar

+
+
+
+ +
+
+auto_correlations
+

Include elements for feed auto-correlations in computed beam transfer matrices. +Default: False.

+
+
Type:
+

bool

+
+
+
+ +
+
+local_origin
+

If set the observers location is the terrestrial origin, and so the +rotation angle corresponds to the right ascension that is overhead +(Local Stellar Angle in caput.time). If not the origin is Greenwich, +so the rotation angle is what is overhead at Greenwich (Earth Rotation +Angle). Default: True.

+
+
Type:
+

bool

+
+
+
+ +
+
+skip_freq
+

Frequency indices (with the set of frequencies defined by the other parameters) +to skip. Skipped frequencies are considered to be present, but their beam +transfer matrices are implicitly zero and thus are skipped in the beam transfer +matrix calculation. This is useful for RFI channels that we know will be masked.

+
+
Type:
+

list

+
+
+
+ +
+
+skip_baselines
+

Baseline indices to skip. Like skipped frequencies, skipped baselines are +considered to be present, but their beam transfer matrices are implicitly zero +and thus are skipped in the beam transfer matrix calculation.

+
+
Type:
+

list

+
+
+
+ +
+
+beam_cache_size
+

Size of the beam cache in MB. Setting this minimises the amount of recalculation +of the primary beams while generating beam transfer matrices. Default is 200 MB.

+
+
Type:
+

float

+
+
+
+ +

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+property baselines
+

The unique baselines in the telescope.

+
+ +
+
+abstract property beamclass
+

An nfeed array of the class of each beam (identical labels are +considered to have identical beams).

+
+ +
+
+calculate_feedpairs()
+

Calculate all the unique feedpairs and their redundancies, and set +the internal state of the object.

+
+ +
+
+property feedconj
+

An (nfeed, nfeed) array giving the feed pairs which must be complex +conjugated.

+
+ +
+
+property feedmap
+

An (nfeed, nfeed) array giving the mapping between feedpairs and +the calculated baselines. Each entry is an index into the arrays of unique pairs.

+
+ +
+
+property feedmask
+

An (nfeed, nfeed) array giving the entries that have been +calculated. This allows to mask out pairs we want to ignore.

+
+ +
+
+abstract property feedpositions
+

An (nfeed,2) array of the feed positions relative to an arbitary point (in m)

+
+ +
+
+property frequencies
+

The centre of each frequency band (in MHz).

+
+ +
+
+included_baseline
+

The baseline indices that are being calculated.

+
+
Returns:
+

Indices of included baselines.

+
+
Return type:
+

bl_ind

+
+
+
+ +
+
+included_freq
+

The frequency indices that are being calculated.

+
+
Returns:
+

Indices of included frequencies.

+
+
Return type:
+

freq_ind

+
+
+
+ +
+
+included_pol
+

The pol indices that are being calculated.

+
+
Returns:
+

Indices of included polarisations.

+
+
Return type:
+

pol_ind

+
+
+
+ +
+
+index_map_prod
+

Generate a full triangle index_map/prod like object.

+
+
Returns:
+

prodmap – A structured array of (input_a, input_b) pairs for the upper triangle.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+index_map_stack
+

Generate an index_map/stack like object.

+
+
Returns:
+

stack – A structured array with (prod_ind, conj) pairs the same length as +unique_pairs.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+property input_index
+

Override to add custom labelling of the inputs, e.g. serial numbers.

+

This should give an identifier that uniquely labels a correlator input and so +can be used to match inputs through subsetting and reordering.

+

There are two conventional fields used in the output, either a chan_id +field for an integer label, or a correlator_input for a string labelling +(useful for serial number strings). If both are present, correlator_input +is used.

+
+ +
+
+property lmax
+

The maximum l the telescope is sensitive to.

+
+ +
+
+property mmax
+

The maximum m the telescope is sensitive to.

+
+ +
+
+property nbase
+

The number of unique baselines.

+
+ +
+
+property nfeed
+

The number of feeds.

+
+ +
+
+property nfreq
+

The number of frequency bins.

+
+ +
+
+noisepower(bl_indices, f_indices, ndays=None)
+

Calculate the instrumental noise power spectrum.

+

Assume we are still within the regime where the power spectrum is white +in m modes.

+
+
Parameters:
+
    +
  • bl_indices (array_like) – Indices of baselines to calculate.

  • +
  • f_indices (array_like) – Indices of frequencies to calculate. Must be broadcastable against +bl_indices.

  • +
  • ndays (integer) – The number of sidereal days observed.

  • +
+
+
Returns:
+

noise_ps – The noise power spectrum.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+property npairs
+

The number of unique feed pairs.

+
+ +
+
+property num_pol_sky
+

The number of polarisation combinations on the sky that we are +considering. Should be either 1 (T=I only), 3 (T, Q, U) or 4 (T, Q, U and V).

+
+ +
+
+prodstack
+

Generate the results of a prodstack.

+

This is similar to the output of uniquepairs, but has the same typing as used +within draco.

+
+
Returns:
+

prodstack – A structured array with (input_a, input_b) pairs.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+property redundancy
+

The redundancy of each baseline (corresponds to entries in +cyl.baselines).

+
+ +
+
+reverse_map_stack
+

Generate a reverse_map/stack like object.

+
+
Returns:
+

stack – A structured array of (stack_ind, conj) pairs the same length as prod.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+transfer_for_baseline(baseline)
+

Fetch all transfer matrices for a given baseline.

+
+
Parameters:
+

baseline (integer) – The baseline index.

+
+
Returns:
+

transfer – The transfer matrices. Packed as in TransitTelescope.transfer_matrices.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+transfer_for_frequency(freq)
+

Fetch all transfer matrices for a given frequency.

+
+
Parameters:
+

freq (integer) – The frequency index.

+
+
Returns:
+

transfer – The transfer matrices. Packed as in TransitTelescope.transfer_matrices.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+transfer_matrices(bl_indices, f_indices, global_lmax=True)
+

Calculate the spherical harmonic transfer matrices for baseline and +frequency combinations.

+
+
Parameters:
+
    +
  • bl_indices (array_like) – Indices of baselines to calculate.

  • +
  • f_indices (array_like) – Indices of frequencies to calculate. Must be broadcastable against +bl_indices.

  • +
  • global_lmax (boolean, optional) – If set (default), the output size lside in (l,m) is big enough to +hold the maximum for the entire telescope. If not set it is only big +enough for the requested set.

  • +
+
+
Returns:
+

transfer – An array containing the transfer functions. The shape is somewhat +complicated, the first indices correspond to the broadcast size of +bl_indices and f_indices, then there may be some polarisation +indices, then finally the (l,m) indices, range (lside, 2*lside-1).

+
+
Return type:
+

np.ndarray, dtype=np.complex128

+
+
+
+ +
+
+tsys(f_indices=None)
+

The system temperature.

+

Currenty has a flat T_sys across the whole bandwidth. Override for +anything more complicated.

+
+
Parameters:
+

f_indices (array_like) – Indices of frequencies to get T_sys at.

+
+
Returns:
+

tsys – System temperature at requested frequencies.

+
+
Return type:
+

array_like

+
+
+
+ +
+
+abstract property u_width
+

The approximate physical width (in the u-direction) of the dish/telescope etc, for +calculating the maximum (l,m).

+
+ +
+
+property uniquepairs
+

An (npairs, 2) array of the feed pairs corresponding to each baseline.

+
+ +
+
+abstract property v_width
+

The approximate physical length (in the v-direction) of the dish/telescope etc, for +calculating the maximum (l,m).

+
+ +
+
+property wavelengths
+

The central wavelength of each frequency band (in metres).

+
+ +
+
+property zenith
+

The zenith vector in spherical polars.

+

The position of the zenith spherical polars (in radians). Read only.

+
+
Returns:
+

zenith

+
+
Return type:
+

[theta, phi]

+
+
+
+ +
+ +
+
+class drift.core.telescope.UnpolarisedTelescope(latitude=45, longitude=0, **kwargs)
+

Bases: TransitTelescope

+

A base for an unpolarised telescope.

+

Again, an abstract class, but the only things that require implementing are +the feedpositions, _get_unique and the beam function.

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+abstract beam(feed, freq)
+

Beam for a particular feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – A Healpix map (of size self._nside) of the beam. Potentially +complex.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+noisepower(bl_indices, f_indices, ndays=None)
+

Calculate the instrumental noise power spectrum.

+

Assume we are still within the regime where the power spectrum is white +in m modes.

+
+
Parameters:
+
    +
  • bl_indices (array_like) – Indices of baselines to calculate.

  • +
  • f_indices (array_like) – Indices of frequencies to calculate. Must be broadcastable against +bl_indices.

  • +
  • ndays (integer) – The number of sidereal days observed.

  • +
+
+
Returns:
+

noise_ps – The noise power spectrum.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ +
+
+drift.core.telescope.in_range(arr, min, max)
+

Check if array entries are within the given range.

+
+
Parameters:
+
    +
  • arr (np.ndarray) – Array to check.

  • +
  • min (scalar or np.ndarray) – Minimum and maximum values to test against. Values can be in arrays +broadcastable against arr.

  • +
  • max (scalar or np.ndarray) – Minimum and maximum values to test against. Values can be in arrays +broadcastable against arr.

  • +
+
+
Returns:
+

val – True if all entries are within range.

+
+
Return type:
+

boolean

+
+
+
+ +
+
+drift.core.telescope.max_lm(baselines, wavelengths, uwidth, vwidth=0.0)
+

Get the maximum (l,m) that a baseline is sensitive to.

+
+
Parameters:
+
    +
  • baselines (np.ndarray) – An array of baselines.

  • +
  • wavelengths (np.ndarray) – An array of frequencies.

  • +
  • width (np.ndarray) – Width of the receiver in the u-direction.

  • +
+
+
Returns:
+

lmax, mmax

+
+
Return type:
+

array_like

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.core.visibility.html b/docs/_autosummary/drift.core.visibility.html new file mode 100644 index 00000000..489ec283 --- /dev/null +++ b/docs/_autosummary/drift.core.visibility.html @@ -0,0 +1,251 @@ + + + + + + + drift.core.visibility — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.core.visibility

+

Routines for calculating visibilities on the full sky.

+

Functions

+ + + + + + + + + + + + + + + +

cylinder_beam(sph_arr, zenith, cylwidth)

The beam function for a cylinder aligned N-S.

horizon(sph_arr, zenith)

The horizon function at particular location.

pol_IQU(sph_arr, zenith, feed1, feed2)

The polarisation tensors at each point, projected onto two feeds.

uv_plane_cart(zenith)

Fetch unit vectors in the UV plane.

+
+
+drift.core.visibility.cylinder_beam(sph_arr, zenith, cylwidth)
+

The beam function for a cylinder aligned N-S.

+

Beam will be a thin strip in the N-S direction (controlled by the +cylinder width in the E-W direction).

+
+
Parameters:
+
    +
  • sph_arr (np.ndarray) – Angular positions (in spherical polar co-ordinates).

  • +
  • zenith (np.ndarray) – The zenith vector in spherical polar-coordinates.

  • +
  • cylwidth (scalar) – The effective cylinder width.

  • +
+
+
Returns:
+

beam – The beam function at each angular position.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+drift.core.visibility.horizon(sph_arr, zenith)
+

The horizon function at particular location.

+
+
Parameters:
+
    +
  • sph_arr (np.ndarray) – Angular positions (in spherical polar co-ordinates).

  • +
  • zenith (np.ndarray) – The zenith vector in spherical polar-coordinates.

  • +
+
+
Returns:
+

horizon – The horizon function (including an angular projection term at +each position).

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+drift.core.visibility.pol_IQU(sph_arr, zenith, feed1, feed2)
+

The polarisation tensors at each point, projected onto two +feeds.

+
+
Parameters:
+
    +
  • sph_arr (np.ndarray) – Angular positions (in spherical polar co-ordinates).

  • +
  • zenith (np.ndarray) – The zenith vector in spherical polar-coordinates.

  • +
  • feed1 (np.ndarray) – Unit vectors for the two feeds. Should be given in (u,v) +coordinates.

  • +
  • feed2 (np.ndarray) – Unit vectors for the two feeds. Should be given in (u,v) +coordinates.

  • +
+
+
Returns:
+

pI, pQ, pU – The projected polarisations at each angular position.

+
+
Return type:
+

np.ndarray

+
+
+

Notes

+

For each position \(\hat{n}\) in sph_arr calculate:

+
+\[f_1^a f_2^b \mathcal{P}^X_{ab}\]
+

where X is one of I, Q or U.

+

The co-ordinate system defining the polarisation at each point is +\((\hat{\theta}, \hat{\phi})\).

+
+ +
+
+drift.core.visibility.uv_plane_cart(zenith)
+

Fetch unit vectors in the UV plane.

+
+
Parameters:
+

zenith (np.ndarray) – The zenith vector in spherical polar-coordinates.

+
+
Returns:
+

uhat, vhat – Unit vectors in the UV plane. uhat points East, and vhat +points North.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.pipeline.html b/docs/_autosummary/drift.pipeline.html new file mode 100644 index 00000000..2d70a2c9 --- /dev/null +++ b/docs/_autosummary/drift.pipeline.html @@ -0,0 +1,143 @@ + + + + + + + drift.pipeline — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.pipeline

+

A very simple pipeline for analysis of noiseless simulation data.

+

For most uses you should consider using +draco which is much more flexible +and sophisticated.

+ + + + + + + + + +

pipeline

timestream

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.pipeline.pipeline.html b/docs/_autosummary/drift.pipeline.pipeline.html new file mode 100644 index 00000000..3327c36a --- /dev/null +++ b/docs/_autosummary/drift.pipeline.pipeline.html @@ -0,0 +1,260 @@ + + + + + + + drift.pipeline.pipeline — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.pipeline.pipeline

+

Functions

+ + + + + + +

fixpath(path)

Fix up path (expanding variables etc.)

+

Classes

+ + + + + + +

PipelineManager()

Manage and run the pipeline.

+
+
+class drift.pipeline.pipeline.PipelineManager
+

Bases: Reader

+

Manage and run the pipeline.

+
+
+timestream_directory
+

Directory that the timestream is stored in.

+
+
Type:
+

string

+
+
+
+ +
+
+product_directory
+

Directory that the analysis products are stored in.

+
+
Type:
+

string

+
+
+
+ +
+
+output_directory
+

Directory to store timestream outputs in.

+
+
Type:
+

string

+
+
+
+ +
+
+generate_modes
+

Calculate m-modes and svd-modes.

+
+
Type:
+

boolean

+
+
+
+ +
+
+generate_klmodes
+

Calculate KL-modes?

+
+
Type:
+

boolean

+
+
+
+ +
+
+generate_powerspectra
+

Estimate powerspectra?

+
+
Type:
+

boolean

+
+
+
+ +
+
+klmodes
+

List of KL-filters to apply [‘klname1’, ‘klname2’, …]

+
+
Type:
+

list

+
+
+
+ +
+
+powerspectra
+

List of powerspectra to apply. Requires entries to be dicts +like [ { ‘psname’ : ‘ps1’, ‘klname’ : ‘dk’}, …]

+
+
Type:
+

list

+
+
+
+ +
+
+generate()
+

Generate pipeline outputs.

+
+ +
+
+run()
+

Generate pipeline outputs.

+
+ +
+ +
+
+drift.pipeline.pipeline.fixpath(path)
+

Fix up path (expanding variables etc.)

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.pipeline.timestream.html b/docs/_autosummary/drift.pipeline.timestream.html new file mode 100644 index 00000000..ffbb22bd --- /dev/null +++ b/docs/_autosummary/drift.pipeline.timestream.html @@ -0,0 +1,175 @@ + + + + + + + drift.pipeline.timestream — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.pipeline.timestream

+

Functions

+ + + + + + + + + +

cross_powerspectrum(timestreams, psname, psfile)

simulate(m, outdir[, maps, ndays, ...])

Create a simulated timestream and save it to disk.

+

Classes

+ + + + + + +

Timestream(tsdir, prodmanager)

Create a new Timestream object.

+
+
+drift.pipeline.timestream.simulate(m, outdir, maps=[], ndays=None, resolution=0, seed=None, **kwargs)
+

Create a simulated timestream and save it to disk.

+
+
Parameters:
+
    +
  • m (ProductManager object) – Products of telescope to simulate.

  • +
  • outdir (directoryname) – Directory that we will save the timestream into.

  • +
  • maps (list) – List of map filenames. The sum of these form the simulated sky.

  • +
  • ndays (int, optional) – Number of days of observation. Setting ndays = None (default) uses +the default stored in the telescope object; ndays = 0, assumes the +observation time is infinite so that the noise is zero.

  • +
  • resolution (scalar, optional) – Approximate time resolution in seconds. Setting resolution = 0 +(default) calculates the value from the mmax.

  • +
+
+
Returns:
+

timestream

+
+
Return type:
+

Timestream

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.scripts.html b/docs/_autosummary/drift.scripts.html new file mode 100644 index 00000000..7053d3fe --- /dev/null +++ b/docs/_autosummary/drift.scripts.html @@ -0,0 +1,125 @@ + + + + + + + drift.scripts — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.scripts

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.telescope.cylbeam.html b/docs/_autosummary/drift.telescope.cylbeam.html new file mode 100644 index 00000000..3350a614 --- /dev/null +++ b/docs/_autosummary/drift.telescope.cylbeam.html @@ -0,0 +1,282 @@ + + + + + + + drift.telescope.cylbeam — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.telescope.cylbeam

+

Functions

+ + + + + + + + + + + + + + + + + + + + + +

beam_amp(angpos, zenith, width, fwhm_x, fwhm_y)

Beam amplitude across the sky.

beam_dipole(theta, phi, squint)

Beam for a dipole above a ground plane.

beam_x(angpos, zenith, width, fwhm_e, fwhm_h)

Beam amplitude across the sky for the X dipole (points E).

beam_y(angpos, zenith, width, fwhm_e, fwhm_h)

Beam amplitude across the sky for the Y dipole (points N).

fraunhofer_cylinder(antenna_func, width[, res])

Calculate the Fraunhofer diffraction pattern for a feed illuminating a cylinder (in 1D).

polpattern(angpos, dipole)

Calculate the unit polarisation vectors at each position on the sphere for a dipole direction.

+
+
+drift.telescope.cylbeam.beam_amp(angpos, zenith, width, fwhm_x, fwhm_y, rot=[0.0, 0.0, 0.0])
+

Beam amplitude across the sky.

+
+
Parameters:
+
    +
  • angpos (np.ndarray[npoints]) – Angular position on the sky.

  • +
  • zenith (np.ndarray[2]) – Position of zenith on spherical polars.

  • +
  • width (scalar) – Cylinder width in wavelengths.

  • +
  • fwhm_x (scalar) – Full with at half power in the x and y directions.

  • +
  • fwhm_y (scalar) – Full with at half power in the x and y directions.

  • +
  • rot ([yaw, pitch, roll]) – Rotation to apply to cylinder in yaw, pitch and roll from North.

  • +
+
+
Returns:
+

beam – Amplitude of beam at each point.

+
+
Return type:
+

np.ndarray[npoints]

+
+
+
+ +
+
+drift.telescope.cylbeam.beam_dipole(theta, phi, squint)
+

Beam for a dipole above a ground plane.

+
+ +
+
+drift.telescope.cylbeam.beam_x(angpos, zenith, width, fwhm_e, fwhm_h, rot=[0.0, 0.0, 0.0])
+

Beam amplitude across the sky for the X dipole (points E).

+

Using ExpTan model.

+
+
Parameters:
+
    +
  • angpos (np.ndarray[npoints, 2]) – Angular position on the sky.

  • +
  • zenith (np.ndarray[2]) – Position of zenith in spherical polars.

  • +
  • width (scalar) – Cylinder width in wavelengths.

  • +
  • fwhm_e – Full with at half power in the E and H planes of the antenna.

  • +
  • fwhm_h – Full with at half power in the E and H planes of the antenna.

  • +
  • rot ([yaw, pitch, roll]) – Rotation to apply to cylinder in yaw, pitch and roll from North.

  • +
+
+
Returns:
+

beam – Amplitude vector of beam at each point (in thetahat, phihat)

+
+
Return type:
+

np.ndarray[npoints, 2]

+
+
+
+ +
+
+drift.telescope.cylbeam.beam_y(angpos, zenith, width, fwhm_e, fwhm_h, rot=[0.0, 0.0, 0.0])
+

Beam amplitude across the sky for the Y dipole (points N).

+

Using ExpTan model.

+
+
Parameters:
+
    +
  • angpos (np.ndarray[npoints, 2]) – Angular position on the sky.

  • +
  • zenith (np.ndarray[2]) – Position of zenith in spherical polars.

  • +
  • width (scalar) – Cylinder width in wavelengths.

  • +
  • fwhm_e – Full with at half power in the E and H planes of the antenna.

  • +
  • fwhm_h – Full with at half power in the E and H planes of the antenna.

  • +
+
+
Returns:
+

beam – Amplitude vector of beam at each point (in thetahat, phihat)

+
+
Return type:
+

np.ndarray[npoints, 2]

+
+
+
+ +
+
+drift.telescope.cylbeam.fraunhofer_cylinder(antenna_func, width, res=1.0)
+

Calculate the Fraunhofer diffraction pattern for a feed illuminating a +cylinder (in 1D).

+
+
Parameters:
+
    +
  • antenna_func (function(sintheta) -> amplitude) – Function describing the antenna amplitude pattern as a function of sin(angle).

  • +
  • width (scalar) – Cylinder width in wavelengths.

  • +
  • res (scalar, optional) – Resolution boost factor (default is 1.0)

  • +
+
+
Returns:
+

beam – The beam pattern, normalised to have unit maximum.

+
+
Return type:
+

function(sintheta) -> amplitude

+
+
+
+ +
+
+drift.telescope.cylbeam.polpattern(angpos, dipole)
+

Calculate the unit polarisation vectors at each position on the sphere +for a dipole direction.

+
+
Parameters:
+
    +
  • angpos (np.ndarray[npoints, 2]) – The positions on the sphere to calculate at.

  • +
  • dipole (np.ndarray[2 or 3]) – The unit vector for the dipole direction. If length is 2, assume in +vector is in spherical polars, if 3 it’s cartesian.

  • +
+
+
Returns:
+

vectors – Vector at each point in thetahat, phihat basis.

+
+
Return type:
+

np.ndarray[npoints, 2]

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.telescope.cylinder.html b/docs/_autosummary/drift.telescope.cylinder.html new file mode 100644 index 00000000..29a62d0e --- /dev/null +++ b/docs/_autosummary/drift.telescope.cylinder.html @@ -0,0 +1,382 @@ + + + + + + + drift.telescope.cylinder — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.telescope.cylinder

+

Classes

+ + + + + + + + + + + + +

CylinderTelescope([latitude, longitude])

Common functionality for all Cylinder Telescopes.

PolarisedCylinderTelescope([latitude, longitude])

A complete class for an Unpolarised Cylinder telescope.

UnpolarisedCylinderTelescope([latitude, ...])

A complete class for an Unpolarised Cylinder telescope.

+
+
+class drift.telescope.cylinder.CylinderTelescope(latitude=45, longitude=0, **kwargs)
+

Bases: TransitTelescope

+

Common functionality for all Cylinder Telescopes.

+
+
+num_cylinders
+

The number of cylinders.

+
+
Type:
+

integer

+
+
+
+ +
+
+num_feeds
+

Number of regularly spaced feeds along each cylinder.

+
+
Type:
+

integer

+
+
+
+ +
+
+cylinder_width
+

Width in metres.

+
+
Type:
+

scalar

+
+
+
+ +
+
+feed_spacing
+

Gap between feeds in metres.

+
+
Type:
+

scalar

+
+
+
+ +
+
+in_cylinder
+

Include in cylinder correlations?

+
+
Type:
+

boolean

+
+
+
+ +
+
+touching
+

Are the cylinders touching (no spacing between them)?

+
+
Type:
+

boolean

+
+
+
+ +
+
+cylspacing
+

If not touching this is the spacing in metres.

+
+
Type:
+

scalar

+
+
+
+ +

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+feed_positions_cylinder(cylinder_index)
+

Get the feed positions on the specified cylinder.

+
+
Parameters:
+

cylinder_index (integer) – The cylinder index, an integer from 0 to self.num_cylinders.

+
+
Returns:
+

feed_positions – The positions in the telescope plane of the receivers. Packed as +[[u1, v1], [u2, v2], …].

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+property fwhm_e
+

Full width half max of the E-plane antenna beam.

+
+ +
+
+property fwhm_h
+

Full width half max of the H-plane antenna beam.

+
+ +
+
+property u_width
+

The approximate physical width (in the u-direction) of the dish/telescope etc, for +calculating the maximum (l,m).

+
+ +
+
+property v_width
+

The approximate physical length (in the v-direction) of the dish/telescope etc, for +calculating the maximum (l,m).

+
+ +
+ +
+
+class drift.telescope.cylinder.PolarisedCylinderTelescope(latitude=45, longitude=0, **kwargs)
+

Bases: CylinderTelescope, SimplePolarisedTelescope

+

A complete class for an Unpolarised Cylinder telescope.

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+beamx(feed, freq)
+

Beam for the X polarisation feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – Healpix maps (of size [self._nside, 2]) of the field pattern in the +theta and phi directions.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+beamy(feed, freq)
+

Beam for the Y polarisation feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – Healpix maps (of size [self._nside, 2]) of the field pattern in the +theta and phi directions.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ +
+
+class drift.telescope.cylinder.UnpolarisedCylinderTelescope(latitude=45, longitude=0, **kwargs)
+

Bases: CylinderTelescope, SimpleUnpolarisedTelescope

+

A complete class for an Unpolarised Cylinder telescope.

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+beam(feed, freq)
+

Beam for a particular feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – A Healpix map (of size self._nside) of the beam. Potentially +complex.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.telescope.disharray.html b/docs/_autosummary/drift.telescope.disharray.html new file mode 100644 index 00000000..66b1f578 --- /dev/null +++ b/docs/_autosummary/drift.telescope.disharray.html @@ -0,0 +1,306 @@ + + + + + + + drift.telescope.disharray — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.telescope.disharray

+

Functions

+ + + + + + + + + +

beam_circular(angpos, zenith, uv_diameter)

Beam pattern for a circular dish.

jinc(x)

+

Classes

+ + + + + + +

DishArray([latitude, longitude])

A Telescope describing an interferometric array of dishes.

+
+
+class drift.telescope.disharray.DishArray(latitude=45, longitude=0, **kwargs)
+

Bases: TransitTelescope

+

A Telescope describing an interferometric array of dishes.

+
+
+gridu, gridv
+

Number of dishes in u and v directions.

+
+
Type:
+

integer

+
+
+
+ +
+
+dish_width
+

Width of the dish in metres.

+
+
Type:
+

scalar

+
+
+
+ +

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+beam(feed, freq)
+

Beam for a particular feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – A Healpix map (of size self._nside) of the beam. Potentially +complex.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+beamx(feed, freq)
+

Beam for a particular feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – A Healpix map (of size self._nside) of the beam. Potentially +complex.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+beamy(feed, freq)
+

Beam for a particular feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – A Healpix map (of size self._nside) of the beam. Potentially +complex.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+property feedpositions
+

The set of feed positions in the CMU telescope.

+
+
Returns:
+

feedpositions – The positions in the telescope plane of the receivers. Packed as +[[u1, v1], [u2, v2], …].

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+property u_width
+

The approximate physical width (in the u-direction) of the dish/telescope etc, for +calculating the maximum (l,m).

+
+ +
+
+property v_width
+

The approximate physical length (in the v-direction) of the dish/telescope etc, for +calculating the maximum (l,m).

+
+ +
+ +
+
+drift.telescope.disharray.beam_circular(angpos, zenith, uv_diameter)
+

Beam pattern for a circular dish.

+
+
Parameters:
+
    +
  • angpos (np.ndarray) – Array of angular positions

  • +
  • zenith (np.ndarray) – Co-ordinates of the zenith.

  • +
  • uv_diameter (scalar) – Diameter of the dish (in units of wavelength).

  • +
+
+
Returns:
+

beam – Beam pattern at each position in angpos.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.telescope.exotic_cylinder.html b/docs/_autosummary/drift.telescope.exotic_cylinder.html new file mode 100644 index 00000000..6b837409 --- /dev/null +++ b/docs/_autosummary/drift.telescope.exotic_cylinder.html @@ -0,0 +1,366 @@ + + + + + + + drift.telescope.exotic_cylinder — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.telescope.exotic_cylinder

+

Classes

+ + + + + + + + + + + + + + + + + + +

CylinderExtra([latitude, longitude])

Initialise a telescope object.

CylinderPerturbed([latitude, longitude])

A base for a polarised telescope.

CylinderShift([latitude, longitude])

Initialise a telescope object.

GradientCylinder([latitude, longitude])

Initialise a telescope object.

RandomCylinder([latitude, longitude])

Initialise a telescope object.

+
+
+class drift.telescope.exotic_cylinder.CylinderExtra(latitude=45, longitude=0, **kwargs)
+

Bases: UnpolarisedCylinderTelescope

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+feed_positions_cylinder(cylinder_index)
+

Get the feed positions on the specified cylinder.

+
+
Parameters:
+

cylinder_index (integer) – The cylinder index, an integer from 0 to self.num_cylinders.

+
+
Returns:
+

feed_positions – The positions in the telescope plane of the receivers. Packed as +[[u1, v1], [u2, v2], …].

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ +
+
+class drift.telescope.exotic_cylinder.CylinderPerturbed(latitude=45, longitude=0, **kwargs)
+

Bases: PolarisedCylinderTelescope

+

A base for a polarised telescope.

+

Again, an abstract class, but the only things that require implementing are +the feedpositions, _get_unique and the beam functions beamx and beamy.

+
+
+beamx, beamy : methods
+

(abstract methods) Routines giving the field pattern for the x and y feeds.

+
+ +

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+property beamclass
+

Simple beam mode of dual polarisation feeds.

+
+ +
+
+beamx(feed, freq)
+

Beam for the x polarisation feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – Healpix maps (of size [self._nside, 2]) of the field pattern in the +theta and phi directions.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+beamy(feed, freq)
+

Beam for the x polarisation feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – Healpix maps (of size [self._nside, 2]) of the field pattern in the +theta and phi directions.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+property feedpositions
+

An (nfeed,2) array of the feed positions relative to an arbitary point (in m)

+
+ +
+ +
+
+class drift.telescope.exotic_cylinder.CylinderShift(latitude=45, longitude=0, **kwargs)
+

Bases: UnpolarisedCylinderTelescope

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+feed_positions_cylinder(cylinder_index)
+

Get the feed positions on the specified cylinder.

+
+
Parameters:
+

cylinder_index (integer) – The cylinder index, an integer from 0 to self.num_cylinders.

+
+
Returns:
+

feed_positions – The positions in the telescope plane of the receivers. Packed as +[[u1, v1], [u2, v2], …].

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ +
+
+class drift.telescope.exotic_cylinder.GradientCylinder(latitude=45, longitude=0, **kwargs)
+

Bases: UnpolarisedCylinderTelescope

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+feed_positions_cylinder(cylinder_index)
+

Get the feed positions on the specified cylinder.

+
+
Parameters:
+

cylinder_index (integer) – The cylinder index, an integer from 0 to self.num_cylinders.

+
+
Returns:
+

feed_positions – The positions in the telescope plane of the receivers. Packed as +[[u1, v1], [u2, v2], …].

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ +
+
+class drift.telescope.exotic_cylinder.RandomCylinder(latitude=45, longitude=0, **kwargs)
+

Bases: UnpolarisedCylinderTelescope

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+feed_positions_cylinder(cylinder_index)
+

Get the feed positions on the specified cylinder.

+
+
Parameters:
+

cylinder_index (integer) – The cylinder index, an integer from 0 to self.num_cylinders.

+
+
Returns:
+

feed_positions – The positions in the telescope plane of the receivers. Packed as +[[u1, v1], [u2, v2], …].

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.telescope.focalplane.html b/docs/_autosummary/drift.telescope.focalplane.html new file mode 100644 index 00000000..45aed690 --- /dev/null +++ b/docs/_autosummary/drift.telescope.focalplane.html @@ -0,0 +1,241 @@ + + + + + + + drift.telescope.focalplane — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.telescope.focalplane

+

Functions

+ + + + + + + + + + + + +

beam_circular(angpos, zenith, uv_diameter)

Beam pattern for a circular dish.

gaussian_beam(angpos, pointing, fwhm)

jinc(x)

+

Classes

+ + + + + + +

FocalPlaneArray([latitude, longitude])

Initialise a telescope object.

+
+
+class drift.telescope.focalplane.FocalPlaneArray(latitude=45, longitude=0, **kwargs)
+

Bases: UnpolarisedTelescope

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+beam(feed, freq)
+

Beam for a particular feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – A Healpix map (of size self._nside) of the beam. Potentially +complex.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+property feedpositions
+

Feed positions (all zero in FPA).

+
+ +
+
+property nfeed
+

The number of feeds.

+
+ +
+
+property u_width
+

The approximate physical width (in the u-direction) of the dish/telescope etc, for +calculating the maximum (l,m).

+
+ +
+
+property v_width
+

The approximate physical length (in the v-direction) of the dish/telescope etc, for +calculating the maximum (l,m).

+
+ +
+ +
+
+drift.telescope.focalplane.beam_circular(angpos, zenith, uv_diameter)
+

Beam pattern for a circular dish.

+
+
Parameters:
+
    +
  • angpos (np.ndarray) – Array of angular positions

  • +
  • zenith (np.ndarray) – Co-ordinates of the zenith.

  • +
  • uv_diameter (scalar) – Diameter of the dish (in units of wavelength).

  • +
+
+
Returns:
+

beam – Beam pattern at each position in angpos.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.telescope.gmrt.html b/docs/_autosummary/drift.telescope.gmrt.html new file mode 100644 index 00000000..9e3d02cc --- /dev/null +++ b/docs/_autosummary/drift.telescope.gmrt.html @@ -0,0 +1,310 @@ + + + + + + + drift.telescope.gmrt — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.telescope.gmrt

+

Functions

+ + + + + + + + + +

beam_circular(angpos, zenith, uv_diameter)

Beam pattern for a circular dish.

jinc(x)

+

Classes

+ + + + + + + + + +

GmrtArray([pointing])

A Telescope describing an interferometric array of dishes.

GmrtUnpolarised([pointing])

Unpolarised GMRT class.

+
+
+class drift.telescope.gmrt.GmrtArray(pointing=0.0)
+

Bases: TransitTelescope

+

A Telescope describing an interferometric array of dishes.

+
+
+gridu, gridv
+

Number of dishes in u and v directions.

+
+
Type:
+

integer

+
+
+
+ +
+
+dish_width
+

Width of the dish in metres.

+
+
Type:
+

scalar

+
+
+
+ +

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+beam(feed, freq)
+

Beam for a particular feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – A Healpix map (of size self._nside) of the beam. Potentially +complex.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+beamx(feed, freq)
+

Beam for a particular feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – A Healpix map (of size self._nside) of the beam. Potentially +complex.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+beamy(feed, freq)
+

Beam for a particular feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – A Healpix map (of size self._nside) of the beam. Potentially +complex.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+property u_width
+

The approximate physical width (in the u-direction) of the dish/telescope etc, for +calculating the maximum (l,m).

+
+ +
+
+property v_width
+

The approximate physical length (in the v-direction) of the dish/telescope etc, for +calculating the maximum (l,m).

+
+ +
+ +
+
+class drift.telescope.gmrt.GmrtUnpolarised(pointing=0.0)
+

Bases: GmrtArray, SimpleUnpolarisedTelescope

+

Unpolarised GMRT class.

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+ +
+
+drift.telescope.gmrt.beam_circular(angpos, zenith, uv_diameter)
+

Beam pattern for a circular dish.

+
+
Parameters:
+
    +
  • angpos (np.ndarray) – Array of angular positions

  • +
  • zenith (np.ndarray) – Co-ordinates of the zenith.

  • +
  • uv_diameter (scalar) – Diameter of the dish (in units of wavelength).

  • +
+
+
Returns:
+

beam – Beam pattern at each position in angpos.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.telescope.html b/docs/_autosummary/drift.telescope.html new file mode 100644 index 00000000..fbac352c --- /dev/null +++ b/docs/_autosummary/drift.telescope.html @@ -0,0 +1,164 @@ + + + + + + + drift.telescope — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.telescope

+

Telescope class implementation

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

cylbeam

cylinder

disharray

exotic_cylinder

focalplane

gmrt

oldcylinder

restrictedcylinder

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.telescope.oldcylinder.html b/docs/_autosummary/drift.telescope.oldcylinder.html new file mode 100644 index 00000000..1e7f96e7 --- /dev/null +++ b/docs/_autosummary/drift.telescope.oldcylinder.html @@ -0,0 +1,370 @@ + + + + + + + drift.telescope.oldcylinder — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.telescope.oldcylinder

+

Classes

+ + + + + + + + + + + + +

CylinderTelescope([latitude, longitude])

Common functionality for all Cylinder Telescopes.

PolarisedCylinderTelescope([latitude, longitude])

A complete class for an Unpolarised Cylinder telescope.

UnpolarisedCylinderTelescope([latitude, ...])

A complete class for an Unpolarised Cylinder telescope.

+
+
+class drift.telescope.oldcylinder.CylinderTelescope(latitude=45, longitude=0, **kwargs)
+

Bases: TransitTelescope

+

Common functionality for all Cylinder Telescopes.

+
+
+num_cylinders
+

The number of cylinders.

+
+
Type:
+

integer

+
+
+
+ +
+
+num_feeds
+

Number of regularly spaced feeds along each cylinder.

+
+
Type:
+

integer

+
+
+
+ +
+
+cylinder_width
+

Width in metres.

+
+
Type:
+

scalar

+
+
+
+ +
+
+feed_spacing
+

Gap between feeds in metres.

+
+
Type:
+

scalar

+
+
+
+ +
+
+in_cylinder
+

Include in cylinder correlations?

+
+
Type:
+

boolean

+
+
+
+ +
+
+touching
+

Are the cylinders touching (no spacing between them)?

+
+
Type:
+

boolean

+
+
+
+ +
+
+cylspacing
+

If not touching this is the spacing in metres.

+
+
Type:
+

scalar

+
+
+
+ +

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+feed_positions_cylinder(cylinder_index)
+

Get the feed positions on the specified cylinder.

+
+
Parameters:
+

cylinder_index (integer) – The cylinder index, an integer from 0 to self.num_cylinders.

+
+
Returns:
+

feed_positions – The positions in the telescope plane of the receivers. Packed as +[[u1, v1], [u2, v2], …].

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+property u_width
+

The approximate physical width (in the u-direction) of the dish/telescope etc, for +calculating the maximum (l,m).

+
+ +
+
+property v_width
+

The approximate physical length (in the v-direction) of the dish/telescope etc, for +calculating the maximum (l,m).

+
+ +
+ +
+
+class drift.telescope.oldcylinder.PolarisedCylinderTelescope(latitude=45, longitude=0, **kwargs)
+

Bases: CylinderTelescope, SimplePolarisedTelescope

+

A complete class for an Unpolarised Cylinder telescope.

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+beamx(feed, freq)
+

Beam for the X polarisation feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – Healpix maps (of size [self._nside, 2]) of the field pattern in the +theta and phi directions.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+beamy(feed, freq)
+

Beam for the Y polarisation feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – Healpix maps (of size [self._nside, 2]) of the field pattern in the +theta and phi directions.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ +
+
+class drift.telescope.oldcylinder.UnpolarisedCylinderTelescope(latitude=45, longitude=0, **kwargs)
+

Bases: CylinderTelescope, SimpleUnpolarisedTelescope

+

A complete class for an Unpolarised Cylinder telescope.

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+beam(feed, freq)
+

Beam for a particular feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – A Healpix map (of size self._nside) of the beam. Potentially +complex.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.telescope.restrictedcylinder.html b/docs/_autosummary/drift.telescope.restrictedcylinder.html new file mode 100644 index 00000000..91446a09 --- /dev/null +++ b/docs/_autosummary/drift.telescope.restrictedcylinder.html @@ -0,0 +1,302 @@ + + + + + + + drift.telescope.restrictedcylinder — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.telescope.restrictedcylinder

+

Functions

+ + + + + + +

gaussian_fwhm(x, fwhm)

+

Classes

+ + + + + + + + + + + + + + + +

RestrictedBeam([latitude, longitude])

Initialise a telescope object.

RestrictedCylinder([latitude, longitude])

Initialise a telescope object.

RestrictedExtra([latitude, longitude])

Initialise a telescope object.

RestrictedPolarisedCylinder([latitude, ...])

Initialise a telescope object.

+
+
+class drift.telescope.restrictedcylinder.RestrictedBeam(latitude=45, longitude=0, **kwargs)
+

Bases: CylinderTelescope

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+ +
+
+class drift.telescope.restrictedcylinder.RestrictedCylinder(latitude=45, longitude=0, **kwargs)
+

Bases: RestrictedBeam, UnpolarisedCylinderTelescope

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+beam(*args, **kwargs)
+

Beam for a particular feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – A Healpix map (of size self._nside) of the beam. Potentially +complex.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ +
+
+class drift.telescope.restrictedcylinder.RestrictedExtra(latitude=45, longitude=0, **kwargs)
+

Bases: RestrictedCylinder

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+feed_positions_cylinder(cylinder_index)
+

Get the feed positions on the specified cylinder.

+
+
Parameters:
+

cylinder_index (integer) – The cylinder index, an integer from 0 to self.num_cylinders.

+
+
Returns:
+

feed_positions – The positions in the telescope plane of the receivers. Packed as +[[u1, v1], [u2, v2], …].

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ +
+
+class drift.telescope.restrictedcylinder.RestrictedPolarisedCylinder(latitude=45, longitude=0, **kwargs)
+

Bases: RestrictedBeam, PolarisedCylinderTelescope

+

Initialise a telescope object.

+
+
Parameters:
+
    +
  • latitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
  • longitude (scalar) – Position on the Earths surface of the telescope (in degrees).

  • +
+
+
+
+
+beamx(*args, **kwargs)
+

Beam for the X polarisation feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – Healpix maps (of size [self._nside, 2]) of the field pattern in the +theta and phi directions.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+beamy(*args, **kwargs)
+

Beam for the Y polarisation feed.

+
+
Parameters:
+
    +
  • feed (integer) – Index for the feed.

  • +
  • freq (integer) – Index for the frequency.

  • +
+
+
Returns:
+

beam – Healpix maps (of size [self._nside, 2]) of the field pattern in the +theta and phi directions.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.util.blockla.html b/docs/_autosummary/drift.util.blockla.html new file mode 100644 index 00000000..5302a721 --- /dev/null +++ b/docs/_autosummary/drift.util.blockla.html @@ -0,0 +1,231 @@ + + + + + + + drift.util.blockla — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.util.blockla

+

Functions

+ + + + + + + + + + + + + + + +

multiply_dm_dm(matrix1, matrix2)

Multiply a block diagonal matrix by another diagonal matrix.

multiply_dm_v(matrix, vector[, conj])

Multiply a block diagonal matrix by a blocked vector.

pinv_dm(matrix, *args, **kwargs)

Construct the pseudo-inverse of a block diagonal matrix.

svd_dm(matrix[, full_matrices])

Perform the SVD of a block diagonal matrix.

+
+
+drift.util.blockla.multiply_dm_dm(matrix1, matrix2)
+

Multiply a block diagonal matrix by another diagonal matrix.

+
+
Parameters:
+
    +
  • matrix1 ((nblocks, n, m) np.ndarray) – An array containing nblocks diagonal blocks of size (n, m).

  • +
  • matrix2 ((nblocks, m, k) np.ndarray) – An array containing nblocks diagonal blocks of size (m, k).

  • +
+
+
Returns:
+

nmatrix – An array containing nblocks diagonal blocks of size (n, k).

+
+
Return type:
+

(nblocks, n, k) np.ndarray

+
+
+
+ +
+
+drift.util.blockla.multiply_dm_v(matrix, vector, conj=False)
+

Multiply a block diagonal matrix by a blocked vector.

+
+
Parameters:
+
    +
  • matrix ((nblocks, n, m) np.ndarray) – An array containing nblocks diagonal blocks of size (n, m).

  • +
  • vector ((nblocks, m) np.ndarray) – An array containing the blocks of the vector, each of length m.

  • +
  • conj (boolean, optional) – Whether to multiply by the Hermitian conjugate of the matrix.

  • +
+
+
Returns:
+

newvector – An array containing the blocks of the vector, each of length n.

+
+
Return type:
+

(nblocks, n) np.ndarray

+
+
+
+ +
+
+drift.util.blockla.pinv_dm(matrix, *args, **kwargs)
+

Construct the pseudo-inverse of a block diagonal matrix.

+
+
Parameters:
+

matrix ((nblocks, n, m) np.ndarray) – An array containing nblocks diagonal blocks of size (n, m).

+
+
Returns:
+

pinv_matrix – An array containing the pseudo-inverse.

+
+
Return type:
+

(nblocks, m, n) np.ndarray

+
+
+
+ +
+
+drift.util.blockla.svd_dm(matrix, full_matrices=True)
+

Perform the SVD of a block diagonal matrix.

+
+
Parameters:
+
    +
  • matrix ((nblocks, n, m) np.ndarray) – A array containing nblocks diagonal blocks of size (n, m).

  • +
  • full_matrices (boolean) – Whether to return the full size SVD matrices, or truncate. See +documentation for scipy.linalg.svd

  • +
+
+
Returns:
+

    +
  • u ((nblocks, n, k1) np.ndarray) – The left eigenvectors in block form. k1 is n if full_matrices is +set, otherwise k1 = min(n, m)

  • +
  • sig ((nblocks, k) np.ndarray) – The singular values in block form, k = min(n, m)

  • +
  • v ((nblocks, k2, m) np.ndarray) – The right eigenvectors in block form. k2 is m if full_matrices is +set, otherwise k2 = min(n, m)

  • +
+

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.util.html b/docs/_autosummary/drift.util.html new file mode 100644 index 00000000..d1750491 --- /dev/null +++ b/docs/_autosummary/drift.util.html @@ -0,0 +1,144 @@ + + + + + + + drift.util — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.util

+

Utility functions for driftscan

+ + + + + + + + + + + + +

blockla

plotutil

util

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.util.plotutil.html b/docs/_autosummary/drift.util.plotutil.html new file mode 100644 index 00000000..2a8cb7a3 --- /dev/null +++ b/docs/_autosummary/drift.util.plotutil.html @@ -0,0 +1,162 @@ + + + + + + + drift.util.plotutil — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.util.plotutil

+

Functions

+ + + + + + +

regrid_polar(polar_img, r_bins, theta_bins)

Regrid an (r, theta) quarter plane onto (rx, ry).

+
+
+drift.util.plotutil.regrid_polar(polar_img, r_bins, theta_bins, res=1024)
+

Regrid an (r, theta) quarter plane onto (rx, ry).

+

Useful for breaking out (k, theta) Fisher errors into (kpar, kperp).

+
+
Parameters:
+
    +
  • polar_img (np.ndarray[num_r, num_theta]) – The values on the polar grid.

  • +
  • r_bins (np.ndarray[num_r + 1]) – The bin boundaries in the r direction.

  • +
  • theta_bins (np.ndarray[num_theta + 1]) – The bin boundaries in the theta direction.

  • +
  • res (integer, optional (default=1024)) – The number of pixels on each side of the cartesian grid.

  • +
+
+
Returns:
+

cart_img – The regridded image.

+
+
Return type:
+

np.ndarray[res, res]

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_autosummary/drift.util.util.html b/docs/_autosummary/drift.util.util.html new file mode 100644 index 00000000..46a7c776 --- /dev/null +++ b/docs/_autosummary/drift.util.util.html @@ -0,0 +1,161 @@ + + + + + + + drift.util.util — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

drift.util.util

+

Functions

+ + + + + + + + + + + + +

cache_last(func)

A simple decorator to cache the result of the last call to a function.

intpattern(n)

Pattern that prints out a number upto n (integer - always shows sign).

natpattern(n)

Pattern that prints out a number upto n (natural number - no sign).

+
+
+drift.util.util.cache_last(func)
+

A simple decorator to cache the result of the last call to a function.

+
+ +
+
+drift.util.util.intpattern(n)
+

Pattern that prints out a number upto n (integer - always shows sign).

+
+ +
+
+drift.util.util.natpattern(n)
+

Pattern that prints out a number upto n (natural number - no sign).

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.core.beamtransfer.rst.txt b/docs/_sources/_autosummary/drift.core.beamtransfer.rst.txt new file mode 100644 index 00000000..a01a69b1 --- /dev/null +++ b/docs/_sources/_autosummary/drift.core.beamtransfer.rst.txt @@ -0,0 +1,23 @@ +drift.core.beamtransfer +======================= + +.. automodule:: drift.core.beamtransfer + + + .. rubric:: Functions + + .. autosummary:: + + matrix_image + matrix_nullspace + svd_gen + + .. rubric:: Classes + + .. autosummary:: + + BeamTransfer + BeamTransferFullSVD + BeamTransferNoSVD + BeamTransferTempSVD + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.core.crosspower.rst.txt b/docs/_sources/_autosummary/drift.core.crosspower.rst.txt new file mode 100644 index 00000000..7cbbe3bf --- /dev/null +++ b/docs/_sources/_autosummary/drift.core.crosspower.rst.txt @@ -0,0 +1,12 @@ +drift.core.crosspower +===================== + +.. automodule:: drift.core.crosspower + + + .. rubric:: Classes + + .. autosummary:: + + CrossPower + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.core.doublekl.rst.txt b/docs/_sources/_autosummary/drift.core.doublekl.rst.txt new file mode 100644 index 00000000..4ccab5c3 --- /dev/null +++ b/docs/_sources/_autosummary/drift.core.doublekl.rst.txt @@ -0,0 +1,12 @@ +drift.core.doublekl +=================== + +.. automodule:: drift.core.doublekl + + + .. rubric:: Classes + + .. autosummary:: + + DoubleKL + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.core.kltransform.rst.txt b/docs/_sources/_autosummary/drift.core.kltransform.rst.txt new file mode 100644 index 00000000..03df6508 --- /dev/null +++ b/docs/_sources/_autosummary/drift.core.kltransform.rst.txt @@ -0,0 +1,21 @@ +drift.core.kltransform +====================== + +.. automodule:: drift.core.kltransform + + + .. rubric:: Functions + + .. autosummary:: + + collect_m_array + collect_m_arrays + eigh_gen + inv_gen + + .. rubric:: Classes + + .. autosummary:: + + KLTransform + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.core.manager.rst.txt b/docs/_sources/_autosummary/drift.core.manager.rst.txt new file mode 100644 index 00000000..39b99962 --- /dev/null +++ b/docs/_sources/_autosummary/drift.core.manager.rst.txt @@ -0,0 +1,12 @@ +drift.core.manager +================== + +.. automodule:: drift.core.manager + + + .. rubric:: Classes + + .. autosummary:: + + ProductManager + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.core.psestimation.rst.txt b/docs/_sources/_autosummary/drift.core.psestimation.rst.txt new file mode 100644 index 00000000..5344d179 --- /dev/null +++ b/docs/_sources/_autosummary/drift.core.psestimation.rst.txt @@ -0,0 +1,24 @@ +drift.core.psestimation +======================= + +.. automodule:: drift.core.psestimation + + + .. rubric:: Functions + + .. autosummary:: + + bandfunc_2d_cart + bandfunc_2d_polar + decorrelate_ps + decorrelate_ps_file + range_config + uniform_band + + .. rubric:: Classes + + .. autosummary:: + + PSEstimation + PSExact + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.core.psmc.rst.txt b/docs/_sources/_autosummary/drift.core.psmc.rst.txt new file mode 100644 index 00000000..5a3c1904 --- /dev/null +++ b/docs/_sources/_autosummary/drift.core.psmc.rst.txt @@ -0,0 +1,20 @@ +drift.core.psmc +=============== + +.. automodule:: drift.core.psmc + + + .. rubric:: Functions + + .. autosummary:: + + block_root + sim_skyvec + + .. rubric:: Classes + + .. autosummary:: + + PSMonteCarlo + PSMonteCarloAlt + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.core.rst.txt b/docs/_sources/_autosummary/drift.core.rst.txt new file mode 100644 index 00000000..ded994c0 --- /dev/null +++ b/docs/_sources/_autosummary/drift.core.rst.txt @@ -0,0 +1,6 @@ +drift.core +========== + +.. automodule:: drift.core + + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.core.skymodel.rst.txt b/docs/_sources/_autosummary/drift.core.skymodel.rst.txt new file mode 100644 index 00000000..4443191f --- /dev/null +++ b/docs/_sources/_autosummary/drift.core.skymodel.rst.txt @@ -0,0 +1,19 @@ +drift.core.skymodel +=================== + +.. automodule:: drift.core.skymodel + + + .. rubric:: Functions + + .. autosummary:: + + foreground_model + im21cm_model + + .. rubric:: Classes + + .. autosummary:: + + PointSources + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.core.telescope.rst.txt b/docs/_sources/_autosummary/drift.core.telescope.rst.txt new file mode 100644 index 00000000..3824767e --- /dev/null +++ b/docs/_sources/_autosummary/drift.core.telescope.rst.txt @@ -0,0 +1,25 @@ +drift.core.telescope +==================== + +.. automodule:: drift.core.telescope + + + .. rubric:: Functions + + .. autosummary:: + + in_range + map_half_plane + max_lm + out_of_range + + .. rubric:: Classes + + .. autosummary:: + + PolarisedTelescope + SimplePolarisedTelescope + SimpleUnpolarisedTelescope + TransitTelescope + UnpolarisedTelescope + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.core.visibility.rst.txt b/docs/_sources/_autosummary/drift.core.visibility.rst.txt new file mode 100644 index 00000000..63d5cefe --- /dev/null +++ b/docs/_sources/_autosummary/drift.core.visibility.rst.txt @@ -0,0 +1,15 @@ +drift.core.visibility +===================== + +.. automodule:: drift.core.visibility + + + .. rubric:: Functions + + .. autosummary:: + + cylinder_beam + horizon + pol_IQU + uv_plane_cart + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.pipeline.pipeline.rst.txt b/docs/_sources/_autosummary/drift.pipeline.pipeline.rst.txt new file mode 100644 index 00000000..90e7b68e --- /dev/null +++ b/docs/_sources/_autosummary/drift.pipeline.pipeline.rst.txt @@ -0,0 +1,18 @@ +drift.pipeline.pipeline +======================= + +.. automodule:: drift.pipeline.pipeline + + + .. rubric:: Functions + + .. autosummary:: + + fixpath + + .. rubric:: Classes + + .. autosummary:: + + PipelineManager + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.pipeline.rst.txt b/docs/_sources/_autosummary/drift.pipeline.rst.txt new file mode 100644 index 00000000..69fa2f26 --- /dev/null +++ b/docs/_sources/_autosummary/drift.pipeline.rst.txt @@ -0,0 +1,6 @@ +drift.pipeline +============== + +.. automodule:: drift.pipeline + + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.pipeline.timestream.rst.txt b/docs/_sources/_autosummary/drift.pipeline.timestream.rst.txt new file mode 100644 index 00000000..3806359e --- /dev/null +++ b/docs/_sources/_autosummary/drift.pipeline.timestream.rst.txt @@ -0,0 +1,19 @@ +drift.pipeline.timestream +========================= + +.. automodule:: drift.pipeline.timestream + + + .. rubric:: Functions + + .. autosummary:: + + cross_powerspectrum + simulate + + .. rubric:: Classes + + .. autosummary:: + + Timestream + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.scripts.rst.txt b/docs/_sources/_autosummary/drift.scripts.rst.txt new file mode 100644 index 00000000..2383afb5 --- /dev/null +++ b/docs/_sources/_autosummary/drift.scripts.rst.txt @@ -0,0 +1,6 @@ +drift.scripts +============= + +.. automodule:: drift.scripts + + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.telescope.cylbeam.rst.txt b/docs/_sources/_autosummary/drift.telescope.cylbeam.rst.txt new file mode 100644 index 00000000..3cc41b67 --- /dev/null +++ b/docs/_sources/_autosummary/drift.telescope.cylbeam.rst.txt @@ -0,0 +1,17 @@ +drift.telescope.cylbeam +======================= + +.. automodule:: drift.telescope.cylbeam + + + .. rubric:: Functions + + .. autosummary:: + + beam_amp + beam_dipole + beam_x + beam_y + fraunhofer_cylinder + polpattern + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.telescope.cylinder.rst.txt b/docs/_sources/_autosummary/drift.telescope.cylinder.rst.txt new file mode 100644 index 00000000..cb325aec --- /dev/null +++ b/docs/_sources/_autosummary/drift.telescope.cylinder.rst.txt @@ -0,0 +1,14 @@ +drift.telescope.cylinder +======================== + +.. automodule:: drift.telescope.cylinder + + + .. rubric:: Classes + + .. autosummary:: + + CylinderTelescope + PolarisedCylinderTelescope + UnpolarisedCylinderTelescope + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.telescope.disharray.rst.txt b/docs/_sources/_autosummary/drift.telescope.disharray.rst.txt new file mode 100644 index 00000000..a0be74b2 --- /dev/null +++ b/docs/_sources/_autosummary/drift.telescope.disharray.rst.txt @@ -0,0 +1,19 @@ +drift.telescope.disharray +========================= + +.. automodule:: drift.telescope.disharray + + + .. rubric:: Functions + + .. autosummary:: + + beam_circular + jinc + + .. rubric:: Classes + + .. autosummary:: + + DishArray + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.telescope.exotic_cylinder.rst.txt b/docs/_sources/_autosummary/drift.telescope.exotic_cylinder.rst.txt new file mode 100644 index 00000000..1b3370f5 --- /dev/null +++ b/docs/_sources/_autosummary/drift.telescope.exotic_cylinder.rst.txt @@ -0,0 +1,16 @@ +drift.telescope.exotic\_cylinder +================================ + +.. automodule:: drift.telescope.exotic_cylinder + + + .. rubric:: Classes + + .. autosummary:: + + CylinderExtra + CylinderPerturbed + CylinderShift + GradientCylinder + RandomCylinder + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.telescope.focalplane.rst.txt b/docs/_sources/_autosummary/drift.telescope.focalplane.rst.txt new file mode 100644 index 00000000..ac5ed4ae --- /dev/null +++ b/docs/_sources/_autosummary/drift.telescope.focalplane.rst.txt @@ -0,0 +1,20 @@ +drift.telescope.focalplane +========================== + +.. automodule:: drift.telescope.focalplane + + + .. rubric:: Functions + + .. autosummary:: + + beam_circular + gaussian_beam + jinc + + .. rubric:: Classes + + .. autosummary:: + + FocalPlaneArray + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.telescope.gmrt.rst.txt b/docs/_sources/_autosummary/drift.telescope.gmrt.rst.txt new file mode 100644 index 00000000..c0f94d60 --- /dev/null +++ b/docs/_sources/_autosummary/drift.telescope.gmrt.rst.txt @@ -0,0 +1,20 @@ +drift.telescope.gmrt +==================== + +.. automodule:: drift.telescope.gmrt + + + .. rubric:: Functions + + .. autosummary:: + + beam_circular + jinc + + .. rubric:: Classes + + .. autosummary:: + + GmrtArray + GmrtUnpolarised + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.telescope.oldcylinder.rst.txt b/docs/_sources/_autosummary/drift.telescope.oldcylinder.rst.txt new file mode 100644 index 00000000..09d4437f --- /dev/null +++ b/docs/_sources/_autosummary/drift.telescope.oldcylinder.rst.txt @@ -0,0 +1,14 @@ +drift.telescope.oldcylinder +=========================== + +.. automodule:: drift.telescope.oldcylinder + + + .. rubric:: Classes + + .. autosummary:: + + CylinderTelescope + PolarisedCylinderTelescope + UnpolarisedCylinderTelescope + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.telescope.restrictedcylinder.rst.txt b/docs/_sources/_autosummary/drift.telescope.restrictedcylinder.rst.txt new file mode 100644 index 00000000..e2c1d86c --- /dev/null +++ b/docs/_sources/_autosummary/drift.telescope.restrictedcylinder.rst.txt @@ -0,0 +1,21 @@ +drift.telescope.restrictedcylinder +================================== + +.. automodule:: drift.telescope.restrictedcylinder + + + .. rubric:: Functions + + .. autosummary:: + + gaussian_fwhm + + .. rubric:: Classes + + .. autosummary:: + + RestrictedBeam + RestrictedCylinder + RestrictedExtra + RestrictedPolarisedCylinder + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.telescope.rst.txt b/docs/_sources/_autosummary/drift.telescope.rst.txt new file mode 100644 index 00000000..864ba5c6 --- /dev/null +++ b/docs/_sources/_autosummary/drift.telescope.rst.txt @@ -0,0 +1,6 @@ +drift.telescope +=============== + +.. automodule:: drift.telescope + + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.util.blockla.rst.txt b/docs/_sources/_autosummary/drift.util.blockla.rst.txt new file mode 100644 index 00000000..ffed88b9 --- /dev/null +++ b/docs/_sources/_autosummary/drift.util.blockla.rst.txt @@ -0,0 +1,15 @@ +drift.util.blockla +================== + +.. automodule:: drift.util.blockla + + + .. rubric:: Functions + + .. autosummary:: + + multiply_dm_dm + multiply_dm_v + pinv_dm + svd_dm + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.util.plotutil.rst.txt b/docs/_sources/_autosummary/drift.util.plotutil.rst.txt new file mode 100644 index 00000000..2f82430e --- /dev/null +++ b/docs/_sources/_autosummary/drift.util.plotutil.rst.txt @@ -0,0 +1,12 @@ +drift.util.plotutil +=================== + +.. automodule:: drift.util.plotutil + + + .. rubric:: Functions + + .. autosummary:: + + regrid_polar + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.util.rst.txt b/docs/_sources/_autosummary/drift.util.rst.txt new file mode 100644 index 00000000..d2a90499 --- /dev/null +++ b/docs/_sources/_autosummary/drift.util.rst.txt @@ -0,0 +1,6 @@ +drift.util +========== + +.. automodule:: drift.util + + \ No newline at end of file diff --git a/docs/_sources/_autosummary/drift.util.util.rst.txt b/docs/_sources/_autosummary/drift.util.util.rst.txt new file mode 100644 index 00000000..020f415d --- /dev/null +++ b/docs/_sources/_autosummary/drift.util.util.rst.txt @@ -0,0 +1,14 @@ +drift.util.util +=============== + +.. automodule:: drift.util.util + + + .. rubric:: Functions + + .. autosummary:: + + cache_last + intpattern + natpattern + \ No newline at end of file diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt new file mode 100644 index 00000000..5da48f52 --- /dev/null +++ b/docs/_sources/index.rst.txt @@ -0,0 +1,27 @@ +.. Py21cm documentation master file, created by + sphinx-quickstart on Wed Jul 3 18:21:11 2013. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +driftscan +========= + +A package for the analysis of transit radio interferometers, with a particular +focus on compact arrays searching for cosmological 21cm emission. + +Contents +-------- + +.. toctree:: + :maxdepth: 1 + + overview + reference + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/docs/_sources/overview.rst.txt b/docs/_sources/overview.rst.txt new file mode 100644 index 00000000..6397c095 --- /dev/null +++ b/docs/_sources/overview.rst.txt @@ -0,0 +1,111 @@ +===================== +Overview of Driftscan +===================== + +driftscan is a package for the analysis of data from transit radio +interferometers using the m-mode formalism which is described in +`arXiv:1302.0327`_ and `arXiv:1401.2095`_. + +Given a design of a telescope, this package can: + +* Generate a set of products used to analyse data from it and simulate + timestreams. +* Construct a filter which can be used to extract cosmological 21 cm emission + from astrophysical foregrounds, such as our galaxy and radio point sources. +* Estimate the 21cm power spectrum using an optimal quadratic estimator + +There are essentially two separate parts to running driftscan: generating the +analysis products, and running the pipeline. We describe how these work below. + +.. _`arXiv:1302.0327`: http://arxiv.org/abs/1302.0327 +.. _`arXiv:1401.2095`: http://arxiv.org/abs/1401.2095 + +Generating the Analysis Products +================================ + + + +Describing a Telescope +---------------------- + + +.. sidebar:: Code tips + + These are specified by implementing the + :class:`~driftscan.core.telescope.TransitTelescope` class. Look for helpers + such as :class:`~driftscan.core.telescope.SimplePolarisedTelescope`. + +The first step in running driftscan is to give a model for the telescope. This +consists of: + +* A description of the primary beam of each feed. This is a two component + vector at every at every point in the sky to describe the electric field + response of the beam. +* The locations of each feed which are assumed to be co-planar and located at + a specified latitude. +* A model of the instrument noise. The noise is assumed to be stationary and + Gaussian and so is uniquely described by its power spectrum. + + + +Beam Transfer Matrices +---------------------- + +Now the fun can begin. The next step is to generate the Beam Transfer matrices +for each m-mode. This is conceptually straightforward: + + +.. sidebar:: Code tips + + The Beam Transfer matrices are managed by the class + :py:class:`~drift.core.beamtransfer.BeamTransfer`, and are generated by the method + :py:meth:`~drift.core.beamtransfer.BeamTransfer.generate` + + The normal Beam matrices are accessed by + :py:meth:`~drift.core.beamtransfer.BeamTransfer.beam_m`, and their inverse + by :py:meth:`~drift.core.beamtransfer.BeamTransfer.invbeam_m`. + + +1. Make sky maps of the polarised response for each feed pair at all observed + frequencies. +2. Take the spherical harmonic transform of each polarised set of maps. +3. Transpose to group by the m, of each spherical harmonic transform. We must + also conjugate the negative `m` modes to group them with the positive `m` + modes. + +In practice this can be numerically challenging due to the shear quantity of +frequencies and feed pairs present. This step is ``MPI`` parallelised and +proceeds by distributing subsets of the responses to geneate and transform +across many nodes, and performing an in memory transpose across all these +nodes to group by m. It then processes the next subset, and repeats until we +have generated the complete set. + +As much of the information measured by an interferometer is redundant (in that +it tells us nothing new about the sky), we generate a new set of transfer +matrices that map to only the useful subset of the data. This is the next step +of the analysis (described in detail in `arXiv:1401.2095`_) and is done by +taking repeated singular value decompositions of each m-mode. We generate +three matrices for each m-mode: + +* :math:`\mathbf{U}` which maps the measured data into the SVD basis. +* :math:`\tilde{\mathbf{B}}` which describes how the SVD modes relate to the sky +* :math:`\tilde{\mathbf{B}}^+` the pseudo-inverse or map-making matrix, + +As each m-mode and each frequency is independent this can be trivially +parallelised. This step also generates the pseudo-inverse matrices used for +imaging. + + + +Karhunen Loeve Transform +------------------------ + + + + +Running the Pipeline +==================== + + + +Meh 2. \ No newline at end of file diff --git a/docs/_sources/reference.rst.txt b/docs/_sources/reference.rst.txt new file mode 100644 index 00000000..2b562bf8 --- /dev/null +++ b/docs/_sources/reference.rst.txt @@ -0,0 +1,4 @@ +Programming References +---------------------- + +.. automodule:: drift diff --git a/docs/_static/_sphinx_javascript_frameworks_compat.js b/docs/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 00000000..81415803 --- /dev/null +++ b/docs/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/docs/_static/basic.css b/docs/_static/basic.css new file mode 100644 index 00000000..f316efcb --- /dev/null +++ b/docs/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/_static/css/badge_only.css b/docs/_static/css/badge_only.css new file mode 100644 index 00000000..c718cee4 --- /dev/null +++ b/docs/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/docs/_static/css/fonts/Roboto-Slab-Bold.woff b/docs/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 b/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Regular.woff b/docs/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 b/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.eot b/docs/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.svg b/docs/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/docs/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_static/css/fonts/fontawesome-webfont.ttf b/docs/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.woff b/docs/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.woff2 b/docs/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/docs/_static/css/fonts/lato-bold-italic.woff b/docs/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/docs/_static/css/fonts/lato-bold-italic.woff differ diff --git a/docs/_static/css/fonts/lato-bold-italic.woff2 b/docs/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/docs/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/docs/_static/css/fonts/lato-bold.woff b/docs/_static/css/fonts/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/docs/_static/css/fonts/lato-bold.woff differ diff --git a/docs/_static/css/fonts/lato-bold.woff2 b/docs/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/docs/_static/css/fonts/lato-bold.woff2 differ diff --git a/docs/_static/css/fonts/lato-normal-italic.woff b/docs/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/docs/_static/css/fonts/lato-normal-italic.woff differ diff --git a/docs/_static/css/fonts/lato-normal-italic.woff2 b/docs/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/docs/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/docs/_static/css/fonts/lato-normal.woff b/docs/_static/css/fonts/lato-normal.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/docs/_static/css/fonts/lato-normal.woff differ diff --git a/docs/_static/css/fonts/lato-normal.woff2 b/docs/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/docs/_static/css/fonts/lato-normal.woff2 differ diff --git a/docs/_static/css/theme.css b/docs/_static/css/theme.css new file mode 100644 index 00000000..19a446a0 --- /dev/null +++ b/docs/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/docs/_static/doctools.js b/docs/_static/doctools.js new file mode 100644 index 00000000..4d67807d --- /dev/null +++ b/docs/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js new file mode 100644 index 00000000..ba463c38 --- /dev/null +++ b/docs/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '22.9.0.post7+git.f0e5334b', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/docs/_static/file.png b/docs/_static/file.png new file mode 100644 index 00000000..a858a410 Binary files /dev/null and b/docs/_static/file.png differ diff --git a/docs/_static/jquery.js b/docs/_static/jquery.js new file mode 100644 index 00000000..c4c6022f --- /dev/null +++ b/docs/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/docs/_static/js/html5shiv.min.js b/docs/_static/js/html5shiv.min.js new file mode 100644 index 00000000..cd1c674f --- /dev/null +++ b/docs/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/docs/_static/js/theme.js b/docs/_static/js/theme.js new file mode 100644 index 00000000..1fddb6ee --- /dev/null +++ b/docs/_static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/docs/_static/minus.png b/docs/_static/minus.png new file mode 100644 index 00000000..d96755fd Binary files /dev/null and b/docs/_static/minus.png differ diff --git a/docs/_static/plus.png b/docs/_static/plus.png new file mode 100644 index 00000000..7107cec9 Binary files /dev/null and b/docs/_static/plus.png differ diff --git a/docs/_static/pygments.css b/docs/_static/pygments.css new file mode 100644 index 00000000..0d49244e --- /dev/null +++ b/docs/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #333333 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #208050 } /* Literal.Number.Bin */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287e } /* Name.Function.Magic */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/_static/searchtools.js b/docs/_static/searchtools.js new file mode 100644 index 00000000..b08d58c9 --- /dev/null +++ b/docs/_static/searchtools.js @@ -0,0 +1,620 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/docs/_static/sphinx_highlight.js b/docs/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/docs/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/docs/genindex.html b/docs/genindex.html new file mode 100644 index 00000000..091233bc --- /dev/null +++ b/docs/genindex.html @@ -0,0 +1,1208 @@ + + + + + + Index — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Index

+ +
+ _ + | A + | B + | C + | D + | E + | F + | G + | H + | I + | K + | L + | M + | N + | O + | P + | Q + | R + | S + | T + | U + | V + | W + | Z + +
+

_

+ + +
+ +

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
    +
  • + drift.pipeline.pipeline + +
  • +
  • + drift.pipeline.timestream + +
  • +
  • + drift.scripts + +
  • +
  • + drift.telescope + +
  • +
  • + drift.telescope.cylbeam + +
  • +
  • + drift.telescope.cylinder + +
  • +
  • + drift.telescope.disharray + +
  • +
  • + drift.telescope.exotic_cylinder + +
  • +
  • + drift.telescope.focalplane + +
  • +
  • + drift.telescope.gmrt + +
  • +
  • + drift.telescope.oldcylinder + +
  • +
  • + drift.telescope.restrictedcylinder + +
  • +
  • + drift.util + +
  • +
  • + drift.util.blockla + +
  • +
  • + drift.util.plotutil + +
  • +
  • + drift.util.util + +
  • +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + +
+ +

I

+ + + +
+ +

K

+ + + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

O

+ + +
+ +

P

+ + + +
+ +

Q

+ + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ +

V

+ + +
+ +

W

+ + +
+ +

Z

+ + +
+ + + +
+
+
+ +
+ +
+

© Copyright 2014, J. Richard Shaw.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..b361a80d --- /dev/null +++ b/docs/index.html @@ -0,0 +1,132 @@ + + + + + + + driftscan — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

driftscan

+

A package for the analysis of transit radio interferometers, with a particular +focus on compact arrays searching for cosmological 21cm emission.

+
+

Contents

+ +
+
+
+

Indices and tables

+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/objects.inv b/docs/objects.inv new file mode 100644 index 00000000..c81501e5 Binary files /dev/null and b/docs/objects.inv differ diff --git a/docs/overview.html b/docs/overview.html new file mode 100644 index 00000000..232e5419 --- /dev/null +++ b/docs/overview.html @@ -0,0 +1,209 @@ + + + + + + + Overview of Driftscan — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Overview of Driftscan

+

driftscan is a package for the analysis of data from transit radio +interferometers using the m-mode formalism which is described in +arXiv:1302.0327 and arXiv:1401.2095.

+

Given a design of a telescope, this package can:

+
    +
  • Generate a set of products used to analyse data from it and simulate +timestreams.

  • +
  • Construct a filter which can be used to extract cosmological 21 cm emission +from astrophysical foregrounds, such as our galaxy and radio point sources.

  • +
  • Estimate the 21cm power spectrum using an optimal quadratic estimator

  • +
+

There are essentially two separate parts to running driftscan: generating the +analysis products, and running the pipeline. We describe how these work below.

+
+

Generating the Analysis Products

+
+

Describing a Telescope

+ +

The first step in running driftscan is to give a model for the telescope. This +consists of:

+
    +
  • A description of the primary beam of each feed. This is a two component +vector at every at every point in the sky to describe the electric field +response of the beam.

  • +
  • The locations of each feed which are assumed to be co-planar and located at +a specified latitude.

  • +
  • A model of the instrument noise. The noise is assumed to be stationary and +Gaussian and so is uniquely described by its power spectrum.

  • +
+
+
+

Beam Transfer Matrices

+

Now the fun can begin. The next step is to generate the Beam Transfer matrices +for each m-mode. This is conceptually straightforward:

+ +
    +
  1. Make sky maps of the polarised response for each feed pair at all observed +frequencies.

  2. +
  3. Take the spherical harmonic transform of each polarised set of maps.

  4. +
  5. Transpose to group by the m, of each spherical harmonic transform. We must +also conjugate the negative m modes to group them with the positive m +modes.

  6. +
+

In practice this can be numerically challenging due to the shear quantity of +frequencies and feed pairs present. This step is MPI parallelised and +proceeds by distributing subsets of the responses to geneate and transform +across many nodes, and performing an in memory transpose across all these +nodes to group by m. It then processes the next subset, and repeats until we +have generated the complete set.

+

As much of the information measured by an interferometer is redundant (in that +it tells us nothing new about the sky), we generate a new set of transfer +matrices that map to only the useful subset of the data. This is the next step +of the analysis (described in detail in arXiv:1401.2095) and is done by +taking repeated singular value decompositions of each m-mode. We generate +three matrices for each m-mode:

+
    +
  • \(\mathbf{U}\) which maps the measured data into the SVD basis.

  • +
  • \(\tilde{\mathbf{B}}\) which describes how the SVD modes relate to the sky

  • +
  • \(\tilde{\mathbf{B}}^+\) the pseudo-inverse or map-making matrix,

  • +
+

As each m-mode and each frequency is independent this can be trivially +parallelised. This step also generates the pseudo-inverse matrices used for +imaging.

+
+
+

Karhunen Loeve Transform

+
+
+
+

Running the Pipeline

+

Meh 2.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/py-modindex.html b/docs/py-modindex.html new file mode 100644 index 00000000..15b8192d --- /dev/null +++ b/docs/py-modindex.html @@ -0,0 +1,265 @@ + + + + + + Python Module Index — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Python Module Index

+ +
+ d +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ d
+ drift +
    + drift.core +
    + drift.core.beamtransfer +
    + drift.core.crosspower +
    + drift.core.doublekl +
    + drift.core.kltransform +
    + drift.core.manager +
    + drift.core.psestimation +
    + drift.core.psmc +
    + drift.core.skymodel +
    + drift.core.telescope +
    + drift.core.visibility +
    + drift.pipeline +
    + drift.pipeline.pipeline +
    + drift.pipeline.timestream +
    + drift.scripts +
    + drift.telescope +
    + drift.telescope.cylbeam +
    + drift.telescope.cylinder +
    + drift.telescope.disharray +
    + drift.telescope.exotic_cylinder +
    + drift.telescope.focalplane +
    + drift.telescope.gmrt +
    + drift.telescope.oldcylinder +
    + drift.telescope.restrictedcylinder +
    + drift.util +
    + drift.util.blockla +
    + drift.util.plotutil +
    + drift.util.util +
+ + +
+
+
+ +
+ +
+

© Copyright 2014, J. Richard Shaw.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference.html b/docs/reference.html new file mode 100644 index 00000000..9e307929 --- /dev/null +++ b/docs/reference.html @@ -0,0 +1,150 @@ + + + + + + + Programming References — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Programming References

+

Modelling for transit radio telescopes.

+

The existing code is mostly focussed on interferometers but can also be used +for multi-beam transit telescopes.

+
+

Submodules

+ + + + + + + + + + + + + + + + + + +

core

Core functionality for driftscan modelling.

pipeline

A very simple pipeline for analysis of noiseless simulation data.

scripts

telescope

Telescope class implementation

util

Utility functions for driftscan

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/search.html b/docs/search.html new file mode 100644 index 00000000..649d9fcb --- /dev/null +++ b/docs/search.html @@ -0,0 +1,125 @@ + + + + + + Search — driftscan 22.9.0.post7+git.f0e5334b documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+
+ +
+ +
+

© Copyright 2014, J. Richard Shaw.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/searchindex.js b/docs/searchindex.js new file mode 100644 index 00000000..e7223d5c --- /dev/null +++ b/docs/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"Beam Transfer Matrices": [[29, "beam-transfer-matrices"]], "Code tips": [[29, null], [29, null]], "Contents": [[28, "contents"]], "Describing a Telescope": [[29, "describing-a-telescope"]], "Generating the Analysis Products": [[29, "generating-the-analysis-products"]], "Indices and tables": [[28, "indices-and-tables"]], "Karhunen Loeve Transform": [[29, "karhunen-loeve-transform"]], "Overview of Driftscan": [[29, null]], "Programming References": [[30, null]], "Running the Pipeline": [[29, "running-the-pipeline"]], "Submodules": [[30, "submodules"]], "drift.core": [[0, null]], "drift.core.beamtransfer": [[1, null]], "drift.core.crosspower": [[2, null]], "drift.core.doublekl": [[3, null]], "drift.core.kltransform": [[4, null]], "drift.core.manager": [[5, null]], "drift.core.psestimation": [[6, null]], "drift.core.psmc": [[7, null]], "drift.core.skymodel": [[8, null]], "drift.core.telescope": [[9, null]], "drift.core.visibility": [[10, null]], "drift.pipeline": [[11, null]], "drift.pipeline.pipeline": [[12, null]], "drift.pipeline.timestream": [[13, null]], "drift.scripts": [[14, null]], "drift.telescope": [[15, null]], "drift.telescope.cylbeam": [[16, null]], "drift.telescope.cylinder": [[17, null]], "drift.telescope.disharray": [[18, null]], "drift.telescope.exotic_cylinder": [[19, null]], "drift.telescope.focalplane": [[20, null]], "drift.telescope.gmrt": [[21, null]], "drift.telescope.oldcylinder": [[22, null]], "drift.telescope.restrictedcylinder": [[23, null]], "drift.util": [[24, null]], "drift.util.blockla": [[25, null]], "drift.util.plotutil": [[26, null]], "drift.util.util": [[27, null]], "driftscan": [[28, null]]}, "docnames": ["_autosummary/drift.core", "_autosummary/drift.core.beamtransfer", "_autosummary/drift.core.crosspower", "_autosummary/drift.core.doublekl", "_autosummary/drift.core.kltransform", "_autosummary/drift.core.manager", "_autosummary/drift.core.psestimation", "_autosummary/drift.core.psmc", "_autosummary/drift.core.skymodel", "_autosummary/drift.core.telescope", "_autosummary/drift.core.visibility", "_autosummary/drift.pipeline", "_autosummary/drift.pipeline.pipeline", "_autosummary/drift.pipeline.timestream", "_autosummary/drift.scripts", "_autosummary/drift.telescope", "_autosummary/drift.telescope.cylbeam", "_autosummary/drift.telescope.cylinder", "_autosummary/drift.telescope.disharray", "_autosummary/drift.telescope.exotic_cylinder", "_autosummary/drift.telescope.focalplane", "_autosummary/drift.telescope.gmrt", "_autosummary/drift.telescope.oldcylinder", "_autosummary/drift.telescope.restrictedcylinder", "_autosummary/drift.util", "_autosummary/drift.util.blockla", "_autosummary/drift.util.plotutil", "_autosummary/drift.util.util", "index", "overview", "reference"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["_autosummary/drift.core.rst", "_autosummary/drift.core.beamtransfer.rst", "_autosummary/drift.core.crosspower.rst", "_autosummary/drift.core.doublekl.rst", "_autosummary/drift.core.kltransform.rst", "_autosummary/drift.core.manager.rst", "_autosummary/drift.core.psestimation.rst", "_autosummary/drift.core.psmc.rst", "_autosummary/drift.core.skymodel.rst", "_autosummary/drift.core.telescope.rst", "_autosummary/drift.core.visibility.rst", "_autosummary/drift.pipeline.rst", "_autosummary/drift.pipeline.pipeline.rst", "_autosummary/drift.pipeline.timestream.rst", "_autosummary/drift.scripts.rst", "_autosummary/drift.telescope.rst", "_autosummary/drift.telescope.cylbeam.rst", "_autosummary/drift.telescope.cylinder.rst", "_autosummary/drift.telescope.disharray.rst", "_autosummary/drift.telescope.exotic_cylinder.rst", "_autosummary/drift.telescope.focalplane.rst", "_autosummary/drift.telescope.gmrt.rst", "_autosummary/drift.telescope.oldcylinder.rst", "_autosummary/drift.telescope.restrictedcylinder.rst", "_autosummary/drift.util.rst", "_autosummary/drift.util.blockla.rst", "_autosummary/drift.util.plotutil.rst", "_autosummary/drift.util.util.rst", "index.rst", "overview.rst", "reference.rst"], "indexentries": {"_foreground_regulariser (drift.core.kltransform.kltransform attribute)": [[4, "drift.core.kltransform.KLTransform._foreground_regulariser", false]], "accuracy_boost (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.accuracy_boost", false]], "apply_config() (drift.core.manager.productmanager method)": [[5, "drift.core.manager.ProductManager.apply_config", false]], "auto_correlations (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.auto_correlations", false]], "bandtype (drift.core.psestimation.psestimation attribute)": [[6, "drift.core.psestimation.PSEstimation.bandtype", false]], "baselines (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.baselines", false]], "beam() (drift.core.telescope.unpolarisedtelescope method)": [[9, "drift.core.telescope.UnpolarisedTelescope.beam", false]], "beam() (drift.telescope.cylinder.unpolarisedcylindertelescope method)": [[17, "drift.telescope.cylinder.UnpolarisedCylinderTelescope.beam", false]], "beam() (drift.telescope.disharray.disharray method)": [[18, "drift.telescope.disharray.DishArray.beam", false]], "beam() (drift.telescope.focalplane.focalplanearray method)": [[20, "drift.telescope.focalplane.FocalPlaneArray.beam", false]], "beam() (drift.telescope.gmrt.gmrtarray method)": [[21, "drift.telescope.gmrt.GmrtArray.beam", false]], "beam() (drift.telescope.oldcylinder.unpolarisedcylindertelescope method)": [[22, "drift.telescope.oldcylinder.UnpolarisedCylinderTelescope.beam", false]], "beam() (drift.telescope.restrictedcylinder.restrictedcylinder method)": [[23, "drift.telescope.restrictedcylinder.RestrictedCylinder.beam", false]], "beam_amp() (in module drift.telescope.cylbeam)": [[16, "drift.telescope.cylbeam.beam_amp", false]], "beam_cache_size (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.beam_cache_size", false]], "beam_circular() (in module drift.telescope.disharray)": [[18, "drift.telescope.disharray.beam_circular", false]], "beam_circular() (in module drift.telescope.focalplane)": [[20, "drift.telescope.focalplane.beam_circular", false]], "beam_circular() (in module drift.telescope.gmrt)": [[21, "drift.telescope.gmrt.beam_circular", false]], "beam_dipole() (in module drift.telescope.cylbeam)": [[16, "drift.telescope.cylbeam.beam_dipole", false]], "beam_m() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.beam_m", false]], "beam_singularvalues() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.beam_singularvalues", false]], "beam_svd() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.beam_svd", false]], "beam_svd() (drift.core.beamtransfer.beamtransfernosvd method)": [[1, "drift.core.beamtransfer.BeamTransferNoSVD.beam_svd", false]], "beam_ut() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.beam_ut", false]], "beam_x() (in module drift.telescope.cylbeam)": [[16, "drift.telescope.cylbeam.beam_x", false]], "beam_y() (in module drift.telescope.cylbeam)": [[16, "drift.telescope.cylbeam.beam_y", false]], "beamclass (drift.core.telescope.simplepolarisedtelescope property)": [[9, "drift.core.telescope.SimplePolarisedTelescope.beamclass", false]], "beamclass (drift.core.telescope.simpleunpolarisedtelescope property)": [[9, "drift.core.telescope.SimpleUnpolarisedTelescope.beamclass", false]], "beamclass (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.beamclass", false]], "beamclass (drift.telescope.exotic_cylinder.cylinderperturbed property)": [[19, "drift.telescope.exotic_cylinder.CylinderPerturbed.beamclass", false]], "beamtransfer (class in drift.core.beamtransfer)": [[1, "drift.core.beamtransfer.BeamTransfer", false]], "beamtransferfullsvd (class in drift.core.beamtransfer)": [[1, "drift.core.beamtransfer.BeamTransferFullSVD", false]], "beamtransfernosvd (class in drift.core.beamtransfer)": [[1, "drift.core.beamtransfer.BeamTransferNoSVD", false]], "beamtransfertempsvd (class in drift.core.beamtransfer)": [[1, "drift.core.beamtransfer.BeamTransferTempSVD", false]], "beamx() (drift.core.telescope.simplepolarisedtelescope method)": [[9, "drift.core.telescope.SimplePolarisedTelescope.beamx", false]], "beamx() (drift.telescope.cylinder.polarisedcylindertelescope method)": [[17, "drift.telescope.cylinder.PolarisedCylinderTelescope.beamx", false]], "beamx() (drift.telescope.disharray.disharray method)": [[18, "drift.telescope.disharray.DishArray.beamx", false]], "beamx() (drift.telescope.exotic_cylinder.cylinderperturbed method)": [[19, "drift.telescope.exotic_cylinder.CylinderPerturbed.beamx", false]], "beamx() (drift.telescope.gmrt.gmrtarray method)": [[21, "drift.telescope.gmrt.GmrtArray.beamx", false]], "beamx() (drift.telescope.oldcylinder.polarisedcylindertelescope method)": [[22, "drift.telescope.oldcylinder.PolarisedCylinderTelescope.beamx", false]], "beamx() (drift.telescope.restrictedcylinder.restrictedpolarisedcylinder method)": [[23, "drift.telescope.restrictedcylinder.RestrictedPolarisedCylinder.beamx", false]], "beamy() (drift.core.telescope.simplepolarisedtelescope method)": [[9, "drift.core.telescope.SimplePolarisedTelescope.beamy", false]], "beamy() (drift.telescope.cylinder.polarisedcylindertelescope method)": [[17, "drift.telescope.cylinder.PolarisedCylinderTelescope.beamy", false]], "beamy() (drift.telescope.disharray.disharray method)": [[18, "drift.telescope.disharray.DishArray.beamy", false]], "beamy() (drift.telescope.exotic_cylinder.cylinderperturbed method)": [[19, "drift.telescope.exotic_cylinder.CylinderPerturbed.beamy", false]], "beamy() (drift.telescope.gmrt.gmrtarray method)": [[21, "drift.telescope.gmrt.GmrtArray.beamy", false]], "beamy() (drift.telescope.oldcylinder.polarisedcylindertelescope method)": [[22, "drift.telescope.oldcylinder.PolarisedCylinderTelescope.beamy", false]], "beamy() (drift.telescope.restrictedcylinder.restrictedpolarisedcylinder method)": [[23, "drift.telescope.restrictedcylinder.RestrictedPolarisedCylinder.beamy", false]], "block_root() (in module drift.core.psmc)": [[7, "drift.core.psmc.block_root", false]], "cache_last() (in module drift.util.util)": [[27, "drift.util.util.cache_last", false]], "cacheproj() (drift.core.psestimation.psexact method)": [[6, "drift.core.psestimation.PSExact.cacheproj", false]], "calculate_feedpairs() (drift.core.telescope.transittelescope method)": [[9, "drift.core.telescope.TransitTelescope.calculate_feedpairs", false]], "channel_bin (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.channel_bin", false]], "channel_list (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.channel_list", false]], "channel_range (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.channel_range", false]], "chunk_cache_size (drift.core.beamtransfer.beamtransfer attribute)": [[1, "drift.core.beamtransfer.BeamTransfer.chunk_cache_size", false]], "crosspower (class in drift.core.crosspower)": [[2, "drift.core.crosspower.CrossPower", false]], "cylinder_beam() (in module drift.core.visibility)": [[10, "drift.core.visibility.cylinder_beam", false]], "cylinder_width (drift.telescope.cylinder.cylindertelescope attribute)": [[17, "drift.telescope.cylinder.CylinderTelescope.cylinder_width", false]], "cylinder_width (drift.telescope.oldcylinder.cylindertelescope attribute)": [[22, "drift.telescope.oldcylinder.CylinderTelescope.cylinder_width", false]], "cylinderextra (class in drift.telescope.exotic_cylinder)": [[19, "drift.telescope.exotic_cylinder.CylinderExtra", false]], "cylinderperturbed (class in drift.telescope.exotic_cylinder)": [[19, "drift.telescope.exotic_cylinder.CylinderPerturbed", false]], "cylindershift (class in drift.telescope.exotic_cylinder)": [[19, "drift.telescope.exotic_cylinder.CylinderShift", false]], "cylindertelescope (class in drift.telescope.cylinder)": [[17, "drift.telescope.cylinder.CylinderTelescope", false]], "cylindertelescope (class in drift.telescope.oldcylinder)": [[22, "drift.telescope.oldcylinder.CylinderTelescope", false]], "cylspacing (drift.telescope.cylinder.cylindertelescope attribute)": [[17, "drift.telescope.cylinder.CylinderTelescope.cylspacing", false]], "cylspacing (drift.telescope.oldcylinder.cylindertelescope attribute)": [[22, "drift.telescope.oldcylinder.CylinderTelescope.cylspacing", false]], "decorrelate_ps() (in module drift.core.psestimation)": [[6, "drift.core.psestimation.decorrelate_ps", false]], "decorrelate_ps_file() (in module drift.core.psestimation)": [[6, "drift.core.psestimation.decorrelate_ps_file", false]], "delbands() (drift.core.psestimation.psestimation method)": [[6, "drift.core.psestimation.PSEstimation.delbands", false]], "delproj() (drift.core.psestimation.psexact method)": [[6, "drift.core.psestimation.PSExact.delproj", false]], "dish_width (drift.telescope.disharray.disharray attribute)": [[18, "drift.telescope.disharray.DishArray.dish_width", false]], "dish_width (drift.telescope.gmrt.gmrtarray attribute)": [[21, "drift.telescope.gmrt.GmrtArray.dish_width", false]], "disharray (class in drift.telescope.disharray)": [[18, "drift.telescope.disharray.DishArray", false]], "doublekl (class in drift.core.doublekl)": [[3, "drift.core.doublekl.DoubleKL", false]], "drift": [[30, "module-drift", false]], "drift.core": [[0, "module-drift.core", false]], "drift.core.beamtransfer": [[1, "module-drift.core.beamtransfer", false]], "drift.core.crosspower": [[2, "module-drift.core.crosspower", false]], "drift.core.doublekl": [[3, "module-drift.core.doublekl", false]], "drift.core.kltransform": [[4, "module-drift.core.kltransform", false]], "drift.core.manager": [[5, "module-drift.core.manager", false]], "drift.core.psestimation": [[6, "module-drift.core.psestimation", false]], "drift.core.psmc": [[7, "module-drift.core.psmc", false]], "drift.core.skymodel": [[8, "module-drift.core.skymodel", false]], "drift.core.telescope": [[9, "module-drift.core.telescope", false]], "drift.core.visibility": [[10, "module-drift.core.visibility", false]], "drift.pipeline": [[11, "module-drift.pipeline", false]], "drift.pipeline.pipeline": [[12, "module-drift.pipeline.pipeline", false]], "drift.pipeline.timestream": [[13, "module-drift.pipeline.timestream", false]], "drift.scripts": [[14, "module-drift.scripts", false]], "drift.telescope": [[15, "module-drift.telescope", false]], "drift.telescope.cylbeam": [[16, "module-drift.telescope.cylbeam", false]], "drift.telescope.cylinder": [[17, "module-drift.telescope.cylinder", false]], "drift.telescope.disharray": [[18, "module-drift.telescope.disharray", false]], "drift.telescope.exotic_cylinder": [[19, "module-drift.telescope.exotic_cylinder", false]], "drift.telescope.focalplane": [[20, "module-drift.telescope.focalplane", false]], "drift.telescope.gmrt": [[21, "module-drift.telescope.gmrt", false]], "drift.telescope.oldcylinder": [[22, "module-drift.telescope.oldcylinder", false]], "drift.telescope.restrictedcylinder": [[23, "module-drift.telescope.restrictedcylinder", false]], "drift.util": [[24, "module-drift.util", false]], "drift.util.blockla": [[25, "module-drift.util.blockla", false]], "drift.util.plotutil": [[26, "module-drift.util.plotutil", false]], "drift.util.util": [[27, "module-drift.util.util", false]], "eigh_gen() (in module drift.core.kltransform)": [[4, "drift.core.kltransform.eigh_gen", false]], "evals_all() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.evals_all", false]], "evals_m() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.evals_m", false]], "feed_positions_cylinder() (drift.telescope.cylinder.cylindertelescope method)": [[17, "drift.telescope.cylinder.CylinderTelescope.feed_positions_cylinder", false]], "feed_positions_cylinder() (drift.telescope.exotic_cylinder.cylinderextra method)": [[19, "drift.telescope.exotic_cylinder.CylinderExtra.feed_positions_cylinder", false]], "feed_positions_cylinder() (drift.telescope.exotic_cylinder.cylindershift method)": [[19, "drift.telescope.exotic_cylinder.CylinderShift.feed_positions_cylinder", false]], "feed_positions_cylinder() (drift.telescope.exotic_cylinder.gradientcylinder method)": [[19, "drift.telescope.exotic_cylinder.GradientCylinder.feed_positions_cylinder", false]], "feed_positions_cylinder() (drift.telescope.exotic_cylinder.randomcylinder method)": [[19, "drift.telescope.exotic_cylinder.RandomCylinder.feed_positions_cylinder", false]], "feed_positions_cylinder() (drift.telescope.oldcylinder.cylindertelescope method)": [[22, "drift.telescope.oldcylinder.CylinderTelescope.feed_positions_cylinder", false]], "feed_positions_cylinder() (drift.telescope.restrictedcylinder.restrictedextra method)": [[23, "drift.telescope.restrictedcylinder.RestrictedExtra.feed_positions_cylinder", false]], "feed_spacing (drift.telescope.cylinder.cylindertelescope attribute)": [[17, "drift.telescope.cylinder.CylinderTelescope.feed_spacing", false]], "feed_spacing (drift.telescope.oldcylinder.cylindertelescope attribute)": [[22, "drift.telescope.oldcylinder.CylinderTelescope.feed_spacing", false]], "feedconj (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.feedconj", false]], "feedmap (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.feedmap", false]], "feedmask (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.feedmask", false]], "feedpositions (drift.core.telescope.simplepolarisedtelescope property)": [[9, "drift.core.telescope.SimplePolarisedTelescope.feedpositions", false]], "feedpositions (drift.core.telescope.simpleunpolarisedtelescope property)": [[9, "drift.core.telescope.SimpleUnpolarisedTelescope.feedpositions", false]], "feedpositions (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.feedpositions", false]], "feedpositions (drift.telescope.disharray.disharray property)": [[18, "drift.telescope.disharray.DishArray.feedpositions", false]], "feedpositions (drift.telescope.exotic_cylinder.cylinderperturbed property)": [[19, "drift.telescope.exotic_cylinder.CylinderPerturbed.feedpositions", false]], "feedpositions (drift.telescope.focalplane.focalplanearray property)": [[20, "drift.telescope.focalplane.FocalPlaneArray.feedpositions", false]], "fisher_bias_m() (drift.core.psestimation.psestimation method)": [[6, "drift.core.psestimation.PSEstimation.fisher_bias_m", false]], "fisher_file() (drift.core.psestimation.psestimation method)": [[6, "drift.core.psestimation.PSEstimation.fisher_file", false]], "fixpath() (in module drift.pipeline.pipeline)": [[12, "drift.pipeline.pipeline.fixpath", false]], "focalplanearray (class in drift.telescope.focalplane)": [[20, "drift.telescope.focalplane.FocalPlaneArray", false]], "foreground() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.foreground", false]], "foreground_threshold (drift.core.doublekl.doublekl attribute)": [[3, "drift.core.doublekl.DoubleKL.foreground_threshold", false]], "fraunhofer_cylinder() (in module drift.telescope.cylbeam)": [[16, "drift.telescope.cylbeam.fraunhofer_cylinder", false]], "freq_mode (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.freq_mode", false]], "frequencies (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.frequencies", false]], "from_config() (drift.core.manager.productmanager class method)": [[5, "drift.core.manager.ProductManager.from_config", false]], "fwhm_e (drift.telescope.cylinder.cylindertelescope property)": [[17, "drift.telescope.cylinder.CylinderTelescope.fwhm_e", false]], "fwhm_h (drift.telescope.cylinder.cylindertelescope property)": [[17, "drift.telescope.cylinder.CylinderTelescope.fwhm_h", false]], "gen_sample() (drift.core.psmc.psmontecarlo method)": [[7, "drift.core.psmc.PSMonteCarlo.gen_sample", false]], "gen_vecs() (drift.core.psmc.psmontecarloalt method)": [[7, "drift.core.psmc.PSMonteCarloAlt.gen_vecs", false]], "genbands() (drift.core.psestimation.psestimation method)": [[6, "drift.core.psestimation.PSEstimation.genbands", false]], "generate() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.generate", false]], "generate() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.generate", false]], "generate() (drift.core.manager.productmanager method)": [[5, "drift.core.manager.ProductManager.generate", false]], "generate() (drift.core.psestimation.psestimation method)": [[6, "drift.core.psestimation.PSEstimation.generate", false]], "generate() (drift.pipeline.pipeline.pipelinemanager method)": [[12, "drift.pipeline.pipeline.PipelineManager.generate", false]], "generate_cache() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.generate_cache", false]], "generate_klmodes (drift.pipeline.pipeline.pipelinemanager attribute)": [[12, "drift.pipeline.pipeline.PipelineManager.generate_klmodes", false]], "generate_modes (drift.pipeline.pipeline.pipelinemanager attribute)": [[12, "drift.pipeline.pipeline.PipelineManager.generate_modes", false]], "generate_powerspectra (drift.pipeline.pipeline.pipelinemanager attribute)": [[12, "drift.pipeline.pipeline.PipelineManager.generate_powerspectra", false]], "getproj() (drift.core.psestimation.psexact method)": [[6, "drift.core.psestimation.PSExact.getproj", false]], "gmrtarray (class in drift.telescope.gmrt)": [[21, "drift.telescope.gmrt.GmrtArray", false]], "gmrtunpolarised (class in drift.telescope.gmrt)": [[21, "drift.telescope.gmrt.GmrtUnpolarised", false]], "gradientcylinder (class in drift.telescope.exotic_cylinder)": [[19, "drift.telescope.exotic_cylinder.GradientCylinder", false]], "horizon() (in module drift.core.visibility)": [[10, "drift.core.visibility.horizon", false]], "in_cylinder (drift.telescope.cylinder.cylindertelescope attribute)": [[17, "drift.telescope.cylinder.CylinderTelescope.in_cylinder", false]], "in_cylinder (drift.telescope.oldcylinder.cylindertelescope attribute)": [[22, "drift.telescope.oldcylinder.CylinderTelescope.in_cylinder", false]], "in_range() (in module drift.core.telescope)": [[9, "drift.core.telescope.in_range", false]], "included_baseline (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.included_baseline", false]], "included_freq (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.included_freq", false]], "included_pol (drift.core.telescope.polarisedtelescope attribute)": [[9, "drift.core.telescope.PolarisedTelescope.included_pol", false]], "included_pol (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.included_pol", false]], "index_map_prod (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.index_map_prod", false]], "index_map_stack (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.index_map_stack", false]], "input_index (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.input_index", false]], "intpattern() (in module drift.util.util)": [[27, "drift.util.util.intpattern", false]], "inv_gen() (in module drift.core.kltransform)": [[4, "drift.core.kltransform.inv_gen", false]], "invbeam_m() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.invbeam_m", false]], "invbeam_svd() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.invbeam_svd", false]], "inverse (drift.core.kltransform.kltransform attribute)": [[4, "drift.core.kltransform.KLTransform.inverse", false]], "invmodes_m() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.invmodes_m", false]], "klmodes (drift.pipeline.pipeline.pipelinemanager attribute)": [[12, "drift.pipeline.pipeline.PipelineManager.klmodes", false]], "kltransform (class in drift.core.kltransform)": [[4, "drift.core.kltransform.KLTransform", false]], "l_boost (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.l_boost", false]], "lmax (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.lmax", false]], "local_origin (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.local_origin", false]], "make_clzz() (drift.core.psestimation.psestimation method)": [[6, "drift.core.psestimation.PSEstimation.make_clzz", false]], "makeproj() (drift.core.psestimation.psexact method)": [[6, "drift.core.psestimation.PSExact.makeproj", false]], "max_lm() (in module drift.core.telescope)": [[9, "drift.core.telescope.max_lm", false]], "mem_chunk (drift.core.beamtransfer.beamtransfer attribute)": [[1, "drift.core.beamtransfer.BeamTransfer.mem_chunk", false]], "mmax (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.mmax", false]], "modes_m() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.modes_m", false]], "module": [[0, "module-drift.core", false], [1, "module-drift.core.beamtransfer", false], [2, "module-drift.core.crosspower", false], [3, "module-drift.core.doublekl", false], [4, "module-drift.core.kltransform", false], [5, "module-drift.core.manager", false], [6, "module-drift.core.psestimation", false], [7, "module-drift.core.psmc", false], [8, "module-drift.core.skymodel", false], [9, "module-drift.core.telescope", false], [10, "module-drift.core.visibility", false], [11, "module-drift.pipeline", false], [12, "module-drift.pipeline.pipeline", false], [13, "module-drift.pipeline.timestream", false], [14, "module-drift.scripts", false], [15, "module-drift.telescope", false], [16, "module-drift.telescope.cylbeam", false], [17, "module-drift.telescope.cylinder", false], [18, "module-drift.telescope.disharray", false], [19, "module-drift.telescope.exotic_cylinder", false], [20, "module-drift.telescope.focalplane", false], [21, "module-drift.telescope.gmrt", false], [22, "module-drift.telescope.oldcylinder", false], [23, "module-drift.telescope.restrictedcylinder", false], [24, "module-drift.util", false], [25, "module-drift.util.blockla", false], [26, "module-drift.util.plotutil", false], [27, "module-drift.util.util", false], [30, "module-drift", false]], "multiply_dm_dm() (in module drift.util.blockla)": [[25, "drift.util.blockla.multiply_dm_dm", false]], "multiply_dm_v() (in module drift.util.blockla)": [[25, "drift.util.blockla.multiply_dm_v", false]], "natpattern() (in module drift.util.util)": [[27, "drift.util.util.natpattern", false]], "nbands (drift.core.psestimation.psestimation property)": [[6, "drift.core.psestimation.PSEstimation.nbands", false]], "nbase (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.nbase", false]], "ndays (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.ndays", false]], "ndof() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.ndof", false]], "ndof() (drift.core.beamtransfer.beamtransfernosvd method)": [[1, "drift.core.beamtransfer.BeamTransferNoSVD.ndof", false]], "nfeed (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.nfeed", false]], "nfeed (drift.telescope.focalplane.focalplanearray property)": [[20, "drift.telescope.focalplane.FocalPlaneArray.nfeed", false]], "nfreq (drift.core.beamtransfer.beamtransfer property)": [[1, "drift.core.beamtransfer.BeamTransfer.nfreq", false]], "nfreq (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.nfreq", false]], "noisepower() (drift.core.telescope.transittelescope method)": [[9, "drift.core.telescope.TransitTelescope.noisepower", false]], "noisepower() (drift.core.telescope.unpolarisedtelescope method)": [[9, "drift.core.telescope.UnpolarisedTelescope.noisepower", false]], "npairs (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.npairs", false]], "nsamples (drift.core.psmc.psmontecarlo attribute)": [[7, "drift.core.psmc.PSMonteCarlo.nsamples", false]], "nsamples (drift.core.psmc.psmontecarloalt attribute)": [[7, "drift.core.psmc.PSMonteCarloAlt.nsamples", false]], "nsky (drift.core.beamtransfer.beamtransfer property)": [[1, "drift.core.beamtransfer.BeamTransfer.nsky", false]], "nswitch (drift.core.psmc.psmontecarloalt attribute)": [[7, "drift.core.psmc.PSMonteCarloAlt.nswitch", false]], "ntel (drift.core.beamtransfer.beamtransfer property)": [[1, "drift.core.beamtransfer.BeamTransfer.ntel", false]], "num_cylinders (drift.telescope.cylinder.cylindertelescope attribute)": [[17, "drift.telescope.cylinder.CylinderTelescope.num_cylinders", false]], "num_cylinders (drift.telescope.oldcylinder.cylindertelescope attribute)": [[22, "drift.telescope.oldcylinder.CylinderTelescope.num_cylinders", false]], "num_evals() (drift.core.psestimation.psestimation method)": [[6, "drift.core.psestimation.PSEstimation.num_evals", false]], "num_feeds (drift.telescope.cylinder.cylindertelescope attribute)": [[17, "drift.telescope.cylinder.CylinderTelescope.num_feeds", false]], "num_feeds (drift.telescope.oldcylinder.cylindertelescope attribute)": [[22, "drift.telescope.oldcylinder.CylinderTelescope.num_feeds", false]], "num_freq (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.num_freq", false]], "num_pol_sky (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.num_pol_sky", false]], "output_directory (drift.pipeline.pipeline.pipelinemanager attribute)": [[12, "drift.pipeline.pipeline.PipelineManager.output_directory", false]], "pinv_dm() (in module drift.util.blockla)": [[25, "drift.util.blockla.pinv_dm", false]], "pipelinemanager (class in drift.pipeline.pipeline)": [[12, "drift.pipeline.pipeline.PipelineManager", false]], "pointsources (class in drift.core.skymodel)": [[8, "drift.core.skymodel.PointSources", false]], "pol_iqu() (in module drift.core.visibility)": [[10, "drift.core.visibility.pol_IQU", false]], "polarisation (drift.core.telescope.polarisedtelescope property)": [[9, "drift.core.telescope.PolarisedTelescope.polarisation", false]], "polarisation (drift.core.telescope.simplepolarisedtelescope property)": [[9, "drift.core.telescope.SimplePolarisedTelescope.polarisation", false]], "polarisedcylindertelescope (class in drift.telescope.cylinder)": [[17, "drift.telescope.cylinder.PolarisedCylinderTelescope", false]], "polarisedcylindertelescope (class in drift.telescope.oldcylinder)": [[22, "drift.telescope.oldcylinder.PolarisedCylinderTelescope", false]], "polarisedtelescope (class in drift.core.telescope)": [[9, "drift.core.telescope.PolarisedTelescope", false]], "polpattern() (in module drift.telescope.cylbeam)": [[16, "drift.telescope.cylbeam.polpattern", false]], "polsvcut (drift.core.beamtransfer.beamtransfer attribute)": [[1, "drift.core.beamtransfer.BeamTransfer.polsvcut", false]], "powerspectra (drift.pipeline.pipeline.pipelinemanager attribute)": [[12, "drift.pipeline.pipeline.PipelineManager.powerspectra", false]], "prodstack (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.prodstack", false]], "product_directory (drift.pipeline.pipeline.pipelinemanager attribute)": [[12, "drift.pipeline.pipeline.PipelineManager.product_directory", false]], "productmanager (class in drift.core.manager)": [[5, "drift.core.manager.ProductManager", false]], "project_matrix_diagonal_telescope_to_svd() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.project_matrix_diagonal_telescope_to_svd", false]], "project_matrix_diagonal_telescope_to_svd() (drift.core.beamtransfer.beamtransfernosvd method)": [[1, "drift.core.beamtransfer.BeamTransferNoSVD.project_matrix_diagonal_telescope_to_svd", false]], "project_matrix_forward() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.project_matrix_forward", false]], "project_matrix_sky_to_kl() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.project_matrix_sky_to_kl", false]], "project_matrix_sky_to_svd() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.project_matrix_sky_to_svd", false]], "project_matrix_sky_to_svd() (drift.core.beamtransfer.beamtransfernosvd method)": [[1, "drift.core.beamtransfer.BeamTransferNoSVD.project_matrix_sky_to_svd", false]], "project_matrix_sky_to_telescope() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.project_matrix_sky_to_telescope", false]], "project_matrix_svd_to_kl() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.project_matrix_svd_to_kl", false]], "project_vector_backward() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.project_vector_backward", false]], "project_vector_forward() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.project_vector_forward", false]], "project_vector_kl_to_svd() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.project_vector_kl_to_svd", false]], "project_vector_sky_to_kl() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.project_vector_sky_to_kl", false]], "project_vector_sky_to_svd() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.project_vector_sky_to_svd", false]], "project_vector_sky_to_svd() (drift.core.beamtransfer.beamtransfernosvd method)": [[1, "drift.core.beamtransfer.BeamTransferNoSVD.project_vector_sky_to_svd", false]], "project_vector_sky_to_telescope() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.project_vector_sky_to_telescope", false]], "project_vector_svd_to_kl() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.project_vector_svd_to_kl", false]], "project_vector_svd_to_sky() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.project_vector_svd_to_sky", false]], "project_vector_svd_to_telescope() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.project_vector_svd_to_telescope", false]], "project_vector_telescope_to_sky() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.project_vector_telescope_to_sky", false]], "project_vector_telescope_to_svd() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.project_vector_telescope_to_svd", false]], "project_vector_telescope_to_svd() (drift.core.beamtransfer.beamtransfernosvd method)": [[1, "drift.core.beamtransfer.BeamTransferNoSVD.project_vector_telescope_to_svd", false]], "psestimation (class in drift.core.psestimation)": [[6, "drift.core.psestimation.PSEstimation", false]], "psexact (class in drift.core.psestimation)": [[6, "drift.core.psestimation.PSExact", false]], "psmontecarlo (class in drift.core.psmc)": [[7, "drift.core.psmc.PSMonteCarlo", false]], "psmontecarloalt (class in drift.core.psmc)": [[7, "drift.core.psmc.PSMonteCarloAlt", false]], "q_estimator() (drift.core.psestimation.psestimation method)": [[6, "drift.core.psestimation.PSEstimation.q_estimator", false]], "randomcylinder (class in drift.telescope.exotic_cylinder)": [[19, "drift.telescope.exotic_cylinder.RandomCylinder", false]], "redundancy (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.redundancy", false]], "regrid_polar() (in module drift.util.plotutil)": [[26, "drift.util.plotutil.regrid_polar", false]], "restrictedbeam (class in drift.telescope.restrictedcylinder)": [[23, "drift.telescope.restrictedcylinder.RestrictedBeam", false]], "restrictedcylinder (class in drift.telescope.restrictedcylinder)": [[23, "drift.telescope.restrictedcylinder.RestrictedCylinder", false]], "restrictedextra (class in drift.telescope.restrictedcylinder)": [[23, "drift.telescope.restrictedcylinder.RestrictedExtra", false]], "restrictedpolarisedcylinder (class in drift.telescope.restrictedcylinder)": [[23, "drift.telescope.restrictedcylinder.RestrictedPolarisedCylinder", false]], "reverse_map_stack (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.reverse_map_stack", false]], "run() (drift.pipeline.pipeline.pipelinemanager method)": [[12, "drift.pipeline.pipeline.PipelineManager.run", false]], "signal() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.signal", false]], "sim_skyvec() (in module drift.core.psmc)": [[7, "drift.core.psmc.sim_skyvec", false]], "simplepolarisedtelescope (class in drift.core.telescope)": [[9, "drift.core.telescope.SimplePolarisedTelescope", false]], "simpleunpolarisedtelescope (class in drift.core.telescope)": [[9, "drift.core.telescope.SimpleUnpolarisedTelescope", false]], "simulate() (in module drift.pipeline.timestream)": [[13, "drift.pipeline.timestream.simulate", false]], "skip_baselines (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.skip_baselines", false]], "skip_freq (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.skip_freq", false]], "skip_pol (drift.core.telescope.polarisedtelescope attribute)": [[9, "drift.core.telescope.PolarisedTelescope.skip_pol", false]], "skip_v (drift.core.telescope.polarisedtelescope attribute)": [[9, "drift.core.telescope.PolarisedTelescope.skip_V", false]], "skymodes_m() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.skymodes_m", false]], "sn_covariance() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.sn_covariance", false]], "subset (drift.core.kltransform.kltransform attribute)": [[4, "drift.core.kltransform.KLTransform.subset", false]], "svcut (drift.core.beamtransfer.beamtransfer attribute)": [[1, "drift.core.beamtransfer.BeamTransfer.svcut", false]], "svd_all() (drift.core.beamtransfer.beamtransfer method)": [[1, "drift.core.beamtransfer.BeamTransfer.svd_all", false]], "svd_dm() (in module drift.util.blockla)": [[25, "drift.util.blockla.svd_dm", false]], "svd_gen() (in module drift.core.beamtransfer)": [[1, "drift.core.beamtransfer.svd_gen", false]], "svd_len (drift.core.beamtransfer.beamtransfer property)": [[1, "drift.core.beamtransfer.BeamTransfer.svd_len", false]], "svd_len (drift.core.beamtransfer.beamtransferfullsvd property)": [[1, "drift.core.beamtransfer.BeamTransferFullSVD.svd_len", false]], "threshold (drift.core.kltransform.kltransform attribute)": [[4, "drift.core.kltransform.KLTransform.threshold", false]], "timestream_directory (drift.pipeline.pipeline.pipelinemanager attribute)": [[12, "drift.pipeline.pipeline.PipelineManager.timestream_directory", false]], "touching (drift.telescope.cylinder.cylindertelescope attribute)": [[17, "drift.telescope.cylinder.CylinderTelescope.touching", false]], "touching (drift.telescope.oldcylinder.cylindertelescope attribute)": [[22, "drift.telescope.oldcylinder.CylinderTelescope.touching", false]], "transfer_for_baseline() (drift.core.telescope.transittelescope method)": [[9, "drift.core.telescope.TransitTelescope.transfer_for_baseline", false]], "transfer_for_frequency() (drift.core.telescope.transittelescope method)": [[9, "drift.core.telescope.TransitTelescope.transfer_for_frequency", false]], "transfer_matrices() (drift.core.telescope.transittelescope method)": [[9, "drift.core.telescope.TransitTelescope.transfer_matrices", false]], "transform_save() (drift.core.kltransform.kltransform method)": [[4, "drift.core.kltransform.KLTransform.transform_save", false]], "transittelescope (class in drift.core.telescope)": [[9, "drift.core.telescope.TransitTelescope", false]], "truncate (drift.core.beamtransfer.beamtransfer attribute)": [[1, "drift.core.beamtransfer.BeamTransfer.truncate", false]], "truncate_maxl (drift.core.beamtransfer.beamtransfer attribute)": [[1, "drift.core.beamtransfer.BeamTransfer.truncate_maxl", false]], "truncate_rel (drift.core.beamtransfer.beamtransfer attribute)": [[1, "drift.core.beamtransfer.BeamTransfer.truncate_rel", false]], "tsys() (drift.core.telescope.transittelescope method)": [[9, "drift.core.telescope.TransitTelescope.tsys", false]], "tsys_flat (drift.core.telescope.transittelescope attribute)": [[9, "drift.core.telescope.TransitTelescope.tsys_flat", false]], "u_width (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.u_width", false]], "u_width (drift.telescope.cylinder.cylindertelescope property)": [[17, "drift.telescope.cylinder.CylinderTelescope.u_width", false]], "u_width (drift.telescope.disharray.disharray property)": [[18, "drift.telescope.disharray.DishArray.u_width", false]], "u_width (drift.telescope.focalplane.focalplanearray property)": [[20, "drift.telescope.focalplane.FocalPlaneArray.u_width", false]], "u_width (drift.telescope.gmrt.gmrtarray property)": [[21, "drift.telescope.gmrt.GmrtArray.u_width", false]], "u_width (drift.telescope.oldcylinder.cylindertelescope property)": [[22, "drift.telescope.oldcylinder.CylinderTelescope.u_width", false]], "uniquepairs (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.uniquepairs", false]], "unpolarisedcylindertelescope (class in drift.telescope.cylinder)": [[17, "drift.telescope.cylinder.UnpolarisedCylinderTelescope", false]], "unpolarisedcylindertelescope (class in drift.telescope.oldcylinder)": [[22, "drift.telescope.oldcylinder.UnpolarisedCylinderTelescope", false]], "unpolarisedtelescope (class in drift.core.telescope)": [[9, "drift.core.telescope.UnpolarisedTelescope", false]], "uv_plane_cart() (in module drift.core.visibility)": [[10, "drift.core.visibility.uv_plane_cart", false]], "v_width (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.v_width", false]], "v_width (drift.telescope.cylinder.cylindertelescope property)": [[17, "drift.telescope.cylinder.CylinderTelescope.v_width", false]], "v_width (drift.telescope.disharray.disharray property)": [[18, "drift.telescope.disharray.DishArray.v_width", false]], "v_width (drift.telescope.focalplane.focalplanearray property)": [[20, "drift.telescope.focalplane.FocalPlaneArray.v_width", false]], "v_width (drift.telescope.gmrt.gmrtarray property)": [[21, "drift.telescope.gmrt.GmrtArray.v_width", false]], "v_width (drift.telescope.oldcylinder.cylindertelescope property)": [[22, "drift.telescope.oldcylinder.CylinderTelescope.v_width", false]], "wavelengths (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.wavelengths", false]], "zenith (drift.core.telescope.transittelescope property)": [[9, "drift.core.telescope.TransitTelescope.zenith", false]]}, "objects": {"": [[30, 0, 0, "-", "drift"]], "drift": [[0, 0, 0, "-", "core"], [11, 0, 0, "-", "pipeline"], [14, 0, 0, "-", "scripts"], [15, 0, 0, "-", "telescope"], [24, 0, 0, "-", "util"]], "drift.core": [[1, 0, 0, "-", "beamtransfer"], [2, 0, 0, "-", "crosspower"], [3, 0, 0, "-", "doublekl"], [4, 0, 0, "-", "kltransform"], [5, 0, 0, "-", "manager"], [6, 0, 0, "-", "psestimation"], [7, 0, 0, "-", "psmc"], [8, 0, 0, "-", "skymodel"], [9, 0, 0, "-", "telescope"], [10, 0, 0, "-", "visibility"]], "drift.core.beamtransfer": [[1, 1, 1, "", "BeamTransfer"], [1, 1, 1, "", "BeamTransferFullSVD"], [1, 1, 1, "", "BeamTransferNoSVD"], [1, 1, 1, "", "BeamTransferTempSVD"], [1, 5, 1, "", "svd_gen"]], "drift.core.beamtransfer.BeamTransfer": [[1, 2, 1, "", "beam_m"], [1, 2, 1, "", "beam_singularvalues"], [1, 2, 1, "", "beam_svd"], [1, 2, 1, "", "beam_ut"], [1, 3, 1, "", "chunk_cache_size"], [1, 2, 1, "", "generate"], [1, 2, 1, "", "generate_cache"], [1, 2, 1, "", "invbeam_m"], [1, 2, 1, "", "invbeam_svd"], [1, 3, 1, "", "mem_chunk"], [1, 2, 1, "", "ndof"], [1, 4, 1, "", "nfreq"], [1, 4, 1, "", "nsky"], [1, 4, 1, "", "ntel"], [1, 3, 1, "", "polsvcut"], [1, 2, 1, "", "project_matrix_diagonal_telescope_to_svd"], [1, 2, 1, "", "project_matrix_forward"], [1, 2, 1, "", "project_matrix_sky_to_svd"], [1, 2, 1, "", "project_matrix_sky_to_telescope"], [1, 2, 1, "", "project_vector_backward"], [1, 2, 1, "", "project_vector_forward"], [1, 2, 1, "", "project_vector_sky_to_svd"], [1, 2, 1, "", "project_vector_sky_to_telescope"], [1, 2, 1, "", "project_vector_svd_to_sky"], [1, 2, 1, "", "project_vector_svd_to_telescope"], [1, 2, 1, "", "project_vector_telescope_to_sky"], [1, 2, 1, "", "project_vector_telescope_to_svd"], [1, 3, 1, "", "svcut"], [1, 2, 1, "", "svd_all"], [1, 4, 1, "", "svd_len"], [1, 3, 1, "", "truncate"], [1, 3, 1, "", "truncate_maxl"], [1, 3, 1, "", "truncate_rel"]], "drift.core.beamtransfer.BeamTransferFullSVD": [[1, 4, 1, "", "svd_len"]], "drift.core.beamtransfer.BeamTransferNoSVD": [[1, 2, 1, "", "beam_svd"], [1, 2, 1, "", "ndof"], [1, 2, 1, "", "project_matrix_diagonal_telescope_to_svd"], [1, 2, 1, "", "project_matrix_sky_to_svd"], [1, 2, 1, "", "project_vector_sky_to_svd"], [1, 2, 1, "", "project_vector_telescope_to_svd"]], "drift.core.crosspower": [[2, 1, 1, "", "CrossPower"]], "drift.core.doublekl": [[3, 1, 1, "", "DoubleKL"]], "drift.core.doublekl.DoubleKL": [[3, 3, 1, "", "foreground_threshold"]], "drift.core.kltransform": [[4, 1, 1, "", "KLTransform"], [4, 5, 1, "", "eigh_gen"], [4, 5, 1, "", "inv_gen"]], "drift.core.kltransform.KLTransform": [[4, 3, 1, "", "_foreground_regulariser"], [4, 2, 1, "", "evals_all"], [4, 2, 1, "", "evals_m"], [4, 2, 1, "", "foreground"], [4, 2, 1, "", "generate"], [4, 3, 1, "", "inverse"], [4, 2, 1, "", "invmodes_m"], [4, 2, 1, "", "modes_m"], [4, 2, 1, "", "project_matrix_sky_to_kl"], [4, 2, 1, "", "project_matrix_svd_to_kl"], [4, 2, 1, "", "project_vector_kl_to_svd"], [4, 2, 1, "", "project_vector_sky_to_kl"], [4, 2, 1, "", "project_vector_svd_to_kl"], [4, 2, 1, "", "signal"], [4, 2, 1, "", "skymodes_m"], [4, 2, 1, "", "sn_covariance"], [4, 3, 1, "", "subset"], [4, 3, 1, "", "threshold"], [4, 2, 1, "", "transform_save"]], "drift.core.manager": [[5, 1, 1, "", "ProductManager"]], "drift.core.manager.ProductManager": [[5, 2, 1, "", "apply_config"], [5, 2, 1, "", "from_config"], [5, 2, 1, "", "generate"]], "drift.core.psestimation": [[6, 1, 1, "", "PSEstimation"], [6, 1, 1, "", "PSExact"], [6, 5, 1, "", "decorrelate_ps"], [6, 5, 1, "", "decorrelate_ps_file"]], "drift.core.psestimation.PSEstimation": [[6, 3, 1, "", "bandtype"], [6, 2, 1, "", "delbands"], [6, 2, 1, "", "fisher_bias_m"], [6, 2, 1, "", "fisher_file"], [6, 2, 1, "", "genbands"], [6, 2, 1, "", "generate"], [6, 2, 1, "", "make_clzz"], [6, 4, 1, "", "nbands"], [6, 2, 1, "", "num_evals"], [6, 2, 1, "", "q_estimator"]], "drift.core.psestimation.PSExact": [[6, 2, 1, "", "cacheproj"], [6, 2, 1, "", "delproj"], [6, 2, 1, "", "getproj"], [6, 2, 1, "", "makeproj"]], "drift.core.psmc": [[7, 1, 1, "", "PSMonteCarlo"], [7, 1, 1, "", "PSMonteCarloAlt"], [7, 5, 1, "", "block_root"], [7, 5, 1, "", "sim_skyvec"]], "drift.core.psmc.PSMonteCarlo": [[7, 2, 1, "", "gen_sample"], [7, 3, 1, "", "nsamples"]], "drift.core.psmc.PSMonteCarloAlt": [[7, 2, 1, "", "gen_vecs"], [7, 3, 1, "", "nsamples"], [7, 3, 1, "", "nswitch"]], "drift.core.skymodel": [[8, 1, 1, "", "PointSources"]], "drift.core.telescope": [[9, 1, 1, "", "PolarisedTelescope"], [9, 1, 1, "", "SimplePolarisedTelescope"], [9, 1, 1, "", "SimpleUnpolarisedTelescope"], [9, 1, 1, "", "TransitTelescope"], [9, 1, 1, "", "UnpolarisedTelescope"], [9, 5, 1, "", "in_range"], [9, 5, 1, "", "max_lm"]], "drift.core.telescope.PolarisedTelescope": [[9, 3, 1, "", "included_pol"], [9, 4, 1, "", "polarisation"], [9, 3, 1, "", "skip_V"], [9, 3, 1, "", "skip_pol"]], "drift.core.telescope.SimplePolarisedTelescope": [[9, 4, 1, "", "beamclass"], [9, 2, 1, "", "beamx"], [9, 2, 1, "", "beamy"], [9, 4, 1, "", "feedpositions"], [9, 4, 1, "", "polarisation"]], "drift.core.telescope.SimpleUnpolarisedTelescope": [[9, 4, 1, "", "beamclass"], [9, 4, 1, "", "feedpositions"]], "drift.core.telescope.TransitTelescope": [[9, 3, 1, "", "accuracy_boost"], [9, 3, 1, "", "auto_correlations"], [9, 4, 1, "", "baselines"], [9, 3, 1, "", "beam_cache_size"], [9, 4, 1, "", "beamclass"], [9, 2, 1, "", "calculate_feedpairs"], [9, 3, 1, "", "channel_bin"], [9, 3, 1, "", "channel_list"], [9, 3, 1, "", "channel_range"], [9, 4, 1, "", "feedconj"], [9, 4, 1, "", "feedmap"], [9, 4, 1, "", "feedmask"], [9, 4, 1, "", "feedpositions"], [9, 3, 1, "", "freq_mode"], [9, 4, 1, "", "frequencies"], [9, 3, 1, "", "included_baseline"], [9, 3, 1, "", "included_freq"], [9, 3, 1, "", "included_pol"], [9, 3, 1, "", "index_map_prod"], [9, 3, 1, "", "index_map_stack"], [9, 4, 1, "", "input_index"], [9, 3, 1, "", "l_boost"], [9, 4, 1, "", "lmax"], [9, 3, 1, "", "local_origin"], [9, 4, 1, "", "mmax"], [9, 4, 1, "", "nbase"], [9, 3, 1, "", "ndays"], [9, 4, 1, "", "nfeed"], [9, 4, 1, "", "nfreq"], [9, 2, 1, "", "noisepower"], [9, 4, 1, "", "npairs"], [9, 3, 1, "", "num_freq"], [9, 4, 1, "", "num_pol_sky"], [9, 3, 1, "", "prodstack"], [9, 4, 1, "", "redundancy"], [9, 3, 1, "", "reverse_map_stack"], [9, 3, 1, "", "skip_baselines"], [9, 3, 1, "", "skip_freq"], [9, 2, 1, "", "transfer_for_baseline"], [9, 2, 1, "", "transfer_for_frequency"], [9, 2, 1, "", "transfer_matrices"], [9, 2, 1, "", "tsys"], [9, 3, 1, "", "tsys_flat"], [9, 4, 1, "", "u_width"], [9, 4, 1, "", "uniquepairs"], [9, 4, 1, "", "v_width"], [9, 4, 1, "", "wavelengths"], [9, 4, 1, "", "zenith"]], "drift.core.telescope.UnpolarisedTelescope": [[9, 2, 1, "", "beam"], [9, 2, 1, "", "noisepower"]], "drift.core.visibility": [[10, 5, 1, "", "cylinder_beam"], [10, 5, 1, "", "horizon"], [10, 5, 1, "", "pol_IQU"], [10, 5, 1, "", "uv_plane_cart"]], "drift.pipeline": [[12, 0, 0, "-", "pipeline"], [13, 0, 0, "-", "timestream"]], "drift.pipeline.pipeline": [[12, 1, 1, "", "PipelineManager"], [12, 5, 1, "", "fixpath"]], "drift.pipeline.pipeline.PipelineManager": [[12, 2, 1, "", "generate"], [12, 3, 1, "", "generate_klmodes"], [12, 3, 1, "", "generate_modes"], [12, 3, 1, "", "generate_powerspectra"], [12, 3, 1, "", "klmodes"], [12, 3, 1, "", "output_directory"], [12, 3, 1, "", "powerspectra"], [12, 3, 1, "", "product_directory"], [12, 2, 1, "", "run"], [12, 3, 1, "", "timestream_directory"]], "drift.pipeline.timestream": [[13, 5, 1, "", "simulate"]], "drift.telescope": [[16, 0, 0, "-", "cylbeam"], [17, 0, 0, "-", "cylinder"], [18, 0, 0, "-", "disharray"], [19, 0, 0, "-", "exotic_cylinder"], [20, 0, 0, "-", "focalplane"], [21, 0, 0, "-", "gmrt"], [22, 0, 0, "-", "oldcylinder"], [23, 0, 0, "-", "restrictedcylinder"]], "drift.telescope.cylbeam": [[16, 5, 1, "", "beam_amp"], [16, 5, 1, "", "beam_dipole"], [16, 5, 1, "", "beam_x"], [16, 5, 1, "", "beam_y"], [16, 5, 1, "", "fraunhofer_cylinder"], [16, 5, 1, "", "polpattern"]], "drift.telescope.cylinder": [[17, 1, 1, "", "CylinderTelescope"], [17, 1, 1, "", "PolarisedCylinderTelescope"], [17, 1, 1, "", "UnpolarisedCylinderTelescope"]], "drift.telescope.cylinder.CylinderTelescope": [[17, 3, 1, "", "cylinder_width"], [17, 3, 1, "", "cylspacing"], [17, 2, 1, "", "feed_positions_cylinder"], [17, 3, 1, "", "feed_spacing"], [17, 4, 1, "", "fwhm_e"], [17, 4, 1, "", "fwhm_h"], [17, 3, 1, "", "in_cylinder"], [17, 3, 1, "", "num_cylinders"], [17, 3, 1, "", "num_feeds"], [17, 3, 1, "", "touching"], [17, 4, 1, "", "u_width"], [17, 4, 1, "", "v_width"]], "drift.telescope.cylinder.PolarisedCylinderTelescope": [[17, 2, 1, "", "beamx"], [17, 2, 1, "", "beamy"]], "drift.telescope.cylinder.UnpolarisedCylinderTelescope": [[17, 2, 1, "", "beam"]], "drift.telescope.disharray": [[18, 1, 1, "", "DishArray"], [18, 5, 1, "", "beam_circular"]], "drift.telescope.disharray.DishArray": [[18, 2, 1, "", "beam"], [18, 2, 1, "", "beamx"], [18, 2, 1, "", "beamy"], [18, 3, 1, "", "dish_width"], [18, 4, 1, "", "feedpositions"], [18, 4, 1, "", "u_width"], [18, 4, 1, "", "v_width"]], "drift.telescope.exotic_cylinder": [[19, 1, 1, "", "CylinderExtra"], [19, 1, 1, "", "CylinderPerturbed"], [19, 1, 1, "", "CylinderShift"], [19, 1, 1, "", "GradientCylinder"], [19, 1, 1, "", "RandomCylinder"]], "drift.telescope.exotic_cylinder.CylinderExtra": [[19, 2, 1, "", "feed_positions_cylinder"]], "drift.telescope.exotic_cylinder.CylinderPerturbed": [[19, 4, 1, "", "beamclass"], [19, 2, 1, "", "beamx"], [19, 2, 1, "", "beamy"], [19, 4, 1, "", "feedpositions"]], "drift.telescope.exotic_cylinder.CylinderShift": [[19, 2, 1, "", "feed_positions_cylinder"]], "drift.telescope.exotic_cylinder.GradientCylinder": [[19, 2, 1, "", "feed_positions_cylinder"]], "drift.telescope.exotic_cylinder.RandomCylinder": [[19, 2, 1, "", "feed_positions_cylinder"]], "drift.telescope.focalplane": [[20, 1, 1, "", "FocalPlaneArray"], [20, 5, 1, "", "beam_circular"]], "drift.telescope.focalplane.FocalPlaneArray": [[20, 2, 1, "", "beam"], [20, 4, 1, "", "feedpositions"], [20, 4, 1, "", "nfeed"], [20, 4, 1, "", "u_width"], [20, 4, 1, "", "v_width"]], "drift.telescope.gmrt": [[21, 1, 1, "", "GmrtArray"], [21, 1, 1, "", "GmrtUnpolarised"], [21, 5, 1, "", "beam_circular"]], "drift.telescope.gmrt.GmrtArray": [[21, 2, 1, "", "beam"], [21, 2, 1, "", "beamx"], [21, 2, 1, "", "beamy"], [21, 3, 1, "", "dish_width"], [21, 4, 1, "", "u_width"], [21, 4, 1, "", "v_width"]], "drift.telescope.oldcylinder": [[22, 1, 1, "", "CylinderTelescope"], [22, 1, 1, "", "PolarisedCylinderTelescope"], [22, 1, 1, "", "UnpolarisedCylinderTelescope"]], "drift.telescope.oldcylinder.CylinderTelescope": [[22, 3, 1, "", "cylinder_width"], [22, 3, 1, "", "cylspacing"], [22, 2, 1, "", "feed_positions_cylinder"], [22, 3, 1, "", "feed_spacing"], [22, 3, 1, "", "in_cylinder"], [22, 3, 1, "", "num_cylinders"], [22, 3, 1, "", "num_feeds"], [22, 3, 1, "", "touching"], [22, 4, 1, "", "u_width"], [22, 4, 1, "", "v_width"]], "drift.telescope.oldcylinder.PolarisedCylinderTelescope": [[22, 2, 1, "", "beamx"], [22, 2, 1, "", "beamy"]], "drift.telescope.oldcylinder.UnpolarisedCylinderTelescope": [[22, 2, 1, "", "beam"]], "drift.telescope.restrictedcylinder": [[23, 1, 1, "", "RestrictedBeam"], [23, 1, 1, "", "RestrictedCylinder"], [23, 1, 1, "", "RestrictedExtra"], [23, 1, 1, "", "RestrictedPolarisedCylinder"]], "drift.telescope.restrictedcylinder.RestrictedCylinder": [[23, 2, 1, "", "beam"]], "drift.telescope.restrictedcylinder.RestrictedExtra": [[23, 2, 1, "", "feed_positions_cylinder"]], "drift.telescope.restrictedcylinder.RestrictedPolarisedCylinder": [[23, 2, 1, "", "beamx"], [23, 2, 1, "", "beamy"]], "drift.util": [[25, 0, 0, "-", "blockla"], [26, 0, 0, "-", "plotutil"], [27, 0, 0, "-", "util"]], "drift.util.blockla": [[25, 5, 1, "", "multiply_dm_dm"], [25, 5, 1, "", "multiply_dm_v"], [25, 5, 1, "", "pinv_dm"], [25, 5, 1, "", "svd_dm"]], "drift.util.plotutil": [[26, 5, 1, "", "regrid_polar"]], "drift.util.util": [[27, 5, 1, "", "cache_last"], [27, 5, 1, "", "intpattern"], [27, 5, 1, "", "natpattern"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:property", "5": "py:function"}, "terms": {"": [1, 3, 4, 6, 7, 9, 10, 16], "0": [6, 7, 8, 9, 13, 16, 17, 18, 19, 20, 21, 22, 23], "0327": 29, "1": [1, 6, 8, 9, 16, 26], "1024": [9, 26], "128": 1, "1302": 29, "1401": 29, "15": 4, "1997": 6, "1d": 16, "2": [1, 9, 16, 17, 19, 22, 23, 29], "200": 9, "2003": 7, "2012": 7, "2095": 29, "21": 29, "21cm": [4, 28, 29], "2d": 4, "2e": 4, "3": [1, 9, 16], "4": 9, "400": 9, "45": [9, 17, 18, 19, 20, 22, 23], "5": 6, "50": 9, "733": 9, "800": 9, "A": [1, 4, 9, 11, 17, 18, 19, 20, 21, 22, 23, 25, 27, 28, 29], "As": [9, 29], "By": 4, "For": [7, 10, 11], "If": [1, 4, 6, 9, 16, 17, 22], "In": [1, 29], "It": 29, "No": 1, "One": 9, "The": [1, 2, 4, 6, 7, 9, 10, 13, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 29, 30], "There": [9, 29], "These": [6, 9, 29], "_copy_transfer_into_singl": 9, "_foreground_regularis": 4, "_get_uniqu": [9, 19], "_make_matrix_arrai": 9, "_nside": [9, 17, 18, 19, 20, 21, 22, 23], "_transfer_singl": 9, "a_": 4, "ab": [7, 10], "about": [1, 29], "abov": [7, 16], "abstract": [9, 19], "accept": 9, "access": [4, 5, 9, 29], "accuracy_boost": 9, "across": [1, 4, 9, 16, 29], "ad": 4, "add": [4, 9], "add_const": 4, "addit": 1, "after": 1, "again": [9, 19], "against": [6, 9], "al": 7, "align": 10, "all": [1, 4, 6, 9, 17, 20, 22, 29], "allow": [7, 9], "alm": 7, "almost": 9, "along": [17, 22], "alreadi": [4, 6], "also": [4, 29, 30], "alwai": 27, "amount": [1, 9], "amplitud": [6, 8, 16], "an": [4, 6, 7, 9, 10, 17, 18, 19, 21, 22, 23, 25, 26, 29], "analys": 29, "analysi": [5, 11, 12, 28], "angl": [9, 16], "angpo": [16, 18, 20, 21], "angular": [6, 7, 9, 10, 16, 18, 20, 21], "ani": 9, "anoth": 25, "antenna": [16, 17], "antenna_func": 16, "anyth": [5, 9], "ap": 6, "appli": [1, 4, 5, 12, 16], "apply_config": 5, "approxim": [9, 13, 17, 18, 20, 21, 22], "ar": [1, 4, 6, 9, 12, 17, 19, 22, 29], "arbitari": [9, 19], "arg": [1, 23, 25], "arr": 9, "arrai": [4, 6, 9, 18, 19, 20, 21, 25, 28], "array_lik": [4, 9], "arxiv": 29, "ascens": 9, "assum": [1, 9, 13, 16, 29], "astrophys": 29, "attempt": 4, "attribut": 7, "auto": 9, "auto_correl": 9, "avail": 4, "avoid": 4, "awai": [3, 4], "b": [4, 10, 29], "back": 4, "band": [6, 7, 9], "bandpow": 7, "bandtyp": 6, "bandwidth": 9, "base": [1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 17, 18, 19, 20, 21, 22, 23], "baselin": [1, 9], "basi": [1, 4, 6, 16, 29], "beam": [1, 5, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 30], "beam_amp": 16, "beam_cache_s": 9, "beam_circular": [18, 20, 21], "beam_dipol": 16, "beam_i": 16, "beam_m": [1, 29], "beam_singularvalu": 1, "beam_svd": 1, "beam_ut": 1, "beam_x": 16, "beamclass": [9, 19], "beami": [9, 17, 18, 19, 21, 22, 23], "beamtransf": [4, 29], "beamtransferfullsvd": 1, "beamtransfernosvd": 1, "beamtransfertempsvd": 1, "beamx": [9, 17, 18, 19, 21, 22, 23], "been": [4, 9], "befor": 9, "begin": 29, "behaviour": 9, "being": [3, 9], "below": [1, 3, 4, 29], "between": [1, 7, 9, 17, 22], "bi": 6, "bia": [6, 7], "big": 9, "bin": [6, 9, 26], "bl_ind": 9, "bl_indic": 9, "block": [1, 9, 25], "block_root": 7, "bool": [1, 9], "boolean": [1, 4, 6, 9, 12, 17, 22, 25], "boolen": 1, "boost": 16, "both": [4, 5, 9], "boundari": [6, 26], "break": 26, "broadcast": 9, "bt": [3, 4], "c_l": 7, "cach": [1, 4, 6, 7, 9, 27], "cache_last": 27, "cacheproj": 6, "calcul": [1, 4, 5, 6, 7, 9, 10, 12, 13, 16, 17, 18, 20, 21, 22], "calculate_feedpair": 9, "call": 27, "can": [1, 9, 29, 30], "cannot": 1, "caput": 9, "care": 4, "carlo": [6, 7], "cart_img": 26, "cartesian": [6, 16, 26], "case": [4, 9], "casper": 9, "caveat": 4, "center": 9, "centr": 9, "central": 9, "centre_nyquist": 9, "cf": 4, "challeng": 29, "chan_id": 9, "chang": [1, 4], "channel": 9, "channel_bin": 9, "channel_list": 9, "channel_rang": 9, "check": 9, "choos": 9, "chunk": 1, "chunk_cache_s": 1, "circular": [18, 20, 21], "class": [1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 29], "classmethod": 5, "clzz": 7, "cm": 29, "cmu": 18, "co": [10, 18, 20, 21, 29], "code": 30, "coeffici": 6, "collect": [1, 4, 9], "column": 4, "combin": [1, 9], "common": [17, 22], "compact": 28, "compar": 9, "complet": [17, 22, 29], "complex": [9, 17, 18, 20, 21, 22, 23], "complex128": 9, "complic": 9, "compon": 29, "comput": [4, 7, 9], "conceptu": 29, "config": 5, "configfil": 5, "configur": 5, "conj": [1, 9, 25], "conjug": [1, 9, 25, 29], "consid": [9, 11], "consist": 29, "constant": 4, "constraint": 6, "construct": [4, 25, 29], "contain": [5, 9, 25], "contamin": 3, "control": 10, "convent": 9, "coordin": 10, "copi": [5, 9], "correct": 4, "correctli": 9, "correl": [9, 17, 22], "correlator_input": 9, "correspond": 9, "cosmolog": [28, 29], "covari": [1, 4, 6, 7], "creat": [4, 5, 13], "current": [4, 9], "currenti": 9, "custom": 9, "cut": [1, 4, 8], "cv_fg": 4, "cyl": 9, "cylind": [10, 16, 19, 22, 23], "cylinder_beam": 10, "cylinder_index": [17, 19, 22, 23], "cylinder_width": [17, 22], "cylinderextra": 19, "cylinderperturb": 19, "cylindershift": 19, "cylindertelescop": [17, 22, 23], "cylspac": [17, 22], "cylwidth": 10, "dai": [9, 13], "data": [1, 4, 6, 7, 11, 29], "decomposit": 29, "decor": 27, "decorrel": 6, "decorrelate_p": 6, "decorrelate_ps_fil": 6, "default": [1, 2, 4, 6, 7, 9, 13, 16, 26], "defin": [9, 10], "definit": 4, "degre": [1, 9, 17, 18, 19, 20, 21, 22, 23], "delband": 6, "delet": 6, "delproj": 6, "depend": 1, "deprec": 9, "describ": [9, 16, 18, 21], "descript": 29, "design": 29, "detail": [4, 6, 29], "determin": 9, "devid": 9, "diagon": [1, 4, 25], "diagonalis": 3, "diamet": [18, 20, 21], "dict": [5, 12], "dictionari": 5, "differ": 9, "diffract": 16, "dillon": 7, "dimension": 9, "dipol": 16, "direct": [9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 26], "directori": [1, 2, 5, 6, 7, 12, 13], "directorynam": 13, "dish": [9, 17, 18, 20, 21, 22], "dish_width": [18, 21], "disk": [1, 4, 5, 6, 13], "distribut": [4, 7, 29], "dk": 12, "dmat": 1, "do": [4, 9], "document": 25, "doe": [4, 5], "done": [1, 29], "draco": [9, 11], "draw": 7, "driftscan": [0, 5, 24], "dtype": 9, "dual": [9, 19], "due": [4, 29], "dynam": 1, "e": [6, 9, 10, 16, 17], "each": [1, 6, 7, 9, 10, 16, 17, 18, 20, 21, 22, 25, 26, 29], "earth": [9, 17, 18, 19, 20, 21, 22, 23], "east": 10, "edg": 9, "effect": [9, 10], "eigenbasi": 4, "eigenmod": [6, 7], "eigenvalu": [4, 6, 7], "eigenvector": [4, 25], "eigh_gen": 4, "either": [4, 6, 9], "electr": 29, "element": [1, 9], "emiss": [9, 28, 29], "end": 9, "enough": [6, 9], "entir": 9, "entri": [7, 9, 12], "errmsg": 1, "error": [6, 26], "essenti": [1, 29], "estim": [2, 5, 6, 7, 12, 29], "et": 7, "etc": [9, 12, 17, 18, 20, 21, 22], "eval": 4, "evals_al": 4, "evals_m": 4, "evalu": 1, "evarrai": 4, "evec": 4, "even": 1, "everi": 29, "exact": 6, "exactli": 9, "except": 4, "exclud": 1, "exist": [1, 6, 30], "expand": 12, "exptan": 16, "extens": 7, "extract": 29, "f": 3, "f_1": 10, "f_2": 10, "f_indic": 9, "fact": 7, "factor": [9, 16], "fals": [1, 4, 6, 7, 9, 25], "feed": [9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 29], "feed1": 10, "feed2": 10, "feed_posit": [17, 19, 22, 23], "feed_positions_cylind": [17, 19, 22, 23], "feed_spac": [17, 22], "feedconj": 9, "feedmap": 9, "feedmask": 9, "feedpair": 9, "feedposit": [9, 18, 19, 20], "fetch": [1, 4, 6, 9, 10], "fi": 1, "fiduci": 6, "field": [9, 17, 19, 22, 23, 29], "file": [1, 4, 5, 6], "filenam": 13, "fill": 9, "filter": [1, 2, 5, 6, 7, 12, 29], "final": 9, "find": [1, 4], "fir": 9, "first": [3, 9, 29], "fisher": [6, 7, 26], "fisher_bias_m": 6, "fisher_fil": 6, "fix": 12, "fixpath": 12, "flat": 9, "flexibl": 11, "float": [1, 9], "fname": 6, "focalplanearrai": 20, "focu": 28, "focuss": 30, "forc": [1, 6], "force_lmax": 9, "force_mmax": 9, "forecast": 6, "foreground": [3, 4, 29], "foreground_threshold": 3, "form": [4, 13, 25], "formal": 29, "found": [4, 7], "four": 7, "fpa": 20, "fraunhof": 16, "fraunhofer_cylind": 16, "freedom": 1, "freq": [1, 4, 9, 17, 18, 19, 20, 21, 22, 23], "freq1": 4, "freq2": 4, "freq_end": 9, "freq_high": 9, "freq_ind": 9, "freq_low": 9, "freq_mod": 9, "freq_start": 9, "frequenc": [1, 6, 9, 17, 18, 19, 20, 21, 22, 23, 29], "from": [1, 4, 5, 6, 7, 9, 13, 16, 17, 19, 22, 23, 29], "from_config": 5, "full": [1, 3, 4, 9, 10, 16, 17, 25], "full_matric": 25, "fun": 29, "func": 27, "function": [0, 1, 4, 6, 7, 8, 9, 10, 12, 13, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "fwhm_e": [16, 17], "fwhm_h": [16, 17], "fwhm_x": 16, "fwhm_y": 16, "g": [6, 9], "galaxi": 29, "gap": [17, 22], "gaussian": 29, "gaussvar": 7, "gb": 1, "gen_sampl": 7, "gen_vec": 7, "genband": 6, "geneat": 29, "gener": [1, 4, 5, 6, 7, 9, 12], "generalis": 4, "generate_cach": 1, "generate_klmod": 12, "generate_mod": 12, "generate_powerspectra": 12, "get": [4, 9, 17, 19, 22, 23], "getproj": 6, "give": [9, 19, 29], "given": [1, 4, 6, 7, 9, 10, 29], "global_lmax": 9, "gmrtarrai": 21, "gmrtunpolaris": 21, "gradientcylind": 19, "greater": [4, 7], "greenwich": 9, "grid": 26, "gridu": [18, 21], "gridv": [18, 21], "ground": 16, "group": 29, "h": [1, 16, 17], "h5py": 6, "ha": [1, 4, 9], "half": [16, 17], "handl": 6, "harmon": [9, 29], "hat": 10, "have": [1, 6, 9, 16, 29], "hdf5": [1, 6], "healpix": [9, 17, 18, 19, 20, 21, 22, 23], "helper": 29, "hermitian": 25, "higher": 8, "highest": 9, "hold": 9, "horizon": 10, "how": 29, "howev": 4, "i": [1, 2, 4, 5, 6, 7, 9, 10, 11, 12, 13, 16, 17, 22, 25, 29, 30], "ident": 9, "identifi": 9, "ignor": [7, 9], "illumin": 16, "imag": [26, 29], "implement": [9, 15, 19, 29], "implicitli": 9, "in_cylind": [17, 22], "in_rang": 9, "includ": [4, 6, 9, 10, 17, 22], "included_baselin": 9, "included_freq": 9, "included_pol": 9, "increas": 9, "independ": 29, "index": [1, 4, 6, 9, 17, 18, 19, 20, 21, 22, 23, 28], "index_map": 9, "index_map_prod": 9, "index_map_stack": 9, "indic": [1, 9], "individu": 9, "infinit": 13, "inform": [1, 29], "initialis": [2, 6, 7, 9, 17, 18, 19, 20, 21, 22, 23], "input": [6, 9], "input_a": 9, "input_b": 9, "input_index": 9, "instead": 9, "instrument": [3, 4, 9, 29], "int": [1, 9, 13], "integ": [1, 4, 6, 7, 9, 17, 18, 19, 20, 21, 22, 23, 26, 27], "intend": 9, "interferomet": [9, 28, 29, 30], "interferometr": [18, 21], "intern": 9, "intpattern": 27, "inv": [1, 4], "inv_gen": 4, "invbeam": 1, "invbeam_m": [1, 29], "invbeam_svd": 1, "invers": [1, 4, 25, 29], "invert": [1, 4], "invmod": 4, "invmodes_m": 4, "issu": [1, 4], "its": [4, 29], "just": [6, 7], "jy": 8, "k": [6, 9, 25, 26], "k1": 25, "k2": 25, "k_band": 6, "kl": [2, 3, 4, 5, 6, 7, 12], "klcov": 6, "klmode": 12, "klname": 12, "klname1": 12, "klname2": 12, "kltran": [2, 6, 7], "kltransform": [2, 3, 6, 7], "know": 9, "kpar": 26, "kpar_band": 6, "kperp": 26, "kperp_band": 6, "kwarg": [1, 9, 13, 17, 18, 19, 20, 22, 23, 25], "l": [1, 4, 7, 9, 17, 18, 20, 21, 22], "l_boost": 9, "l_max": 9, "label": 9, "lambda": 4, "larg": 9, "last": [6, 9, 27], "later": 4, "latitud": [9, 17, 18, 19, 20, 21, 22, 23, 29], "left": [9, 25], "length": [9, 16, 17, 18, 20, 21, 22, 25], "like": [9, 12], "limit": 1, "linalg": 25, "list": [9, 12, 13], "lm": 4, "lmax": [1, 6, 9], "load": [1, 5, 6], "local": 9, "local_origin": 9, "locat": [9, 10, 29], "longer": 6, "longest": 9, "longitud": [9, 17, 18, 19, 20, 21, 22, 23], "look": 29, "lose": 1, "low": 1, "lowest": 9, "lside": 9, "m": [1, 4, 5, 6, 7, 9, 12, 13, 17, 18, 19, 20, 21, 22, 25, 29], "m_max": 9, "mai": [1, 9], "make": [1, 4, 6, 9, 29], "make_clzz": 6, "makeproj": 6, "manag": [1, 12, 29], "mani": [4, 29], "map": [1, 9, 13, 17, 18, 19, 20, 21, 22, 23, 29], "mask": 9, "mat": [1, 4], "match": 9, "mathbf": [4, 29], "mathcal": 10, "matric": [1, 4, 5, 7, 9, 25], "matrix": [1, 4, 6, 7, 9, 25, 29], "matrix1": 25, "matrix2": 25, "matter": 6, "max": [4, 9, 17], "max_lm": 9, "maximum": [1, 9, 16, 17, 18, 20, 21, 22], "maxlength": 9, "mayb": 4, "mb": [1, 9], "mean": [6, 9], "measur": [1, 29], "meh": 29, "mem_chunk": 1, "memori": [1, 4, 6, 29], "messag": 4, "method": [1, 9, 19, 29], "metr": [9, 17, 18, 21, 22], "mhz": 9, "mi": [1, 4, 6, 7], "mild": 9, "min": [9, 25], "minimis": 9, "minimum": 9, "minlength": 9, "mlist": 4, "mmax": [1, 9, 13], "mode": [1, 3, 4, 6, 7, 9, 12, 19, 29], "model": [0, 16, 29, 30], "modes_m": 4, "modifi": 3, "modul": 28, "mont": [6, 7], "moor": [1, 4], "more": [9, 11], "most": 11, "mostli": 30, "mpi": [4, 29], "mu": 6, "much": [11, 29], "multi": 30, "multipli": 25, "multiply_dm_dm": 25, "multiply_dm_v": 25, "must": [1, 6, 9, 29], "n": [4, 7, 10, 16, 25, 27], "name": 6, "narrai": 6, "natpattern": 27, "natur": 27, "nband": 6, "nbase": 9, "nblock": 25, "ndai": [9, 13], "ndarrai": [1, 4, 6, 7, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26], "ndof": 1, "neg": 29, "neval": 6, "new": 29, "newvector": 25, "next": 29, "nfeed": [9, 19, 20], "nfreq": [1, 4, 6, 9], "nmatrix": 25, "nmode": 7, "node": 29, "noic": 4, "nois": [1, 3, 4, 6, 9, 13, 29], "noise_p": 9, "noiseless": 11, "noiseonli": 7, "noisepow": 9, "none": [1, 3, 4, 6, 7, 9, 13], "normal": 29, "normalis": 16, "north": [10, 16], "note": [4, 10], "noth": 29, "now": 29, "np": [1, 4, 6, 7, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26], "npair": [1, 9], "npoint": 16, "npol": 1, "npol_ski": 1, "nsampl": 7, "nside": 9, "nsky": 1, "nsvd": 1, "nswitch": 7, "ntel": [1, 4], "nu": [4, 7], "null": [1, 7], "num_cylind": [17, 19, 22, 23], "num_ev": 6, "num_fe": [17, 22], "num_freq": 9, "num_kl": 6, "num_pol_ski": 9, "num_r": 26, "num_realisaton": 6, "num_theta": [6, 26], "numband": 6, "number": [1, 6, 7, 9, 13, 17, 18, 20, 21, 22, 26, 27], "numer": [4, 29], "nyquist": 9, "object": [1, 5, 6, 7, 9, 13, 17, 18, 19, 20, 21, 22, 23], "observ": [9, 13, 29], "off": 9, "old": 1, "omit": 9, "one": [6, 10], "onli": [1, 4, 6, 9, 19, 29], "onto": [1, 4, 10, 26], "oper": 4, "oppos": 1, "optim": [1, 29], "option": [1, 2, 4, 6, 7, 9, 13, 16, 25, 26], "ordin": [10, 18, 20, 21], "origin": [1, 9], "other": [1, 9], "otherwis": [4, 25], "our": 29, "out": [1, 9, 26, 27], "outdir": 13, "output": [1, 5, 9, 12], "output_directori": 12, "over": 9, "overhead": 9, "overrid": 9, "overview": 28, "p": [2, 6, 7, 10], "pack": [1, 4, 9, 17, 18, 19, 22, 23], "packag": [28, 29], "padmanabhan": 7, "page": 28, "pair": [9, 29], "paper": 6, "parallelis": 29, "paramet": [1, 2, 4, 5, 6, 7, 9, 10, 13, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26], "part": [1, 29], "particular": [4, 7, 9, 10, 17, 18, 20, 21, 22, 23, 28], "path": [1, 5, 12], "pattern": [9, 16, 17, 18, 19, 20, 21, 22, 23, 27], "pen": 7, "penros": [1, 4], "per": 1, "perform": [1, 3, 4, 9, 25, 29], "pfb": 9, "phi": [9, 10, 16, 17, 19, 22, 23], "phihat": 16, "physic": [9, 17, 18, 20, 21, 22], "pi": 10, "pinv_dm": 25, "pinv_matrix": 25, "pipelinemanag": 12, "pitch": 16, "pixel": 26, "pk": 6, "planar": 29, "plane": [10, 16, 17, 18, 19, 22, 23, 26], "point": [6, 8, 9, 10, 16, 19, 21, 29], "pointsourc": 8, "pol": [1, 4, 9], "pol1": 4, "pol2": 4, "pol_ind": 9, "pol_iqu": 10, "polar": [6, 9, 10, 16, 26], "polar_img": 26, "polaris": [1, 9, 10, 16, 17, 19, 22, 23, 29], "polarisedcylindertelescop": [17, 19, 22, 23], "polarisedtelescop": 9, "polpattern": 16, "polsvcut": 1, "posit": [4, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 29], "potenti": [4, 9, 17, 18, 20, 21, 22, 23], "power": [3, 5, 6, 9, 16, 29], "powerspectra": [6, 12], "powerspectrum": [6, 7], "pq": 10, "practic": 29, "precis": [1, 4], "precomput": 6, "prefer": 9, "present": [9, 29], "previou": 4, "primari": [9, 29], "print": [4, 27], "prior": 9, "prioriti": 9, "problem": 4, "proce": 29, "process": [1, 29], "prod": 9, "prod_ind": 9, "prodmap": 9, "prodstack": 9, "product": [5, 6, 7, 12, 13], "product_directori": 12, "productmanag": [5, 13], "program": 28, "project": [1, 4, 6, 10], "project_matrix_diagonal_telescope_to_svd": 1, "project_matrix_forward": 1, "project_matrix_sky_to_kl": 4, "project_matrix_sky_to_svd": 1, "project_matrix_sky_to_telescop": 1, "project_matrix_svd_to_kl": 4, "project_vector_backward": 1, "project_vector_forward": 1, "project_vector_kl_to_svd": 4, "project_vector_sky_to_kl": 4, "project_vector_sky_to_svd": 1, "project_vector_sky_to_telescop": 1, "project_vector_svd_to_kl": 4, "project_vector_svd_to_ski": 1, "project_vector_svd_to_telescop": 1, "project_vector_telescope_to_ski": 1, "project_vector_telescope_to_svd": 1, "projmatrix": 4, "projvector": 4, "properti": [1, 6, 9, 17, 18, 19, 20, 21, 22], "provid": 1, "ps1": 12, "psd": 6, "psestim": 7, "pseudo": [1, 4, 25, 29], "psexact": 6, "psmontecarlo": [2, 7], "psmontecarloalt": 7, "psname": 12, "pu": 10, "q": [6, 7, 9, 10], "q_estim": 6, "qa": 6, "quadrat": [6, 29], "quantiti": 29, "quarter": 26, "r": 26, "r_bin": 26, "radian": 9, "radio": [28, 29, 30], "random": 7, "randomcylind": 19, "rang": 9, "ratio": 3, "re": [16, 26], "read": [1, 4, 9], "reader": [1, 4, 6, 9, 12], "real": [4, 6], "realli": 9, "reason": 9, "recalcul": 9, "receiv": [9, 17, 18, 19, 22, 23], "reconstruct": 1, "reduc": 7, "redund": [9, 29], "refer": 28, "reg": 4, "regen": [1, 4, 6], "regener": [1, 6], "regim": 9, "regrid": 26, "regrid_polar": 26, "regularis": 4, "regularli": [17, 22], "rel": [1, 9, 19], "relat": [1, 29], "remain": 3, "remov": 3, "reorder": 9, "repeat": 29, "represent": 4, "request": 9, "requir": [9, 12, 19], "resolut": [13, 16], "respons": 29, "restrictedbeam": 23, "restrictedextra": 23, "restrictedpolarisedcylind": 23, "result": [2, 4, 6, 7, 9, 27], "return": [1, 4, 5, 6, 7, 9, 10, 13, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26], "revers": 1, "reverse_map": 9, "reverse_map_stack": 9, "rfi": 9, "right": [9, 25], "roll": 16, "root": 7, "rot": 16, "rotat": [4, 9, 16], "routin": [1, 4, 9, 10, 19], "row": 6, "run": 12, "rx": 26, "ry": 26, "s_": 8, "same": [4, 9], "sampl": 7, "satisfi": 4, "save": [1, 4, 6, 9, 13], "scalar": [3, 4, 6, 9, 10, 13, 16, 17, 18, 19, 20, 21, 22, 23], "scale": [8, 9], "scipi": 25, "search": 28, "second": 13, "section": 6, "see": [1, 4, 6, 7, 25], "seed": 13, "select": 9, "self": [7, 9, 17, 18, 19, 20, 21, 22, 23], "sens": 1, "sensit": [1, 4, 9], "separ": [9, 29], "serial": 9, "set": [1, 4, 7, 9, 13, 18, 25, 29], "sever": 9, "shape": 9, "shear": 29, "should": [1, 6, 9, 10, 11], "show": 27, "side": 26, "sider": 9, "sig": 25, "sign": [1, 27], "signal": [4, 9], "sim_skyvec": 7, "similar": 9, "simpl": [9, 11, 19, 27], "simplepolarisedtelescop": [9, 17, 22, 29], "simpleunpolarisedtelescop": [9, 17, 21, 22], "simpli": 1, "simul": [7, 9, 11, 13, 29], "sin": 16, "singl": [1, 4, 9], "singular": [1, 25, 29], "sintheta": 16, "size": [1, 4, 9, 17, 18, 19, 20, 21, 22, 23, 25], "skip": [1, 9], "skip_baselin": 9, "skip_freq": 9, "skip_pol": 9, "skip_svd": 1, "skip_svd_inv": 1, "skip_v": 9, "sky": [1, 4, 9, 10, 13, 16, 29], "skymod": 4, "skymodes_m": 4, "slightli": 1, "small": 6, "sn": 4, "sn_covari": 4, "so": [1, 4, 9, 13, 29], "solv": 4, "some": [4, 9], "somewhat": 9, "sophist": [9, 11], "sourc": [8, 29], "space": [1, 3, 4, 17, 22], "specialis": 1, "specif": [6, 9], "specifi": [5, 9, 17, 19, 22, 23, 29], "spectrum": [1, 4, 5, 6, 9, 29], "sph_arr": 10, "sphere": 16, "spheric": [9, 10, 16, 29], "split": 1, "squar": 7, "squint": 16, "stack": 9, "stack_ind": 9, "standard": [1, 4], "start": 9, "state": 9, "stationari": 29, "stellar": 9, "step": [9, 29], "still": 9, "stochast": 7, "stoke": 9, "stop": 9, "store": [2, 6, 7, 12, 13], "straightforward": 29, "strict": 1, "string": [1, 2, 4, 5, 6, 7, 9, 12], "strip": 10, "structur": 9, "subdir": [2, 3, 4, 6, 7], "subdirectori": [2, 6, 7], "subsequ": 3, "subset": [4, 9, 29], "sum": 13, "support": [7, 9], "sure": 9, "surfac": [9, 17, 18, 19, 20, 21, 22, 23], "svarrai": 1, "svcut": 1, "svd": [1, 12, 25, 29], "svd_all": 1, "svd_dm": 25, "svd_gen": 1, "svd_len": 1, "svdnum": 1, "svec": 1, "switch": 7, "system": [9, 10], "t": 9, "t_sy": 9, "take": [9, 29], "target": 1, "techniqu": 3, "tegmark": 6, "telescop": [1, 4, 5, 6, 13, 30], "tell": 29, "temperatur": [1, 9], "temponli": 1, "tensor": 10, "term": 10, "terrestri": 9, "test": 9, "than": 4, "thei": [1, 9], "them": [4, 17, 22, 29], "thermal": 9, "theta": [6, 9, 10, 16, 17, 19, 22, 23, 26], "theta_bin": 26, "thetahat": 16, "thi": [1, 4, 5, 6, 7, 9, 17, 22, 29], "thin": 10, "thing": [9, 19], "three": 29, "threshold": [4, 6, 7], "through": 9, "throw": [3, 4], "thrown": 4, "thu": 9, "tild": 29, "time": [1, 9, 13], "timestream": [12, 29], "timestream_directori": 12, "tmat": 1, "togeth": 9, "total": [6, 9], "touch": [17, 22], "trace": 7, "trade": 9, "tran": 7, "transfer": [1, 5, 7, 9], "transfer_for_baselin": 9, "transfer_for_frequ": 9, "transfer_matric": 9, "transfom_m": 4, "transform": [2, 3, 4, 6, 7], "transform_sav": 4, "transit": [9, 28, 29, 30], "transittelescop": [1, 9, 17, 18, 21, 22, 29], "transpos": 29, "triangl": 9, "trivial": 29, "true": [1, 4, 6, 9, 25], "truncat": [1, 25], "truncate_maxl": 1, "truncate_rel": 1, "try": [1, 4], "tsy": 9, "tsys_flat": 9, "tt": 1, "tvec": 1, "two": [9, 10, 29], "type": [1, 3, 4, 5, 6, 7, 9, 10, 12, 13, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26], "u": [1, 7, 9, 10, 17, 18, 20, 21, 22, 25, 29], "u1": [17, 18, 19, 22, 23], "u2": [17, 18, 19, 22, 23], "u_width": [9, 17, 18, 20, 21, 22], "uhat": 10, "uniqu": [9, 29], "unique_pair": 9, "uniquepair": 9, "unit": [10, 16, 18, 20, 21], "unit_band": 6, "unpolaris": [9, 17, 21, 22], "unpolarisedcylindertelescop": [17, 19, 22, 23], "unpolarisedtelescop": [9, 20], "until": 29, "up": [8, 9, 12], "upper": [1, 9], "upto": 27, "us": [1, 2, 4, 6, 7, 9, 11, 13, 16, 26, 29, 30], "usabl": 9, "use_foreground": 4, "use_therm": 4, "usual": 4, "uv": 10, "uv_diamet": [18, 20, 21], "uv_plane_cart": 10, "uwidth": 9, "v": [1, 4, 9, 10, 17, 18, 20, 21, 22, 25], "v1": [17, 18, 19, 22, 23], "v2": [17, 18, 19, 22, 23], "v_width": [9, 17, 18, 20, 21, 22], "val": 9, "valu": [1, 9, 13, 25, 26, 29], "variabl": 12, "vec": [1, 4, 6], "vec1": 6, "vec2": 6, "vector": [1, 4, 6, 7, 9, 10, 16, 25, 29], "veri": 11, "version": 1, "vhat": 10, "via": 7, "visibl": 1, "vwidth": 9, "w": 10, "want": 9, "wavelength": [9, 16, 18, 20, 21], "we": [3, 6, 7, 9, 13, 29], "well": 9, "what": 9, "when": [1, 4, 9], "where": [9, 10], "wherea": 4, "whether": [1, 4, 6, 9, 25], "which": [1, 3, 6, 7, 9, 11, 29], "while": 9, "white": 9, "whole": 9, "width": [9, 10, 16, 17, 18, 20, 21, 22], "window": 6, "wise": 6, "within": 9, "work": [4, 29], "write": 1, "x": [7, 9, 10, 16, 17, 19, 22, 23], "x_": 10, "y": [9, 16, 17, 19, 22, 23], "yaw": 16, "yconf": 5, "you": [1, 9, 11], "z": 7, "zenith": [9, 10, 16, 18, 20, 21], "zero": [1, 6, 9, 13, 20], "zero_mean": 6}, "titles": ["drift.core", "drift.core.beamtransfer", "drift.core.crosspower", "drift.core.doublekl", "drift.core.kltransform", "drift.core.manager", "drift.core.psestimation", "drift.core.psmc", "drift.core.skymodel", "drift.core.telescope", "drift.core.visibility", "drift.pipeline", "drift.pipeline.pipeline", "drift.pipeline.timestream", "drift.scripts", "drift.telescope", "drift.telescope.cylbeam", "drift.telescope.cylinder", "drift.telescope.disharray", "drift.telescope.exotic_cylinder", "drift.telescope.focalplane", "drift.telescope.gmrt", "drift.telescope.oldcylinder", "drift.telescope.restrictedcylinder", "drift.util", "drift.util.blockla", "drift.util.plotutil", "drift.util.util", "driftscan", "Overview of Driftscan", "Programming References"], "titleterms": {"analysi": 29, "beam": 29, "beamtransf": 1, "blockla": 25, "code": 29, "content": 28, "core": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "crosspow": 2, "cylbeam": 16, "cylind": 17, "describ": 29, "disharrai": 18, "doublekl": 3, "drift": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "driftscan": [28, 29], "exotic_cylind": 19, "focalplan": 20, "gener": 29, "gmrt": 21, "indic": 28, "karhunen": 29, "kltransform": 4, "loev": 29, "manag": 5, "matric": 29, "oldcylind": 22, "overview": 29, "pipelin": [11, 12, 13, 29], "plotutil": 26, "product": 29, "program": 30, "psestim": 6, "psmc": 7, "refer": 30, "restrictedcylind": 23, "run": 29, "script": 14, "skymodel": 8, "submodul": 30, "tabl": 28, "telescop": [9, 15, 16, 17, 18, 19, 20, 21, 22, 23, 29], "timestream": 13, "tip": 29, "transfer": 29, "transform": 29, "util": [24, 25, 26, 27], "visibl": 10}}) \ No newline at end of file