diff --git a/demos/materials/plotting_brdfs.py b/demos/materials/plotting_brdfs.py new file mode 100644 index 00000000..01b4e680 --- /dev/null +++ b/demos/materials/plotting_brdfs.py @@ -0,0 +1,102 @@ +import matplotlib.pyplot as plt +import numpy as np + +from raysect.core import AffineMatrix3D, Point3D, Vector3D +from raysect.optical import Ray, World +from raysect.optical.library.metal import RoughAluminium +from raysect.optical.material import UnitySurfaceEmitter +from raysect.primitive import Sphere + +# Create scene graph +world = World() +ray = Ray(min_wavelength=500, max_wavelength=500.1, bins=1) +sphere = Sphere(100, parent=world, material=UnitySurfaceEmitter()) + +# Define Consts. +origin = Point3D(0, 0, 0) +material = RoughAluminium(0.25) +thetas = np.linspace(-90, 90, 100) + +plt.ion() +for light_angle in [0, -25, -45, -70]: + light_position = Point3D( + np.sin(np.deg2rad(light_angle)), 0, np.cos(np.deg2rad(light_angle)) + ) + light_direction = origin.vector_to(light_position).normalise() + + brdfs = [] + for theta_step in thetas: + detector_position = Point3D( + np.sin(np.deg2rad(theta_step)), 0, np.cos(np.deg2rad(theta_step)) + ) + detector_direction = origin.vector_to(detector_position).normalise() + + # Calculate spectrum + spectrum = material.evaluate_shading( + world, + ray, + light_direction, + detector_direction, + origin, + origin, + False, + AffineMatrix3D(), + AffineMatrix3D(), + None, + ) + brdfs.append(spectrum.samples[0]) + + plt.plot(thetas, brdfs, label="{} degrees".format(light_angle)) + +plt.xlabel("Observation Angle (degrees)") +plt.ylabel("BRDF() (probability density)") +plt.legend() +plt.title("The Aluminium BRDF VS observation angle") + + +def plot_brdf(light_angle): + light_position = Point3D( + np.sin(np.deg2rad(light_angle)), 0, np.cos(np.deg2rad(light_angle)) + ) + light_direction = origin.vector_to(light_position).normalise() + + phis = np.linspace(0, 360, 200) + num_phis = len(phis) + thetas = np.linspace(0, 90, 100) + num_thetas = len(thetas) + + values = np.zeros((num_thetas, num_phis)) + for i, j in np.ndindex(num_thetas, num_phis): + theta = np.deg2rad(thetas[i]) + phi = np.deg2rad(phis[j]) + outgoing = Vector3D( + np.cos(phi) * np.sin(theta), np.sin(phi) * np.sin(theta), np.cos(theta) + ) + + # Calculate spectrum + spectrum = material.evaluate_shading( + world, + ray, + light_direction, + outgoing, + origin, + origin, + False, + AffineMatrix3D(), + AffineMatrix3D(), + None, + ) + values[i, j] = spectrum.samples[0] + + fig, ax = plt.subplots(subplot_kw=dict(projection="polar")) + cs = ax.contourf(np.deg2rad(phis), thetas, values, extend="both") + cs.cmap.set_under("k") + plt.title("Light angle: {} degrees".format(light_angle)) + + +plot_brdf(0) +plot_brdf(-25) +plot_brdf(-45) +plot_brdf(-60) +plt.ioff() +plt.show() diff --git a/demos/materials/plotting_brdfs_3d.py b/demos/materials/plotting_brdfs_3d.py new file mode 100644 index 00000000..af16de19 --- /dev/null +++ b/demos/materials/plotting_brdfs_3d.py @@ -0,0 +1,72 @@ +import matplotlib.pyplot as plt +import numpy as np + +from raysect.core import AffineMatrix3D, Point3D, Vector3D +from raysect.optical import Ray, World +from raysect.optical.library.metal import RoughAluminium +from raysect.optical.material import UnitySurfaceEmitter +from raysect.primitive import Sphere + +# Create scene graph +world = World() +ray = Ray(min_wavelength=499, max_wavelength=501, bins=1) +sphere = Sphere(100, parent=world, material=UnitySurfaceEmitter()) + +# Define Consts. +origin = Point3D(0, 0, 0) +material = RoughAluminium(0.25) + + +def calculate_brdf_surface(light_vector): + thetas = np.arange(0, 91, step=5) + phis = np.arange(0, 361, step=10) + num_thetas = len(thetas) + num_phis = len(phis) + thetas, phis = np.meshgrid(thetas, phis) + + X = np.zeros((num_phis, num_thetas)) + Y = np.zeros((num_phis, num_thetas)) + Z = np.zeros((num_phis, num_thetas)) + + for i, j in np.ndindex(num_phis, num_thetas): + theta = np.deg2rad(thetas[i, j]) + phi = np.deg2rad(phis[i, j]) + outgoing = Vector3D( + np.cos(phi) * np.sin(theta), np.sin(phi) * np.sin(theta), np.cos(theta) + ) + + # Calculate spectrum + spectrum = material.evaluate_shading( + world, + ray, + light_direction, + outgoing, + origin, + origin, + False, + AffineMatrix3D(), + AffineMatrix3D(), + None, + ) + radius = spectrum.samples[0] + X[i, j] = radius * np.cos(phi) * np.sin(theta) + Y[i, j] = radius * np.sin(phi) * np.sin(theta) + Z[i, j] = radius * np.cos(theta) + + return X, Y, Z + + +fig, axes = plt.subplots(2, 2, subplot_kw={"projection": "3d"}, layout="constrained") + +for ax, light_angle in zip(axes.flatten(), [0, -10, -25, -45], strict=True): + light_position = Point3D( + np.sin(np.deg2rad(light_angle)), 0, np.cos(np.deg2rad(light_angle)) + ) + light_direction = origin.vector_to(light_position).normalise() + X, Y, Z = calculate_brdf_surface(light_direction) + ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap="viridis", edgecolor="none") + ax.set_xlim(-1, 1) + ax.set_ylim(-1, 1) + ax.set_title(f"Light angle {light_angle} degrees") + +plt.show() diff --git a/demos/optics/logging_trajectories.py b/demos/optics/logging_trajectories.py index c5bb9c39..2d6c0c62 100644 --- a/demos/optics/logging_trajectories.py +++ b/demos/optics/logging_trajectories.py @@ -1,18 +1,14 @@ - # External imports -import matplotlib as mpl -from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np # Raysect imports -from raysect.optical import World, translate, rotate, Point3D, d65_white, Ray, Vector3D -from raysect.optical.material.absorber import AbsorbingSurface +from raysect.optical import Point3D, Vector3D, World, translate from raysect.optical.library import schott -from raysect.primitive import Sphere, Box from raysect.optical.loggingray import LoggingRay -from raysect.primitive.lens.spherical import * - +from raysect.optical.material.absorber import AbsorbingSurface +from raysect.primitive import Box +from raysect.primitive.lens.spherical import BiConvex world = World() @@ -46,5 +42,10 @@ ax.plot(p[:, 0], p[:, 1], p[:, 2], 'k-') ax.plot(p[:, 0], p[:, 1], p[:, 2], 'r.') +ax.set( + xlabel="$X$", + ylabel="$Y$", + zlabel="$Z$", +) plt.ioff() plt.show() diff --git a/docs/source/api_reference/core/core.rst b/docs/source/api_reference/core/core.rst index f10b8473..d429860a 100644 --- a/docs/source/api_reference/core/core.rst +++ b/docs/source/api_reference/core/core.rst @@ -5,11 +5,11 @@ Raysect Core The core module of raysect is made up of math, acceleration, and scenegraph classes. .. toctree:: + :titlesonly: + core_classes math raysect_core_scenegraph spatial_acceleration render_engines utilities - - diff --git a/docs/source/api_reference/core/math.rst b/docs/source/api_reference/core/math.rst index 7ffb0f5f..030a2030 100644 --- a/docs/source/api_reference/core/math.rst +++ b/docs/source/api_reference/core/math.rst @@ -3,6 +3,8 @@ Math Module =========== .. toctree:: + :titlesonly: + points_and_vectors affinematrix functions diff --git a/docs/source/api_reference/core/raysect_core_kdtree.rst b/docs/source/api_reference/core/raysect_core_kdtree.rst deleted file mode 100644 index 48cd4cd6..00000000 --- a/docs/source/api_reference/core/raysect_core_kdtree.rst +++ /dev/null @@ -1,17 +0,0 @@ - -kd-tree Module -============== - -Some example text. - -.. automodule:: raysect.core.acceleration.accelerator - :members: - -.. automodule:: raysect.core.acceleration.boundprimitive - :members: - -.. automodule:: raysect.core.acceleration.kdtree - :members: - -.. automodule:: raysect.core.acceleration.unaccelerated - :members: diff --git a/docs/source/api_reference/optical/main_optical_classes.rst b/docs/source/api_reference/optical/main_optical_classes.rst index e7a435f3..cb61134c 100644 --- a/docs/source/api_reference/optical/main_optical_classes.rst +++ b/docs/source/api_reference/optical/main_optical_classes.rst @@ -9,6 +9,10 @@ Optical Rays :members: :show-inheritance: +.. autoclass:: raysect.optical.loggingray.LoggingRay + :members: + :show-inheritance: + Spectral Functions ------------------ @@ -39,7 +43,7 @@ The CIE 1931 colour spaces define quantitatively the link between pure physical relationships between the spectrum and perceivable colours are based on the sensitivity curves for the three different cone cells in the human eye. Raysect implements three X, Y, Z normalised spectral functions from the CIE 1931 Standard Colorimetric Observer. For -more information see `Wikipedia `_. +more information see `Wikipedia `__. .. data:: raysect.optical.colour.ciexyz_x @@ -68,7 +72,7 @@ more information see `Wikipedia `_. +see `Wikipedia `__. .. autofunction:: raysect.optical.colour.ciexyz_to_srgb diff --git a/docs/source/api_reference/optical/observers.rst b/docs/source/api_reference/optical/observers.rst index 8d10e6c2..ef11f1aa 100644 --- a/docs/source/api_reference/optical/observers.rst +++ b/docs/source/api_reference/optical/observers.rst @@ -36,7 +36,7 @@ properties of all observers and the overall observing workflow. :members: :show-inheritance: -.. autoclass:: raysect.optical.observer.nonimaging.targetted_pixel.TargettedPixel +.. autoclass:: raysect.optical.observer.nonimaging.targeted_pixel.TargetedPixel :members: :show-inheritance: @@ -76,8 +76,14 @@ properties of all observers and the overall observing workflow. :members: :show-inheritance: -.. autoclass:: raysect.optical.observer.imaging.vector.VectorCamera +.. autoclass:: raysect.optical.observer.imaging.targeted_ccd.TargetedCCDArray :members: :show-inheritance: +.. autoclass:: raysect.optical.observer.imaging.vector.VectorCamera + :members: + :show-inheritance: +.. autoclass:: raysect.optical.observer.imaging.opencv.OpenCVCamera + :members: + :show-inheritance: diff --git a/docs/source/api_reference/optical/optical.rst b/docs/source/api_reference/optical/optical.rst index 31f567f5..749a37da 100644 --- a/docs/source/api_reference/optical/optical.rst +++ b/docs/source/api_reference/optical/optical.rst @@ -3,6 +3,8 @@ Optical Module ============== .. toctree:: + :titlesonly: + main_optical_classes observers pipelines diff --git a/docs/source/api_reference/optical/optical_surfaces.rst b/docs/source/api_reference/optical/optical_surfaces.rst index f90d7323..eaa0ad01 100644 --- a/docs/source/api_reference/optical/optical_surfaces.rst +++ b/docs/source/api_reference/optical/optical_surfaces.rst @@ -17,10 +17,10 @@ Emitters .. autoclass:: raysect.optical.material.emitter.UniformSurfaceEmitter :show-inheritance: -.. autoclass:: raysect.optical.material.AnisotropicSurfaceEmitter +.. autoclass:: raysect.optical.material.emitter.AnisotropicSurfaceEmitter :show-inheritance: -.. autoclass:: raysect.optical.material.Checkerboard +.. autoclass:: raysect.optical.material.emitter.Checkerboard :show-inheritance: Lambertian @@ -71,9 +71,6 @@ Debugging This module contains materials to aid with debugging and creating test scenes. -.. autoclass:: raysect.optical.material.emitter.Checkerboard - :show-inheritance: - .. autoclass:: raysect.optical.material.debug.Light :show-inheritance: diff --git a/docs/source/api_reference/primitives/primitives.rst b/docs/source/api_reference/primitives/primitives.rst index 2462e0c6..bb216cf4 100644 --- a/docs/source/api_reference/primitives/primitives.rst +++ b/docs/source/api_reference/primitives/primitives.rst @@ -5,10 +5,9 @@ Primitives Module ================= .. toctree:: + :titlesonly: + geometric_primitives meshes csg_operations optical_elements - - - diff --git a/docs/source/architecture.rst b/docs/source/architecture.rst deleted file mode 100644 index 0bc8a360..00000000 --- a/docs/source/architecture.rst +++ /dev/null @@ -1,10 +0,0 @@ - -============ -Architecture -============ - -core -~~~~ - -optical_model -~~~~~~~~~~~~~ diff --git a/docs/source/conf.py b/docs/source/conf.py index 206b8bf6..62f9342b 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -36,6 +36,8 @@ 'sphinx.ext.coverage', 'sphinx.ext.mathjax', 'sphinx.ext.viewcode', + 'sphinx.ext.intersphinx', + 'sphinx_rtd_theme', ] # Add any paths that contain templates here, relative to this directory. @@ -93,7 +95,7 @@ #show_authors = False # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = 'default' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] @@ -101,30 +103,24 @@ # If true, keep warnings as "system message" paragraphs in the built documents. #keep_warnings = False +# Intersphinx configuration +intersphinx_mapping = { + "python": ("https://docs.python.org/3/", None), + "numpy": ("https://numpy.org/doc/stable/", None), + "matplotlib": ("https://matplotlib.org/stable/", None), +} # -- Options for HTML output ---------------------------------------------- - -# on_rtd is whether we are on readthedocs.org, this line of code grabbed from docs.readthedocs.org -on_rtd = os.environ.get('READTHEDOCS', None) == 'True' - -if not on_rtd: # only import and set the theme if we're building docs locally - import sphinx_rtd_theme - html_theme = 'sphinx_rtd_theme' - html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] - - # html_theme = 'raysect_theme' - # html_theme_path = ['./raysect_theme'] - -# otherwise, readthedocs.org uses their theme by default, so no need to specify it - # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -# html_theme = 'default' +html_theme = "sphinx_rtd_theme" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -#html_theme_options = {} +html_theme_options = { + "logo_only": True, +} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] @@ -148,12 +144,10 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". - -html_static_path = ['static'] -html_context = {'css_files': [ - '_static/theme.css', # override wide tables in RTD theme - ] -} +html_static_path = ["static"] +html_css_files = [ + "custom.css", # custom styles including responsive tables +] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied diff --git a/docs/source/demonstrations/core/energy_conservation.rst b/docs/source/demonstrations/core/energy_conservation.rst index c42a301c..60a14179 100644 --- a/docs/source/demonstrations/core/energy_conservation.rst +++ b/docs/source/demonstrations/core/energy_conservation.rst @@ -1,3 +1,4 @@ +:orphan: .. _demo_energy_conservation: diff --git a/docs/source/demonstrations/core/multiple_importance_sampling.rst b/docs/source/demonstrations/core/multiple_importance_sampling.rst index c04665a8..8871cd0d 100644 --- a/docs/source/demonstrations/core/multiple_importance_sampling.rst +++ b/docs/source/demonstrations/core/multiple_importance_sampling.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_multiple_importance_sampling: Multiple Importance Sampling diff --git a/docs/source/demonstrations/core/ray_intersection_points.rst b/docs/source/demonstrations/core/ray_intersection_points.rst index dda705de..c792205b 100644 --- a/docs/source/demonstrations/core/ray_intersection_points.rst +++ b/docs/source/demonstrations/core/ray_intersection_points.rst @@ -1,3 +1,4 @@ +:orphan: .. _demo_ray_intersection_points: diff --git a/docs/source/demonstrations/core/ray_logging_trajectories.png b/docs/source/demonstrations/core/ray_logging_trajectories.png new file mode 100644 index 00000000..6af5473a Binary files /dev/null and b/docs/source/demonstrations/core/ray_logging_trajectories.png differ diff --git a/docs/source/demonstrations/core/ray_logging_trajectories.rst b/docs/source/demonstrations/core/ray_logging_trajectories.rst new file mode 100644 index 00000000..cbd1b78b --- /dev/null +++ b/docs/source/demonstrations/core/ray_logging_trajectories.rst @@ -0,0 +1,32 @@ +:orphan: + +.. _demo_ray_logging_trajectories: + +Ray Logging Trajectories +======================== + +This demonstration visualises full ray trajectories through a simple +optical system. The scene contains a symmetric bi-convex lens made of +Schott N-BK7 glass (used in transmission-only mode) and a large +absorbing target plane positioned behind the lens to terminate rays. + +For each starting position on a small grid in front of the lens, a +:obj:`~.LoggingRay` is traced through the scene. At every interaction with a +surface, the ray records the intersection hit point. After tracing, the +logged points are plotted in 3D with :obj:`matplotlib` as both a polyline +(black) and discrete markers (red), revealing how rays refract and where +they intersect geometry. + +See also :ref:`demo_ray_intersection_points` for a related example that +records only the first intersection point for each ray. + + +.. literalinclude:: ../../../../demos/optics/logging_trajectories.py + +.. figure:: ray_logging_trajectories.png + + Ray trajectories are logged and visualised in 3D space. + Rays start on a grid in front of the lens, refract through the + lens, and are absorbed by the target plane. + Red dots indicate ray-surface intersection points and black lines + show the full ray paths. \ No newline at end of file diff --git a/docs/source/demonstrations/core/world_contains_point.rst b/docs/source/demonstrations/core/world_contains_point.rst index f51ce097..2c37023f 100644 --- a/docs/source/demonstrations/core/world_contains_point.rst +++ b/docs/source/demonstrations/core/world_contains_point.rst @@ -1,3 +1,4 @@ +:orphan: .. _demo_point_inside_material: diff --git a/docs/source/demonstrations/demonstrations.rst b/docs/source/demonstrations/demonstrations.rst index 18cfacc5..702029e3 100644 --- a/docs/source/demonstrations/demonstrations.rst +++ b/docs/source/demonstrations/demonstrations.rst @@ -19,6 +19,11 @@ Core Functionality - .. image:: core/test_point_inside_material.png :height: 150px :width: 150px + * - :ref:`Ray Logging Trajectories ` + - Visualising full ray trajectories through a simple optical system. + - .. image:: core/ray_logging_trajectories.png + :height: 150px + :width: 150px * - :ref:`Energy conservation ` - Checking all emitted light is collected correctly on a 3D enclosing surface. - diff --git a/docs/source/demonstrations/materials/anisotropic_emitters.rst b/docs/source/demonstrations/materials/anisotropic_emitters.rst index 696bb765..d18225c7 100644 --- a/docs/source/demonstrations/materials/anisotropic_emitters.rst +++ b/docs/source/demonstrations/materials/anisotropic_emitters.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_anisotropic_emitters: Anisotropic Emitters diff --git a/docs/source/demonstrations/materials/brdf_surface3d_plots.png b/docs/source/demonstrations/materials/brdf_surface3d_plots.png index 95fda099..e5964c65 100644 Binary files a/docs/source/demonstrations/materials/brdf_surface3d_plots.png and b/docs/source/demonstrations/materials/brdf_surface3d_plots.png differ diff --git a/docs/source/demonstrations/materials/diamond.rst b/docs/source/demonstrations/materials/diamond.rst index fdf91d5b..d0b1bed5 100644 --- a/docs/source/demonstrations/materials/diamond.rst +++ b/docs/source/demonstrations/materials/diamond.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_diamond_material: A Diamond Material diff --git a/docs/source/demonstrations/materials/diffuse_colours.rst b/docs/source/demonstrations/materials/diffuse_colours.rst index e8dfccce..b85a04e4 100644 --- a/docs/source/demonstrations/materials/diffuse_colours.rst +++ b/docs/source/demonstrations/materials/diffuse_colours.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_diffuse_colours: Diffuse Colours diff --git a/docs/source/demonstrations/materials/emissive_colours.rst b/docs/source/demonstrations/materials/emissive_colours.rst index a2813c5b..f5e6ae2b 100644 --- a/docs/source/demonstrations/materials/emissive_colours.rst +++ b/docs/source/demonstrations/materials/emissive_colours.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_emissive_colours: Emissive Colours diff --git a/docs/source/demonstrations/materials/glass_bunny.rst b/docs/source/demonstrations/materials/glass_bunny.rst index f48e8b1e..a668c04a 100644 --- a/docs/source/demonstrations/materials/glass_bunny.rst +++ b/docs/source/demonstrations/materials/glass_bunny.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_glass_bunny: Glass Materials diff --git a/docs/source/demonstrations/materials/metal_materials.rst b/docs/source/demonstrations/materials/metal_materials.rst index e4b0563c..83460b51 100644 --- a/docs/source/demonstrations/materials/metal_materials.rst +++ b/docs/source/demonstrations/materials/metal_materials.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_metal_materials: Metal Materials diff --git a/docs/source/demonstrations/materials/polar_brdf_plots.rst b/docs/source/demonstrations/materials/polar_brdf_plots.rst index 5ef78758..c868d0ed 100644 --- a/docs/source/demonstrations/materials/polar_brdf_plots.rst +++ b/docs/source/demonstrations/materials/polar_brdf_plots.rst @@ -1,12 +1,13 @@ +:orphan: .. _demo_polar_brdf_plots: Polar BRDF Plots ================ -This example demonstrates how to sample the BRDFs of materials with the evaluate_brdf() method. +This example demonstrates how to sample the BRDFs of materials with the :obj:`evaluate_shading()` method. -.. literalinclude:: ../../../../demos/reflectivity/plotting_brdfs.py +.. literalinclude:: ../../../../demos/materials/plotting_brdfs.py .. image:: brdf_polar_plots.png :align: center diff --git a/docs/source/demonstrations/materials/surface3d_brdf_plots.rst b/docs/source/demonstrations/materials/surface3d_brdf_plots.rst index 4be88334..826f93eb 100644 --- a/docs/source/demonstrations/materials/surface3d_brdf_plots.rst +++ b/docs/source/demonstrations/materials/surface3d_brdf_plots.rst @@ -1,3 +1,4 @@ +:orphan: .. _demo_surface3d_brdf_plots: @@ -6,7 +7,7 @@ This example demonstrates how to make 3D surface plots of sampled material BRDF functions. -.. literalinclude:: ../../../../demos/reflectivity/plotting_brdfs_3d.py +.. literalinclude:: ../../../../demos/materials/plotting_brdfs_3d.py .. image:: brdf_surface3d_plots.png :align: center diff --git a/docs/source/demonstrations/materials/surface_roughness.rst b/docs/source/demonstrations/materials/surface_roughness.rst index 628b3867..da169bff 100644 --- a/docs/source/demonstrations/materials/surface_roughness.rst +++ b/docs/source/demonstrations/materials/surface_roughness.rst @@ -1,3 +1,4 @@ +:orphan: .. _demo_surface_roughness_scan: diff --git a/docs/source/demonstrations/materials/tetrahedra_mesh_emitter.rst b/docs/source/demonstrations/materials/tetrahedra_mesh_emitter.rst index 4cca25c9..be623c66 100644 --- a/docs/source/demonstrations/materials/tetrahedra_mesh_emitter.rst +++ b/docs/source/demonstrations/materials/tetrahedra_mesh_emitter.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_tetrahedra_mesh_emitters: A Tetrahedral Mesh Emitter diff --git a/docs/source/demonstrations/materials/volume_inhomogeneous.rst b/docs/source/demonstrations/materials/volume_inhomogeneous.rst index a2391e0c..5f34595b 100644 --- a/docs/source/demonstrations/materials/volume_inhomogeneous.rst +++ b/docs/source/demonstrations/materials/volume_inhomogeneous.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_custom_volume_emitters: A Custom Volume Emitter diff --git a/docs/source/demonstrations/observers/animations.rst b/docs/source/demonstrations/observers/animations.rst index 028012b6..42fab59c 100644 --- a/docs/source/demonstrations/observers/animations.rst +++ b/docs/source/demonstrations/observers/animations.rst @@ -1,3 +1,4 @@ +:orphan: .. _demo_making_animations: @@ -16,5 +17,3 @@ You can use `ImageMagic's `_ convert command to ma :: $> convert -delay 20 -loop 0 *.png myimage.gif -:: - diff --git a/docs/source/demonstrations/observers/cornell_box.rst b/docs/source/demonstrations/observers/cornell_box.rst index a2c6eee1..054b52de 100644 --- a/docs/source/demonstrations/observers/cornell_box.rst +++ b/docs/source/demonstrations/observers/cornell_box.rst @@ -1,3 +1,4 @@ +:orphan: .. _demo_cornell_box: diff --git a/docs/source/demonstrations/observers/cornell_box_with_camera.rst b/docs/source/demonstrations/observers/cornell_box_with_camera.rst index 146aa699..296fee65 100644 --- a/docs/source/demonstrations/observers/cornell_box_with_camera.rst +++ b/docs/source/demonstrations/observers/cornell_box_with_camera.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_cornell_box_with_camera: Making a camera diff --git a/docs/source/demonstrations/observers/mesh_observers.rst b/docs/source/demonstrations/observers/mesh_observers.rst index 417cdcbb..61f2bd11 100644 --- a/docs/source/demonstrations/observers/mesh_observers.rst +++ b/docs/source/demonstrations/observers/mesh_observers.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_mesh_observers: Mesh Observers diff --git a/docs/source/demonstrations/observers/metal_balls_with_lens.rst b/docs/source/demonstrations/observers/metal_balls_with_lens.rst index b75a30a9..b4d10145 100644 --- a/docs/source/demonstrations/observers/metal_balls_with_lens.rst +++ b/docs/source/demonstrations/observers/metal_balls_with_lens.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_metal_ball_with_lens: Making a camera 2 diff --git a/docs/source/demonstrations/observers/optical_fibre.rst b/docs/source/demonstrations/observers/optical_fibre.rst index 23e6cdb4..3c8cf63a 100644 --- a/docs/source/demonstrations/observers/optical_fibre.rst +++ b/docs/source/demonstrations/observers/optical_fibre.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_optical_fibre: Optical Fibre Observer diff --git a/docs/source/demonstrations/observers/orthographic_camera.rst b/docs/source/demonstrations/observers/orthographic_camera.rst index 90fb4b9b..fd14c07a 100644 --- a/docs/source/demonstrations/observers/orthographic_camera.rst +++ b/docs/source/demonstrations/observers/orthographic_camera.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_orthographic_camera: Orthographic Camera diff --git a/docs/source/demonstrations/optics/etendue_of_pinhole.rst b/docs/source/demonstrations/optics/etendue_of_pinhole.rst index 40fedff6..528107c9 100644 --- a/docs/source/demonstrations/optics/etendue_of_pinhole.rst +++ b/docs/source/demonstrations/optics/etendue_of_pinhole.rst @@ -1,3 +1,5 @@ +:orphan: + .. _demo_etendue_of_pinhole: Etendue diff --git a/docs/source/demonstrations/optics/prism.rst b/docs/source/demonstrations/optics/prism.rst index 8fa18b18..d0b464e2 100644 --- a/docs/source/demonstrations/optics/prism.rst +++ b/docs/source/demonstrations/optics/prism.rst @@ -1,3 +1,4 @@ +:orphan: .. _demo_prism_dispersion: diff --git a/docs/source/index.rst b/docs/source/index.rst index de09e5a7..34caf8d1 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -74,6 +74,7 @@ Please post a question on the `github issue queue `_. The easiest way to install Raysect is using `pip `_:: - pip install raysect + python -m pip install raysect -If pip is not available, the source files can be downloaded from `pypi `_ or from our `development repository `_. Once you have the source files, locate the folder containing setup.py and run:: +If you prefer to install Raysect from source, the source files can be downloaded from `pypi `_ or from our `development repository `_. Once you have the source files, locate the folder containing the ``pyproject.toml`` file and run:: - python setup.py install + python -m pip install . -If all the required dependencies are present (cython, numpy, scipy and matplotlib), this should start the Raysect compilation and installation process. +This should start the Raysect compilation and installation process. +All required dependencies are automatically installed. If you would like to play with the bleeding-edge code or contribute to development, please see the Raysect development repository on `github `_. @@ -32,9 +29,12 @@ If you would like to play with the bleeding-edge code or contribute to developme Testing ~~~~~~~ -A selection of test scripts can be run with the `nose` testing framework. These are routinely -run on the development version. Running ``nosetests`` at the terminal in the source directory -should run all of these tests to completion without errors or failures. +A selection of test scripts can be run using Python's built-in `unittest `_ framework. +These tests are included in the source code and can be executed by running the following command in the source directory:: + + python -m unittest -v + +This will automatically discover and run all tests without errors or failures. Many of the demos used throughout the Raysect documentation are distributed with the source code in -the ``demo`` folder. +the ``demos`` folder. diff --git a/docs/source/quickstart_more.rst b/docs/source/quickstart_more.rst deleted file mode 100644 index 5871947e..00000000 --- a/docs/source/quickstart_more.rst +++ /dev/null @@ -1,32 +0,0 @@ -============== -Camera example -============== -- create a world -- place a primitive (sphere) in a scene with a lambert material. -- Primitive = anything that rays interact with. Only rays. Convention => object => primitive. -- put sphere on something => a ground plane (lambert). -- need to illuminate it => checkerboard -- scene but nothing to oberve. Anything that fires rays and samples the scene. -- Add a camera -- Move to right place, explain affine transforms. -- Render! -- oh its all noisy -- explain statistical sampling and path tracer -- turn up number of samples -- set camera to accumulate. -- re-sample -- change color of sphere? Define reflectivity function -- change material to glass - - -================================ -Spectral Examples based on scene -================================ -- reset sphere to white -- manual sampling of scene -- sample d65 white spectra -- convert sphere to coloured lambert, reflected absorption curve. -- convert sphere to coloured glass, define refractive index and absorption curve. - - -- have a look at flask quickstart \ No newline at end of file diff --git a/docs/source/sampling.rst b/docs/source/sampling.rst deleted file mode 100644 index 50d5570a..00000000 --- a/docs/source/sampling.rst +++ /dev/null @@ -1,75 +0,0 @@ - -Monte-Carlo Sampling -==================== - -The coordinate transformation is applied by multiplying the column vector for -the desired Point3D/Vector3D against the transformation matrix. For example, -if the original vector :math:`\\vec{V_a}` is in space A and the transformation matrix -:math:`\\mathbf{T_{AB}}` describes the position and orientation of Space A relative -to Space B, then the multiplication - - -General Monte-carlo integration -------------------------------- - -.. math:: - - Q_{N} = \\frac{1}{N} \\sum_{i=1}^{N} \frac{f(x_0) \\cos(\\theta)}{p(x_0)} - - -Uniform Sampling ----------------- - -.. math:: - - p(x_0) = \\frac{1}{2 \\pi} - - -.. math:: - - Q_{N} = \\frac{2 \\pi}{N} \\sum_{i=1}^{N} f(x_0) \\cos(\\theta) - - -Cosine Weighted ---------------- - -.. math:: - - p(x_0) = \\frac{\\cos(\\theta)}{\\pi} - -.. math:: - - Q_{N} = \\frac{\\pi}{N \\cos(\\theta)} \\sum_{i=1}^{N} f(x_0) \\cos(\\theta) = \\frac{\\pi}{N} \\sum_{i=1}^{N} f(x_0) - - -Irradiance vs Radiance ----------------------- - -Irradiance at surface. - -.. math:: - - I = \\frac{1}{N} \\sum_{i=1}^{N} \\frac{f(x_0) \\cos(\\theta)}{p(x)} - -Conversion to radiance: - -.. math:: - - radiance = I / (2 \\pi) - - -Implementation --------------- - -Implementation in base observer: - -.. math:: - - radiance = \\frac{1}{2 \\pi} \\frac{1}{N} \\sum_{i=1}^{N} w f(x) - -- f(x) is obtained from ray-tracing in base class -- w is cos(theta)/p(x). -- for an observer its this. -- or a surface its this. - - diff --git a/docs/source/static/custom.css b/docs/source/static/custom.css new file mode 100644 index 00000000..31079af8 --- /dev/null +++ b/docs/source/static/custom.css @@ -0,0 +1,12 @@ +/* Custom CSS for Raysect Documentation */ + +/* Responsive Table Styling - Allow text wrapping in table cells */ +.wy-table-responsive table td, +.wy-table-responsive table th { + white-space: normal !important; +} + +/* Image aspect ratio preservation in table cells */ +.wy-table-responsive table td img { + height: auto !important; +} \ No newline at end of file diff --git a/docs/source/static/theme.css b/docs/source/static/theme.css deleted file mode 100644 index 071e67e8..00000000 --- a/docs/source/static/theme.css +++ /dev/null @@ -1,6038 +0,0 @@ -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box -} - -article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { - display: block -} - -audio, canvas, video { - display: inline-block; - *display: inline; - *zoom: 1 -} - -audio:not([controls]) { - display: none -} - -[hidden] { - 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:hover, a:active { - outline: 0 -} - -abbr[title] { - border-bottom: 1px dotted -} - -b, strong { - font-weight: bold -} - -blockquote { - margin: 0 -} - -dfn { - font-style: italic -} - -ins { - background: #ff9; - color: #000; - text-decoration: none -} - -mark { - background: #ff0; - color: #000; - font-style: italic; - font-weight: bold -} - -pre, code, .rst-content tt, .rst-content code, kbd, samp { - font-family: monospace, serif; - _font-family: "courier new", monospace; - font-size: 1em -} - -pre { - white-space: pre -} - -q { - quotes: none -} - -q:before, q:after { - content: ""; - content: none -} - -small { - font-size: 85% -} - -sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline -} - -sup { - top: -0.5em -} - -sub { - bottom: -0.25em -} - -ul, ol, dl { - 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 { - margin: 0 -} - -form { - margin: 0 -} - -fieldset { - border: 0; - margin: 0; - padding: 0 -} - -label { - cursor: pointer -} - -legend { - border: 0; - *margin-left: -7px; - padding: 0; - white-space: normal -} - -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="checkbox"], input[type="radio"] { - box-sizing: border-box; - padding: 0; - *width: 13px; - *height: 13px -} - -input[type="search"] { - -webkit-appearance: textfield; - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; - box-sizing: content-box -} - -input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none -} - -button::-moz-focus-inner, input::-moz-focus-inner { - border: 0; - padding: 0 -} - -textarea { - overflow: auto; - vertical-align: top; - resize: vertical -} - -table { - border-collapse: collapse; - border-spacing: 0 -} - -td { - vertical-align: top -} - -.chromeframe { - margin: 0.2em 0; - background: #ccc; - color: #000; - padding: 0.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 { - html, body, 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^="javascript:"]:after, a[href^="#"]:after { - content: "" - } - - pre, blockquote { - page-break-inside: avoid - } - - thead { - display: table-header-group - } - - tr, img { - page-break-inside: avoid - } - - img { - max-width: 100% !important - } - - @page { - margin: 0.5cm - } - - p, h2, .rst-content .toctree-wrapper p.caption, h3 { - orphans: 3; - widows: 3 - } - - h2, .rst-content .toctree-wrapper p.caption, h3 { - page-break-after: avoid - } -} - -.fa:before, .wy-menu-vertical li span.toctree-expand:before, .wy-menu-vertical li.on a span.toctree-expand:before, .wy-menu-vertical li.current > a span.toctree-expand:before, .rst-content .admonition-title: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 dl dt .headerlink:before, .rst-content p.caption .headerlink:before, .rst-content tt.download span:first-child:before, .rst-content code.download span:first-child:before, .icon:before, .wy-dropdown .caret:before, .wy-inline-validate.wy-inline-validate-success .wy-input-context:before, .wy-inline-validate.wy-inline-validate-danger .wy-input-context:before, .wy-inline-validate.wy-inline-validate-warning .wy-input-context:before, .wy-inline-validate.wy-inline-validate-info .wy-input-context:before, .wy-alert, .rst-content .note, .rst-content .attention, .rst-content .caution, .rst-content .danger, .rst-content .error, .rst-content .hint, .rst-content .important, .rst-content .tip, .rst-content .warning, .rst-content .seealso, .rst-content .admonition-todo, .btn, input[type="text"], input[type="password"], input[type="email"], input[type="url"], input[type="date"], input[type="month"], input[type="time"], input[type="datetime"], input[type="datetime-local"], input[type="week"], input[type="number"], input[type="search"], input[type="tel"], input[type="color"], select, textarea, .wy-menu-vertical li.on a, .wy-menu-vertical li.current > a, .wy-side-nav-search > a, .wy-side-nav-search .wy-dropdown > a, .wy-nav-top a { - -webkit-font-smoothing: antialiased -} - -.clearfix { - *zoom: 1 -} - -.clearfix:before, .clearfix:after { - display: table; - content: "" -} - -.clearfix:after { - clear: both -} - -/*! - * Font Awesome 4.6.3 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?v=4.6.3"); - src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.6.3") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.6.3") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.6.3") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular") format("svg"); - font-weight: normal; - font-style: normal -} - -.fa, .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.current > a span.toctree-expand, .rst-content .admonition-title, .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 dl dt .headerlink, .rst-content p.caption .headerlink, .rst-content tt.download span:first-child, .rst-content code.download span:first-child, .icon { - 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: solid 0.08em #eee; - border-radius: .1em -} - -.fa-pull-left { - float: left -} - -.fa-pull-right { - float: right -} - -.fa.fa-pull-left, .wy-menu-vertical li span.fa-pull-left.toctree-expand, .wy-menu-vertical li.on a span.fa-pull-left.toctree-expand, .wy-menu-vertical li.current > a span.fa-pull-left.toctree-expand, .rst-content .fa-pull-left.admonition-title, .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 dl dt .fa-pull-left.headerlink, .rst-content p.caption .fa-pull-left.headerlink, .rst-content tt.download span.fa-pull-left:first-child, .rst-content code.download span.fa-pull-left:first-child, .fa-pull-left.icon { - margin-right: .3em -} - -.fa.fa-pull-right, .wy-menu-vertical li span.fa-pull-right.toctree-expand, .wy-menu-vertical li.on a span.fa-pull-right.toctree-expand, .wy-menu-vertical li.current > a span.fa-pull-right.toctree-expand, .rst-content .fa-pull-right.admonition-title, .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 dl dt .fa-pull-right.headerlink, .rst-content p.caption .fa-pull-right.headerlink, .rst-content tt.download span.fa-pull-right:first-child, .rst-content code.download span.fa-pull-right:first-child, .fa-pull-right.icon { - margin-left: .3em -} - -.pull-right { - float: right -} - -.pull-left { - float: left -} - -.fa.pull-left, .wy-menu-vertical li span.pull-left.toctree-expand, .wy-menu-vertical li.on a span.pull-left.toctree-expand, .wy-menu-vertical li.current > a span.pull-left.toctree-expand, .rst-content .pull-left.admonition-title, .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 dl dt .pull-left.headerlink, .rst-content p.caption .pull-left.headerlink, .rst-content tt.download span.pull-left:first-child, .rst-content code.download span.pull-left:first-child, .pull-left.icon { - margin-right: .3em -} - -.fa.pull-right, .wy-menu-vertical li span.pull-right.toctree-expand, .wy-menu-vertical li.on a span.pull-right.toctree-expand, .wy-menu-vertical li.current > a span.pull-right.toctree-expand, .rst-content .pull-right.admonition-title, .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 dl dt .pull-right.headerlink, .rst-content p.caption .pull-right.headerlink, .rst-content tt.download span.pull-right:first-child, .rst-content code.download span.pull-right:first-child, .pull-right.icon { - margin-left: .3em -} - -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear -} - -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8) -} - -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg) - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg) - } -} - -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg) - } - 100% { - -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: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1) -} - -.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1) -} - -:root .fa-rotate-90, :root .fa-rotate-180, :root .fa-rotate-270, :root .fa-flip-horizontal, :root .fa-flip-vertical { - 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-remove:before, .fa-close: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-gear:before, .fa-cog: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 tt.download span:first-child:before, .rst-content code.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-rotate-right:before, .fa-repeat: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-photo:before, .fa-image: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, .wy-inline-validate.wy-inline-validate-warning .wy-input-context:before, .wy-inline-validate.wy-inline-validate-info .wy-input-context:before, .rst-content .admonition-title: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-warning:before, .fa-exclamation-triangle: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-gears:before, .fa-cogs: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-save:before, .fa-floppy-o:before { - content: "" -} - -.fa-square:before { - content: "" -} - -.fa-navicon:before, .fa-reorder:before, .fa-bars: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, .wy-dropdown .caret:before, .icon-caret-down:before { - content: "" -} - -.fa-caret-up:before { - content: "" -} - -.fa-caret-left:before { - content: "" -} - -.fa-caret-right:before { - content: "" -} - -.fa-columns:before { - content: "" -} - -.fa-unsorted:before, .fa-sort:before { - content: "" -} - -.fa-sort-down:before, .fa-sort-desc:before { - content: "" -} - -.fa-sort-up:before, .fa-sort-asc:before { - content: "" -} - -.fa-envelope:before { - content: "" -} - -.fa-linkedin:before { - content: "" -} - -.fa-rotate-left:before, .fa-undo:before { - content: "" -} - -.fa-legal:before, .fa-gavel:before { - content: "" -} - -.fa-dashboard:before, .fa-tachometer:before { - content: "" -} - -.fa-comment-o:before { - content: "" -} - -.fa-comments-o:before { - content: "" -} - -.fa-flash:before, .fa-bolt:before { - content: "" -} - -.fa-sitemap:before { - content: "" -} - -.fa-umbrella:before { - content: "" -} - -.fa-paste:before, .fa-clipboard: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-unlink:before, .fa-chain-broken: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.on a span.toctree-expand:before, .wy-menu-vertical li.current > a span.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-toggle-down:before, .fa-caret-square-o-down:before { - content: "" -} - -.fa-toggle-up:before, .fa-caret-square-o-up:before { - content: "" -} - -.fa-toggle-right:before, .fa-caret-square-o-right:before { - content: "" -} - -.fa-euro:before, .fa-eur:before { - content: "" -} - -.fa-gbp:before { - content: "" -} - -.fa-dollar:before, .fa-usd:before { - content: "" -} - -.fa-rupee:before, .fa-inr:before { - content: "" -} - -.fa-cny:before, .fa-rmb:before, .fa-yen:before, .fa-jpy:before { - content: "" -} - -.fa-ruble:before, .fa-rouble:before, .fa-rub:before { - content: "" -} - -.fa-won:before, .fa-krw: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-toggle-left:before, .fa-caret-square-o-left:before { - content: "" -} - -.fa-dot-circle-o:before { - content: "" -} - -.fa-wheelchair:before { - content: "" -} - -.fa-vimeo-square:before { - content: "" -} - -.fa-turkish-lira:before, .fa-try:before { - content: "" -} - -.fa-plus-square-o:before, .wy-menu-vertical li span.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-institution:before, .fa-bank:before, .fa-university:before { - content: "" -} - -.fa-mortar-board:before, .fa-graduation-cap: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-photo-o:before, .fa-file-picture-o:before, .fa-file-image-o:before { - content: "" -} - -.fa-file-zip-o:before, .fa-file-archive-o:before { - content: "" -} - -.fa-file-sound-o:before, .fa-file-audio-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-saver:before, .fa-support:before, .fa-life-ring:before { - content: "" -} - -.fa-circle-o-notch:before { - content: "" -} - -.fa-ra:before, .fa-resistance:before, .fa-rebel:before { - content: "" -} - -.fa-ge:before, .fa-empire:before { - content: "" -} - -.fa-git-square:before { - content: "" -} - -.fa-git:before { - content: "" -} - -.fa-y-combinator-square:before, .fa-yc-square:before, .fa-hacker-news:before { - content: "" -} - -.fa-tencent-weibo:before { - content: "" -} - -.fa-qq:before { - content: "" -} - -.fa-wechat:before, .fa-weixin:before { - content: "" -} - -.fa-send:before, .fa-paper-plane:before { - content: "" -} - -.fa-send-o:before, .fa-paper-plane-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-soccer-ball-o:before, .fa-futbol-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-shekel:before, .fa-sheqel:before, .fa-ils: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-hotel:before, .fa-bed:before { - content: "" -} - -.fa-viacoin:before { - content: "" -} - -.fa-train:before { - content: "" -} - -.fa-subway:before { - content: "" -} - -.fa-medium:before { - content: "" -} - -.fa-yc:before, .fa-y-combinator:before { - content: "" -} - -.fa-optin-monster:before { - content: "" -} - -.fa-opencart:before { - content: "" -} - -.fa-expeditedssl:before { - content: "" -} - -.fa-battery-4:before, .fa-battery-full: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-stop-o:before, .fa-hand-paper-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-tv:before, .fa-television: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-asl-interpreting:before, .fa-american-sign-language-interpreting:before { - content: "" -} - -.fa-deafness:before, .fa-hard-of-hearing:before, .fa-deaf:before { - content: "" -} - -.fa-glide:before { - content: "" -} - -.fa-glide-g:before { - content: "" -} - -.fa-signing:before, .fa-sign-language: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: "" -} - -.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, .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.current > a span.toctree-expand, .rst-content .admonition-title, .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 dl dt .headerlink, .rst-content p.caption .headerlink, .rst-content tt.download span:first-child, .rst-content code.download span:first-child, .icon, .wy-dropdown .caret, .wy-inline-validate.wy-inline-validate-success .wy-input-context, .wy-inline-validate.wy-inline-validate-danger .wy-input-context, .wy-inline-validate.wy-inline-validate-warning .wy-input-context, .wy-inline-validate.wy-inline-validate-info .wy-input-context { - font-family: inherit -} - -.fa:before, .wy-menu-vertical li span.toctree-expand:before, .wy-menu-vertical li.on a span.toctree-expand:before, .wy-menu-vertical li.current > a span.toctree-expand:before, .rst-content .admonition-title: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 dl dt .headerlink:before, .rst-content p.caption .headerlink:before, .rst-content tt.download span:first-child:before, .rst-content code.download span:first-child:before, .icon:before, .wy-dropdown .caret:before, .wy-inline-validate.wy-inline-validate-success .wy-input-context:before, .wy-inline-validate.wy-inline-validate-danger .wy-input-context:before, .wy-inline-validate.wy-inline-validate-warning .wy-input-context:before, .wy-inline-validate.wy-inline-validate-info .wy-input-context:before { - font-family: "FontAwesome"; - display: inline-block; - font-style: normal; - font-weight: normal; - line-height: 1; - text-decoration: inherit -} - -a .fa, a .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li a span.toctree-expand, .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.current > a span.toctree-expand, a .rst-content .admonition-title, .rst-content a .admonition-title, a .rst-content h1 .headerlink, .rst-content h1 a .headerlink, a .rst-content h2 .headerlink, .rst-content h2 a .headerlink, a .rst-content h3 .headerlink, .rst-content h3 a .headerlink, a .rst-content h4 .headerlink, .rst-content h4 a .headerlink, a .rst-content h5 .headerlink, .rst-content h5 a .headerlink, a .rst-content h6 .headerlink, .rst-content h6 a .headerlink, a .rst-content dl dt .headerlink, .rst-content dl dt a .headerlink, a .rst-content p.caption .headerlink, .rst-content p.caption a .headerlink, a .rst-content tt.download span:first-child, .rst-content tt.download a span:first-child, a .rst-content code.download span:first-child, .rst-content code.download a span:first-child, a .icon { - display: inline-block; - text-decoration: inherit -} - -.btn .fa, .btn .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li .btn span.toctree-expand, .btn .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.on a .btn span.toctree-expand, .btn .wy-menu-vertical li.current > a span.toctree-expand, .wy-menu-vertical li.current > a .btn span.toctree-expand, .btn .rst-content .admonition-title, .rst-content .btn .admonition-title, .btn .rst-content h1 .headerlink, .rst-content h1 .btn .headerlink, .btn .rst-content h2 .headerlink, .rst-content h2 .btn .headerlink, .btn .rst-content h3 .headerlink, .rst-content h3 .btn .headerlink, .btn .rst-content h4 .headerlink, .rst-content h4 .btn .headerlink, .btn .rst-content h5 .headerlink, .rst-content h5 .btn .headerlink, .btn .rst-content h6 .headerlink, .rst-content h6 .btn .headerlink, .btn .rst-content dl dt .headerlink, .rst-content dl dt .btn .headerlink, .btn .rst-content p.caption .headerlink, .rst-content p.caption .btn .headerlink, .btn .rst-content tt.download span:first-child, .rst-content tt.download .btn span:first-child, .btn .rst-content code.download span:first-child, .rst-content code.download .btn span:first-child, .btn .icon, .nav .fa, .nav .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li .nav span.toctree-expand, .nav .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.on a .nav span.toctree-expand, .nav .wy-menu-vertical li.current > a span.toctree-expand, .wy-menu-vertical li.current > a .nav span.toctree-expand, .nav .rst-content .admonition-title, .rst-content .nav .admonition-title, .nav .rst-content h1 .headerlink, .rst-content h1 .nav .headerlink, .nav .rst-content h2 .headerlink, .rst-content h2 .nav .headerlink, .nav .rst-content h3 .headerlink, .rst-content h3 .nav .headerlink, .nav .rst-content h4 .headerlink, .rst-content h4 .nav .headerlink, .nav .rst-content h5 .headerlink, .rst-content h5 .nav .headerlink, .nav .rst-content h6 .headerlink, .rst-content h6 .nav .headerlink, .nav .rst-content dl dt .headerlink, .rst-content dl dt .nav .headerlink, .nav .rst-content p.caption .headerlink, .rst-content p.caption .nav .headerlink, .nav .rst-content tt.download span:first-child, .rst-content tt.download .nav span:first-child, .nav .rst-content code.download span:first-child, .rst-content code.download .nav span:first-child, .nav .icon { - display: inline -} - -.btn .fa.fa-large, .btn .wy-menu-vertical li span.fa-large.toctree-expand, .wy-menu-vertical li .btn span.fa-large.toctree-expand, .btn .rst-content .fa-large.admonition-title, .rst-content .btn .fa-large.admonition-title, .btn .rst-content h1 .fa-large.headerlink, .rst-content h1 .btn .fa-large.headerlink, .btn .rst-content h2 .fa-large.headerlink, .rst-content h2 .btn .fa-large.headerlink, .btn .rst-content h3 .fa-large.headerlink, .rst-content h3 .btn .fa-large.headerlink, .btn .rst-content h4 .fa-large.headerlink, .rst-content h4 .btn .fa-large.headerlink, .btn .rst-content h5 .fa-large.headerlink, .rst-content h5 .btn .fa-large.headerlink, .btn .rst-content h6 .fa-large.headerlink, .rst-content h6 .btn .fa-large.headerlink, .btn .rst-content dl dt .fa-large.headerlink, .rst-content dl dt .btn .fa-large.headerlink, .btn .rst-content p.caption .fa-large.headerlink, .rst-content p.caption .btn .fa-large.headerlink, .btn .rst-content tt.download span.fa-large:first-child, .rst-content tt.download .btn span.fa-large:first-child, .btn .rst-content code.download span.fa-large:first-child, .rst-content code.download .btn span.fa-large:first-child, .btn .fa-large.icon, .nav .fa.fa-large, .nav .wy-menu-vertical li span.fa-large.toctree-expand, .wy-menu-vertical li .nav span.fa-large.toctree-expand, .nav .rst-content .fa-large.admonition-title, .rst-content .nav .fa-large.admonition-title, .nav .rst-content h1 .fa-large.headerlink, .rst-content h1 .nav .fa-large.headerlink, .nav .rst-content h2 .fa-large.headerlink, .rst-content h2 .nav .fa-large.headerlink, .nav .rst-content h3 .fa-large.headerlink, .rst-content h3 .nav .fa-large.headerlink, .nav .rst-content h4 .fa-large.headerlink, .rst-content h4 .nav .fa-large.headerlink, .nav .rst-content h5 .fa-large.headerlink, .rst-content h5 .nav .fa-large.headerlink, .nav .rst-content h6 .fa-large.headerlink, .rst-content h6 .nav .fa-large.headerlink, .nav .rst-content dl dt .fa-large.headerlink, .rst-content dl dt .nav .fa-large.headerlink, .nav .rst-content p.caption .fa-large.headerlink, .rst-content p.caption .nav .fa-large.headerlink, .nav .rst-content tt.download span.fa-large:first-child, .rst-content tt.download .nav span.fa-large:first-child, .nav .rst-content code.download span.fa-large:first-child, .rst-content code.download .nav span.fa-large:first-child, .nav .fa-large.icon { - line-height: 0.9em -} - -.btn .fa.fa-spin, .btn .wy-menu-vertical li span.fa-spin.toctree-expand, .wy-menu-vertical li .btn span.fa-spin.toctree-expand, .btn .rst-content .fa-spin.admonition-title, .rst-content .btn .fa-spin.admonition-title, .btn .rst-content h1 .fa-spin.headerlink, .rst-content h1 .btn .fa-spin.headerlink, .btn .rst-content h2 .fa-spin.headerlink, .rst-content h2 .btn .fa-spin.headerlink, .btn .rst-content h3 .fa-spin.headerlink, .rst-content h3 .btn .fa-spin.headerlink, .btn .rst-content h4 .fa-spin.headerlink, .rst-content h4 .btn .fa-spin.headerlink, .btn .rst-content h5 .fa-spin.headerlink, .rst-content h5 .btn .fa-spin.headerlink, .btn .rst-content h6 .fa-spin.headerlink, .rst-content h6 .btn .fa-spin.headerlink, .btn .rst-content dl dt .fa-spin.headerlink, .rst-content dl dt .btn .fa-spin.headerlink, .btn .rst-content p.caption .fa-spin.headerlink, .rst-content p.caption .btn .fa-spin.headerlink, .btn .rst-content tt.download span.fa-spin:first-child, .rst-content tt.download .btn span.fa-spin:first-child, .btn .rst-content code.download span.fa-spin:first-child, .rst-content code.download .btn span.fa-spin:first-child, .btn .fa-spin.icon, .nav .fa.fa-spin, .nav .wy-menu-vertical li span.fa-spin.toctree-expand, .wy-menu-vertical li .nav span.fa-spin.toctree-expand, .nav .rst-content .fa-spin.admonition-title, .rst-content .nav .fa-spin.admonition-title, .nav .rst-content h1 .fa-spin.headerlink, .rst-content h1 .nav .fa-spin.headerlink, .nav .rst-content h2 .fa-spin.headerlink, .rst-content h2 .nav .fa-spin.headerlink, .nav .rst-content h3 .fa-spin.headerlink, .rst-content h3 .nav .fa-spin.headerlink, .nav .rst-content h4 .fa-spin.headerlink, .rst-content h4 .nav .fa-spin.headerlink, .nav .rst-content h5 .fa-spin.headerlink, .rst-content h5 .nav .fa-spin.headerlink, .nav .rst-content h6 .fa-spin.headerlink, .rst-content h6 .nav .fa-spin.headerlink, .nav .rst-content dl dt .fa-spin.headerlink, .rst-content dl dt .nav .fa-spin.headerlink, .nav .rst-content p.caption .fa-spin.headerlink, .rst-content p.caption .nav .fa-spin.headerlink, .nav .rst-content tt.download span.fa-spin:first-child, .rst-content tt.download .nav span.fa-spin:first-child, .nav .rst-content code.download span.fa-spin:first-child, .rst-content code.download .nav span.fa-spin:first-child, .nav .fa-spin.icon { - display: inline-block -} - -.btn.fa:before, .wy-menu-vertical li span.btn.toctree-expand:before, .rst-content .btn.admonition-title: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 dl dt .btn.headerlink:before, .rst-content p.caption .btn.headerlink:before, .rst-content tt.download span.btn:first-child:before, .rst-content code.download span.btn:first-child:before, .btn.icon:before { - opacity: 0.5; - -webkit-transition: opacity 0.05s ease-in; - -moz-transition: opacity 0.05s ease-in; - transition: opacity 0.05s ease-in -} - -.btn.fa:hover:before, .wy-menu-vertical li span.btn.toctree-expand:hover:before, .rst-content .btn.admonition-title: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 dl dt .btn.headerlink:hover:before, .rst-content p.caption .btn.headerlink:hover:before, .rst-content tt.download span.btn:first-child:hover:before, .rst-content code.download span.btn:first-child:hover:before, .btn.icon:hover:before { - opacity: 1 -} - -.btn-mini .fa:before, .btn-mini .wy-menu-vertical li span.toctree-expand:before, .wy-menu-vertical li .btn-mini span.toctree-expand:before, .btn-mini .rst-content .admonition-title:before, .rst-content .btn-mini .admonition-title:before, .btn-mini .rst-content h1 .headerlink:before, .rst-content h1 .btn-mini .headerlink:before, .btn-mini .rst-content h2 .headerlink:before, .rst-content h2 .btn-mini .headerlink:before, .btn-mini .rst-content h3 .headerlink:before, .rst-content h3 .btn-mini .headerlink:before, .btn-mini .rst-content h4 .headerlink:before, .rst-content h4 .btn-mini .headerlink:before, .btn-mini .rst-content h5 .headerlink:before, .rst-content h5 .btn-mini .headerlink:before, .btn-mini .rst-content h6 .headerlink:before, .rst-content h6 .btn-mini .headerlink:before, .btn-mini .rst-content dl dt .headerlink:before, .rst-content dl dt .btn-mini .headerlink:before, .btn-mini .rst-content p.caption .headerlink:before, .rst-content p.caption .btn-mini .headerlink:before, .btn-mini .rst-content tt.download span:first-child:before, .rst-content tt.download .btn-mini span:first-child:before, .btn-mini .rst-content code.download span:first-child:before, .rst-content code.download .btn-mini span:first-child:before, .btn-mini .icon:before { - font-size: 14px; - vertical-align: -15% -} - -.wy-alert, .rst-content .note, .rst-content .attention, .rst-content .caution, .rst-content .danger, .rst-content .error, .rst-content .hint, .rst-content .important, .rst-content .tip, .rst-content .warning, .rst-content .seealso, .rst-content .admonition-todo { - padding: 12px; - line-height: 24px; - margin-bottom: 24px; - background: #e7f2fa -} - -.wy-alert-title, .rst-content .admonition-title { - color: #fff; - font-weight: bold; - display: block; - color: #fff; - background: #6ab0de; - margin: -12px; - padding: 6px 12px; - margin-bottom: 12px -} - -.wy-alert.wy-alert-danger, .rst-content .wy-alert-danger.note, .rst-content .wy-alert-danger.attention, .rst-content .wy-alert-danger.caution, .rst-content .danger, .rst-content .error, .rst-content .wy-alert-danger.hint, .rst-content .wy-alert-danger.important, .rst-content .wy-alert-danger.tip, .rst-content .wy-alert-danger.warning, .rst-content .wy-alert-danger.seealso, .rst-content .wy-alert-danger.admonition-todo { - background: #fdf3f2 -} - -.wy-alert.wy-alert-danger .wy-alert-title, .rst-content .wy-alert-danger.note .wy-alert-title, .rst-content .wy-alert-danger.attention .wy-alert-title, .rst-content .wy-alert-danger.caution .wy-alert-title, .rst-content .danger .wy-alert-title, .rst-content .error .wy-alert-title, .rst-content .wy-alert-danger.hint .wy-alert-title, .rst-content .wy-alert-danger.important .wy-alert-title, .rst-content .wy-alert-danger.tip .wy-alert-title, .rst-content .wy-alert-danger.warning .wy-alert-title, .rst-content .wy-alert-danger.seealso .wy-alert-title, .rst-content .wy-alert-danger.admonition-todo .wy-alert-title, .wy-alert.wy-alert-danger .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-danger .admonition-title, .rst-content .wy-alert-danger.note .admonition-title, .rst-content .wy-alert-danger.attention .admonition-title, .rst-content .wy-alert-danger.caution .admonition-title, .rst-content .danger .admonition-title, .rst-content .error .admonition-title, .rst-content .wy-alert-danger.hint .admonition-title, .rst-content .wy-alert-danger.important .admonition-title, .rst-content .wy-alert-danger.tip .admonition-title, .rst-content .wy-alert-danger.warning .admonition-title, .rst-content .wy-alert-danger.seealso .admonition-title, .rst-content .wy-alert-danger.admonition-todo .admonition-title { - background: #f29f97 -} - -.wy-alert.wy-alert-warning, .rst-content .wy-alert-warning.note, .rst-content .attention, .rst-content .caution, .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.tip, .rst-content .warning, .rst-content .wy-alert-warning.seealso, .rst-content .admonition-todo { - background: #ffedcc -} - -.wy-alert.wy-alert-warning .wy-alert-title, .rst-content .wy-alert-warning.note .wy-alert-title, .rst-content .attention .wy-alert-title, .rst-content .caution .wy-alert-title, .rst-content .wy-alert-warning.danger .wy-alert-title, .rst-content .wy-alert-warning.error .wy-alert-title, .rst-content .wy-alert-warning.hint .wy-alert-title, .rst-content .wy-alert-warning.important .wy-alert-title, .rst-content .wy-alert-warning.tip .wy-alert-title, .rst-content .warning .wy-alert-title, .rst-content .wy-alert-warning.seealso .wy-alert-title, .rst-content .admonition-todo .wy-alert-title, .wy-alert.wy-alert-warning .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-warning .admonition-title, .rst-content .wy-alert-warning.note .admonition-title, .rst-content .attention .admonition-title, .rst-content .caution .admonition-title, .rst-content .wy-alert-warning.danger .admonition-title, .rst-content .wy-alert-warning.error .admonition-title, .rst-content .wy-alert-warning.hint .admonition-title, .rst-content .wy-alert-warning.important .admonition-title, .rst-content .wy-alert-warning.tip .admonition-title, .rst-content .warning .admonition-title, .rst-content .wy-alert-warning.seealso .admonition-title, .rst-content .admonition-todo .admonition-title { - background: #f0b37e -} - -.wy-alert.wy-alert-info, .rst-content .note, .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, .rst-content .seealso, .rst-content .wy-alert-info.admonition-todo { - background: #e7f2fa -} - -.wy-alert.wy-alert-info .wy-alert-title, .rst-content .note .wy-alert-title, .rst-content .wy-alert-info.attention .wy-alert-title, .rst-content .wy-alert-info.caution .wy-alert-title, .rst-content .wy-alert-info.danger .wy-alert-title, .rst-content .wy-alert-info.error .wy-alert-title, .rst-content .wy-alert-info.hint .wy-alert-title, .rst-content .wy-alert-info.important .wy-alert-title, .rst-content .wy-alert-info.tip .wy-alert-title, .rst-content .wy-alert-info.warning .wy-alert-title, .rst-content .seealso .wy-alert-title, .rst-content .wy-alert-info.admonition-todo .wy-alert-title, .wy-alert.wy-alert-info .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-info .admonition-title, .rst-content .note .admonition-title, .rst-content .wy-alert-info.attention .admonition-title, .rst-content .wy-alert-info.caution .admonition-title, .rst-content .wy-alert-info.danger .admonition-title, .rst-content .wy-alert-info.error .admonition-title, .rst-content .wy-alert-info.hint .admonition-title, .rst-content .wy-alert-info.important .admonition-title, .rst-content .wy-alert-info.tip .admonition-title, .rst-content .wy-alert-info.warning .admonition-title, .rst-content .seealso .admonition-title, .rst-content .wy-alert-info.admonition-todo .admonition-title { - background: #6ab0de -} - -.wy-alert.wy-alert-success, .rst-content .wy-alert-success.note, .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 .hint, .rst-content .important, .rst-content .tip, .rst-content .wy-alert-success.warning, .rst-content .wy-alert-success.seealso, .rst-content .wy-alert-success.admonition-todo { - background: #dbfaf4 -} - -.wy-alert.wy-alert-success .wy-alert-title, .rst-content .wy-alert-success.note .wy-alert-title, .rst-content .wy-alert-success.attention .wy-alert-title, .rst-content .wy-alert-success.caution .wy-alert-title, .rst-content .wy-alert-success.danger .wy-alert-title, .rst-content .wy-alert-success.error .wy-alert-title, .rst-content .hint .wy-alert-title, .rst-content .important .wy-alert-title, .rst-content .tip .wy-alert-title, .rst-content .wy-alert-success.warning .wy-alert-title, .rst-content .wy-alert-success.seealso .wy-alert-title, .rst-content .wy-alert-success.admonition-todo .wy-alert-title, .wy-alert.wy-alert-success .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-success .admonition-title, .rst-content .wy-alert-success.note .admonition-title, .rst-content .wy-alert-success.attention .admonition-title, .rst-content .wy-alert-success.caution .admonition-title, .rst-content .wy-alert-success.danger .admonition-title, .rst-content .wy-alert-success.error .admonition-title, .rst-content .hint .admonition-title, .rst-content .important .admonition-title, .rst-content .tip .admonition-title, .rst-content .wy-alert-success.warning .admonition-title, .rst-content .wy-alert-success.seealso .admonition-title, .rst-content .wy-alert-success.admonition-todo .admonition-title { - background: #1abc9c -} - -.wy-alert.wy-alert-neutral, .rst-content .wy-alert-neutral.note, .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.tip, .rst-content .wy-alert-neutral.warning, .rst-content .wy-alert-neutral.seealso, .rst-content .wy-alert-neutral.admonition-todo { - background: #f3f6f6 -} - -.wy-alert.wy-alert-neutral .wy-alert-title, .rst-content .wy-alert-neutral.note .wy-alert-title, .rst-content .wy-alert-neutral.attention .wy-alert-title, .rst-content .wy-alert-neutral.caution .wy-alert-title, .rst-content .wy-alert-neutral.danger .wy-alert-title, .rst-content .wy-alert-neutral.error .wy-alert-title, .rst-content .wy-alert-neutral.hint .wy-alert-title, .rst-content .wy-alert-neutral.important .wy-alert-title, .rst-content .wy-alert-neutral.tip .wy-alert-title, .rst-content .wy-alert-neutral.warning .wy-alert-title, .rst-content .wy-alert-neutral.seealso .wy-alert-title, .rst-content .wy-alert-neutral.admonition-todo .wy-alert-title, .wy-alert.wy-alert-neutral .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-neutral .admonition-title, .rst-content .wy-alert-neutral.note .admonition-title, .rst-content .wy-alert-neutral.attention .admonition-title, .rst-content .wy-alert-neutral.caution .admonition-title, .rst-content .wy-alert-neutral.danger .admonition-title, .rst-content .wy-alert-neutral.error .admonition-title, .rst-content .wy-alert-neutral.hint .admonition-title, .rst-content .wy-alert-neutral.important .admonition-title, .rst-content .wy-alert-neutral.tip .admonition-title, .rst-content .wy-alert-neutral.warning .admonition-title, .rst-content .wy-alert-neutral.seealso .admonition-title, .rst-content .wy-alert-neutral.admonition-todo .admonition-title { - color: #404040; - background: #e1e4e5 -} - -.wy-alert.wy-alert-neutral a, .rst-content .wy-alert-neutral.note 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.tip a, .rst-content .wy-alert-neutral.warning a, .rst-content .wy-alert-neutral.seealso a, .rst-content .wy-alert-neutral.admonition-todo a { - color: #2980B9 -} - -.wy-alert p:last-child, .rst-content .note 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 .tip p:last-child, .rst-content .warning p:last-child, .rst-content .seealso p:last-child, .rst-content .admonition-todo p:last-child { - margin-bottom: 0 -} - -.wy-tray-container { - position: fixed; - bottom: 0px; - 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, 0.1); - padding: 0 24px; - min-width: 20%; - opacity: 0; - height: 0; - line-height: 56px; - overflow: hidden; - -webkit-transition: all 0.3s ease-in; - -moz-transition: all 0.3s ease-in; - transition: all 0.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 12px; - color: #fff; - border: 1px solid rgba(0, 0, 0, 0.1); - background-color: #27AE60; - text-decoration: none; - font-weight: normal; - font-family: "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif; - box-shadow: 0px 1px 2px -1px rgba(255, 255, 255, 0.5) inset, 0px -2px 0px 0px rgba(0, 0, 0, 0.1) inset; - 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 0.1s linear; - -moz-transition: all 0.1s linear; - transition: all 0.1s linear -} - -.btn-hover { - background: #2e8ece; - color: #fff -} - -.btn:hover { - background: #2cc36b; - color: #fff -} - -.btn:focus { - background: #2cc36b; - outline: 0 -} - -.btn:active { - box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.05) inset, 0px 2px 0px 0px rgba(0, 0, 0, 0.1) inset; - padding: 8px 12px 6px 12px -} - -.btn:visited { - color: #fff -} - -.btn:disabled { - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - filter: alpha(opacity=40); - opacity: 0.4; - cursor: not-allowed; - box-shadow: none -} - -.btn-disabled { - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - filter: alpha(opacity=40); - opacity: 0.4; - cursor: not-allowed; - box-shadow: none -} - -.btn-disabled:hover, .btn-disabled:focus, .btn-disabled:active { - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - filter: alpha(opacity=40); - opacity: 0.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:hover { - background-color: transparent !important; - color: #409ad5 !important; - box-shadow: none -} - -.btn-link:active { - 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:before, .wy-btn-group:after { - 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: solid 1px #cfd7dd; - box-shadow: 0 2px 2px 0 rgba(0, 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: solid 1px #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 input, .wy-form-aligned textarea, .wy-form-aligned select, .wy-form-aligned .wy-help-inline, .wy-form-aligned label { - 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 { - border: 0; - margin: 0; - padding: 0 -} - -legend { - display: block; - width: 100%; - border: 0; - padding: 0; - white-space: normal; - margin-bottom: 24px; - font-size: 150%; - *margin-left: -7px -} - -label { - display: block; - margin: 0 0 .3125em 0; - 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; - *zoom: 1; - max-width: 68em; - margin-left: auto; - margin-right: auto; - *zoom: 1 -} - -.wy-control-group:before, .wy-control-group:after { - display: table; - content: "" -} - -.wy-control-group:after { - clear: both -} - -.wy-control-group:before, .wy-control-group:after { - 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 select, .wy-control-group .wy-form-halves select, .wy-control-group .wy-form-thirds select { - width: 100% -} - -.wy-control-group .wy-form-full input[type="text"], .wy-control-group .wy-form-full input[type="password"], .wy-control-group .wy-form-full input[type="email"], .wy-control-group .wy-form-full input[type="url"], .wy-control-group .wy-form-full input[type="date"], .wy-control-group .wy-form-full input[type="month"], .wy-control-group .wy-form-full input[type="time"], .wy-control-group .wy-form-full input[type="datetime"], .wy-control-group .wy-form-full input[type="datetime-local"], .wy-control-group .wy-form-full input[type="week"], .wy-control-group .wy-form-full input[type="number"], .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="color"], .wy-control-group .wy-form-halves input[type="text"], .wy-control-group .wy-form-halves input[type="password"], .wy-control-group .wy-form-halves input[type="email"], .wy-control-group .wy-form-halves input[type="url"], .wy-control-group .wy-form-halves input[type="date"], .wy-control-group .wy-form-halves input[type="month"], .wy-control-group .wy-form-halves input[type="time"], .wy-control-group .wy-form-halves input[type="datetime"], .wy-control-group .wy-form-halves input[type="datetime-local"], .wy-control-group .wy-form-halves input[type="week"], .wy-control-group .wy-form-halves input[type="number"], .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="color"], .wy-control-group .wy-form-thirds input[type="text"], .wy-control-group .wy-form-thirds input[type="password"], .wy-control-group .wy-form-thirds input[type="email"], .wy-control-group .wy-form-thirds input[type="url"], .wy-control-group .wy-form-thirds input[type="date"], .wy-control-group .wy-form-thirds input[type="month"], .wy-control-group .wy-form-thirds input[type="time"], .wy-control-group .wy-form-thirds input[type="datetime"], .wy-control-group .wy-form-thirds input[type="datetime-local"], .wy-control-group .wy-form-thirds input[type="week"], .wy-control-group .wy-form-thirds input[type="number"], .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="color"] { - width: 100% -} - -.wy-control-group .wy-form-full { - float: left; - display: block; - margin-right: 2.35765%; - 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 { - margin-right: 0 -} - -.wy-control-group .wy-form-halves:nth-of-type(2n) { - margin-right: 0 -} - -.wy-control-group .wy-form-halves:nth-of-type(2n+1) { - 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 { - margin-right: 0 -} - -.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 { - margin: 6px 0 0 0; - font-size: 90% -} - -.wy-control-no-input { - display: inline-block; - margin: 6px 0 0 0; - font-size: 90% -} - -.wy-control-group.fluid-input input[type="text"], .wy-control-group.fluid-input input[type="password"], .wy-control-group.fluid-input input[type="email"], .wy-control-group.fluid-input input[type="url"], .wy-control-group.fluid-input input[type="date"], .wy-control-group.fluid-input input[type="month"], .wy-control-group.fluid-input input[type="time"], .wy-control-group.fluid-input input[type="datetime"], .wy-control-group.fluid-input input[type="datetime-local"], .wy-control-group.fluid-input input[type="week"], .wy-control-group.fluid-input input[type="number"], .wy-control-group.fluid-input input[type="search"], .wy-control-group.fluid-input input[type="tel"], .wy-control-group.fluid-input input[type="color"] { - width: 100% -} - -.wy-form-message-inline { - display: inline-block; - padding-left: 0.3em; - color: #666; - vertical-align: middle; - 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="text"], input[type="password"], input[type="email"], input[type="url"], input[type="date"], input[type="month"], input[type="time"], input[type="datetime"], input[type="datetime-local"], input[type="week"], input[type="number"], input[type="search"], input[type="tel"], input[type="color"] { - -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 0.3s linear; - -moz-transition: border 0.3s linear; - transition: border 0.3s linear -} - -input[type="datetime-local"] { - padding: .34375em .625em -} - -input[disabled] { - cursor: default -} - -input[type="checkbox"], input[type="radio"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; - margin-right: .3125em; - *height: 13px; - *width: 13px -} - -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="text"]:focus, input[type="password"]:focus, input[type="email"]:focus, input[type="url"]:focus, input[type="date"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="week"]:focus, input[type="number"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="color"]:focus { - outline: 0; - outline: thin dotted \9; - border-color: #333 -} - -input.no-focus:focus { - border-color: #ccc !important -} - -input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 1px auto #129FEA -} - -input[type="text"][disabled], input[type="password"][disabled], input[type="email"][disabled], input[type="url"][disabled], input[type="date"][disabled], input[type="month"][disabled], input[type="time"][disabled], input[type="datetime"][disabled], input[type="datetime-local"][disabled], input[type="week"][disabled], input[type="number"][disabled], input[type="search"][disabled], input[type="tel"][disabled], input[type="color"][disabled] { - cursor: not-allowed; - background-color: #fafafa -} - -input:focus:invalid, textarea:focus:invalid, select:focus:invalid { - color: #E74C3C; - border: 1px solid #E74C3C -} - -input:focus:invalid:focus, textarea:focus:invalid:focus, select:focus:invalid:focus { - border-color: #E74C3C -} - -input[type="file"]:focus:invalid:focus, input[type="radio"]:focus:invalid:focus, input[type="checkbox"]: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 0.3s linear; - -moz-transition: border 0.3s linear; - transition: border 0.3s linear -} - -select { - border: 1px solid #ccc; - background-color: #fff -} - -select[multiple] { - height: auto -} - -select:focus, textarea:focus { - outline: 0 -} - -select[disabled], textarea[disabled], input[readonly], select[readonly], textarea[readonly] { - cursor: not-allowed; - background-color: #fafafa -} - -input[type="radio"][disabled], input[type="checkbox"][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: solid 1px #ccc; - color: #999 -} - -.wy-input-suffix .wy-input-context { - border-left: 0 -} - -.wy-input-prefix .wy-input-context { - border-right: 0 -} - -.wy-switch { - width: 36px; - height: 12px; - margin: 12px 0; - position: relative; - border-radius: 4px; - background: #ccc; - cursor: pointer; - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out -} - -.wy-switch:before { - position: absolute; - content: ""; - display: block; - width: 18px; - height: 18px; - border-radius: 4px; - background: #999; - left: -3px; - top: -3px; - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out -} - -.wy-switch:after { - content: "false"; - position: absolute; - left: 48px; - display: block; - font-size: 12px; - color: #ccc -} - -.wy-switch.active { - background: #1e8449 -} - -.wy-switch.active:before { - left: 24px; - background: #27AE60 -} - -.wy-switch.active:after { - content: "true" -} - -.wy-switch.disabled, .wy-switch.active.disabled { - cursor: not-allowed -} - -.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="text"], .wy-control-group.wy-control-group-error input[type="password"], .wy-control-group.wy-control-group-error input[type="email"], .wy-control-group.wy-control-group-error input[type="url"], .wy-control-group.wy-control-group-error input[type="date"], .wy-control-group.wy-control-group-error input[type="month"], .wy-control-group.wy-control-group-error input[type="time"], .wy-control-group.wy-control-group-error input[type="datetime"], .wy-control-group.wy-control-group-error input[type="datetime-local"], .wy-control-group.wy-control-group-error input[type="week"], .wy-control-group.wy-control-group-error input[type="number"], .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="color"] { - border: solid 1px #E74C3C -} - -.wy-control-group.wy-control-group-error textarea { - border: solid 1px #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: 0.7em 0 0 - } - - .wy-form input[type="text"], .wy-form input[type="password"], .wy-form input[type="email"], .wy-form input[type="url"], .wy-form input[type="date"], .wy-form input[type="month"], .wy-form input[type="time"], .wy-form input[type="datetime"], .wy-form input[type="datetime-local"], .wy-form input[type="week"], .wy-form input[type="number"], .wy-form input[type="search"], .wy-form input[type="tel"], .wy-form input[type="color"] { - margin-bottom: 0.3em; - display: block - } - - .wy-form label { - margin-bottom: 0.3em; - display: block - } - - .wy-form input[type="password"], .wy-form input[type="email"], .wy-form input[type="url"], .wy-form input[type="date"], .wy-form input[type="month"], .wy-form input[type="time"], .wy-form input[type="datetime"], .wy-form input[type="datetime-local"], .wy-form input[type="week"], .wy-form input[type="number"], .wy-form input[type="search"], .wy-form input[type="tel"], .wy-form input[type="color"] { - margin-bottom: 0 - } - - .wy-form-aligned .wy-control-group label { - margin-bottom: 0.3em; - text-align: left; - display: block; - width: 100% - } - - .wy-form-aligned .wy-control { - margin: 1.5em 0 0 0 - } - - .wy-form .wy-help-inline, .wy-form-message-inline, .wy-form-message { - 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% -} - -.wy-table, .rst-content table.docutils, .rst-content table.field-list { - border-collapse: collapse; - border-spacing: 0; - empty-cells: show; - margin-bottom: 24px -} - -.wy-table caption, .rst-content table.docutils caption, .rst-content table.field-list caption { - color: #000; - font: italic 85%/1 arial, sans-serif; - padding: 1em 0; - text-align: center -} - -.wy-table td, .rst-content table.docutils td, .rst-content table.field-list td, .wy-table th, .rst-content table.docutils th, .rst-content table.field-list th { - font-size: 90%; - margin: 0; - overflow: visible; - padding: 8px 16px -} - -.wy-table td:first-child, .rst-content table.docutils td:first-child, .rst-content table.field-list td:first-child, .wy-table th:first-child, .rst-content table.docutils th:first-child, .rst-content table.field-list th:first-child { - border-left-width: 0 -} - -.wy-table thead, .rst-content table.docutils thead, .rst-content table.field-list thead { - color: #000; - text-align: left; - vertical-align: bottom; - white-space: nowrap -} - -.wy-table thead th, .rst-content table.docutils thead th, .rst-content table.field-list thead th { - font-weight: bold; - border-bottom: solid 2px #e1e4e5 -} - -.wy-table td, .rst-content table.docutils td, .rst-content table.field-list td { - background-color: transparent; - vertical-align: middle -} - -.wy-table td p, .rst-content table.docutils td p, .rst-content table.field-list td p { - line-height: 18px -} - -.wy-table td p:last-child, .rst-content table.docutils td p:last-child, .rst-content table.field-list td p:last-child { - margin-bottom: 0 -} - -.wy-table .wy-table-cell-min, .rst-content table.docutils .wy-table-cell-min, .rst-content table.field-list .wy-table-cell-min { - width: 1%; - padding-right: 0 -} - -.wy-table .wy-table-cell-min input[type=checkbox], .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], .rst-content table.docutils .wy-table-cell-min input[type=checkbox], .rst-content table.field-list .wy-table-cell-min input[type=checkbox] { - margin: 0 -} - -.wy-table-secondary { - color: gray; - font-size: 90% -} - -.wy-table-tertiary { - color: gray; - font-size: 80% -} - -.wy-table-odd td, .wy-table-striped tr:nth-child(2n-1) td, .rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td { - background-color: #f3f6f6 -} - -.wy-table-backed { - background-color: #f3f6f6 -} - -.wy-table-bordered-all, .rst-content table.docutils { - border: 1px solid #e1e4e5 -} - -.wy-table-bordered-all td, .rst-content table.docutils td { - border-bottom: 1px solid #e1e4e5; - border-left: 1px solid #e1e4e5 -} - -.wy-table-bordered-all tbody > tr:last-child td, .rst-content table.docutils 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 tbody > tr:last-child td { - border-bottom-width: 0 -} - -.wy-table-horizontal td, .wy-table-horizontal th { - border-width: 0 0 1px 0; - 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%; - overflow-x: hidden -} - -body { - font-family: "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif; - font-weight: normal; - color: #404040; - min-height: 100%; - overflow-x: hidden; - 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 -} - -h1, h2, .rst-content .toctree-wrapper p.caption, 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; - margin: 0; - font-size: 16px; - margin-bottom: 24px -} - -h1 { - font-size: 175% -} - -h2, .rst-content .toctree-wrapper p.caption { - 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 -} - -code, .rst-content tt, .rst-content code { - white-space: nowrap; - max-width: 100%; - background: #fff; - border: solid 1px #e1e4e5; - font-size: 75%; - padding: 0 5px; - font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; - color: #E74C3C; - overflow-x: auto -} - -code.code-large, .rst-content tt.code-large { - font-size: 90% -} - -.wy-plain-list-disc, .rst-content .section ul, .rst-content .toctree-wrapper ul, article ul { - list-style: disc; - line-height: 24px; - margin-bottom: 24px -} - -.wy-plain-list-disc li, .rst-content .section ul li, .rst-content .toctree-wrapper ul li, article ul li { - list-style: disc; - margin-left: 24px -} - -.wy-plain-list-disc li p:last-child, .rst-content .section ul li p:last-child, .rst-content .toctree-wrapper ul li p:last-child, article ul li p:last-child { - margin-bottom: 0 -} - -.wy-plain-list-disc li ul, .rst-content .section ul li ul, .rst-content .toctree-wrapper ul li ul, article ul li ul { - margin-bottom: 0 -} - -.wy-plain-list-disc li li, .rst-content .section ul li li, .rst-content .toctree-wrapper ul li li, article ul li li { - list-style: circle -} - -.wy-plain-list-disc li li li, .rst-content .section ul li li li, .rst-content .toctree-wrapper ul li li li, article ul li li li { - list-style: square -} - -.wy-plain-list-disc li ol li, .rst-content .section ul li ol li, .rst-content .toctree-wrapper ul li ol li, article ul li ol li { - list-style: decimal -} - -.wy-plain-list-decimal, .rst-content .section ol, .rst-content ol.arabic, article ol { - list-style: decimal; - line-height: 24px; - margin-bottom: 24px -} - -.wy-plain-list-decimal li, .rst-content .section ol li, .rst-content ol.arabic li, article ol li { - list-style: decimal; - margin-left: 24px -} - -.wy-plain-list-decimal li p:last-child, .rst-content .section ol li p:last-child, .rst-content ol.arabic li p:last-child, article ol li p:last-child { - margin-bottom: 0 -} - -.wy-plain-list-decimal li ul, .rst-content .section ol li ul, .rst-content ol.arabic li ul, article ol li ul { - margin-bottom: 0 -} - -.wy-plain-list-decimal li ul li, .rst-content .section ol li ul li, .rst-content ol.arabic li ul li, article ol li ul li { - list-style: disc -} - -.codeblock-example { - border: 1px solid #e1e4e5; - border-bottom: none; - padding: 24px; - padding-top: 48px; - font-weight: 500; - background: #fff; - position: relative -} - -.codeblock-example:after { - content: "Example"; - position: absolute; - top: 0px; - left: 0px; - background: #9B59B6; - color: #fff; - padding: 6px 12px -} - -.codeblock-example.prettyprint-example-only { - border: 1px solid #e1e4e5; - margin-bottom: 24px -} - -.codeblock, pre.literal-block, .rst-content .literal-block, .rst-content pre.literal-block, div[class^='highlight'] { - border: 1px solid #e1e4e5; - padding: 0px; - overflow-x: auto; - background: #fff; - margin: 1px 0 24px 0 -} - -.codeblock div[class^='highlight'], pre.literal-block div[class^='highlight'], .rst-content .literal-block div[class^='highlight'], div[class^='highlight'] div[class^='highlight'] { - border: none; - background: none; - margin: 0 -} - -div[class^='highlight'] td.code { - width: 100% -} - -.linenodiv pre { - border-right: solid 1px #e6e9ea; - margin: 0; - padding: 12px 12px; - font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; - font-size: 12px; - line-height: 1.5; - color: #d9d9d9 -} - -div[class^='highlight'] pre { - white-space: pre; - margin: 0; - padding: 12px 12px; - font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; - font-size: 12px; - line-height: 1.5; - display: block; - overflow: auto; - color: #404040 -} - -@media print { - .codeblock, pre.literal-block, .rst-content .literal-block, .rst-content pre.literal-block, div[class^='highlight'], div[class^='highlight'] pre { - white-space: pre-wrap - } -} - -.hll { - background-color: #ffc; - margin: 0 -12px; - padding: 0 12px; - display: block -} - -.c { - color: #998; - font-style: italic -} - -.err { - color: #a61717; - background-color: #e3d2d2 -} - -.k { - font-weight: bold -} - -.o { - font-weight: bold -} - -.cm { - color: #998; - font-style: italic -} - -.cp { - color: #999; - font-weight: bold -} - -.c1 { - color: #998; - font-style: italic -} - -.cs { - color: #999; - font-weight: bold; - font-style: italic -} - -.gd { - color: #000; - background-color: #fdd -} - -.gd .x { - color: #000; - background-color: #faa -} - -.ge { - font-style: italic -} - -.gr { - color: #a00 -} - -.gh { - color: #999 -} - -.gi { - color: #000; - background-color: #dfd -} - -.gi .x { - color: #000; - background-color: #afa -} - -.go { - color: #888 -} - -.gp { - color: #555 -} - -.gs { - font-weight: bold -} - -.gu { - color: purple; - font-weight: bold -} - -.gt { - color: #a00 -} - -.kc { - font-weight: bold -} - -.kd { - font-weight: bold -} - -.kn { - font-weight: bold -} - -.kp { - font-weight: bold -} - -.kr { - font-weight: bold -} - -.kt { - color: #458; - font-weight: bold -} - -.m { - color: #099 -} - -.s { - color: #d14 -} - -.n { - color: #333 -} - -.na { - color: teal -} - -.nb { - color: #0086b3 -} - -.nc { - color: #458; - font-weight: bold -} - -.no { - color: teal -} - -.ni { - color: purple -} - -.ne { - color: #900; - font-weight: bold -} - -.nf { - color: #900; - font-weight: bold -} - -.nn { - color: #555 -} - -.nt { - color: navy -} - -.nv { - color: teal -} - -.ow { - font-weight: bold -} - -.w { - color: #bbb -} - -.mf { - color: #099 -} - -.mh { - color: #099 -} - -.mi { - color: #099 -} - -.mo { - color: #099 -} - -.sb { - color: #d14 -} - -.sc { - color: #d14 -} - -.sd { - color: #d14 -} - -.s2 { - color: #d14 -} - -.se { - color: #d14 -} - -.sh { - color: #d14 -} - -.si { - color: #d14 -} - -.sx { - color: #d14 -} - -.sr { - color: #009926 -} - -.s1 { - color: #d14 -} - -.ss { - color: #990073 -} - -.bp { - color: #999 -} - -.vc { - color: teal -} - -.vg { - color: teal -} - -.vi { - color: teal -} - -.il { - color: #099 -} - -.gc { - color: #999; - background-color: #EAF2F5 -} - -.wy-breadcrumbs li { - display: inline-block -} - -.wy-breadcrumbs li.wy-breadcrumbs-aside { - float: right -} - -.wy-breadcrumbs li a { - display: inline-block; - padding: 5px -} - -.wy-breadcrumbs li a:first-child { - padding-left: 0 -} - -.wy-breadcrumbs li code, .wy-breadcrumbs li .rst-content tt, .rst-content .wy-breadcrumbs li tt { - padding: 5px; - border: none; - background: none -} - -.wy-breadcrumbs li code.literal, .wy-breadcrumbs li .rst-content tt.literal, .rst-content .wy-breadcrumbs li tt.literal { - color: #404040 -} - -.wy-breadcrumbs-extra { - margin-bottom: 0; - color: #b3b3b3; - font-size: 80%; - display: inline-block -} - -@media screen and (max-width: 480px) { - .wy-breadcrumbs-extra { - display: none - } - - .wy-breadcrumbs li.wy-breadcrumbs-aside { - display: none - } -} - -@media print { - .wy-breadcrumbs li.wy-breadcrumbs-aside { - display: none - } -} - -.wy-affix { - position: fixed; - top: 1.618em -} - -.wy-menu a:hover { - text-decoration: none -} - -.wy-menu-horiz { - *zoom: 1 -} - -.wy-menu-horiz:before, .wy-menu-horiz:after { - display: table; - content: "" -} - -.wy-menu-horiz:after { - clear: both -} - -.wy-menu-horiz ul, .wy-menu-horiz li { - display: inline-block -} - -.wy-menu-horiz li:hover { - background: rgba(255, 255, 255, 0.1) -} - -.wy-menu-horiz li.divide-left { - border-left: solid 1px #404040 -} - -.wy-menu-horiz li.divide-right { - border-right: solid 1px #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 { - height: 32px; - display: inline-block; - line-height: 32px; - padding: 0 1.618em; - margin-bottom: 0; - display: block; - font-weight: bold; - text-transform: uppercase; - font-size: 80%; - color: #555; - white-space: nowrap -} - -.wy-menu-vertical ul { - margin-bottom: 0 -} - -.wy-menu-vertical li.divide-top { - border-top: solid 1px #404040 -} - -.wy-menu-vertical li.divide-bottom { - border-bottom: solid 1px #404040 -} - -.wy-menu-vertical li.current { - background: #e3e3e3 -} - -.wy-menu-vertical li.current a { - color: gray; - border-right: solid 1px #c9c9c9; - padding: .4045em 2.427em -} - -.wy-menu-vertical li.current a:hover { - background: #d6d6d6 -} - -.wy-menu-vertical li code, .wy-menu-vertical li .rst-content tt, .rst-content .wy-menu-vertical li tt { - border: none; - background: inherit; - color: inherit; - padding-left: 0; - padding-right: 0 -} - -.wy-menu-vertical li span.toctree-expand { - display: block; - float: left; - margin-left: -1.2em; - font-size: 0.8em; - line-height: 1.6em; - color: #4d4d4d -} - -.wy-menu-vertical li.on a, .wy-menu-vertical li.current > a { - color: #404040; - padding: .4045em 1.618em; - font-weight: bold; - position: relative; - background: #fcfcfc; - border: none; - border-bottom: solid 1px #c9c9c9; - border-top: solid 1px #c9c9c9; - padding-left: 1.618em -4px -} - -.wy-menu-vertical li.on a:hover, .wy-menu-vertical li.current > a:hover { - background: #fcfcfc -} - -.wy-menu-vertical li.on a:hover span.toctree-expand, .wy-menu-vertical li.current > a:hover span.toctree-expand { - color: gray -} - -.wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.current > a span.toctree-expand { - display: block; - font-size: 0.8em; - line-height: 1.6em; - color: #333 -} - -.wy-menu-vertical li.toctree-l1.current li.toctree-l2 > ul, .wy-menu-vertical li.toctree-l2.current li.toctree-l3 > ul { - display: none -} - -.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current > ul, .wy-menu-vertical li.toctree-l2.current li.toctree-l3.current > ul { - display: block -} - -.wy-menu-vertical li.toctree-l2.current > a { - background: #c9c9c9; - padding: .4045em 2.427em -} - -.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a { - display: block; - background: #c9c9c9; - padding: .4045em 4.045em -} - -.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand { - color: gray -} - -.wy-menu-vertical li.toctree-l2 span.toctree-expand { - color: #a3a3a3 -} - -.wy-menu-vertical li.toctree-l3 { - font-size: 0.9em -} - -.wy-menu-vertical li.toctree-l3.current > a { - background: #bdbdbd; - padding: .4045em 4.045em -} - -.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a { - display: block; - background: #bdbdbd; - padding: .4045em 5.663em; - border-top: none; - border-bottom: none -} - -.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand { - color: gray -} - -.wy-menu-vertical li.toctree-l3 span.toctree-expand { - color: #969696 -} - -.wy-menu-vertical li.toctree-l4 { - font-size: 0.9em -} - -.wy-menu-vertical li.current ul { - display: block -} - -.wy-menu-vertical li ul { - margin-bottom: 0; - display: none -} - -.wy-menu-vertical .local-toc li ul { - display: block -} - -.wy-menu-vertical li ul li a { - margin-bottom: 0; - color: #b3b3b3; - font-weight: normal -} - -.wy-menu-vertical a { - display: inline-block; - line-height: 18px; - padding: .4045em 1.618em; - display: block; - position: relative; - font-size: 90%; - color: #b3b3b3 -} - -.wy-menu-vertical a:hover { - background-color: #4e4a4a; - cursor: pointer -} - -.wy-menu-vertical a:hover span.toctree-expand { - color: #b3b3b3 -} - -.wy-menu-vertical a:active { - background-color: #2980B9; - cursor: pointer; - color: #fff -} - -.wy-menu-vertical a:active span.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; - padding: .809em; - display: block; - color: #fcfcfc; - margin-bottom: .809em -} - -.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 auto; - height: 45px; - width: 45px; - background-color: #2980B9; - padding: 5px; - border-radius: 100% -} - -.wy-side-nav-search > a, .wy-side-nav-search .wy-dropdown > a { - color: #fcfcfc; - font-size: 100%; - font-weight: bold; - display: inline-block; - padding: 4px 6px; - margin-bottom: .809em -} - -.wy-side-nav-search > a:hover, .wy-side-nav-search .wy-dropdown > a:hover { - background: rgba(255, 255, 255, 0.1) -} - -.wy-side-nav-search > a img.logo, .wy-side-nav-search .wy-dropdown > a img.logo { - display: block; - margin: 0 auto; - height: auto; - width: auto; - border-radius: 0; - max-width: 100%; - background: transparent -} - -.wy-side-nav-search > a.icon img.logo, .wy-side-nav-search .wy-dropdown > a.icon img.logo { - margin-top: 0.85em -} - -.wy-side-nav-search > div.version { - margin-top: -.4045em; - margin-bottom: .809em; - font-weight: normal; - color: rgba(255, 255, 255, 0.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 0.2s ease-in; - -moz-transition: all 0.2s ease-in; - transition: all 0.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: left repeat-y #fcfcfc; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxOERBMTRGRDBFMUUxMUUzODUwMkJCOThDMEVFNURFMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxOERBMTRGRTBFMUUxMUUzODUwMkJCOThDMEVFNURFMCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjE4REExNEZCMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE4REExNEZDMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+EwrlwAAAAA5JREFUeNpiMDU0BAgwAAE2AJgB9BnaAAAAAElFTkSuQmCC); - background-size: 300px 1px -} - -.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%; - 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:before, .wy-nav-top:after { - display: table; - content: "" -} - -.wy-nav-top:after { - clear: both -} - -.wy-nav-top a { - color: #fff; - font-weight: bold -} - -.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, 0.2); - display: none; - z-index: 499 -} - -.wy-body-mask.on { - display: block -} - -footer { - color: #999 -} - -footer p { - margin-bottom: 12px -} - -footer span.commit code, footer span.commit .rst-content tt, .rst-content footer span.commit tt { - padding: 0px; - font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; - font-size: 1em; - background: none; - border: none; - color: #999 -} - -.rst-footer-buttons { - *zoom: 1 -} - -.rst-footer-buttons:before, .rst-footer-buttons:after { - display: table; - content: "" -} - -.rst-footer-buttons:after { - clear: both -} - -.rst-breadcrumbs-buttons { - margin-top: 12px; - *zoom: 1 -} - -.rst-breadcrumbs-buttons:before, .rst-breadcrumbs-buttons:after { - display: table; - content: "" -} - -.rst-breadcrumbs-buttons:after { - clear: both -} - -#search-results .search li { - margin-bottom: 24px; - border-bottom: solid 1px #e1e4e5; - padding-bottom: 24px -} - -#search-results .search li:first-child { - border-top: solid 1px #e1e4e5; - padding-top: 24px -} - -#search-results .search li a { - font-size: 120%; - margin-bottom: 12px; - display: inline-block -} - -#search-results .context { - color: gray; - font-size: 90% -} - -@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-side-scroll { - width: auto - } - - .wy-side-nav-search { - width: auto - } - - .wy-menu.wy-menu-vertical { - 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: 1400px) { - .wy-nav-content-wrap { - background: rgba(0, 0, 0, 0.05) - } - - .wy-nav-content { - margin: 0; - background: #fcfcfc - } -} - -@media print { - .rst-versions, footer, .wy-nav-side { - display: none - } - - .wy-nav-content-wrap { - margin-left: 0 - } -} - -.rst-versions { - position: fixed; - bottom: 0; - left: 0; - width: 300px; - color: #fcfcfc; - background: #1f1d1d; - border-top: solid 10px #343131; - 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:before, .rst-versions .rst-current-version:after { - display: table; - content: "" -} - -.rst-versions .rst-current-version:after { - clear: both -} - -.rst-versions .rst-current-version .fa, .rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand, .rst-versions .rst-current-version .rst-content .admonition-title, .rst-content .rst-versions .rst-current-version .admonition-title, .rst-versions .rst-current-version .rst-content h1 .headerlink, .rst-content h1 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h2 .headerlink, .rst-content h2 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h3 .headerlink, .rst-content h3 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h4 .headerlink, .rst-content h4 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h5 .headerlink, .rst-content h5 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h6 .headerlink, .rst-content h6 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content dl dt .headerlink, .rst-content dl dt .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content p.caption .headerlink, .rst-content p.caption .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content tt.download span:first-child, .rst-content tt.download .rst-versions .rst-current-version span:first-child, .rst-versions .rst-current-version .rst-content code.download span:first-child, .rst-content code.download .rst-versions .rst-current-version span:first-child, .rst-versions .rst-current-version .icon { - color: #fcfcfc -} - -.rst-versions .rst-current-version .fa-book, .rst-versions .rst-current-version .icon-book { - float: left -} - -.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 .rst-other-versions { - display: block -} - -.rst-versions .rst-other-versions { - font-size: 90%; - padding: 12px; - color: gray; - display: none -} - -.rst-versions .rst-other-versions hr { - display: block; - height: 1px; - border: 0; - margin: 20px 0; - padding: 0; - border-top: solid 1px #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 -} - -.rst-versions.rst-badge .icon-book { - float: none -} - -.rst-versions.rst-badge .fa-book, .rst-versions.rst-badge .icon-book { - float: none -} - -.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.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 img { - max-width: 100%; - height: auto !important -} - -.rst-content .highlight > pre { - line-height: normal -} - -.rst-content div.figure { - margin-bottom: 24px -} - -.rst-content div.figure p.caption { - font-style: italic -} - -.rst-content div.figure.align-center { - text-align: center -} - -.rst-content .section > img, .rst-content .section > a > img { - margin-bottom: 24px -} - -.rst-content blockquote { - margin-left: 24px; - line-height: 24px; - margin-bottom: 24px -} - -.rst-content .note .last, .rst-content .attention .last, .rst-content .caution .last, .rst-content .danger .last, .rst-content .error .last, .rst-content .hint .last, .rst-content .important .last, .rst-content .tip .last, .rst-content .warning .last, .rst-content .seealso .last, .rst-content .admonition-todo .last { - margin-bottom: 0 -} - -.rst-content .admonition-title:before { - margin-right: 4px -} - -.rst-content .admonition table { - border-color: rgba(0, 0, 0, 0.1) -} - -.rst-content .admonition table td, .rst-content .admonition table th { - background: transparent !important; - border-color: rgba(0, 0, 0, 0.1) !important -} - -.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 { - list-style: upper-alpha -} - -.rst-content .section ol p, .rst-content .section ul p { - margin-bottom: 12px -} - -.rst-content .line-block { - margin-left: 24px -} - -.rst-content .topic-title { - font-weight: bold; - margin-bottom: 12px -} - -.rst-content .toc-backref { - color: #404040 -} - -.rst-content .align-right { - float: right; - margin: 0px 0px 24px 24px -} - -.rst-content .align-left { - float: left; - margin: 0px 24px 24px 0px -} - -.rst-content .align-center { - margin: auto; - display: block -} - -.rst-content h1 .headerlink, .rst-content h2 .headerlink, .rst-content .toctree-wrapper p.caption .headerlink, .rst-content h3 .headerlink, .rst-content h4 .headerlink, .rst-content h5 .headerlink, .rst-content h6 .headerlink, .rst-content dl dt .headerlink, .rst-content p.caption .headerlink { - display: none; - visibility: hidden; - font-size: 14px -} - -.rst-content h1 .headerlink:after, .rst-content h2 .headerlink:after, .rst-content .toctree-wrapper p.caption .headerlink:after, .rst-content h3 .headerlink:after, .rst-content h4 .headerlink:after, .rst-content h5 .headerlink:after, .rst-content h6 .headerlink:after, .rst-content dl dt .headerlink:after, .rst-content p.caption .headerlink:after { - visibility: visible; - content: ""; - font-family: FontAwesome; - display: inline-block -} - -.rst-content h1:hover .headerlink, .rst-content h2:hover .headerlink, .rst-content .toctree-wrapper p.caption:hover .headerlink, .rst-content h3:hover .headerlink, .rst-content h4:hover .headerlink, .rst-content h5:hover .headerlink, .rst-content h6:hover .headerlink, .rst-content dl dt:hover .headerlink, .rst-content p.caption:hover .headerlink { - display: inline-block -} - -.rst-content .sidebar { - float: right; - width: 40%; - display: block; - margin: 0 0 24px 24px; - padding: 24px; - background: #f3f6f6; - border: solid 1px #e1e4e5 -} - -.rst-content .sidebar p, .rst-content .sidebar ul, .rst-content .sidebar dl { - font-size: 90% -} - -.rst-content .sidebar .last { - margin-bottom: 0 -} - -.rst-content .sidebar .sidebar-title { - display: block; - font-family: "Roboto Slab", "ff-tisa-web-pro", "Georgia", Arial, sans-serif; - font-weight: bold; - background: #e1e4e5; - padding: 6px 12px; - margin: -24px; - margin-bottom: 24px; - font-size: 100% -} - -.rst-content .highlighted { - background: #F1C40F; - display: inline-block; - font-weight: bold; - padding: 0 6px -} - -.rst-content .footnote-reference, .rst-content .citation-reference { - vertical-align: super; - font-size: 90% -} - -.rst-content table.docutils.citation, .rst-content table.docutils.footnote { - background: none; - border: none; - color: #999 -} - -.rst-content table.docutils.citation td, .rst-content table.docutils.citation tr, .rst-content table.docutils.footnote td, .rst-content table.docutils.footnote tr { - border: none; - background-color: transparent !important; - white-space: normal -} - -.rst-content table.docutils.citation td.label, .rst-content table.docutils.footnote td.label { - padding-left: 0; - padding-right: 0; - vertical-align: top -} - -.rst-content table.docutils.citation tt, .rst-content table.docutils.citation code, .rst-content table.docutils.footnote tt, .rst-content table.docutils.footnote code { - color: #555 -} - -.rst-content table.field-list { - border: none -} - -.rst-content table.field-list td { - border: none; - padding-top: 5px -} - -.rst-content table.field-list td > strong { - display: inline-block; - margin-top: 3px -} - -.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; - padding-left: 0 -} - -.rst-content tt, .rst-content tt, .rst-content code { - color: #000; - padding: 2px 5px -} - -.rst-content tt big, .rst-content tt em, .rst-content tt big, .rst-content code big, .rst-content tt em, .rst-content code em { - font-size: 100% !important; - line-height: normal -} - -.rst-content tt.literal, .rst-content tt.literal, .rst-content code.literal { - color: #E74C3C -} - -.rst-content tt.xref, a .rst-content tt, .rst-content tt.xref, .rst-content code.xref, a .rst-content tt, a .rst-content code { - font-weight: bold; - color: #404040 -} - -.rst-content a tt, .rst-content a tt, .rst-content a code { - color: #2980B9 -} - -.rst-content dl { - margin-bottom: 24px -} - -.rst-content dl dt { - font-weight: bold -} - -.rst-content dl p, .rst-content dl table, .rst-content dl ul, .rst-content dl ol { - margin-bottom: 12px !important -} - -.rst-content dl dd { - margin: 0 0 12px 24px -} - -.rst-content dl:not(.docutils) { - margin-bottom: 24px -} - -.rst-content dl:not(.docutils) dt { - display: inline-block; - margin: 6px 0; - font-size: 90%; - line-height: normal; - background: #e7f2fa; - color: #2980B9; - border-top: solid 3px #6ab0de; - padding: 6px; - position: relative -} - -.rst-content dl:not(.docutils) dt:before { - color: #6ab0de -} - -.rst-content dl:not(.docutils) dt .headerlink { - color: #404040; - font-size: 100% !important -} - -.rst-content dl:not(.docutils) dl dt { - margin-bottom: 6px; - border: none; - border-left: solid 3px #ccc; - background: #f0f0f0; - color: #555 -} - -.rst-content dl:not(.docutils) dl dt .headerlink { - color: #404040; - font-size: 100% !important -} - -.rst-content dl:not(.docutils) dt:first-child { - margin-top: 0 -} - -.rst-content dl:not(.docutils) tt, .rst-content dl:not(.docutils) tt, .rst-content dl:not(.docutils) code { - font-weight: bold -} - -.rst-content dl:not(.docutils) tt.descname, .rst-content dl:not(.docutils) tt.descclassname, .rst-content dl:not(.docutils) tt.descname, .rst-content dl:not(.docutils) code.descname, .rst-content dl:not(.docutils) tt.descclassname, .rst-content dl:not(.docutils) code.descclassname { - background-color: transparent; - border: none; - padding: 0; - font-size: 100% !important -} - -.rst-content dl:not(.docutils) tt.descname, .rst-content dl:not(.docutils) tt.descname, .rst-content dl:not(.docutils) code.descname { - font-weight: bold -} - -.rst-content dl:not(.docutils) .optional { - display: inline-block; - padding: 0 4px; - color: #000; - font-weight: bold -} - -.rst-content dl:not(.docutils) .property { - display: inline-block; - padding-right: 8px -} - -.rst-content .viewcode-link, .rst-content .viewcode-back { - 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: bold -} - -.rst-content tt.download, .rst-content code.download { - background: inherit; - padding: inherit; - font-weight: normal; - font-family: inherit; - font-size: inherit; - color: inherit; - border: inherit; - white-space: inherit -} - -.rst-content tt.download span:first-child, .rst-content code.download span:first-child { - -webkit-font-smoothing: subpixel-antialiased -} - -.rst-content tt.download span:first-child:before, .rst-content code.download span:first-child:before { - margin-right: 4px -} - -.rst-content .guilabel { - border: 1px solid #7fbbe3; - background: #e7f2fa; - font-size: 80%; - font-weight: 700; - border-radius: 4px; - padding: 2.4px 6px; - margin: auto 2px -} - -@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: "Inconsolata"; - font-style: normal; - font-weight: 400; - src: local("Inconsolata"), local("Inconsolata-Regular"), url(../fonts/Inconsolata-Regular.ttf) format("truetype") -} - -@font-face { - font-family: "Inconsolata"; - font-style: normal; - font-weight: 700; - src: local("Inconsolata Bold"), local("Inconsolata-Bold"), url(../fonts/Inconsolata-Bold.ttf) format("truetype") -} - -@font-face { - font-family: "Lato"; - font-style: normal; - font-weight: 400; - src: local("Lato Regular"), local("Lato-Regular"), url(../fonts/Lato-Regular.ttf) format("truetype") -} - -@font-face { - font-family: "Lato"; - font-style: normal; - font-weight: 700; - src: local("Lato Bold"), local("Lato-Bold"), url(../fonts/Lato-Bold.ttf) format("truetype") -} - -@font-face { - font-family: "Roboto Slab"; - font-style: normal; - font-weight: 400; - src: local("Roboto Slab Regular"), local("RobotoSlab-Regular"), url(../fonts/RobotoSlab-Regular.ttf) format("truetype") -} - -@font-face { - font-family: "Roboto Slab"; - font-style: normal; - font-weight: 700; - src: local("Roboto Slab Bold"), local("RobotoSlab-Bold"), url(../fonts/RobotoSlab-Bold.ttf) format("truetype") -} - -.wy-table-responsive table td,.wy-table-responsive table th { - white-space:normal !important; -} - -/*# sourceMappingURL=theme.css.map */ diff --git a/raysect/optical/loggingray.pyx b/raysect/optical/loggingray.pyx index 71334121..ba8d1a95 100644 --- a/raysect/optical/loggingray.pyx +++ b/raysect/optical/loggingray.pyx @@ -43,6 +43,52 @@ cimport cython cdef class LoggingRay(Ray): + """ + LoggingRay is a subclass of Ray that provides additional logging functionality. + + A LoggingRay records all intersections it encounters during its path through the scene. + + :param Point3D origin: Point defining ray’s origin (default=Point3D(0, 0, 0)) + :param Vector3D direction: Vector defining ray’s direction (default=Vector3D(0, 0, 1)) + :param float min_wavelength: Lower wavelength bound for observed spectrum + :param float max_wavelength: Upper wavelength bound for observed spectrum + :param int bins: Number of samples to use over the spectral range + :param float max_distance: The terminating distance of the ray + :param float extinction_prob: Probability of path extinction at every + material surface interaction (default=0.1) + :param int extinction_min_depth: Minimum number of paths before triggering + extinction probability (default=3) + :param int max_depth: Maximum number of material interactions before + terminating ray trajectory. + :param bool importance_sampling: Toggles use of importance sampling for + important primitives. See help documentation on importance sampling, + (default=True). + :param float important_path_weight: Weight to use for important paths when + using importance sampling. + + :ivar list[Intersection] log: List of intersections encountered by the ray. + :ivar list[Point3D] path_vertices: List of vertices defining the ray's path. + + >>> from raysect.core import Point3D, Vector3D + >>> from raysect.primitive import Box + >>> from raysect.optical import World + >>> from raysect.optical.material import NullMaterial + >>> from raysect.optical.loggingray import LoggingRay + >>> + >>> world = World() + >>> box = Box(Point3D(-1, -1, 0), Point3D(1, 1, 1), + ... material=NullMaterial(), parent=world) + >>> + >>> ray = LoggingRay(origin=Point3D(0, 0, -5), + ... direction=Vector3D(0, 0, 1)) + >>> + >>> ray.trace(world) + >>> ray.log + [Intersection(...), Intersection(...)] + >>> + >>> ray.path_vertices + [Point3D(0.0, 0.0, -5.0), Point3D(0.0, 0.0, 0.0), Point3D(0.0, 0.0, 1.0)] + """ cdef public list log @@ -85,9 +131,18 @@ cdef class LoggingRay(Ray): """ Traces a single ray path through the world. - :param world: World object defining the scene. - :param keep_alive: If true, disables Russian roulette termination of the ray. + This method is responsible for tracing the ray through the scene, handling + all interactions with the environment. + + :param ~raysect.optical.scenegraph.world.World world: World object defining the scene. + :param bool keep_alive: If true, disables Russian roulette termination of the ray. :return: A Spectrum object. + :rtype: Spectrum + + >>> world = World() + >>> ray = LoggingRay(origin=Point3D(0, 0, -5), + ... direction=Vector3D(0, 0, 1)) + >>> spectrum = ray.trace(world) """ cdef: @@ -130,16 +185,13 @@ cdef class LoggingRay(Ray): spectrum.mul_scalar(normalisation) return spectrum - cpdef Ray spawn_daughter(self, Point3D origin, Vector3D direction): + cpdef LoggingRay spawn_daughter(self, Point3D origin, Vector3D direction): """ - Spawns a new daughter of the ray. - - A daughter ray has the same spectral configuration as the source ray, - however the ray depth is increased by 1. + Obtain a new LoggingRay object with the same configuration settings. - :param origin: A Point3D defining the ray origin. - :param direction: A vector defining the ray direction. - :return: A Ray object. + :param Point3D origin: New Ray's origin position. + :param Vector3D direction: New Ray's direction. + :rtype: LoggingRay """ cdef LoggingRay ray @@ -176,7 +228,13 @@ cdef class LoggingRay(Ray): return ray cpdef LoggingRay copy(self, Point3D origin=None, Vector3D direction=None): + """ + Obtain a new LoggingRay object with the same configuration settings. + :param Point3D origin: New Ray's origin position. + :param Vector3D direction: New Ray's direction. + :rtype: LoggingRay + """ if origin is None: origin = self.origin.copy() @@ -189,6 +247,17 @@ cdef class LoggingRay(Ray): @property def path_vertices(self): + """ + List of vertices defining the ray's path. + + The list includes the ray's origin and all intersection points along its path. + + :rtype: list[Point3D] + + >>> ray = LoggingRay(Point3D(0, 0, 0), Vector3D(0, 0, 1)) + >>> ray.path_vertices + [Point3D(0, 0, 0), Point3D(...), ... ] + """ cdef: list vertices diff --git a/raysect/optical/material/modifiers/add.pyx b/raysect/optical/material/modifiers/add.pyx index 7bcd5fa7..b786ede4 100644 --- a/raysect/optical/material/modifiers/add.pyx +++ b/raysect/optical/material/modifiers/add.pyx @@ -57,20 +57,22 @@ cdef class Add(Material): surface. For example, A hot metal surface can be approximated by adding a black body emitter to a metal material: + .. code-block:: python + material = Add( Iron(), UniformSurfaceEmitter(BlackBody(800)), - surface_only=True + surface_only=True, ) Combining volumes is more complex and must only be used with materials that are mathematically commutative, for example two volume emitters or two absorbing volumes. - :param m1: The first material. - :param m2: The second material. - :param surface_only: Only blend the surface response (default=False). - :param volume_only: Only blend the volume response (default=False). + :param Material m1: The first material. + :param Material m2: The second material. + :param bool surface_only: Only blend the surface response (default=False). + :param bool volume_only: Only blend the volume response (default=False). """ cdef: diff --git a/raysect/optical/observer/base/observer.pyx b/raysect/optical/observer/base/observer.pyx index f1349d61..5c52abec 100644 --- a/raysect/optical/observer/base/observer.pyx +++ b/raysect/optical/observer/base/observer.pyx @@ -555,7 +555,7 @@ cdef class Observer0D(_ObserverBase): :param int pixel_samples: Number of samples to generate per pixel with one call to observe() (default=1000). :param int samples_per_task: Minimum number of samples to request per task (default=250). - :param kwargs: **kwargs from _ObserverBase. + :param \\**kwargs: kwargs from _ObserverBase. .. automethod:: raysect.optical.observer.base.observer.Observer0D._generate_rays """ @@ -726,7 +726,7 @@ cdef class Observer1D(_ObserverBase): from this observer. :param int pixel_samples: Number of samples to generate per pixel with one call to observe() (default=1000). - :param kwargs: **kwargs from _ObserverBase. + :param \\**kwargs: kwargs from _ObserverBase. """ def __init__(self, pixels, frame_sampler, pipelines, parent=None, transform=None, name=None, @@ -905,7 +905,7 @@ cdef class Observer2D(_ObserverBase): from this observer. :param int pixel_samples: Number of samples to generate per pixel with one call to observe() (default=1000). - :param kwargs: **kwargs from _ObserverBase. + :param \\**kwargs: kwargs from _ObserverBase. """ def __init__(self, pixels, frame_sampler, pipelines, parent=None, transform=None, name=None, diff --git a/raysect/optical/observer/imaging/ccd.pyx b/raysect/optical/observer/imaging/ccd.pyx index 2962e0ce..e7016c7d 100644 --- a/raysect/optical/observer/imaging/ccd.pyx +++ b/raysect/optical/observer/imaging/ccd.pyx @@ -53,7 +53,7 @@ cdef class CCDArray(Observer2D): :param float width: The CCD sensor x-width in metres (default=35mm). :param list pipelines: The list of pipelines that will process the spectrum measured at each pixel by the camera (default=RGBPipeline2D()). - :param kwargs: **kwargs and properties from Observer2D and _ObserverBase. + :param \\**kwargs: kwargs and properties from Observer2D and _ObserverBase. """ def __init__(self, pixels=(720, 480), width=0.035, parent=None, transform=None, name=None, pipelines=None): diff --git a/raysect/optical/observer/imaging/opencv.pyx b/raysect/optical/observer/imaging/opencv.pyx index 8157eea2..6e3bb979 100644 --- a/raysect/optical/observer/imaging/opencv.pyx +++ b/raysect/optical/observer/imaging/opencv.pyx @@ -54,8 +54,8 @@ cdef class OpenCVCamera(Observer2D): * pixel dimensions of the camera. See the OpenCV documentation `here - `_ and `here - `_ for more details. + `__ and `here + `__ for more details. Arguments and attributes are inherited from the base Observer2D sensor class. @@ -69,7 +69,7 @@ cdef class OpenCVCamera(Observer2D): :param list pipelines: The list of pipelines that will process the spectrum measured at each pixel by the camera (default=RGBPipeline2D()). :param float etendue: The constant etendue factor applied to each pixel (default=1). - :param kwargs: **kwargs and properties from Observer2D and _ObserverBase. + :param \\**kwargs: kwargs and properties from Observer2D and _ObserverBase. """ def __init__(self, camera_matrix, distortion, r_vector, t_vector, pixels, diff --git a/raysect/optical/observer/imaging/orthographic.pyx b/raysect/optical/observer/imaging/orthographic.pyx index 0d6672e0..4b00e729 100644 --- a/raysect/optical/observer/imaging/orthographic.pyx +++ b/raysect/optical/observer/imaging/orthographic.pyx @@ -51,7 +51,7 @@ cdef class OrthographicCamera(Observer2D): (default=FullFrameSampler2D()). :param list pipelines: The list of pipelines that will process the spectrum measured at each pixel by the camera (default=RGBPipeline2D()). - :param kwargs: **kwargs and properties from Observer2D and _ObserverBase. + :param \\**kwargs: kwargs and properties from Observer2D and _ObserverBase. """ def __init__(self, pixels, width, sensitivity=None, frame_sampler=None, pipelines=None, parent=None, transform=None, name=None): diff --git a/raysect/optical/observer/imaging/pinhole.pyx b/raysect/optical/observer/imaging/pinhole.pyx index adda479a..ce143bb8 100644 --- a/raysect/optical/observer/imaging/pinhole.pyx +++ b/raysect/optical/observer/imaging/pinhole.pyx @@ -53,7 +53,7 @@ cdef class PinholeCamera(Observer2D): sampling (i.e. extra samples for noisier pixels). :param list pipelines: The list of pipelines that will process the spectrum measured at each pixel by the camera (default=RGBPipeline2D()). - :param kwargs: **kwargs and properties from Observer2D and _ObserverBase. + :param \\**kwargs: kwargs and properties from Observer2D and _ObserverBase. .. code-block:: pycon diff --git a/raysect/optical/observer/imaging/targeted_ccd.pyx b/raysect/optical/observer/imaging/targeted_ccd.pyx index bd02ba2a..aa52ac23 100644 --- a/raysect/optical/observer/imaging/targeted_ccd.pyx +++ b/raysect/optical/observer/imaging/targeted_ccd.pyx @@ -73,7 +73,7 @@ cdef class TargetedCCDArray(Observer2D): :param float width: The CCD sensor x-width in metres (default=35mm). :param list pipelines: The list of pipelines that will process the spectrum measured at each pixel by the camera (default=RGBPipeline2D()). - :param kwargs: **kwargs and properties from Observer2D and _ObserverBase. + :param \\**kwargs: kwargs and properties from Observer2D and _ObserverBase. """ def __init__(self, targets, pixels=(720, 480), width=0.035, targeted_path_prob=None, parent=None, transform=None, name=None, pipelines=None): diff --git a/raysect/optical/observer/imaging/vector.pyx b/raysect/optical/observer/imaging/vector.pyx index d1b4ffbe..66925e32 100644 --- a/raysect/optical/observer/imaging/vector.pyx +++ b/raysect/optical/observer/imaging/vector.pyx @@ -56,7 +56,7 @@ cdef class VectorCamera(Observer2D): :param FrameSampler2D frame_sampler: The frame sampling strategy (default=FullFrameSampler2D()). :param list pipelines: The list of pipelines that will process the spectrum measured at each pixel by the camera (default=RGBPipeline2D()). - :param kwargs: **kwargs and properties from Observer2D and _ObserverBase. + :param \\**kwargs: kwargs and properties from Observer2D and _ObserverBase. """ def __init__(self, pixel_origins, pixel_directions, frame_sampler=None, pipelines=None, sensitivity=None, parent=None, transform=None, name=None): diff --git a/raysect/optical/observer/nonimaging/fibreoptic.pyx b/raysect/optical/observer/nonimaging/fibreoptic.pyx index a2236cf5..82fcd1c7 100644 --- a/raysect/optical/observer/nonimaging/fibreoptic.pyx +++ b/raysect/optical/observer/nonimaging/fibreoptic.pyx @@ -54,7 +54,7 @@ cdef class FibreOptic(Observer0D): solid angle sampling area. :param float radius: The radius of the fibre tip in metres. This radius defines a circular area at the fibre tip which will be sampled over. - :param kwargs: **kwargs from Observer0D and _ObserverBase + :param \\**kwargs: kwargs from Observer0D and _ObserverBase .. code-block:: pycon diff --git a/raysect/optical/observer/nonimaging/mesh_camera.pyx b/raysect/optical/observer/nonimaging/mesh_camera.pyx index 27085d75..0935127e 100644 --- a/raysect/optical/observer/nonimaging/mesh_camera.pyx +++ b/raysect/optical/observer/nonimaging/mesh_camera.pyx @@ -79,7 +79,7 @@ cdef class MeshCamera(Observer1D): :param float surface_offset: The offset from the mesh surface (default=0). :param list pipelines: The list of pipelines that will process the spectrum measured by this observer (default=PowerPipeline1D()). - :param kwargs: **kwargs from Observer1D and _ObserverBase + :param \\**kwargs: kwargs from Observer1D and _ObserverBase .. code-block:: pycon diff --git a/raysect/optical/observer/nonimaging/mesh_pixel.pyx b/raysect/optical/observer/nonimaging/mesh_pixel.pyx index 8d2f8f8d..a8218db5 100644 --- a/raysect/optical/observer/nonimaging/mesh_pixel.pyx +++ b/raysect/optical/observer/nonimaging/mesh_pixel.pyx @@ -77,7 +77,7 @@ cdef class MeshPixel(Observer0D): :param float surface_offset: The offset from the mesh surface (default=0). :param list pipelines: The list of pipelines that will process the spectrum measured by this pixel (default=SpectralPowerPipeline0D()). - :param kwargs: **kwargs from Observer0D and _ObserverBase + :param \\**kwargs: kwargs from Observer0D and _ObserverBase .. code-block:: pycon diff --git a/raysect/optical/observer/nonimaging/pixel.pyx b/raysect/optical/observer/nonimaging/pixel.pyx index 88d49949..81325a02 100644 --- a/raysect/optical/observer/nonimaging/pixel.pyx +++ b/raysect/optical/observer/nonimaging/pixel.pyx @@ -48,7 +48,7 @@ cdef class Pixel(Observer0D): x-axis in local coordinates (default=1cm). :param float y_width: The rectangular collection area's width along the y-axis in local coordinates (default=1cm). - :param kwargs: **kwargs from Observer0D and _ObserverBase + :param \\**kwargs: kwargs from Observer0D and _ObserverBase .. code-block:: pycon diff --git a/raysect/optical/observer/nonimaging/sightline.pyx b/raysect/optical/observer/nonimaging/sightline.pyx index 696a75e6..99e6dbf3 100644 --- a/raysect/optical/observer/nonimaging/sightline.pyx +++ b/raysect/optical/observer/nonimaging/sightline.pyx @@ -46,7 +46,7 @@ cdef class SightLine(Observer0D): in which case the returned units will always be in radiance (W/m^2/str/nm) :param list pipelines: The list of pipelines that will process the spectrum measured by this line of sight (default=SpectralPipeline0D()). - :param kwargs: **kwargs and instance properties from Observer0D and _ObserverBase + :param \\**kwargs: kwargs and instance properties from Observer0D and _ObserverBase .. code-block:: pycon diff --git a/raysect/optical/observer/nonimaging/targeted_pixel.pyx b/raysect/optical/observer/nonimaging/targeted_pixel.pyx index e6e682d0..2779579f 100644 --- a/raysect/optical/observer/nonimaging/targeted_pixel.pyx +++ b/raysect/optical/observer/nonimaging/targeted_pixel.pyx @@ -69,7 +69,7 @@ cdef class TargetedPixel(Observer0D): x-axis in local coordinates (default=1cm). :param float y_width: The rectangular collection area's width along the y-axis in local coordinates (default=1cm). - :param kwargs: **kwargs from Observer0D and _ObserverBase + :param \\**kwargs: kwargs from Observer0D and _ObserverBase .. code-block:: pycon diff --git a/raysect/optical/observer/pipeline/bayer.pyx b/raysect/optical/observer/pipeline/bayer.pyx index 497138b5..3c3882ad 100644 --- a/raysect/optical/observer/pipeline/bayer.pyx +++ b/raysect/optical/observer/pipeline/bayer.pyx @@ -56,7 +56,7 @@ cdef class BayerPipeline2D(Pipeline2D): responsive to one of the colour filters simulating the response of the human eye. The final image is represented by a 2D grid of only red, green and blue values. The eye interpolates these values to create other colours. See - `Wikipedia `_ for more information. + `Wikipedia `__ for more information. :param SpectralFunction red_filter: The spectral function representing the red pixel filter. :param SpectralFunction green_filter: The spectral function representing the green pixel filter. @@ -245,7 +245,7 @@ cdef class BayerPipeline2D(Pipeline2D): V_{out} = V_{in}^{\\gamma} - For more information see `Wikipedia `_. + For more information see `Wikipedia `__. :rtype: float """ diff --git a/raysect/optical/observer/sampler1d.pyx b/raysect/optical/observer/sampler1d.pyx index 12ea4790..a4f6e8ae 100644 --- a/raysect/optical/observer/sampler1d.pyx +++ b/raysect/optical/observer/sampler1d.pyx @@ -229,6 +229,7 @@ cdef class SpectralAdaptiveSampler1D(FrameSampler1D): cutoff of 0.01 corresponds to 1% standard error. :param str reduction_method: A method for obtaining spectral-average value of normalised error of a pixel from spectral array of errors (default='percentile'). + - `reduction_method='weighted'`: the error of a pixel is calculated as power-weighted average of the spectral errors, - `reduction_method='mean'`: the error of a pixel is calculated as a mean @@ -239,6 +240,7 @@ cdef class SpectralAdaptiveSampler1D(FrameSampler1D): spectral error among a given percentage of spectral bins with the highest spectral power. :param double percentile: Used only if `reduction_method='percentile'` or `reduction_method='power_percentile'` (default=100). + - `reduction_method='percentile'`: If `percentile=x`, extra sampling will be aborted if x% of spectral bins of each pixel have normalised errors lower than `cutoff`. - `reduction_method='power_percentile'`: If `percentile=x`, extra sampling will be aborted diff --git a/raysect/optical/observer/sampler2d.pyx b/raysect/optical/observer/sampler2d.pyx index 61f4d198..d89641f0 100644 --- a/raysect/optical/observer/sampler2d.pyx +++ b/raysect/optical/observer/sampler2d.pyx @@ -43,7 +43,7 @@ cdef class FullFrameSampler2D(FrameSampler2D): """ Evenly samples the full 2D frame or its masked fragment. - :param np.ndarray mask: The image mask array (default=None). A 2D boolean array with + :param ndarray mask: The image mask array (default=None). A 2D boolean array with the same shape as the frame. The tasks are generated only for those pixels for which the mask is True. """ @@ -122,7 +122,7 @@ cdef class MonoAdaptiveSampler2D(FrameSampler2D): :param double cutoff: Normalised noise threshold at which extra sampling will be aborted and rendering will complete (default=0.0). The standard error is normalised to 1 so that a cutoff of 0.01 corresponds to 1% standard error. - :param np.ndarray mask: The image mask array (default=None). A 2D boolean array with + :param ndarray mask: The image mask array (default=None). A 2D boolean array with the same shape as the frame. The tasks are generated only for those pixels for which the mask is True. If not provided, the all-true mask will be created during the first call of generate_tasks(). @@ -305,7 +305,7 @@ cdef class MaskedMonoAdaptiveSampler2D(MonoAdaptiveSampler2D): noise threshold is achieve across the masked image. :param PowerPipeline2D pipeline: The specific power pipeline to use for feedback control. - :param np.ndarray mask: The image mask array. A 2D boolean array with + :param ndarray mask: The image mask array. A 2D boolean array with the same shape as the frame. The tasks are generated only for those pixels for which the mask is True. :param int min_samples: Minimum number of pixel samples across the image before @@ -344,6 +344,7 @@ cdef class SpectralAdaptiveSampler2D(FrameSampler2D): cutoff of 0.01 corresponds to 1% standard error. :param str reduction_method: A method for obtaining spectral-average value of normalised error of a pixel from spectral array of errors (default='percentile'). + - `reduction_method='weighted'`: the error of a pixel is calculated as power-weighted average of the spectral errors, - `reduction_method='mean'`: the error of a pixel is calculated as a mean @@ -354,6 +355,7 @@ cdef class SpectralAdaptiveSampler2D(FrameSampler2D): spectral error among a given percentage of spectral bins with the highest spectral power. :param double percentile: Used only if `reduction_method='percentile'` or `reduction_method='power_percentile'` (default=100). + - `reduction_method='percentile'`: If `percentile=x`, extra sampling will be aborted if x% of spectral bins of each pixel have normalised errors lower than `cutoff`. - `reduction_method='power_percentile'`: If `percentile=x`, extra sampling will be aborted @@ -713,7 +715,7 @@ cdef class RGBAdaptiveSampler2D(FrameSampler2D): (or its masked fragment) before turning on adaptive sampling (default=1000). :param double cutoff: Noise threshold at which extra sampling will be aborted and rendering will complete (default=0.0). - :param np.ndarray mask: The image mask array (default=None). A 2D boolean array with + :param ndarray mask: The image mask array (default=None). A 2D boolean array with the same shape as the frame. The tasks are generated only for those pixels for which the mask is True. If not provided, the all-true mask will be created during the first call of generate_tasks(). @@ -904,7 +906,7 @@ cdef class MaskedRGBAdaptiveSampler2D(RGBAdaptiveSampler2D): noise threshold is achieve across the whole image. :param RGBPipeline2D pipeline: The specific RGB pipeline to use for feedback control. - :param np.ndarray mask: The image mask array. + :param ndarray mask: The image mask array. :param int min_samples: Minimum number of pixel samples across the image before turning on adaptive sampling (default=1000). :param double cutoff: Noise threshold at which extra sampling will be aborted and