plotly-5.15.0+dfsg1.orig/0000755000175000017500000000000014450321665014422 5ustar noahfxnoahfxplotly-5.15.0+dfsg1.orig/versioneer.py0000644000175000017500000023426114440365261017164 0ustar noahfxnoahfx# Version: 0.21 """The Versioneer - like a rocketeer, but for versions. The Versioneer ============== * like a rocketeer, but for versions! * https://github.com/python-versioneer/python-versioneer * Brian Warner * License: Public Domain * Compatible with: Python 3.6, 3.7, 3.8, 3.9 and pypy3 * [![Latest Version][pypi-image]][pypi-url] * [![Build Status][travis-image]][travis-url] This is a tool for managing a recorded version number in distutils-based python projects. The goal is to remove the tedious and error-prone "update the embedded version string" step from your release process. Making a new release should be as easy as recording a new tag in your version-control system, and maybe making new tarballs. ## Quick Install * `pip install versioneer` to somewhere in your $PATH * add a `[versioneer]` section to your setup.cfg (see [Install](INSTALL.md)) * run `versioneer install` in your source tree, commit the results * Verify version information with `python setup.py version` ## Version Identifiers Source trees come from a variety of places: * a version-control system checkout (mostly used by developers) * a nightly tarball, produced by build automation * a snapshot tarball, produced by a web-based VCS browser, like github's "tarball from tag" feature * a release tarball, produced by "setup.py sdist", distributed through PyPI Within each source tree, the version identifier (either a string or a number, this tool is format-agnostic) can come from a variety of places: * ask the VCS tool itself, e.g. "git describe" (for checkouts), which knows about recent "tags" and an absolute revision-id * the name of the directory into which the tarball was unpacked * an expanded VCS keyword ($Id$, etc) * a `_version.py` created by some earlier build step For released software, the version identifier is closely related to a VCS tag. Some projects use tag names that include more than just the version string (e.g. "myproject-1.2" instead of just "1.2"), in which case the tool needs to strip the tag prefix to extract the version identifier. For unreleased software (between tags), the version identifier should provide enough information to help developers recreate the same tree, while also giving them an idea of roughly how old the tree is (after version 1.2, before version 1.3). Many VCS systems can report a description that captures this, for example `git describe --tags --dirty --always` reports things like "0.7-1-g574ab98-dirty" to indicate that the checkout is one revision past the 0.7 tag, has a unique revision id of "574ab98", and is "dirty" (it has uncommitted changes). The version identifier is used for multiple purposes: * to allow the module to self-identify its version: `myproject.__version__` * to choose a name and prefix for a 'setup.py sdist' tarball ## Theory of Operation Versioneer works by adding a special `_version.py` file into your source tree, where your `__init__.py` can import it. This `_version.py` knows how to dynamically ask the VCS tool for version information at import time. `_version.py` also contains `$Revision$` markers, and the installation process marks `_version.py` to have this marker rewritten with a tag name during the `git archive` command. As a result, generated tarballs will contain enough information to get the proper version. To allow `setup.py` to compute a version too, a `versioneer.py` is added to the top level of your source tree, next to `setup.py` and the `setup.cfg` that configures it. This overrides several distutils/setuptools commands to compute the version when invoked, and changes `setup.py build` and `setup.py sdist` to replace `_version.py` with a small static file that contains just the generated version data. ## Installation See [INSTALL.md](./INSTALL.md) for detailed installation instructions. ## Version-String Flavors Code which uses Versioneer can learn about its version string at runtime by importing `_version` from your main `__init__.py` file and running the `get_versions()` function. From the "outside" (e.g. in `setup.py`), you can import the top-level `versioneer.py` and run `get_versions()`. Both functions return a dictionary with different flavors of version information: * `['version']`: A condensed version string, rendered using the selected style. This is the most commonly used value for the project's version string. The default "pep440" style yields strings like `0.11`, `0.11+2.g1076c97`, or `0.11+2.g1076c97.dirty`. See the "Styles" section below for alternative styles. * `['full-revisionid']`: detailed revision identifier. For Git, this is the full SHA1 commit id, e.g. "1076c978a8d3cfc70f408fe5974aa6c092c949ac". * `['date']`: Date and time of the latest `HEAD` commit. For Git, it is the commit date in ISO 8601 format. This will be None if the date is not available. * `['dirty']`: a boolean, True if the tree has uncommitted changes. Note that this is only accurate if run in a VCS checkout, otherwise it is likely to be False or None * `['error']`: if the version string could not be computed, this will be set to a string describing the problem, otherwise it will be None. It may be useful to throw an exception in setup.py if this is set, to avoid e.g. creating tarballs with a version string of "unknown". Some variants are more useful than others. Including `full-revisionid` in a bug report should allow developers to reconstruct the exact code being tested (or indicate the presence of local changes that should be shared with the developers). `version` is suitable for display in an "about" box or a CLI `--version` output: it can be easily compared against release notes and lists of bugs fixed in various releases. The installer adds the following text to your `__init__.py` to place a basic version in `YOURPROJECT.__version__`: from ._version import get_versions __version__ = get_versions()['version'] del get_versions ## Styles The setup.cfg `style=` configuration controls how the VCS information is rendered into a version string. The default style, "pep440", produces a PEP440-compliant string, equal to the un-prefixed tag name for actual releases, and containing an additional "local version" section with more detail for in-between builds. For Git, this is TAG[+DISTANCE.gHEX[.dirty]] , using information from `git describe --tags --dirty --always`. For example "0.11+2.g1076c97.dirty" indicates that the tree is like the "1076c97" commit but has uncommitted changes (".dirty"), and that this commit is two revisions ("+2") beyond the "0.11" tag. For released software (exactly equal to a known tag), the identifier will only contain the stripped tag, e.g. "0.11". Other styles are available. See [details.md](details.md) in the Versioneer source tree for descriptions. ## Debugging Versioneer tries to avoid fatal errors: if something goes wrong, it will tend to return a version of "0+unknown". To investigate the problem, run `setup.py version`, which will run the version-lookup code in a verbose mode, and will display the full contents of `get_versions()` (including the `error` string, which may help identify what went wrong). ## Known Limitations Some situations are known to cause problems for Versioneer. This details the most significant ones. More can be found on Github [issues page](https://github.com/python-versioneer/python-versioneer/issues). ### Subprojects Versioneer has limited support for source trees in which `setup.py` is not in the root directory (e.g. `setup.py` and `.git/` are *not* siblings). The are two common reasons why `setup.py` might not be in the root: * Source trees which contain multiple subprojects, such as [Buildbot](https://github.com/buildbot/buildbot), which contains both "master" and "slave" subprojects, each with their own `setup.py`, `setup.cfg`, and `tox.ini`. Projects like these produce multiple PyPI distributions (and upload multiple independently-installable tarballs). * Source trees whose main purpose is to contain a C library, but which also provide bindings to Python (and perhaps other languages) in subdirectories. Versioneer will look for `.git` in parent directories, and most operations should get the right version string. However `pip` and `setuptools` have bugs and implementation details which frequently cause `pip install .` from a subproject directory to fail to find a correct version string (so it usually defaults to `0+unknown`). `pip install --editable .` should work correctly. `setup.py install` might work too. Pip-8.1.1 is known to have this problem, but hopefully it will get fixed in some later version. [Bug #38](https://github.com/python-versioneer/python-versioneer/issues/38) is tracking this issue. The discussion in [PR #61](https://github.com/python-versioneer/python-versioneer/pull/61) describes the issue from the Versioneer side in more detail. [pip PR#3176](https://github.com/pypa/pip/pull/3176) and [pip PR#3615](https://github.com/pypa/pip/pull/3615) contain work to improve pip to let Versioneer work correctly. Versioneer-0.16 and earlier only looked for a `.git` directory next to the `setup.cfg`, so subprojects were completely unsupported with those releases. ### Editable installs with setuptools <= 18.5 `setup.py develop` and `pip install --editable .` allow you to install a project into a virtualenv once, then continue editing the source code (and test) without re-installing after every change. "Entry-point scripts" (`setup(entry_points={"console_scripts": ..})`) are a convenient way to specify executable scripts that should be installed along with the python package. These both work as expected when using modern setuptools. When using setuptools-18.5 or earlier, however, certain operations will cause `pkg_resources.DistributionNotFound` errors when running the entrypoint script, which must be resolved by re-installing the package. This happens when the install happens with one version, then the egg_info data is regenerated while a different version is checked out. Many setup.py commands cause egg_info to be rebuilt (including `sdist`, `wheel`, and installing into a different virtualenv), so this can be surprising. [Bug #83](https://github.com/python-versioneer/python-versioneer/issues/83) describes this one, but upgrading to a newer version of setuptools should probably resolve it. ## Updating Versioneer To upgrade your project to a new release of Versioneer, do the following: * install the new Versioneer (`pip install -U versioneer` or equivalent) * edit `setup.cfg`, if necessary, to include any new configuration settings indicated by the release notes. See [UPGRADING](./UPGRADING.md) for details. * re-run `versioneer install` in your source tree, to replace `SRC/_version.py` * commit any changed files ## Future Directions This tool is designed to make it easily extended to other version-control systems: all VCS-specific components are in separate directories like src/git/ . The top-level `versioneer.py` script is assembled from these components by running make-versioneer.py . In the future, make-versioneer.py will take a VCS name as an argument, and will construct a version of `versioneer.py` that is specific to the given VCS. It might also take the configuration arguments that are currently provided manually during installation by editing setup.py . Alternatively, it might go the other direction and include code from all supported VCS systems, reducing the number of intermediate scripts. ## Similar projects * [setuptools_scm](https://github.com/pypa/setuptools_scm/) - a non-vendored build-time dependency * [minver](https://github.com/jbweston/miniver) - a lightweight reimplementation of versioneer * [versioningit](https://github.com/jwodder/versioningit) - a PEP 518-based setuptools plugin ## License To make Versioneer easier to embed, all its code is dedicated to the public domain. The `_version.py` that it creates is also in the public domain. Specifically, both are released under the Creative Commons "Public Domain Dedication" license (CC0-1.0), as described in https://creativecommons.org/publicdomain/zero/1.0/ . [pypi-image]: https://img.shields.io/pypi/v/versioneer.svg [pypi-url]: https://pypi.python.org/pypi/versioneer/ [travis-image]: https://img.shields.io/travis/com/python-versioneer/python-versioneer.svg [travis-url]: https://travis-ci.com/github/python-versioneer/python-versioneer """ # pylint:disable=invalid-name,import-outside-toplevel,missing-function-docstring # pylint:disable=missing-class-docstring,too-many-branches,too-many-statements # pylint:disable=raise-missing-from,too-many-lines,too-many-locals,import-error # pylint:disable=too-few-public-methods,redefined-outer-name,consider-using-with # pylint:disable=attribute-defined-outside-init,too-many-arguments import configparser import errno import json import os import re import subprocess import sys from typing import Callable, Dict class VersioneerConfig: """Container for Versioneer configuration parameters.""" def get_root(): """Get the project root directory. We require that all commands are run from the project root, i.e. the directory that contains setup.py, setup.cfg, and versioneer.py . """ root = os.path.realpath(os.path.abspath(os.getcwd())) setup_py = os.path.join(root, "setup.py") versioneer_py = os.path.join(root, "versioneer.py") if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): # allow 'python path/to/setup.py COMMAND' root = os.path.dirname(os.path.realpath(os.path.abspath(sys.argv[0]))) setup_py = os.path.join(root, "setup.py") versioneer_py = os.path.join(root, "versioneer.py") if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): err = ( "Versioneer was unable to run the project root directory. " "Versioneer requires setup.py to be executed from " "its immediate directory (like 'python setup.py COMMAND'), " "or in a way that lets it use sys.argv[0] to find the root " "(like 'python path/to/setup.py COMMAND')." ) raise VersioneerBadRootError(err) try: # Certain runtime workflows (setup.py install/develop in a setuptools # tree) execute all dependencies in a single python process, so # "versioneer" may be imported multiple times, and python's shared # module-import table will cache the first one. So we can't use # os.path.dirname(__file__), as that will find whichever # versioneer.py was first imported, even in later projects. my_path = os.path.realpath(os.path.abspath(__file__)) me_dir = os.path.normcase(os.path.splitext(my_path)[0]) vsr_dir = os.path.normcase(os.path.splitext(versioneer_py)[0]) if me_dir != vsr_dir: print( "Warning: build in %s is using versioneer.py from %s" % (os.path.dirname(my_path), versioneer_py) ) except NameError: pass return root def get_config_from_root(root): """Read the project setup.cfg file to determine Versioneer config.""" # This might raise OSError (if setup.cfg is missing), or # configparser.NoSectionError (if it lacks a [versioneer] section), or # configparser.NoOptionError (if it lacks "VCS="). See the docstring at # the top of versioneer.py for instructions on writing your setup.cfg . setup_cfg = os.path.join(root, "setup.cfg") parser = configparser.ConfigParser() with open(setup_cfg, "r") as cfg_file: parser.read_file(cfg_file) VCS = parser.get("versioneer", "VCS") # mandatory # Dict-like interface for non-mandatory entries section = parser["versioneer"] cfg = VersioneerConfig() cfg.VCS = VCS cfg.style = section.get("style", "") cfg.versionfile_source = section.get("versionfile_source") cfg.versionfile_build = section.get("versionfile_build") cfg.tag_prefix = section.get("tag_prefix") if cfg.tag_prefix in ("''", '""'): cfg.tag_prefix = "" cfg.parentdir_prefix = section.get("parentdir_prefix") cfg.verbose = section.get("verbose") return cfg class NotThisMethod(Exception): """Exception raised if a method is not valid for the current scenario.""" # these dictionaries contain VCS-specific tools LONG_VERSION_PY: Dict[str, str] = {} HANDLERS: Dict[str, Dict[str, Callable]] = {} def register_vcs_handler(vcs, method): # decorator """Create decorator to mark a method as the handler of a VCS.""" def decorate(f): """Store f in HANDLERS[vcs][method].""" HANDLERS.setdefault(vcs, {})[method] = f return f return decorate def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None): """Call the given command(s).""" assert isinstance(commands, list) process = None for command in commands: try: dispcmd = str([command] + args) # remember shell=False, so use git.cmd on windows, not just git process = subprocess.Popen( [command] + args, cwd=cwd, env=env, stdout=subprocess.PIPE, stderr=(subprocess.PIPE if hide_stderr else None), ) break except OSError: e = sys.exc_info()[1] if e.errno == errno.ENOENT: continue if verbose: print("unable to run %s" % dispcmd) print(e) return None, None else: if verbose: print("unable to find command, tried %s" % (commands,)) return None, None stdout = process.communicate()[0].strip().decode() if process.returncode != 0: if verbose: print("unable to run %s (error)" % dispcmd) print("stdout was %s" % stdout) return None, process.returncode return stdout, process.returncode LONG_VERSION_PY[ "git" ] = r''' # This file helps to compute a version number in source trees obtained from # git-archive tarball (such as those provided by githubs download-from-tag # feature). Distribution tarballs (built by setup.py sdist) and build # directories (produced by setup.py build) will contain a much shorter file # that just contains the computed version number. # This file is released into the public domain. Generated by # versioneer-0.21 (https://github.com/python-versioneer/python-versioneer) """Git implementation of _version.py.""" import errno import os import re import subprocess import sys from typing import Callable, Dict def get_keywords(): """Get the keywords needed to look up the version information.""" # these strings will be replaced by git during git-archive. # setup.py/versioneer.py will grep for the variable names, so they must # each be defined on a line of their own. _version.py will just call # get_keywords(). git_refnames = "%(DOLLAR)sFormat:%%d%(DOLLAR)s" git_full = "%(DOLLAR)sFormat:%%H%(DOLLAR)s" git_date = "%(DOLLAR)sFormat:%%ci%(DOLLAR)s" keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} return keywords class VersioneerConfig: """Container for Versioneer configuration parameters.""" def get_config(): """Create, populate and return the VersioneerConfig() object.""" # these strings are filled in when 'setup.py versioneer' creates # _version.py cfg = VersioneerConfig() cfg.VCS = "git" cfg.style = "%(STYLE)s" cfg.tag_prefix = "%(TAG_PREFIX)s" cfg.parentdir_prefix = "%(PARENTDIR_PREFIX)s" cfg.versionfile_source = "%(VERSIONFILE_SOURCE)s" cfg.verbose = False return cfg class NotThisMethod(Exception): """Exception raised if a method is not valid for the current scenario.""" LONG_VERSION_PY: Dict[str, str] = {} HANDLERS: Dict[str, Dict[str, Callable]] = {} def register_vcs_handler(vcs, method): # decorator """Create decorator to mark a method as the handler of a VCS.""" def decorate(f): """Store f in HANDLERS[vcs][method].""" if vcs not in HANDLERS: HANDLERS[vcs] = {} HANDLERS[vcs][method] = f return f return decorate def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None): """Call the given command(s).""" assert isinstance(commands, list) process = None for command in commands: try: dispcmd = str([command] + args) # remember shell=False, so use git.cmd on windows, not just git process = subprocess.Popen([command] + args, cwd=cwd, env=env, stdout=subprocess.PIPE, stderr=(subprocess.PIPE if hide_stderr else None)) break except OSError: e = sys.exc_info()[1] if e.errno == errno.ENOENT: continue if verbose: print("unable to run %%s" %% dispcmd) print(e) return None, None else: if verbose: print("unable to find command, tried %%s" %% (commands,)) return None, None stdout = process.communicate()[0].strip().decode() if process.returncode != 0: if verbose: print("unable to run %%s (error)" %% dispcmd) print("stdout was %%s" %% stdout) return None, process.returncode return stdout, process.returncode def versions_from_parentdir(parentdir_prefix, root, verbose): """Try to determine the version from the parent directory name. Source tarballs conventionally unpack into a directory that includes both the project name and a version string. We will also support searching up two directory levels for an appropriately named parent directory """ rootdirs = [] for _ in range(3): dirname = os.path.basename(root) if dirname.startswith(parentdir_prefix): return {"version": dirname[len(parentdir_prefix):], "full-revisionid": None, "dirty": False, "error": None, "date": None} rootdirs.append(root) root = os.path.dirname(root) # up a level if verbose: print("Tried directories %%s but none started with prefix %%s" %% (str(rootdirs), parentdir_prefix)) raise NotThisMethod("rootdir doesn't start with parentdir_prefix") @register_vcs_handler("git", "get_keywords") def git_get_keywords(versionfile_abs): """Extract version information from the given file.""" # the code embedded in _version.py can just fetch the value of these # keywords. When used from setup.py, we don't want to import _version.py, # so we do it with a regexp instead. This function is not used from # _version.py. keywords = {} try: with open(versionfile_abs, "r") as fobj: for line in fobj: if line.strip().startswith("git_refnames ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["refnames"] = mo.group(1) if line.strip().startswith("git_full ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["full"] = mo.group(1) if line.strip().startswith("git_date ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["date"] = mo.group(1) except OSError: pass return keywords @register_vcs_handler("git", "keywords") def git_versions_from_keywords(keywords, tag_prefix, verbose): """Get version information from git keywords.""" if "refnames" not in keywords: raise NotThisMethod("Short version file found") date = keywords.get("date") if date is not None: # Use only the last line. Previous lines may contain GPG signature # information. date = date.splitlines()[-1] # git-2.2.0 added "%%cI", which expands to an ISO-8601 -compliant # datestamp. However we prefer "%%ci" (which expands to an "ISO-8601 # -like" string, which we must then edit to make compliant), because # it's been around since git-1.5.3, and it's too difficult to # discover which version we're using, or to work around using an # older one. date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) refnames = keywords["refnames"].strip() if refnames.startswith("$Format"): if verbose: print("keywords are unexpanded, not using") raise NotThisMethod("unexpanded keywords, not a git-archive tarball") refs = {r.strip() for r in refnames.strip("()").split(",")} # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of # just "foo-1.0". If we see a "tag: " prefix, prefer those. TAG = "tag: " tags = {r[len(TAG):] for r in refs if r.startswith(TAG)} if not tags: # Either we're using git < 1.8.3, or there really are no tags. We use # a heuristic: assume all version tags have a digit. The old git %%d # expansion behaves like git log --decorate=short and strips out the # refs/heads/ and refs/tags/ prefixes that would let us distinguish # between branches and tags. By ignoring refnames without digits, we # filter out many common branch names like "release" and # "stabilization", as well as "HEAD" and "master". tags = {r for r in refs if re.search(r'\d', r)} if verbose: print("discarding '%%s', no digits" %% ",".join(refs - tags)) if verbose: print("likely tags: %%s" %% ",".join(sorted(tags))) for ref in sorted(tags): # sorting will prefer e.g. "2.0" over "2.0rc1" if ref.startswith(tag_prefix): r = ref[len(tag_prefix):] # Filter out refs that exactly match prefix or that don't start # with a number once the prefix is stripped (mostly a concern # when prefix is '') if not re.match(r'\d', r): continue if verbose: print("picking %%s" %% r) return {"version": r, "full-revisionid": keywords["full"].strip(), "dirty": False, "error": None, "date": date} # no suitable tags, so version is "0+unknown", but full hex is still there if verbose: print("no suitable tags, using unknown + full revision id") return {"version": "0+unknown", "full-revisionid": keywords["full"].strip(), "dirty": False, "error": "no suitable tags", "date": None} @register_vcs_handler("git", "pieces_from_vcs") def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): """Get version from 'git describe' in the root of the source tree. This only gets called if the git-archive 'subst' keywords were *not* expanded, and _version.py hasn't already been rewritten with a short version string, meaning we're inside a checked out source tree. """ GITS = ["git"] TAG_PREFIX_REGEX = "*" if sys.platform == "win32": GITS = ["git.cmd", "git.exe"] TAG_PREFIX_REGEX = r"\*" _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=True) if rc != 0: if verbose: print("Directory %%s not under git control" %% root) raise NotThisMethod("'git rev-parse --git-dir' returned error") # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] # if there isn't one, this yields HEX[-dirty] (no NUM) describe_out, rc = runner(GITS, ["describe", "--tags", "--dirty", "--always", "--long", "--match", "%%s%%s" %% (tag_prefix, TAG_PREFIX_REGEX)], cwd=root) # --long was added in git-1.5.5 if describe_out is None: raise NotThisMethod("'git describe' failed") describe_out = describe_out.strip() full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root) if full_out is None: raise NotThisMethod("'git rev-parse' failed") full_out = full_out.strip() pieces = {} pieces["long"] = full_out pieces["short"] = full_out[:7] # maybe improved later pieces["error"] = None branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], cwd=root) # --abbrev-ref was added in git-1.6.3 if rc != 0 or branch_name is None: raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") branch_name = branch_name.strip() if branch_name == "HEAD": # If we aren't exactly on a branch, pick a branch which represents # the current commit. If all else fails, we are on a branchless # commit. branches, rc = runner(GITS, ["branch", "--contains"], cwd=root) # --contains was added in git-1.5.4 if rc != 0 or branches is None: raise NotThisMethod("'git branch --contains' returned error") branches = branches.split("\n") # Remove the first line if we're running detached if "(" in branches[0]: branches.pop(0) # Strip off the leading "* " from the list of branches. branches = [branch[2:] for branch in branches] if "master" in branches: branch_name = "master" elif not branches: branch_name = None else: # Pick the first branch that is returned. Good or bad. branch_name = branches[0] pieces["branch"] = branch_name # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] # TAG might have hyphens. git_describe = describe_out # look for -dirty suffix dirty = git_describe.endswith("-dirty") pieces["dirty"] = dirty if dirty: git_describe = git_describe[:git_describe.rindex("-dirty")] # now we have TAG-NUM-gHEX or HEX if "-" in git_describe: # TAG-NUM-gHEX mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) if not mo: # unparsable. Maybe git-describe is misbehaving? pieces["error"] = ("unable to parse git-describe output: '%%s'" %% describe_out) return pieces # tag full_tag = mo.group(1) if not full_tag.startswith(tag_prefix): if verbose: fmt = "tag '%%s' doesn't start with prefix '%%s'" print(fmt %% (full_tag, tag_prefix)) pieces["error"] = ("tag '%%s' doesn't start with prefix '%%s'" %% (full_tag, tag_prefix)) return pieces pieces["closest-tag"] = full_tag[len(tag_prefix):] # distance: number of commits since tag pieces["distance"] = int(mo.group(2)) # commit: short hex revision ID pieces["short"] = mo.group(3) else: # HEX: no tags pieces["closest-tag"] = None count_out, rc = runner(GITS, ["rev-list", "HEAD", "--count"], cwd=root) pieces["distance"] = int(count_out) # total number of commits # commit date: see ISO-8601 comment in git_versions_from_keywords() date = runner(GITS, ["show", "-s", "--format=%%ci", "HEAD"], cwd=root)[0].strip() # Use only the last line. Previous lines may contain GPG signature # information. date = date.splitlines()[-1] pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) return pieces def plus_or_dot(pieces): """Return a + if we don't already have one, else return a .""" if "+" in pieces.get("closest-tag", ""): return "." return "+" def render_pep440(pieces): """Build up version string, with post-release "local version identifier". Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty Exceptions: 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += plus_or_dot(pieces) rendered += "%%d.g%%s" %% (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" else: # exception #1 rendered = "0+untagged.%%d.g%%s" %% (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" return rendered def render_pep440_branch(pieces): """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] . The ".dev0" means not master branch. Note that .dev0 sorts backwards (a feature branch will appear "older" than the master branch). Exceptions: 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: if pieces["branch"] != "master": rendered += ".dev0" rendered += plus_or_dot(pieces) rendered += "%%d.g%%s" %% (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" else: # exception #1 rendered = "0" if pieces["branch"] != "master": rendered += ".dev0" rendered += "+untagged.%%d.g%%s" %% (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" return rendered def pep440_split_post(ver): """Split pep440 version string at the post-release segment. Returns the release segments before the post-release and the post-release version number (or -1 if no post-release segment is present). """ vc = str.split(ver, ".post") return vc[0], int(vc[1] or 0) if len(vc) == 2 else None def render_pep440_pre(pieces): """TAG[.postN.devDISTANCE] -- No -dirty. Exceptions: 1: no tags. 0.post0.devDISTANCE """ if pieces["closest-tag"]: if pieces["distance"]: # update the post release segment tag_version, post_version = pep440_split_post(pieces["closest-tag"]) rendered = tag_version if post_version is not None: rendered += ".post%%d.dev%%d" %% (post_version+1, pieces["distance"]) else: rendered += ".post0.dev%%d" %% (pieces["distance"]) else: # no commits, use the tag as the version rendered = pieces["closest-tag"] else: # exception #1 rendered = "0.post0.dev%%d" %% pieces["distance"] return rendered def render_pep440_post(pieces): """TAG[.postDISTANCE[.dev0]+gHEX] . The ".dev0" means dirty. Note that .dev0 sorts backwards (a dirty tree will appear "older" than the corresponding clean one), but you shouldn't be releasing software with -dirty anyways. Exceptions: 1: no tags. 0.postDISTANCE[.dev0] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += ".post%%d" %% pieces["distance"] if pieces["dirty"]: rendered += ".dev0" rendered += plus_or_dot(pieces) rendered += "g%%s" %% pieces["short"] else: # exception #1 rendered = "0.post%%d" %% pieces["distance"] if pieces["dirty"]: rendered += ".dev0" rendered += "+g%%s" %% pieces["short"] return rendered def render_pep440_post_branch(pieces): """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] . The ".dev0" means not master branch. Exceptions: 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += ".post%%d" %% pieces["distance"] if pieces["branch"] != "master": rendered += ".dev0" rendered += plus_or_dot(pieces) rendered += "g%%s" %% pieces["short"] if pieces["dirty"]: rendered += ".dirty" else: # exception #1 rendered = "0.post%%d" %% pieces["distance"] if pieces["branch"] != "master": rendered += ".dev0" rendered += "+g%%s" %% pieces["short"] if pieces["dirty"]: rendered += ".dirty" return rendered def render_pep440_old(pieces): """TAG[.postDISTANCE[.dev0]] . The ".dev0" means dirty. Exceptions: 1: no tags. 0.postDISTANCE[.dev0] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += ".post%%d" %% pieces["distance"] if pieces["dirty"]: rendered += ".dev0" else: # exception #1 rendered = "0.post%%d" %% pieces["distance"] if pieces["dirty"]: rendered += ".dev0" return rendered def render_git_describe(pieces): """TAG[-DISTANCE-gHEX][-dirty]. Like 'git describe --tags --dirty --always'. Exceptions: 1: no tags. HEX[-dirty] (note: no 'g' prefix) """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"]: rendered += "-%%d-g%%s" %% (pieces["distance"], pieces["short"]) else: # exception #1 rendered = pieces["short"] if pieces["dirty"]: rendered += "-dirty" return rendered def render_git_describe_long(pieces): """TAG-DISTANCE-gHEX[-dirty]. Like 'git describe --tags --dirty --always -long'. The distance/hash is unconditional. Exceptions: 1: no tags. HEX[-dirty] (note: no 'g' prefix) """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] rendered += "-%%d-g%%s" %% (pieces["distance"], pieces["short"]) else: # exception #1 rendered = pieces["short"] if pieces["dirty"]: rendered += "-dirty" return rendered def render(pieces, style): """Render the given version pieces into the requested style.""" if pieces["error"]: return {"version": "unknown", "full-revisionid": pieces.get("long"), "dirty": None, "error": pieces["error"], "date": None} if not style or style == "default": style = "pep440" # the default if style == "pep440": rendered = render_pep440(pieces) elif style == "pep440-branch": rendered = render_pep440_branch(pieces) elif style == "pep440-pre": rendered = render_pep440_pre(pieces) elif style == "pep440-post": rendered = render_pep440_post(pieces) elif style == "pep440-post-branch": rendered = render_pep440_post_branch(pieces) elif style == "pep440-old": rendered = render_pep440_old(pieces) elif style == "git-describe": rendered = render_git_describe(pieces) elif style == "git-describe-long": rendered = render_git_describe_long(pieces) else: raise ValueError("unknown style '%%s'" %% style) return {"version": rendered, "full-revisionid": pieces["long"], "dirty": pieces["dirty"], "error": None, "date": pieces.get("date")} def get_versions(): """Get version information or return default if unable to do so.""" # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have # __file__, we can work backwards from there to the root. Some # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which # case we can only use expanded keywords. cfg = get_config() verbose = cfg.verbose try: return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, verbose) except NotThisMethod: pass try: root = os.path.realpath(__file__) # versionfile_source is the relative path from the top of the source # tree (where the .git directory might live) to this file. Invert # this to find the root from __file__. for _ in cfg.versionfile_source.split('/'): root = os.path.dirname(root) except NameError: return {"version": "0+unknown", "full-revisionid": None, "dirty": None, "error": "unable to find root of source tree", "date": None} try: pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) return render(pieces, cfg.style) except NotThisMethod: pass try: if cfg.parentdir_prefix: return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) except NotThisMethod: pass return {"version": "0+unknown", "full-revisionid": None, "dirty": None, "error": "unable to compute version", "date": None} ''' @register_vcs_handler("git", "get_keywords") def git_get_keywords(versionfile_abs): """Extract version information from the given file.""" # the code embedded in _version.py can just fetch the value of these # keywords. When used from setup.py, we don't want to import _version.py, # so we do it with a regexp instead. This function is not used from # _version.py. keywords = {} try: with open(versionfile_abs, "r") as fobj: for line in fobj: if line.strip().startswith("git_refnames ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["refnames"] = mo.group(1) if line.strip().startswith("git_full ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["full"] = mo.group(1) if line.strip().startswith("git_date ="): mo = re.search(r'=\s*"(.*)"', line) if mo: keywords["date"] = mo.group(1) except OSError: pass return keywords @register_vcs_handler("git", "keywords") def git_versions_from_keywords(keywords, tag_prefix, verbose): """Get version information from git keywords.""" if "refnames" not in keywords: raise NotThisMethod("Short version file found") date = keywords.get("date") if date is not None: # Use only the last line. Previous lines may contain GPG signature # information. date = date.splitlines()[-1] # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 # -like" string, which we must then edit to make compliant), because # it's been around since git-1.5.3, and it's too difficult to # discover which version we're using, or to work around using an # older one. date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) refnames = keywords["refnames"].strip() if refnames.startswith("$Format"): if verbose: print("keywords are unexpanded, not using") raise NotThisMethod("unexpanded keywords, not a git-archive tarball") refs = {r.strip() for r in refnames.strip("()").split(",")} # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of # just "foo-1.0". If we see a "tag: " prefix, prefer those. TAG = "tag: " tags = {r[len(TAG) :] for r in refs if r.startswith(TAG)} if not tags: # Either we're using git < 1.8.3, or there really are no tags. We use # a heuristic: assume all version tags have a digit. The old git %d # expansion behaves like git log --decorate=short and strips out the # refs/heads/ and refs/tags/ prefixes that would let us distinguish # between branches and tags. By ignoring refnames without digits, we # filter out many common branch names like "release" and # "stabilization", as well as "HEAD" and "master". tags = {r for r in refs if re.search(r"\d", r)} if verbose: print("discarding '%s', no digits" % ",".join(refs - tags)) if verbose: print("likely tags: %s" % ",".join(sorted(tags))) for ref in sorted(tags): # sorting will prefer e.g. "2.0" over "2.0rc1" if ref.startswith(tag_prefix): r = ref[len(tag_prefix) :] # Filter out refs that exactly match prefix or that don't start # with a number once the prefix is stripped (mostly a concern # when prefix is '') if not re.match(r"\d", r): continue if verbose: print("picking %s" % r) return { "version": r, "full-revisionid": keywords["full"].strip(), "dirty": False, "error": None, "date": date, } # no suitable tags, so version is "0+unknown", but full hex is still there if verbose: print("no suitable tags, using unknown + full revision id") return { "version": "0+unknown", "full-revisionid": keywords["full"].strip(), "dirty": False, "error": "no suitable tags", "date": None, } @register_vcs_handler("git", "pieces_from_vcs") def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): """Get version from 'git describe' in the root of the source tree. This only gets called if the git-archive 'subst' keywords were *not* expanded, and _version.py hasn't already been rewritten with a short version string, meaning we're inside a checked out source tree. """ GITS = ["git"] TAG_PREFIX_REGEX = "*" if sys.platform == "win32": GITS = ["git.cmd", "git.exe"] TAG_PREFIX_REGEX = r"\*" _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=True) if rc != 0: if verbose: print("Directory %s not under git control" % root) raise NotThisMethod("'git rev-parse --git-dir' returned error") # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] # if there isn't one, this yields HEX[-dirty] (no NUM) describe_out, rc = runner( GITS, [ "describe", "--tags", "--dirty", "--always", "--long", "--match", "%s%s" % (tag_prefix, TAG_PREFIX_REGEX), ], cwd=root, ) # --long was added in git-1.5.5 if describe_out is None: raise NotThisMethod("'git describe' failed") describe_out = describe_out.strip() full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root) if full_out is None: raise NotThisMethod("'git rev-parse' failed") full_out = full_out.strip() pieces = {} pieces["long"] = full_out pieces["short"] = full_out[:7] # maybe improved later pieces["error"] = None branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], cwd=root) # --abbrev-ref was added in git-1.6.3 if rc != 0 or branch_name is None: raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") branch_name = branch_name.strip() if branch_name == "HEAD": # If we aren't exactly on a branch, pick a branch which represents # the current commit. If all else fails, we are on a branchless # commit. branches, rc = runner(GITS, ["branch", "--contains"], cwd=root) # --contains was added in git-1.5.4 if rc != 0 or branches is None: raise NotThisMethod("'git branch --contains' returned error") branches = branches.split("\n") # Remove the first line if we're running detached if "(" in branches[0]: branches.pop(0) # Strip off the leading "* " from the list of branches. branches = [branch[2:] for branch in branches] if "master" in branches: branch_name = "master" elif not branches: branch_name = None else: # Pick the first branch that is returned. Good or bad. branch_name = branches[0] pieces["branch"] = branch_name # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] # TAG might have hyphens. git_describe = describe_out # look for -dirty suffix dirty = git_describe.endswith("-dirty") pieces["dirty"] = dirty if dirty: git_describe = git_describe[: git_describe.rindex("-dirty")] # now we have TAG-NUM-gHEX or HEX if "-" in git_describe: # TAG-NUM-gHEX mo = re.search(r"^(.+)-(\d+)-g([0-9a-f]+)$", git_describe) if not mo: # unparsable. Maybe git-describe is misbehaving? pieces["error"] = "unable to parse git-describe output: '%s'" % describe_out return pieces # tag full_tag = mo.group(1) if not full_tag.startswith(tag_prefix): if verbose: fmt = "tag '%s' doesn't start with prefix '%s'" print(fmt % (full_tag, tag_prefix)) pieces["error"] = "tag '%s' doesn't start with prefix '%s'" % ( full_tag, tag_prefix, ) return pieces pieces["closest-tag"] = full_tag[len(tag_prefix) :] # distance: number of commits since tag pieces["distance"] = int(mo.group(2)) # commit: short hex revision ID pieces["short"] = mo.group(3) else: # HEX: no tags pieces["closest-tag"] = None count_out, rc = runner(GITS, ["rev-list", "HEAD", "--count"], cwd=root) pieces["distance"] = int(count_out) # total number of commits # commit date: see ISO-8601 comment in git_versions_from_keywords() date = runner(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip() # Use only the last line. Previous lines may contain GPG signature # information. date = date.splitlines()[-1] pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) return pieces def do_vcs_install(manifest_in, versionfile_source, ipy): """Git-specific installation logic for Versioneer. For Git, this means creating/changing .gitattributes to mark _version.py for export-subst keyword substitution. """ GITS = ["git"] if sys.platform == "win32": GITS = ["git.cmd", "git.exe"] files = [manifest_in, versionfile_source] if ipy: files.append(ipy) try: my_path = __file__ if my_path.endswith(".pyc") or my_path.endswith(".pyo"): my_path = os.path.splitext(my_path)[0] + ".py" versioneer_file = os.path.relpath(my_path) except NameError: versioneer_file = "versioneer.py" files.append(versioneer_file) present = False try: with open(".gitattributes", "r") as fobj: for line in fobj: if line.strip().startswith(versionfile_source): if "export-subst" in line.strip().split()[1:]: present = True break except OSError: pass if not present: with open(".gitattributes", "a+") as fobj: fobj.write(f"{versionfile_source} export-subst\n") files.append(".gitattributes") run_command(GITS, ["add", "--"] + files) def versions_from_parentdir(parentdir_prefix, root, verbose): """Try to determine the version from the parent directory name. Source tarballs conventionally unpack into a directory that includes both the project name and a version string. We will also support searching up two directory levels for an appropriately named parent directory """ rootdirs = [] for _ in range(3): dirname = os.path.basename(root) if dirname.startswith(parentdir_prefix): return { "version": dirname[len(parentdir_prefix) :], "full-revisionid": None, "dirty": False, "error": None, "date": None, } rootdirs.append(root) root = os.path.dirname(root) # up a level if verbose: print( "Tried directories %s but none started with prefix %s" % (str(rootdirs), parentdir_prefix) ) raise NotThisMethod("rootdir doesn't start with parentdir_prefix") SHORT_VERSION_PY = """ # This file was generated by 'versioneer.py' (0.21) from # revision-control system data, or from the parent directory name of an # unpacked source archive. Distribution tarballs contain a pre-generated copy # of this file. import json version_json = ''' %s ''' # END VERSION_JSON def get_versions(): return json.loads(version_json) """ def versions_from_file(filename): """Try to determine the version from _version.py if present.""" try: with open(filename) as f: contents = f.read() except OSError: raise NotThisMethod("unable to read _version.py") mo = re.search( r"version_json = '''\n(.*)''' # END VERSION_JSON", contents, re.M | re.S ) if not mo: mo = re.search( r"version_json = '''\r\n(.*)''' # END VERSION_JSON", contents, re.M | re.S ) if not mo: raise NotThisMethod("no version_json in _version.py") return json.loads(mo.group(1)) def write_to_version_file(filename, versions): """Write the given version number to the given _version.py file.""" os.unlink(filename) contents = json.dumps(versions, sort_keys=True, indent=1, separators=(",", ": ")) with open(filename, "w") as f: f.write(SHORT_VERSION_PY % contents) print("set %s to '%s'" % (filename, versions["version"])) def plus_or_dot(pieces): """Return a + if we don't already have one, else return a .""" if "+" in pieces.get("closest-tag", ""): return "." return "+" def render_pep440(pieces): """Build up version string, with post-release "local version identifier". Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty Exceptions: 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += plus_or_dot(pieces) rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" else: # exception #1 rendered = "0+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" return rendered def render_pep440_branch(pieces): """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] . The ".dev0" means not master branch. Note that .dev0 sorts backwards (a feature branch will appear "older" than the master branch). Exceptions: 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: if pieces["branch"] != "master": rendered += ".dev0" rendered += plus_or_dot(pieces) rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" else: # exception #1 rendered = "0" if pieces["branch"] != "master": rendered += ".dev0" rendered += "+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" return rendered def pep440_split_post(ver): """Split pep440 version string at the post-release segment. Returns the release segments before the post-release and the post-release version number (or -1 if no post-release segment is present). """ vc = str.split(ver, ".post") return vc[0], int(vc[1] or 0) if len(vc) == 2 else None def render_pep440_pre(pieces): """TAG[.postN.devDISTANCE] -- No -dirty. Exceptions: 1: no tags. 0.post0.devDISTANCE """ if pieces["closest-tag"]: if pieces["distance"]: # update the post release segment tag_version, post_version = pep440_split_post(pieces["closest-tag"]) rendered = tag_version if post_version is not None: rendered += ".post%d.dev%d" % (post_version + 1, pieces["distance"]) else: rendered += ".post0.dev%d" % (pieces["distance"]) else: # no commits, use the tag as the version rendered = pieces["closest-tag"] else: # exception #1 rendered = "0.post0.dev%d" % pieces["distance"] return rendered def render_pep440_post(pieces): """TAG[.postDISTANCE[.dev0]+gHEX] . The ".dev0" means dirty. Note that .dev0 sorts backwards (a dirty tree will appear "older" than the corresponding clean one), but you shouldn't be releasing software with -dirty anyways. Exceptions: 1: no tags. 0.postDISTANCE[.dev0] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += ".post%d" % pieces["distance"] if pieces["dirty"]: rendered += ".dev0" rendered += plus_or_dot(pieces) rendered += "g%s" % pieces["short"] else: # exception #1 rendered = "0.post%d" % pieces["distance"] if pieces["dirty"]: rendered += ".dev0" rendered += "+g%s" % pieces["short"] return rendered def render_pep440_post_branch(pieces): """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] . The ".dev0" means not master branch. Exceptions: 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += ".post%d" % pieces["distance"] if pieces["branch"] != "master": rendered += ".dev0" rendered += plus_or_dot(pieces) rendered += "g%s" % pieces["short"] if pieces["dirty"]: rendered += ".dirty" else: # exception #1 rendered = "0.post%d" % pieces["distance"] if pieces["branch"] != "master": rendered += ".dev0" rendered += "+g%s" % pieces["short"] if pieces["dirty"]: rendered += ".dirty" return rendered def render_pep440_old(pieces): """TAG[.postDISTANCE[.dev0]] . The ".dev0" means dirty. Exceptions: 1: no tags. 0.postDISTANCE[.dev0] """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += ".post%d" % pieces["distance"] if pieces["dirty"]: rendered += ".dev0" else: # exception #1 rendered = "0.post%d" % pieces["distance"] if pieces["dirty"]: rendered += ".dev0" return rendered def render_git_describe(pieces): """TAG[-DISTANCE-gHEX][-dirty]. Like 'git describe --tags --dirty --always'. Exceptions: 1: no tags. HEX[-dirty] (note: no 'g' prefix) """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"]: rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) else: # exception #1 rendered = pieces["short"] if pieces["dirty"]: rendered += "-dirty" return rendered def render_git_describe_long(pieces): """TAG-DISTANCE-gHEX[-dirty]. Like 'git describe --tags --dirty --always -long'. The distance/hash is unconditional. Exceptions: 1: no tags. HEX[-dirty] (note: no 'g' prefix) """ if pieces["closest-tag"]: rendered = pieces["closest-tag"] rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) else: # exception #1 rendered = pieces["short"] if pieces["dirty"]: rendered += "-dirty" return rendered def render(pieces, style): """Render the given version pieces into the requested style.""" if pieces["error"]: return { "version": "unknown", "full-revisionid": pieces.get("long"), "dirty": None, "error": pieces["error"], "date": None, } if not style or style == "default": style = "pep440" # the default if style == "pep440": rendered = render_pep440(pieces) elif style == "pep440-branch": rendered = render_pep440_branch(pieces) elif style == "pep440-pre": rendered = render_pep440_pre(pieces) elif style == "pep440-post": rendered = render_pep440_post(pieces) elif style == "pep440-post-branch": rendered = render_pep440_post_branch(pieces) elif style == "pep440-old": rendered = render_pep440_old(pieces) elif style == "git-describe": rendered = render_git_describe(pieces) elif style == "git-describe-long": rendered = render_git_describe_long(pieces) else: raise ValueError("unknown style '%s'" % style) return { "version": rendered, "full-revisionid": pieces["long"], "dirty": pieces["dirty"], "error": None, "date": pieces.get("date"), } class VersioneerBadRootError(Exception): """The project root directory is unknown or missing key files.""" def get_versions(verbose=False): """Get the project version from whatever source is available. Returns dict with two keys: 'version' and 'full'. """ if "versioneer" in sys.modules: # see the discussion in cmdclass.py:get_cmdclass() del sys.modules["versioneer"] root = get_root() cfg = get_config_from_root(root) assert cfg.VCS is not None, "please set [versioneer]VCS= in setup.cfg" handlers = HANDLERS.get(cfg.VCS) assert handlers, "unrecognized VCS '%s'" % cfg.VCS verbose = verbose or cfg.verbose assert ( cfg.versionfile_source is not None ), "please set versioneer.versionfile_source" assert cfg.tag_prefix is not None, "please set versioneer.tag_prefix" versionfile_abs = os.path.join(root, cfg.versionfile_source) # extract version from first of: _version.py, VCS command (e.g. 'git # describe'), parentdir. This is meant to work for developers using a # source checkout, for users of a tarball created by 'setup.py sdist', # and for users of a tarball/zipball created by 'git archive' or github's # download-from-tag feature or the equivalent in other VCSes. get_keywords_f = handlers.get("get_keywords") from_keywords_f = handlers.get("keywords") if get_keywords_f and from_keywords_f: try: keywords = get_keywords_f(versionfile_abs) ver = from_keywords_f(keywords, cfg.tag_prefix, verbose) if verbose: print("got version from expanded keyword %s" % ver) return ver except NotThisMethod: pass try: ver = versions_from_file(versionfile_abs) if verbose: print("got version from file %s %s" % (versionfile_abs, ver)) return ver except NotThisMethod: pass from_vcs_f = handlers.get("pieces_from_vcs") if from_vcs_f: try: pieces = from_vcs_f(cfg.tag_prefix, root, verbose) ver = render(pieces, cfg.style) if verbose: print("got version from VCS %s" % ver) return ver except NotThisMethod: pass try: if cfg.parentdir_prefix: ver = versions_from_parentdir(cfg.parentdir_prefix, root, verbose) if verbose: print("got version from parentdir %s" % ver) return ver except NotThisMethod: pass if verbose: print("unable to compute version") return { "version": "0+unknown", "full-revisionid": None, "dirty": None, "error": "unable to compute version", "date": None, } def get_version(): """Get the short version string for this project.""" return get_versions()["version"] def get_cmdclass(cmdclass=None): """Get the custom setuptools/distutils subclasses used by Versioneer. If the package uses a different cmdclass (e.g. one from numpy), it should be provide as an argument. """ if "versioneer" in sys.modules: del sys.modules["versioneer"] # this fixes the "python setup.py develop" case (also 'install' and # 'easy_install .'), in which subdependencies of the main project are # built (using setup.py bdist_egg) in the same python process. Assume # a main project A and a dependency B, which use different versions # of Versioneer. A's setup.py imports A's Versioneer, leaving it in # sys.modules by the time B's setup.py is executed, causing B to run # with the wrong versioneer. Setuptools wraps the sub-dep builds in a # sandbox that restores sys.modules to it's pre-build state, so the # parent is protected against the child's "import versioneer". By # removing ourselves from sys.modules here, before the child build # happens, we protect the child from the parent's versioneer too. # Also see https://github.com/python-versioneer/python-versioneer/issues/52 cmds = {} if cmdclass is None else cmdclass.copy() # we add "version" to both distutils and setuptools from distutils.core import Command class cmd_version(Command): description = "report generated version string" user_options = [] boolean_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): vers = get_versions(verbose=True) print("Version: %s" % vers["version"]) print(" full-revisionid: %s" % vers.get("full-revisionid")) print(" dirty: %s" % vers.get("dirty")) print(" date: %s" % vers.get("date")) if vers["error"]: print(" error: %s" % vers["error"]) cmds["version"] = cmd_version # we override "build_py" in both distutils and setuptools # # most invocation pathways end up running build_py: # distutils/build -> build_py # distutils/install -> distutils/build ->.. # setuptools/bdist_wheel -> distutils/install ->.. # setuptools/bdist_egg -> distutils/install_lib -> build_py # setuptools/install -> bdist_egg ->.. # setuptools/develop -> ? # pip install: # copies source tree to a tempdir before running egg_info/etc # if .git isn't copied too, 'git describe' will fail # then does setup.py bdist_wheel, or sometimes setup.py install # setup.py egg_info -> ? # we override different "build_py" commands for both environments if "build_py" in cmds: _build_py = cmds["build_py"] elif "setuptools" in sys.modules: from setuptools.command.build_py import build_py as _build_py else: from distutils.command.build_py import build_py as _build_py class cmd_build_py(_build_py): def run(self): root = get_root() cfg = get_config_from_root(root) versions = get_versions() _build_py.run(self) # now locate _version.py in the new build/ directory and replace # it with an updated value if cfg.versionfile_build: target_versionfile = os.path.join(self.build_lib, cfg.versionfile_build) print("UPDATING %s" % target_versionfile) write_to_version_file(target_versionfile, versions) cmds["build_py"] = cmd_build_py if "build_ext" in cmds: _build_ext = cmds["build_ext"] elif "setuptools" in sys.modules: from setuptools.command.build_ext import build_ext as _build_ext else: from distutils.command.build_ext import build_ext as _build_ext class cmd_build_ext(_build_ext): def run(self): root = get_root() cfg = get_config_from_root(root) versions = get_versions() _build_ext.run(self) if self.inplace: # build_ext --inplace will only build extensions in # build/lib<..> dir with no _version.py to write to. # As in place builds will already have a _version.py # in the module dir, we do not need to write one. return # now locate _version.py in the new build/ directory and replace # it with an updated value target_versionfile = os.path.join(self.build_lib, cfg.versionfile_build) print("UPDATING %s" % target_versionfile) write_to_version_file(target_versionfile, versions) cmds["build_ext"] = cmd_build_ext if "cx_Freeze" in sys.modules: # cx_freeze enabled? from cx_Freeze.dist import build_exe as _build_exe # nczeczulin reports that py2exe won't like the pep440-style string # as FILEVERSION, but it can be used for PRODUCTVERSION, e.g. # setup(console=[{ # "version": versioneer.get_version().split("+", 1)[0], # FILEVERSION # "product_version": versioneer.get_version(), # ... class cmd_build_exe(_build_exe): def run(self): root = get_root() cfg = get_config_from_root(root) versions = get_versions() target_versionfile = cfg.versionfile_source print("UPDATING %s" % target_versionfile) write_to_version_file(target_versionfile, versions) _build_exe.run(self) os.unlink(target_versionfile) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] f.write( LONG % { "DOLLAR": "$", "STYLE": cfg.style, "TAG_PREFIX": cfg.tag_prefix, "PARENTDIR_PREFIX": cfg.parentdir_prefix, "VERSIONFILE_SOURCE": cfg.versionfile_source, } ) cmds["build_exe"] = cmd_build_exe del cmds["build_py"] if "py2exe" in sys.modules: # py2exe enabled? from py2exe.distutils_buildexe import py2exe as _py2exe class cmd_py2exe(_py2exe): def run(self): root = get_root() cfg = get_config_from_root(root) versions = get_versions() target_versionfile = cfg.versionfile_source print("UPDATING %s" % target_versionfile) write_to_version_file(target_versionfile, versions) _py2exe.run(self) os.unlink(target_versionfile) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] f.write( LONG % { "DOLLAR": "$", "STYLE": cfg.style, "TAG_PREFIX": cfg.tag_prefix, "PARENTDIR_PREFIX": cfg.parentdir_prefix, "VERSIONFILE_SOURCE": cfg.versionfile_source, } ) cmds["py2exe"] = cmd_py2exe # we override different "sdist" commands for both environments if "sdist" in cmds: _sdist = cmds["sdist"] elif "setuptools" in sys.modules: from setuptools.command.sdist import sdist as _sdist else: from distutils.command.sdist import sdist as _sdist class cmd_sdist(_sdist): def run(self): versions = get_versions() self._versioneer_generated_versions = versions # unless we update this, the command will keep using the old # version self.distribution.metadata.version = versions["version"] return _sdist.run(self) def make_release_tree(self, base_dir, files): root = get_root() cfg = get_config_from_root(root) _sdist.make_release_tree(self, base_dir, files) # now locate _version.py in the new base_dir directory # (remembering that it may be a hardlink) and replace it with an # updated value target_versionfile = os.path.join(base_dir, cfg.versionfile_source) print("UPDATING %s" % target_versionfile) write_to_version_file( target_versionfile, self._versioneer_generated_versions ) cmds["sdist"] = cmd_sdist return cmds CONFIG_ERROR = """ setup.cfg is missing the necessary Versioneer configuration. You need a section like: [versioneer] VCS = git style = pep440 versionfile_source = src/myproject/_version.py versionfile_build = myproject/_version.py tag_prefix = parentdir_prefix = myproject- You will also need to edit your setup.py to use the results: import versioneer setup(version=versioneer.get_version(), cmdclass=versioneer.get_cmdclass(), ...) Please read the docstring in ./versioneer.py for configuration instructions, edit setup.cfg, and re-run the installer or 'python versioneer.py setup'. """ SAMPLE_CONFIG = """ # See the docstring in versioneer.py for instructions. Note that you must # re-run 'versioneer.py setup' after changing this section, and commit the # resulting files. [versioneer] #VCS = git #style = pep440 #versionfile_source = #versionfile_build = #tag_prefix = #parentdir_prefix = """ OLD_SNIPPET = """ from ._version import get_versions __version__ = get_versions()['version'] del get_versions """ INIT_PY_SNIPPET = """ from . import {0} __version__ = {0}.get_versions()['version'] """ def do_setup(): """Do main VCS-independent setup function for installing Versioneer.""" root = get_root() try: cfg = get_config_from_root(root) except (OSError, configparser.NoSectionError, configparser.NoOptionError) as e: if isinstance(e, (OSError, configparser.NoSectionError)): print("Adding sample versioneer config to setup.cfg", file=sys.stderr) with open(os.path.join(root, "setup.cfg"), "a") as f: f.write(SAMPLE_CONFIG) print(CONFIG_ERROR, file=sys.stderr) return 1 print(" creating %s" % cfg.versionfile_source) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] f.write( LONG % { "DOLLAR": "$", "STYLE": cfg.style, "TAG_PREFIX": cfg.tag_prefix, "PARENTDIR_PREFIX": cfg.parentdir_prefix, "VERSIONFILE_SOURCE": cfg.versionfile_source, } ) ipy = os.path.join(os.path.dirname(cfg.versionfile_source), "__init__.py") if os.path.exists(ipy): try: with open(ipy, "r") as f: old = f.read() except OSError: old = "" module = os.path.splitext(os.path.basename(cfg.versionfile_source))[0] snippet = INIT_PY_SNIPPET.format(module) if OLD_SNIPPET in old: print(" replacing boilerplate in %s" % ipy) with open(ipy, "w") as f: f.write(old.replace(OLD_SNIPPET, snippet)) elif snippet not in old: print(" appending to %s" % ipy) with open(ipy, "a") as f: f.write(snippet) else: print(" %s unmodified" % ipy) else: print(" %s doesn't exist, ok" % ipy) ipy = None # Make sure both the top-level "versioneer.py" and versionfile_source # (PKG/_version.py, used by runtime code) are in MANIFEST.in, so # they'll be copied into source distributions. Pip won't be able to # install the package without this. manifest_in = os.path.join(root, "MANIFEST.in") simple_includes = set() try: with open(manifest_in, "r") as f: for line in f: if line.startswith("include "): for include in line.split()[1:]: simple_includes.add(include) except OSError: pass # That doesn't cover everything MANIFEST.in can do # (http://docs.python.org/2/distutils/sourcedist.html#commands), so # it might give some false negatives. Appending redundant 'include' # lines is safe, though. if "versioneer.py" not in simple_includes: print(" appending 'versioneer.py' to MANIFEST.in") with open(manifest_in, "a") as f: f.write("include versioneer.py\n") else: print(" 'versioneer.py' already in MANIFEST.in") if cfg.versionfile_source not in simple_includes: print( " appending versionfile_source ('%s') to MANIFEST.in" % cfg.versionfile_source ) with open(manifest_in, "a") as f: f.write("include %s\n" % cfg.versionfile_source) else: print(" versionfile_source already in MANIFEST.in") # Make VCS-specific changes. For git, this means creating/changing # .gitattributes to mark _version.py for export-subst keyword # substitution. do_vcs_install(manifest_in, cfg.versionfile_source, ipy) return 0 def scan_setup_py(): """Validate the contents of setup.py against Versioneer's expectations.""" found = set() setters = False errors = 0 with open("setup.py", "r") as f: for line in f.readlines(): if "import versioneer" in line: found.add("import") if "versioneer.get_cmdclass()" in line: found.add("cmdclass") if "versioneer.get_version()" in line: found.add("get_version") if "versioneer.VCS" in line: setters = True if "versioneer.versionfile_source" in line: setters = True if len(found) != 3: print("") print("Your setup.py appears to be missing some important items") print("(but I might be wrong). Please make sure it has something") print("roughly like the following:") print("") print(" import versioneer") print(" setup( version=versioneer.get_version(),") print(" cmdclass=versioneer.get_cmdclass(), ...)") print("") errors += 1 if setters: print("You should remove lines like 'versioneer.VCS = ' and") print("'versioneer.versionfile_source = ' . This configuration") print("now lives in setup.cfg, and should be removed from setup.py") print("") errors += 1 return errors if __name__ == "__main__": cmd = sys.argv[1] if cmd == "setup": errors = do_setup() errors += scan_setup_py() if errors: sys.exit(1) plotly-5.15.0+dfsg1.orig/plotly.egg-info/0000755000175000017500000000000014440366051017434 5ustar noahfxnoahfxplotly-5.15.0+dfsg1.orig/plotly.egg-info/dependency_links.txt0000644000175000017500000000000114440366050023501 0ustar noahfxnoahfx plotly-5.15.0+dfsg1.orig/plotly.egg-info/SOURCES.txt0000644000175000017500000224241114440366051021326 0ustar noahfxnoahfxLICENSE.txt MANIFEST.in README.md jupyterlab-plotly.json pyproject.toml setup.cfg setup.py versioneer.py _plotly_future_/__init__.py _plotly_future_/extract_chart_studio.py _plotly_future_/orca_defaults.py _plotly_future_/remove_deprecations.py _plotly_future_/renderer_defaults.py _plotly_future_/template_defaults.py _plotly_future_/timezones.py _plotly_future_/trace_uids.py _plotly_future_/v4.py _plotly_future_/v4_subplots.py _plotly_utils/__init__.py _plotly_utils/basevalidators.py _plotly_utils/data_utils.py _plotly_utils/exceptions.py _plotly_utils/files.py _plotly_utils/importers.py _plotly_utils/optional_imports.py _plotly_utils/png.py _plotly_utils/utils.py _plotly_utils/colors/__init__.py _plotly_utils/colors/_swatches.py _plotly_utils/colors/carto.py _plotly_utils/colors/cmocean.py _plotly_utils/colors/colorbrewer.py _plotly_utils/colors/cyclical.py _plotly_utils/colors/diverging.py _plotly_utils/colors/plotlyjs.py _plotly_utils/colors/qualitative.py _plotly_utils/colors/sequential.py jupyterlab_plotly/__init__.py jupyterlab_plotly/labextension/package.json jupyterlab_plotly/labextension/static/133.5342d9bec93d5de59ad2.js jupyterlab_plotly/labextension/static/423.d0d3e2912c33c7566484.js jupyterlab_plotly/labextension/static/478.247fddac0148cc4e151b.js jupyterlab_plotly/labextension/static/478.247fddac0148cc4e151b.js.LICENSE.txt jupyterlab_plotly/labextension/static/486.6450efe6168c2f8caddb.js jupyterlab_plotly/labextension/static/486.6450efe6168c2f8caddb.js.LICENSE.txt jupyterlab_plotly/labextension/static/657.d89469e0b1d5bb171fde.js jupyterlab_plotly/labextension/static/855.323c80e7298812d692e7.js jupyterlab_plotly/labextension/static/remoteEntry.f294278414d0a929e4ae.js jupyterlab_plotly/labextension/static/style.js jupyterlab_plotly/labextension/static/third-party-licenses.json jupyterlab_plotly/nbextension/extension.js jupyterlab_plotly/nbextension/index.js jupyterlab_plotly/nbextension/index.js.LICENSE.txt plotly/__init__.py plotly/_subplots.py plotly/_version.py plotly/_widget_version.py plotly/animation.py plotly/basedatatypes.py plotly/basewidget.py plotly/callbacks.py plotly/config.py plotly/conftest.py plotly/dashboard_objs.py plotly/exceptions.py plotly/files.py plotly/grid_objs.py plotly/missing_ipywidgets.py plotly/optional_imports.py plotly/presentation_objs.py plotly/serializers.py plotly/session.py plotly/shapeannotation.py plotly/subplots.py plotly/tools.py plotly/utils.py plotly/validator_cache.py plotly/version.py plotly/widgets.py plotly.egg-info/PKG-INFO plotly.egg-info/SOURCES.txt plotly.egg-info/dependency_links.txt plotly.egg-info/not-zip-safe plotly.egg-info/requires.txt plotly.egg-info/top_level.txt plotly/colors/__init__.py plotly/data/__init__.py plotly/express/__init__.py plotly/express/_chart_types.py plotly/express/_core.py plotly/express/_doc.py plotly/express/_imshow.py plotly/express/_special_inputs.py plotly/express/imshow_utils.py plotly/express/colors/__init__.py plotly/express/data/__init__.py plotly/express/trendline_functions/__init__.py plotly/figure_factory/_2d_density.py plotly/figure_factory/__init__.py plotly/figure_factory/_annotated_heatmap.py plotly/figure_factory/_bullet.py plotly/figure_factory/_candlestick.py plotly/figure_factory/_county_choropleth.py plotly/figure_factory/_dendrogram.py plotly/figure_factory/_distplot.py plotly/figure_factory/_facet_grid.py plotly/figure_factory/_gantt.py plotly/figure_factory/_hexbin_mapbox.py plotly/figure_factory/_ohlc.py plotly/figure_factory/_quiver.py plotly/figure_factory/_scatterplot.py plotly/figure_factory/_streamline.py plotly/figure_factory/_table.py plotly/figure_factory/_ternary_contour.py plotly/figure_factory/_trisurf.py plotly/figure_factory/_violin.py plotly/figure_factory/utils.py plotly/graph_objects/__init__.py plotly/graph_objs/__init__.py plotly/graph_objs/_bar.py plotly/graph_objs/_barpolar.py plotly/graph_objs/_box.py plotly/graph_objs/_candlestick.py plotly/graph_objs/_carpet.py plotly/graph_objs/_choropleth.py plotly/graph_objs/_choroplethmapbox.py plotly/graph_objs/_cone.py plotly/graph_objs/_contour.py plotly/graph_objs/_contourcarpet.py plotly/graph_objs/_densitymapbox.py plotly/graph_objs/_deprecations.py plotly/graph_objs/_figure.py plotly/graph_objs/_figurewidget.py plotly/graph_objs/_frame.py plotly/graph_objs/_funnel.py plotly/graph_objs/_funnelarea.py plotly/graph_objs/_heatmap.py plotly/graph_objs/_heatmapgl.py plotly/graph_objs/_histogram.py plotly/graph_objs/_histogram2d.py plotly/graph_objs/_histogram2dcontour.py plotly/graph_objs/_icicle.py plotly/graph_objs/_image.py plotly/graph_objs/_indicator.py plotly/graph_objs/_isosurface.py plotly/graph_objs/_layout.py plotly/graph_objs/_mesh3d.py plotly/graph_objs/_ohlc.py plotly/graph_objs/_parcats.py plotly/graph_objs/_parcoords.py plotly/graph_objs/_pie.py plotly/graph_objs/_pointcloud.py plotly/graph_objs/_sankey.py plotly/graph_objs/_scatter.py plotly/graph_objs/_scatter3d.py plotly/graph_objs/_scattercarpet.py plotly/graph_objs/_scattergeo.py plotly/graph_objs/_scattergl.py plotly/graph_objs/_scattermapbox.py plotly/graph_objs/_scatterpolar.py plotly/graph_objs/_scatterpolargl.py plotly/graph_objs/_scattersmith.py plotly/graph_objs/_scatterternary.py plotly/graph_objs/_splom.py plotly/graph_objs/_streamtube.py plotly/graph_objs/_sunburst.py plotly/graph_objs/_surface.py plotly/graph_objs/_table.py plotly/graph_objs/_treemap.py plotly/graph_objs/_violin.py plotly/graph_objs/_volume.py plotly/graph_objs/_waterfall.py plotly/graph_objs/graph_objs.py plotly/graph_objs/bar/__init__.py plotly/graph_objs/bar/_error_x.py plotly/graph_objs/bar/_error_y.py plotly/graph_objs/bar/_hoverlabel.py plotly/graph_objs/bar/_insidetextfont.py plotly/graph_objs/bar/_legendgrouptitle.py plotly/graph_objs/bar/_marker.py plotly/graph_objs/bar/_outsidetextfont.py plotly/graph_objs/bar/_selected.py plotly/graph_objs/bar/_stream.py plotly/graph_objs/bar/_textfont.py plotly/graph_objs/bar/_unselected.py plotly/graph_objs/bar/hoverlabel/__init__.py plotly/graph_objs/bar/hoverlabel/_font.py plotly/graph_objs/bar/legendgrouptitle/__init__.py plotly/graph_objs/bar/legendgrouptitle/_font.py plotly/graph_objs/bar/marker/__init__.py plotly/graph_objs/bar/marker/_colorbar.py plotly/graph_objs/bar/marker/_line.py plotly/graph_objs/bar/marker/_pattern.py plotly/graph_objs/bar/marker/colorbar/__init__.py plotly/graph_objs/bar/marker/colorbar/_tickfont.py plotly/graph_objs/bar/marker/colorbar/_tickformatstop.py plotly/graph_objs/bar/marker/colorbar/_title.py plotly/graph_objs/bar/marker/colorbar/title/__init__.py plotly/graph_objs/bar/marker/colorbar/title/_font.py plotly/graph_objs/bar/selected/__init__.py plotly/graph_objs/bar/selected/_marker.py plotly/graph_objs/bar/selected/_textfont.py plotly/graph_objs/bar/unselected/__init__.py plotly/graph_objs/bar/unselected/_marker.py plotly/graph_objs/bar/unselected/_textfont.py plotly/graph_objs/barpolar/__init__.py plotly/graph_objs/barpolar/_hoverlabel.py plotly/graph_objs/barpolar/_legendgrouptitle.py plotly/graph_objs/barpolar/_marker.py plotly/graph_objs/barpolar/_selected.py plotly/graph_objs/barpolar/_stream.py plotly/graph_objs/barpolar/_unselected.py plotly/graph_objs/barpolar/hoverlabel/__init__.py plotly/graph_objs/barpolar/hoverlabel/_font.py plotly/graph_objs/barpolar/legendgrouptitle/__init__.py plotly/graph_objs/barpolar/legendgrouptitle/_font.py plotly/graph_objs/barpolar/marker/__init__.py plotly/graph_objs/barpolar/marker/_colorbar.py plotly/graph_objs/barpolar/marker/_line.py plotly/graph_objs/barpolar/marker/_pattern.py plotly/graph_objs/barpolar/marker/colorbar/__init__.py plotly/graph_objs/barpolar/marker/colorbar/_tickfont.py plotly/graph_objs/barpolar/marker/colorbar/_tickformatstop.py plotly/graph_objs/barpolar/marker/colorbar/_title.py plotly/graph_objs/barpolar/marker/colorbar/title/__init__.py plotly/graph_objs/barpolar/marker/colorbar/title/_font.py plotly/graph_objs/barpolar/selected/__init__.py plotly/graph_objs/barpolar/selected/_marker.py plotly/graph_objs/barpolar/selected/_textfont.py plotly/graph_objs/barpolar/unselected/__init__.py plotly/graph_objs/barpolar/unselected/_marker.py plotly/graph_objs/barpolar/unselected/_textfont.py plotly/graph_objs/box/__init__.py plotly/graph_objs/box/_hoverlabel.py plotly/graph_objs/box/_legendgrouptitle.py plotly/graph_objs/box/_line.py plotly/graph_objs/box/_marker.py plotly/graph_objs/box/_selected.py plotly/graph_objs/box/_stream.py plotly/graph_objs/box/_unselected.py plotly/graph_objs/box/hoverlabel/__init__.py plotly/graph_objs/box/hoverlabel/_font.py plotly/graph_objs/box/legendgrouptitle/__init__.py plotly/graph_objs/box/legendgrouptitle/_font.py plotly/graph_objs/box/marker/__init__.py plotly/graph_objs/box/marker/_line.py plotly/graph_objs/box/selected/__init__.py plotly/graph_objs/box/selected/_marker.py plotly/graph_objs/box/unselected/__init__.py plotly/graph_objs/box/unselected/_marker.py plotly/graph_objs/candlestick/__init__.py plotly/graph_objs/candlestick/_decreasing.py plotly/graph_objs/candlestick/_hoverlabel.py plotly/graph_objs/candlestick/_increasing.py plotly/graph_objs/candlestick/_legendgrouptitle.py plotly/graph_objs/candlestick/_line.py plotly/graph_objs/candlestick/_stream.py plotly/graph_objs/candlestick/decreasing/__init__.py plotly/graph_objs/candlestick/decreasing/_line.py plotly/graph_objs/candlestick/hoverlabel/__init__.py plotly/graph_objs/candlestick/hoverlabel/_font.py plotly/graph_objs/candlestick/increasing/__init__.py plotly/graph_objs/candlestick/increasing/_line.py plotly/graph_objs/candlestick/legendgrouptitle/__init__.py plotly/graph_objs/candlestick/legendgrouptitle/_font.py plotly/graph_objs/carpet/__init__.py plotly/graph_objs/carpet/_aaxis.py plotly/graph_objs/carpet/_baxis.py plotly/graph_objs/carpet/_font.py plotly/graph_objs/carpet/_legendgrouptitle.py plotly/graph_objs/carpet/_stream.py plotly/graph_objs/carpet/aaxis/__init__.py plotly/graph_objs/carpet/aaxis/_tickfont.py plotly/graph_objs/carpet/aaxis/_tickformatstop.py plotly/graph_objs/carpet/aaxis/_title.py plotly/graph_objs/carpet/aaxis/title/__init__.py plotly/graph_objs/carpet/aaxis/title/_font.py plotly/graph_objs/carpet/baxis/__init__.py plotly/graph_objs/carpet/baxis/_tickfont.py plotly/graph_objs/carpet/baxis/_tickformatstop.py plotly/graph_objs/carpet/baxis/_title.py plotly/graph_objs/carpet/baxis/title/__init__.py plotly/graph_objs/carpet/baxis/title/_font.py plotly/graph_objs/carpet/legendgrouptitle/__init__.py plotly/graph_objs/carpet/legendgrouptitle/_font.py plotly/graph_objs/choropleth/__init__.py plotly/graph_objs/choropleth/_colorbar.py plotly/graph_objs/choropleth/_hoverlabel.py plotly/graph_objs/choropleth/_legendgrouptitle.py plotly/graph_objs/choropleth/_marker.py plotly/graph_objs/choropleth/_selected.py plotly/graph_objs/choropleth/_stream.py plotly/graph_objs/choropleth/_unselected.py plotly/graph_objs/choropleth/colorbar/__init__.py plotly/graph_objs/choropleth/colorbar/_tickfont.py plotly/graph_objs/choropleth/colorbar/_tickformatstop.py plotly/graph_objs/choropleth/colorbar/_title.py plotly/graph_objs/choropleth/colorbar/title/__init__.py plotly/graph_objs/choropleth/colorbar/title/_font.py plotly/graph_objs/choropleth/hoverlabel/__init__.py plotly/graph_objs/choropleth/hoverlabel/_font.py plotly/graph_objs/choropleth/legendgrouptitle/__init__.py plotly/graph_objs/choropleth/legendgrouptitle/_font.py plotly/graph_objs/choropleth/marker/__init__.py plotly/graph_objs/choropleth/marker/_line.py plotly/graph_objs/choropleth/selected/__init__.py plotly/graph_objs/choropleth/selected/_marker.py plotly/graph_objs/choropleth/unselected/__init__.py plotly/graph_objs/choropleth/unselected/_marker.py plotly/graph_objs/choroplethmapbox/__init__.py plotly/graph_objs/choroplethmapbox/_colorbar.py plotly/graph_objs/choroplethmapbox/_hoverlabel.py plotly/graph_objs/choroplethmapbox/_legendgrouptitle.py plotly/graph_objs/choroplethmapbox/_marker.py plotly/graph_objs/choroplethmapbox/_selected.py plotly/graph_objs/choroplethmapbox/_stream.py plotly/graph_objs/choroplethmapbox/_unselected.py plotly/graph_objs/choroplethmapbox/colorbar/__init__.py plotly/graph_objs/choroplethmapbox/colorbar/_tickfont.py plotly/graph_objs/choroplethmapbox/colorbar/_tickformatstop.py plotly/graph_objs/choroplethmapbox/colorbar/_title.py plotly/graph_objs/choroplethmapbox/colorbar/title/__init__.py plotly/graph_objs/choroplethmapbox/colorbar/title/_font.py plotly/graph_objs/choroplethmapbox/hoverlabel/__init__.py plotly/graph_objs/choroplethmapbox/hoverlabel/_font.py plotly/graph_objs/choroplethmapbox/legendgrouptitle/__init__.py plotly/graph_objs/choroplethmapbox/legendgrouptitle/_font.py plotly/graph_objs/choroplethmapbox/marker/__init__.py plotly/graph_objs/choroplethmapbox/marker/_line.py plotly/graph_objs/choroplethmapbox/selected/__init__.py plotly/graph_objs/choroplethmapbox/selected/_marker.py plotly/graph_objs/choroplethmapbox/unselected/__init__.py plotly/graph_objs/choroplethmapbox/unselected/_marker.py plotly/graph_objs/cone/__init__.py plotly/graph_objs/cone/_colorbar.py plotly/graph_objs/cone/_hoverlabel.py plotly/graph_objs/cone/_legendgrouptitle.py plotly/graph_objs/cone/_lighting.py plotly/graph_objs/cone/_lightposition.py plotly/graph_objs/cone/_stream.py plotly/graph_objs/cone/colorbar/__init__.py plotly/graph_objs/cone/colorbar/_tickfont.py plotly/graph_objs/cone/colorbar/_tickformatstop.py plotly/graph_objs/cone/colorbar/_title.py plotly/graph_objs/cone/colorbar/title/__init__.py plotly/graph_objs/cone/colorbar/title/_font.py plotly/graph_objs/cone/hoverlabel/__init__.py plotly/graph_objs/cone/hoverlabel/_font.py plotly/graph_objs/cone/legendgrouptitle/__init__.py plotly/graph_objs/cone/legendgrouptitle/_font.py plotly/graph_objs/contour/__init__.py plotly/graph_objs/contour/_colorbar.py plotly/graph_objs/contour/_contours.py plotly/graph_objs/contour/_hoverlabel.py plotly/graph_objs/contour/_legendgrouptitle.py plotly/graph_objs/contour/_line.py plotly/graph_objs/contour/_stream.py plotly/graph_objs/contour/_textfont.py plotly/graph_objs/contour/colorbar/__init__.py plotly/graph_objs/contour/colorbar/_tickfont.py plotly/graph_objs/contour/colorbar/_tickformatstop.py plotly/graph_objs/contour/colorbar/_title.py plotly/graph_objs/contour/colorbar/title/__init__.py plotly/graph_objs/contour/colorbar/title/_font.py plotly/graph_objs/contour/contours/__init__.py plotly/graph_objs/contour/contours/_labelfont.py plotly/graph_objs/contour/hoverlabel/__init__.py plotly/graph_objs/contour/hoverlabel/_font.py plotly/graph_objs/contour/legendgrouptitle/__init__.py plotly/graph_objs/contour/legendgrouptitle/_font.py plotly/graph_objs/contourcarpet/__init__.py plotly/graph_objs/contourcarpet/_colorbar.py plotly/graph_objs/contourcarpet/_contours.py plotly/graph_objs/contourcarpet/_legendgrouptitle.py plotly/graph_objs/contourcarpet/_line.py plotly/graph_objs/contourcarpet/_stream.py plotly/graph_objs/contourcarpet/colorbar/__init__.py plotly/graph_objs/contourcarpet/colorbar/_tickfont.py plotly/graph_objs/contourcarpet/colorbar/_tickformatstop.py plotly/graph_objs/contourcarpet/colorbar/_title.py plotly/graph_objs/contourcarpet/colorbar/title/__init__.py plotly/graph_objs/contourcarpet/colorbar/title/_font.py plotly/graph_objs/contourcarpet/contours/__init__.py plotly/graph_objs/contourcarpet/contours/_labelfont.py plotly/graph_objs/contourcarpet/legendgrouptitle/__init__.py plotly/graph_objs/contourcarpet/legendgrouptitle/_font.py plotly/graph_objs/densitymapbox/__init__.py plotly/graph_objs/densitymapbox/_colorbar.py plotly/graph_objs/densitymapbox/_hoverlabel.py plotly/graph_objs/densitymapbox/_legendgrouptitle.py plotly/graph_objs/densitymapbox/_stream.py plotly/graph_objs/densitymapbox/colorbar/__init__.py plotly/graph_objs/densitymapbox/colorbar/_tickfont.py plotly/graph_objs/densitymapbox/colorbar/_tickformatstop.py plotly/graph_objs/densitymapbox/colorbar/_title.py plotly/graph_objs/densitymapbox/colorbar/title/__init__.py plotly/graph_objs/densitymapbox/colorbar/title/_font.py plotly/graph_objs/densitymapbox/hoverlabel/__init__.py plotly/graph_objs/densitymapbox/hoverlabel/_font.py plotly/graph_objs/densitymapbox/legendgrouptitle/__init__.py plotly/graph_objs/densitymapbox/legendgrouptitle/_font.py plotly/graph_objs/funnel/__init__.py plotly/graph_objs/funnel/_connector.py plotly/graph_objs/funnel/_hoverlabel.py plotly/graph_objs/funnel/_insidetextfont.py plotly/graph_objs/funnel/_legendgrouptitle.py plotly/graph_objs/funnel/_marker.py plotly/graph_objs/funnel/_outsidetextfont.py plotly/graph_objs/funnel/_stream.py plotly/graph_objs/funnel/_textfont.py plotly/graph_objs/funnel/connector/__init__.py plotly/graph_objs/funnel/connector/_line.py plotly/graph_objs/funnel/hoverlabel/__init__.py plotly/graph_objs/funnel/hoverlabel/_font.py plotly/graph_objs/funnel/legendgrouptitle/__init__.py plotly/graph_objs/funnel/legendgrouptitle/_font.py plotly/graph_objs/funnel/marker/__init__.py plotly/graph_objs/funnel/marker/_colorbar.py plotly/graph_objs/funnel/marker/_line.py plotly/graph_objs/funnel/marker/colorbar/__init__.py plotly/graph_objs/funnel/marker/colorbar/_tickfont.py plotly/graph_objs/funnel/marker/colorbar/_tickformatstop.py plotly/graph_objs/funnel/marker/colorbar/_title.py plotly/graph_objs/funnel/marker/colorbar/title/__init__.py plotly/graph_objs/funnel/marker/colorbar/title/_font.py plotly/graph_objs/funnelarea/__init__.py plotly/graph_objs/funnelarea/_domain.py plotly/graph_objs/funnelarea/_hoverlabel.py plotly/graph_objs/funnelarea/_insidetextfont.py plotly/graph_objs/funnelarea/_legendgrouptitle.py plotly/graph_objs/funnelarea/_marker.py plotly/graph_objs/funnelarea/_stream.py plotly/graph_objs/funnelarea/_textfont.py plotly/graph_objs/funnelarea/_title.py plotly/graph_objs/funnelarea/hoverlabel/__init__.py plotly/graph_objs/funnelarea/hoverlabel/_font.py plotly/graph_objs/funnelarea/legendgrouptitle/__init__.py plotly/graph_objs/funnelarea/legendgrouptitle/_font.py plotly/graph_objs/funnelarea/marker/__init__.py plotly/graph_objs/funnelarea/marker/_line.py plotly/graph_objs/funnelarea/marker/_pattern.py plotly/graph_objs/funnelarea/title/__init__.py plotly/graph_objs/funnelarea/title/_font.py plotly/graph_objs/heatmap/__init__.py plotly/graph_objs/heatmap/_colorbar.py plotly/graph_objs/heatmap/_hoverlabel.py plotly/graph_objs/heatmap/_legendgrouptitle.py plotly/graph_objs/heatmap/_stream.py plotly/graph_objs/heatmap/_textfont.py plotly/graph_objs/heatmap/colorbar/__init__.py plotly/graph_objs/heatmap/colorbar/_tickfont.py plotly/graph_objs/heatmap/colorbar/_tickformatstop.py plotly/graph_objs/heatmap/colorbar/_title.py plotly/graph_objs/heatmap/colorbar/title/__init__.py plotly/graph_objs/heatmap/colorbar/title/_font.py plotly/graph_objs/heatmap/hoverlabel/__init__.py plotly/graph_objs/heatmap/hoverlabel/_font.py plotly/graph_objs/heatmap/legendgrouptitle/__init__.py plotly/graph_objs/heatmap/legendgrouptitle/_font.py plotly/graph_objs/heatmapgl/__init__.py plotly/graph_objs/heatmapgl/_colorbar.py plotly/graph_objs/heatmapgl/_hoverlabel.py plotly/graph_objs/heatmapgl/_legendgrouptitle.py plotly/graph_objs/heatmapgl/_stream.py plotly/graph_objs/heatmapgl/colorbar/__init__.py plotly/graph_objs/heatmapgl/colorbar/_tickfont.py plotly/graph_objs/heatmapgl/colorbar/_tickformatstop.py plotly/graph_objs/heatmapgl/colorbar/_title.py plotly/graph_objs/heatmapgl/colorbar/title/__init__.py plotly/graph_objs/heatmapgl/colorbar/title/_font.py plotly/graph_objs/heatmapgl/hoverlabel/__init__.py plotly/graph_objs/heatmapgl/hoverlabel/_font.py plotly/graph_objs/heatmapgl/legendgrouptitle/__init__.py plotly/graph_objs/heatmapgl/legendgrouptitle/_font.py plotly/graph_objs/histogram/__init__.py plotly/graph_objs/histogram/_cumulative.py plotly/graph_objs/histogram/_error_x.py plotly/graph_objs/histogram/_error_y.py plotly/graph_objs/histogram/_hoverlabel.py plotly/graph_objs/histogram/_insidetextfont.py plotly/graph_objs/histogram/_legendgrouptitle.py plotly/graph_objs/histogram/_marker.py plotly/graph_objs/histogram/_outsidetextfont.py plotly/graph_objs/histogram/_selected.py plotly/graph_objs/histogram/_stream.py plotly/graph_objs/histogram/_textfont.py plotly/graph_objs/histogram/_unselected.py plotly/graph_objs/histogram/_xbins.py plotly/graph_objs/histogram/_ybins.py plotly/graph_objs/histogram/hoverlabel/__init__.py plotly/graph_objs/histogram/hoverlabel/_font.py plotly/graph_objs/histogram/legendgrouptitle/__init__.py plotly/graph_objs/histogram/legendgrouptitle/_font.py plotly/graph_objs/histogram/marker/__init__.py plotly/graph_objs/histogram/marker/_colorbar.py plotly/graph_objs/histogram/marker/_line.py plotly/graph_objs/histogram/marker/_pattern.py plotly/graph_objs/histogram/marker/colorbar/__init__.py plotly/graph_objs/histogram/marker/colorbar/_tickfont.py plotly/graph_objs/histogram/marker/colorbar/_tickformatstop.py plotly/graph_objs/histogram/marker/colorbar/_title.py plotly/graph_objs/histogram/marker/colorbar/title/__init__.py plotly/graph_objs/histogram/marker/colorbar/title/_font.py plotly/graph_objs/histogram/selected/__init__.py plotly/graph_objs/histogram/selected/_marker.py plotly/graph_objs/histogram/selected/_textfont.py plotly/graph_objs/histogram/unselected/__init__.py plotly/graph_objs/histogram/unselected/_marker.py plotly/graph_objs/histogram/unselected/_textfont.py plotly/graph_objs/histogram2d/__init__.py plotly/graph_objs/histogram2d/_colorbar.py plotly/graph_objs/histogram2d/_hoverlabel.py plotly/graph_objs/histogram2d/_legendgrouptitle.py plotly/graph_objs/histogram2d/_marker.py plotly/graph_objs/histogram2d/_stream.py plotly/graph_objs/histogram2d/_textfont.py plotly/graph_objs/histogram2d/_xbins.py plotly/graph_objs/histogram2d/_ybins.py plotly/graph_objs/histogram2d/colorbar/__init__.py plotly/graph_objs/histogram2d/colorbar/_tickfont.py plotly/graph_objs/histogram2d/colorbar/_tickformatstop.py plotly/graph_objs/histogram2d/colorbar/_title.py plotly/graph_objs/histogram2d/colorbar/title/__init__.py plotly/graph_objs/histogram2d/colorbar/title/_font.py plotly/graph_objs/histogram2d/hoverlabel/__init__.py plotly/graph_objs/histogram2d/hoverlabel/_font.py plotly/graph_objs/histogram2d/legendgrouptitle/__init__.py plotly/graph_objs/histogram2d/legendgrouptitle/_font.py plotly/graph_objs/histogram2dcontour/__init__.py plotly/graph_objs/histogram2dcontour/_colorbar.py plotly/graph_objs/histogram2dcontour/_contours.py plotly/graph_objs/histogram2dcontour/_hoverlabel.py plotly/graph_objs/histogram2dcontour/_legendgrouptitle.py plotly/graph_objs/histogram2dcontour/_line.py plotly/graph_objs/histogram2dcontour/_marker.py plotly/graph_objs/histogram2dcontour/_stream.py plotly/graph_objs/histogram2dcontour/_textfont.py plotly/graph_objs/histogram2dcontour/_xbins.py plotly/graph_objs/histogram2dcontour/_ybins.py plotly/graph_objs/histogram2dcontour/colorbar/__init__.py plotly/graph_objs/histogram2dcontour/colorbar/_tickfont.py plotly/graph_objs/histogram2dcontour/colorbar/_tickformatstop.py plotly/graph_objs/histogram2dcontour/colorbar/_title.py plotly/graph_objs/histogram2dcontour/colorbar/title/__init__.py plotly/graph_objs/histogram2dcontour/colorbar/title/_font.py plotly/graph_objs/histogram2dcontour/contours/__init__.py plotly/graph_objs/histogram2dcontour/contours/_labelfont.py plotly/graph_objs/histogram2dcontour/hoverlabel/__init__.py plotly/graph_objs/histogram2dcontour/hoverlabel/_font.py plotly/graph_objs/histogram2dcontour/legendgrouptitle/__init__.py plotly/graph_objs/histogram2dcontour/legendgrouptitle/_font.py plotly/graph_objs/icicle/__init__.py plotly/graph_objs/icicle/_domain.py plotly/graph_objs/icicle/_hoverlabel.py plotly/graph_objs/icicle/_insidetextfont.py plotly/graph_objs/icicle/_leaf.py plotly/graph_objs/icicle/_legendgrouptitle.py plotly/graph_objs/icicle/_marker.py plotly/graph_objs/icicle/_outsidetextfont.py plotly/graph_objs/icicle/_pathbar.py plotly/graph_objs/icicle/_root.py plotly/graph_objs/icicle/_stream.py plotly/graph_objs/icicle/_textfont.py plotly/graph_objs/icicle/_tiling.py plotly/graph_objs/icicle/hoverlabel/__init__.py plotly/graph_objs/icicle/hoverlabel/_font.py plotly/graph_objs/icicle/legendgrouptitle/__init__.py plotly/graph_objs/icicle/legendgrouptitle/_font.py plotly/graph_objs/icicle/marker/__init__.py plotly/graph_objs/icicle/marker/_colorbar.py plotly/graph_objs/icicle/marker/_line.py plotly/graph_objs/icicle/marker/_pattern.py plotly/graph_objs/icicle/marker/colorbar/__init__.py plotly/graph_objs/icicle/marker/colorbar/_tickfont.py plotly/graph_objs/icicle/marker/colorbar/_tickformatstop.py plotly/graph_objs/icicle/marker/colorbar/_title.py plotly/graph_objs/icicle/marker/colorbar/title/__init__.py plotly/graph_objs/icicle/marker/colorbar/title/_font.py plotly/graph_objs/icicle/pathbar/__init__.py plotly/graph_objs/icicle/pathbar/_textfont.py plotly/graph_objs/image/__init__.py plotly/graph_objs/image/_hoverlabel.py plotly/graph_objs/image/_legendgrouptitle.py plotly/graph_objs/image/_stream.py plotly/graph_objs/image/hoverlabel/__init__.py plotly/graph_objs/image/hoverlabel/_font.py plotly/graph_objs/image/legendgrouptitle/__init__.py plotly/graph_objs/image/legendgrouptitle/_font.py plotly/graph_objs/indicator/__init__.py plotly/graph_objs/indicator/_delta.py plotly/graph_objs/indicator/_domain.py plotly/graph_objs/indicator/_gauge.py plotly/graph_objs/indicator/_legendgrouptitle.py plotly/graph_objs/indicator/_number.py plotly/graph_objs/indicator/_stream.py plotly/graph_objs/indicator/_title.py plotly/graph_objs/indicator/delta/__init__.py plotly/graph_objs/indicator/delta/_decreasing.py plotly/graph_objs/indicator/delta/_font.py plotly/graph_objs/indicator/delta/_increasing.py plotly/graph_objs/indicator/gauge/__init__.py plotly/graph_objs/indicator/gauge/_axis.py plotly/graph_objs/indicator/gauge/_bar.py plotly/graph_objs/indicator/gauge/_step.py plotly/graph_objs/indicator/gauge/_threshold.py plotly/graph_objs/indicator/gauge/axis/__init__.py plotly/graph_objs/indicator/gauge/axis/_tickfont.py plotly/graph_objs/indicator/gauge/axis/_tickformatstop.py plotly/graph_objs/indicator/gauge/bar/__init__.py plotly/graph_objs/indicator/gauge/bar/_line.py plotly/graph_objs/indicator/gauge/step/__init__.py plotly/graph_objs/indicator/gauge/step/_line.py plotly/graph_objs/indicator/gauge/threshold/__init__.py plotly/graph_objs/indicator/gauge/threshold/_line.py plotly/graph_objs/indicator/legendgrouptitle/__init__.py plotly/graph_objs/indicator/legendgrouptitle/_font.py plotly/graph_objs/indicator/number/__init__.py plotly/graph_objs/indicator/number/_font.py plotly/graph_objs/indicator/title/__init__.py plotly/graph_objs/indicator/title/_font.py plotly/graph_objs/isosurface/__init__.py plotly/graph_objs/isosurface/_caps.py plotly/graph_objs/isosurface/_colorbar.py plotly/graph_objs/isosurface/_contour.py plotly/graph_objs/isosurface/_hoverlabel.py plotly/graph_objs/isosurface/_legendgrouptitle.py plotly/graph_objs/isosurface/_lighting.py plotly/graph_objs/isosurface/_lightposition.py plotly/graph_objs/isosurface/_slices.py plotly/graph_objs/isosurface/_spaceframe.py plotly/graph_objs/isosurface/_stream.py plotly/graph_objs/isosurface/_surface.py plotly/graph_objs/isosurface/caps/__init__.py plotly/graph_objs/isosurface/caps/_x.py plotly/graph_objs/isosurface/caps/_y.py plotly/graph_objs/isosurface/caps/_z.py plotly/graph_objs/isosurface/colorbar/__init__.py plotly/graph_objs/isosurface/colorbar/_tickfont.py plotly/graph_objs/isosurface/colorbar/_tickformatstop.py plotly/graph_objs/isosurface/colorbar/_title.py plotly/graph_objs/isosurface/colorbar/title/__init__.py plotly/graph_objs/isosurface/colorbar/title/_font.py plotly/graph_objs/isosurface/hoverlabel/__init__.py plotly/graph_objs/isosurface/hoverlabel/_font.py plotly/graph_objs/isosurface/legendgrouptitle/__init__.py plotly/graph_objs/isosurface/legendgrouptitle/_font.py plotly/graph_objs/isosurface/slices/__init__.py plotly/graph_objs/isosurface/slices/_x.py plotly/graph_objs/isosurface/slices/_y.py plotly/graph_objs/isosurface/slices/_z.py plotly/graph_objs/layout/__init__.py plotly/graph_objs/layout/_activeselection.py plotly/graph_objs/layout/_activeshape.py plotly/graph_objs/layout/_annotation.py plotly/graph_objs/layout/_coloraxis.py plotly/graph_objs/layout/_colorscale.py plotly/graph_objs/layout/_font.py plotly/graph_objs/layout/_geo.py plotly/graph_objs/layout/_grid.py plotly/graph_objs/layout/_hoverlabel.py plotly/graph_objs/layout/_image.py plotly/graph_objs/layout/_legend.py plotly/graph_objs/layout/_mapbox.py plotly/graph_objs/layout/_margin.py plotly/graph_objs/layout/_modebar.py plotly/graph_objs/layout/_newselection.py plotly/graph_objs/layout/_newshape.py plotly/graph_objs/layout/_polar.py plotly/graph_objs/layout/_scene.py plotly/graph_objs/layout/_selection.py plotly/graph_objs/layout/_shape.py plotly/graph_objs/layout/_slider.py plotly/graph_objs/layout/_smith.py plotly/graph_objs/layout/_template.py plotly/graph_objs/layout/_ternary.py plotly/graph_objs/layout/_title.py plotly/graph_objs/layout/_transition.py plotly/graph_objs/layout/_uniformtext.py plotly/graph_objs/layout/_updatemenu.py plotly/graph_objs/layout/_xaxis.py plotly/graph_objs/layout/_yaxis.py plotly/graph_objs/layout/annotation/__init__.py plotly/graph_objs/layout/annotation/_font.py plotly/graph_objs/layout/annotation/_hoverlabel.py plotly/graph_objs/layout/annotation/hoverlabel/__init__.py plotly/graph_objs/layout/annotation/hoverlabel/_font.py plotly/graph_objs/layout/coloraxis/__init__.py plotly/graph_objs/layout/coloraxis/_colorbar.py plotly/graph_objs/layout/coloraxis/colorbar/__init__.py plotly/graph_objs/layout/coloraxis/colorbar/_tickfont.py plotly/graph_objs/layout/coloraxis/colorbar/_tickformatstop.py plotly/graph_objs/layout/coloraxis/colorbar/_title.py plotly/graph_objs/layout/coloraxis/colorbar/title/__init__.py plotly/graph_objs/layout/coloraxis/colorbar/title/_font.py plotly/graph_objs/layout/geo/__init__.py plotly/graph_objs/layout/geo/_center.py plotly/graph_objs/layout/geo/_domain.py plotly/graph_objs/layout/geo/_lataxis.py plotly/graph_objs/layout/geo/_lonaxis.py plotly/graph_objs/layout/geo/_projection.py plotly/graph_objs/layout/geo/projection/__init__.py plotly/graph_objs/layout/geo/projection/_rotation.py plotly/graph_objs/layout/grid/__init__.py plotly/graph_objs/layout/grid/_domain.py plotly/graph_objs/layout/hoverlabel/__init__.py plotly/graph_objs/layout/hoverlabel/_font.py plotly/graph_objs/layout/hoverlabel/_grouptitlefont.py plotly/graph_objs/layout/legend/__init__.py plotly/graph_objs/layout/legend/_font.py plotly/graph_objs/layout/legend/_grouptitlefont.py plotly/graph_objs/layout/legend/_title.py plotly/graph_objs/layout/legend/title/__init__.py plotly/graph_objs/layout/legend/title/_font.py plotly/graph_objs/layout/mapbox/__init__.py plotly/graph_objs/layout/mapbox/_bounds.py plotly/graph_objs/layout/mapbox/_center.py plotly/graph_objs/layout/mapbox/_domain.py plotly/graph_objs/layout/mapbox/_layer.py plotly/graph_objs/layout/mapbox/layer/__init__.py plotly/graph_objs/layout/mapbox/layer/_circle.py plotly/graph_objs/layout/mapbox/layer/_fill.py plotly/graph_objs/layout/mapbox/layer/_line.py plotly/graph_objs/layout/mapbox/layer/_symbol.py plotly/graph_objs/layout/mapbox/layer/symbol/__init__.py plotly/graph_objs/layout/mapbox/layer/symbol/_textfont.py plotly/graph_objs/layout/newselection/__init__.py plotly/graph_objs/layout/newselection/_line.py plotly/graph_objs/layout/newshape/__init__.py plotly/graph_objs/layout/newshape/_label.py plotly/graph_objs/layout/newshape/_line.py plotly/graph_objs/layout/newshape/label/__init__.py plotly/graph_objs/layout/newshape/label/_font.py plotly/graph_objs/layout/polar/__init__.py plotly/graph_objs/layout/polar/_angularaxis.py plotly/graph_objs/layout/polar/_domain.py plotly/graph_objs/layout/polar/_radialaxis.py plotly/graph_objs/layout/polar/angularaxis/__init__.py plotly/graph_objs/layout/polar/angularaxis/_tickfont.py plotly/graph_objs/layout/polar/angularaxis/_tickformatstop.py plotly/graph_objs/layout/polar/radialaxis/__init__.py plotly/graph_objs/layout/polar/radialaxis/_tickfont.py plotly/graph_objs/layout/polar/radialaxis/_tickformatstop.py plotly/graph_objs/layout/polar/radialaxis/_title.py plotly/graph_objs/layout/polar/radialaxis/title/__init__.py plotly/graph_objs/layout/polar/radialaxis/title/_font.py plotly/graph_objs/layout/scene/__init__.py plotly/graph_objs/layout/scene/_annotation.py plotly/graph_objs/layout/scene/_aspectratio.py plotly/graph_objs/layout/scene/_camera.py plotly/graph_objs/layout/scene/_domain.py plotly/graph_objs/layout/scene/_xaxis.py plotly/graph_objs/layout/scene/_yaxis.py plotly/graph_objs/layout/scene/_zaxis.py plotly/graph_objs/layout/scene/annotation/__init__.py plotly/graph_objs/layout/scene/annotation/_font.py plotly/graph_objs/layout/scene/annotation/_hoverlabel.py plotly/graph_objs/layout/scene/annotation/hoverlabel/__init__.py plotly/graph_objs/layout/scene/annotation/hoverlabel/_font.py plotly/graph_objs/layout/scene/camera/__init__.py plotly/graph_objs/layout/scene/camera/_center.py plotly/graph_objs/layout/scene/camera/_eye.py plotly/graph_objs/layout/scene/camera/_projection.py plotly/graph_objs/layout/scene/camera/_up.py plotly/graph_objs/layout/scene/xaxis/__init__.py plotly/graph_objs/layout/scene/xaxis/_tickfont.py plotly/graph_objs/layout/scene/xaxis/_tickformatstop.py plotly/graph_objs/layout/scene/xaxis/_title.py plotly/graph_objs/layout/scene/xaxis/title/__init__.py plotly/graph_objs/layout/scene/xaxis/title/_font.py plotly/graph_objs/layout/scene/yaxis/__init__.py plotly/graph_objs/layout/scene/yaxis/_tickfont.py plotly/graph_objs/layout/scene/yaxis/_tickformatstop.py plotly/graph_objs/layout/scene/yaxis/_title.py plotly/graph_objs/layout/scene/yaxis/title/__init__.py plotly/graph_objs/layout/scene/yaxis/title/_font.py plotly/graph_objs/layout/scene/zaxis/__init__.py plotly/graph_objs/layout/scene/zaxis/_tickfont.py plotly/graph_objs/layout/scene/zaxis/_tickformatstop.py plotly/graph_objs/layout/scene/zaxis/_title.py plotly/graph_objs/layout/scene/zaxis/title/__init__.py plotly/graph_objs/layout/scene/zaxis/title/_font.py plotly/graph_objs/layout/selection/__init__.py plotly/graph_objs/layout/selection/_line.py plotly/graph_objs/layout/shape/__init__.py plotly/graph_objs/layout/shape/_label.py plotly/graph_objs/layout/shape/_line.py plotly/graph_objs/layout/shape/label/__init__.py plotly/graph_objs/layout/shape/label/_font.py plotly/graph_objs/layout/slider/__init__.py plotly/graph_objs/layout/slider/_currentvalue.py plotly/graph_objs/layout/slider/_font.py plotly/graph_objs/layout/slider/_pad.py plotly/graph_objs/layout/slider/_step.py plotly/graph_objs/layout/slider/_transition.py plotly/graph_objs/layout/slider/currentvalue/__init__.py plotly/graph_objs/layout/slider/currentvalue/_font.py plotly/graph_objs/layout/smith/__init__.py plotly/graph_objs/layout/smith/_domain.py plotly/graph_objs/layout/smith/_imaginaryaxis.py plotly/graph_objs/layout/smith/_realaxis.py plotly/graph_objs/layout/smith/imaginaryaxis/__init__.py plotly/graph_objs/layout/smith/imaginaryaxis/_tickfont.py plotly/graph_objs/layout/smith/realaxis/__init__.py plotly/graph_objs/layout/smith/realaxis/_tickfont.py plotly/graph_objs/layout/template/__init__.py plotly/graph_objs/layout/template/_data.py plotly/graph_objs/layout/template/_layout.py plotly/graph_objs/layout/template/data/__init__.py plotly/graph_objs/layout/template/data/_bar.py plotly/graph_objs/layout/template/data/_barpolar.py plotly/graph_objs/layout/template/data/_box.py plotly/graph_objs/layout/template/data/_candlestick.py plotly/graph_objs/layout/template/data/_carpet.py plotly/graph_objs/layout/template/data/_choropleth.py plotly/graph_objs/layout/template/data/_choroplethmapbox.py plotly/graph_objs/layout/template/data/_cone.py plotly/graph_objs/layout/template/data/_contour.py plotly/graph_objs/layout/template/data/_contourcarpet.py plotly/graph_objs/layout/template/data/_densitymapbox.py plotly/graph_objs/layout/template/data/_funnel.py plotly/graph_objs/layout/template/data/_funnelarea.py plotly/graph_objs/layout/template/data/_heatmap.py plotly/graph_objs/layout/template/data/_heatmapgl.py plotly/graph_objs/layout/template/data/_histogram.py plotly/graph_objs/layout/template/data/_histogram2d.py plotly/graph_objs/layout/template/data/_histogram2dcontour.py plotly/graph_objs/layout/template/data/_icicle.py plotly/graph_objs/layout/template/data/_image.py plotly/graph_objs/layout/template/data/_indicator.py plotly/graph_objs/layout/template/data/_isosurface.py plotly/graph_objs/layout/template/data/_mesh3d.py plotly/graph_objs/layout/template/data/_ohlc.py plotly/graph_objs/layout/template/data/_parcats.py plotly/graph_objs/layout/template/data/_parcoords.py plotly/graph_objs/layout/template/data/_pie.py plotly/graph_objs/layout/template/data/_pointcloud.py plotly/graph_objs/layout/template/data/_sankey.py plotly/graph_objs/layout/template/data/_scatter.py plotly/graph_objs/layout/template/data/_scatter3d.py plotly/graph_objs/layout/template/data/_scattercarpet.py plotly/graph_objs/layout/template/data/_scattergeo.py plotly/graph_objs/layout/template/data/_scattergl.py plotly/graph_objs/layout/template/data/_scattermapbox.py plotly/graph_objs/layout/template/data/_scatterpolar.py plotly/graph_objs/layout/template/data/_scatterpolargl.py plotly/graph_objs/layout/template/data/_scattersmith.py plotly/graph_objs/layout/template/data/_scatterternary.py plotly/graph_objs/layout/template/data/_splom.py plotly/graph_objs/layout/template/data/_streamtube.py plotly/graph_objs/layout/template/data/_sunburst.py plotly/graph_objs/layout/template/data/_surface.py plotly/graph_objs/layout/template/data/_table.py plotly/graph_objs/layout/template/data/_treemap.py plotly/graph_objs/layout/template/data/_violin.py plotly/graph_objs/layout/template/data/_volume.py plotly/graph_objs/layout/template/data/_waterfall.py plotly/graph_objs/layout/ternary/__init__.py plotly/graph_objs/layout/ternary/_aaxis.py plotly/graph_objs/layout/ternary/_baxis.py plotly/graph_objs/layout/ternary/_caxis.py plotly/graph_objs/layout/ternary/_domain.py plotly/graph_objs/layout/ternary/aaxis/__init__.py plotly/graph_objs/layout/ternary/aaxis/_tickfont.py plotly/graph_objs/layout/ternary/aaxis/_tickformatstop.py plotly/graph_objs/layout/ternary/aaxis/_title.py plotly/graph_objs/layout/ternary/aaxis/title/__init__.py plotly/graph_objs/layout/ternary/aaxis/title/_font.py plotly/graph_objs/layout/ternary/baxis/__init__.py plotly/graph_objs/layout/ternary/baxis/_tickfont.py plotly/graph_objs/layout/ternary/baxis/_tickformatstop.py plotly/graph_objs/layout/ternary/baxis/_title.py plotly/graph_objs/layout/ternary/baxis/title/__init__.py plotly/graph_objs/layout/ternary/baxis/title/_font.py plotly/graph_objs/layout/ternary/caxis/__init__.py plotly/graph_objs/layout/ternary/caxis/_tickfont.py plotly/graph_objs/layout/ternary/caxis/_tickformatstop.py plotly/graph_objs/layout/ternary/caxis/_title.py plotly/graph_objs/layout/ternary/caxis/title/__init__.py plotly/graph_objs/layout/ternary/caxis/title/_font.py plotly/graph_objs/layout/title/__init__.py plotly/graph_objs/layout/title/_font.py plotly/graph_objs/layout/title/_pad.py plotly/graph_objs/layout/updatemenu/__init__.py plotly/graph_objs/layout/updatemenu/_button.py plotly/graph_objs/layout/updatemenu/_font.py plotly/graph_objs/layout/updatemenu/_pad.py plotly/graph_objs/layout/xaxis/__init__.py plotly/graph_objs/layout/xaxis/_minor.py plotly/graph_objs/layout/xaxis/_rangebreak.py plotly/graph_objs/layout/xaxis/_rangeselector.py plotly/graph_objs/layout/xaxis/_rangeslider.py plotly/graph_objs/layout/xaxis/_tickfont.py plotly/graph_objs/layout/xaxis/_tickformatstop.py plotly/graph_objs/layout/xaxis/_title.py plotly/graph_objs/layout/xaxis/rangeselector/__init__.py plotly/graph_objs/layout/xaxis/rangeselector/_button.py plotly/graph_objs/layout/xaxis/rangeselector/_font.py plotly/graph_objs/layout/xaxis/rangeslider/__init__.py plotly/graph_objs/layout/xaxis/rangeslider/_yaxis.py plotly/graph_objs/layout/xaxis/title/__init__.py plotly/graph_objs/layout/xaxis/title/_font.py plotly/graph_objs/layout/yaxis/__init__.py plotly/graph_objs/layout/yaxis/_minor.py plotly/graph_objs/layout/yaxis/_rangebreak.py plotly/graph_objs/layout/yaxis/_tickfont.py plotly/graph_objs/layout/yaxis/_tickformatstop.py plotly/graph_objs/layout/yaxis/_title.py plotly/graph_objs/layout/yaxis/title/__init__.py plotly/graph_objs/layout/yaxis/title/_font.py plotly/graph_objs/mesh3d/__init__.py plotly/graph_objs/mesh3d/_colorbar.py plotly/graph_objs/mesh3d/_contour.py plotly/graph_objs/mesh3d/_hoverlabel.py plotly/graph_objs/mesh3d/_legendgrouptitle.py plotly/graph_objs/mesh3d/_lighting.py plotly/graph_objs/mesh3d/_lightposition.py plotly/graph_objs/mesh3d/_stream.py plotly/graph_objs/mesh3d/colorbar/__init__.py plotly/graph_objs/mesh3d/colorbar/_tickfont.py plotly/graph_objs/mesh3d/colorbar/_tickformatstop.py plotly/graph_objs/mesh3d/colorbar/_title.py plotly/graph_objs/mesh3d/colorbar/title/__init__.py plotly/graph_objs/mesh3d/colorbar/title/_font.py plotly/graph_objs/mesh3d/hoverlabel/__init__.py plotly/graph_objs/mesh3d/hoverlabel/_font.py plotly/graph_objs/mesh3d/legendgrouptitle/__init__.py plotly/graph_objs/mesh3d/legendgrouptitle/_font.py plotly/graph_objs/ohlc/__init__.py plotly/graph_objs/ohlc/_decreasing.py plotly/graph_objs/ohlc/_hoverlabel.py plotly/graph_objs/ohlc/_increasing.py plotly/graph_objs/ohlc/_legendgrouptitle.py plotly/graph_objs/ohlc/_line.py plotly/graph_objs/ohlc/_stream.py plotly/graph_objs/ohlc/decreasing/__init__.py plotly/graph_objs/ohlc/decreasing/_line.py plotly/graph_objs/ohlc/hoverlabel/__init__.py plotly/graph_objs/ohlc/hoverlabel/_font.py plotly/graph_objs/ohlc/increasing/__init__.py plotly/graph_objs/ohlc/increasing/_line.py plotly/graph_objs/ohlc/legendgrouptitle/__init__.py plotly/graph_objs/ohlc/legendgrouptitle/_font.py plotly/graph_objs/parcats/__init__.py plotly/graph_objs/parcats/_dimension.py plotly/graph_objs/parcats/_domain.py plotly/graph_objs/parcats/_labelfont.py plotly/graph_objs/parcats/_legendgrouptitle.py plotly/graph_objs/parcats/_line.py plotly/graph_objs/parcats/_stream.py plotly/graph_objs/parcats/_tickfont.py plotly/graph_objs/parcats/legendgrouptitle/__init__.py plotly/graph_objs/parcats/legendgrouptitle/_font.py plotly/graph_objs/parcats/line/__init__.py plotly/graph_objs/parcats/line/_colorbar.py plotly/graph_objs/parcats/line/colorbar/__init__.py plotly/graph_objs/parcats/line/colorbar/_tickfont.py plotly/graph_objs/parcats/line/colorbar/_tickformatstop.py plotly/graph_objs/parcats/line/colorbar/_title.py plotly/graph_objs/parcats/line/colorbar/title/__init__.py plotly/graph_objs/parcats/line/colorbar/title/_font.py plotly/graph_objs/parcoords/__init__.py plotly/graph_objs/parcoords/_dimension.py plotly/graph_objs/parcoords/_domain.py plotly/graph_objs/parcoords/_labelfont.py plotly/graph_objs/parcoords/_legendgrouptitle.py plotly/graph_objs/parcoords/_line.py plotly/graph_objs/parcoords/_rangefont.py plotly/graph_objs/parcoords/_stream.py plotly/graph_objs/parcoords/_tickfont.py plotly/graph_objs/parcoords/_unselected.py plotly/graph_objs/parcoords/legendgrouptitle/__init__.py plotly/graph_objs/parcoords/legendgrouptitle/_font.py plotly/graph_objs/parcoords/line/__init__.py plotly/graph_objs/parcoords/line/_colorbar.py plotly/graph_objs/parcoords/line/colorbar/__init__.py plotly/graph_objs/parcoords/line/colorbar/_tickfont.py plotly/graph_objs/parcoords/line/colorbar/_tickformatstop.py plotly/graph_objs/parcoords/line/colorbar/_title.py plotly/graph_objs/parcoords/line/colorbar/title/__init__.py plotly/graph_objs/parcoords/line/colorbar/title/_font.py plotly/graph_objs/parcoords/unselected/__init__.py plotly/graph_objs/parcoords/unselected/_line.py plotly/graph_objs/pie/__init__.py plotly/graph_objs/pie/_domain.py plotly/graph_objs/pie/_hoverlabel.py plotly/graph_objs/pie/_insidetextfont.py plotly/graph_objs/pie/_legendgrouptitle.py plotly/graph_objs/pie/_marker.py plotly/graph_objs/pie/_outsidetextfont.py plotly/graph_objs/pie/_stream.py plotly/graph_objs/pie/_textfont.py plotly/graph_objs/pie/_title.py plotly/graph_objs/pie/hoverlabel/__init__.py plotly/graph_objs/pie/hoverlabel/_font.py plotly/graph_objs/pie/legendgrouptitle/__init__.py plotly/graph_objs/pie/legendgrouptitle/_font.py plotly/graph_objs/pie/marker/__init__.py plotly/graph_objs/pie/marker/_line.py plotly/graph_objs/pie/marker/_pattern.py plotly/graph_objs/pie/title/__init__.py plotly/graph_objs/pie/title/_font.py plotly/graph_objs/pointcloud/__init__.py plotly/graph_objs/pointcloud/_hoverlabel.py plotly/graph_objs/pointcloud/_legendgrouptitle.py plotly/graph_objs/pointcloud/_marker.py plotly/graph_objs/pointcloud/_stream.py plotly/graph_objs/pointcloud/hoverlabel/__init__.py plotly/graph_objs/pointcloud/hoverlabel/_font.py plotly/graph_objs/pointcloud/legendgrouptitle/__init__.py plotly/graph_objs/pointcloud/legendgrouptitle/_font.py plotly/graph_objs/pointcloud/marker/__init__.py plotly/graph_objs/pointcloud/marker/_border.py plotly/graph_objs/sankey/__init__.py plotly/graph_objs/sankey/_domain.py plotly/graph_objs/sankey/_hoverlabel.py plotly/graph_objs/sankey/_legendgrouptitle.py plotly/graph_objs/sankey/_link.py plotly/graph_objs/sankey/_node.py plotly/graph_objs/sankey/_stream.py plotly/graph_objs/sankey/_textfont.py plotly/graph_objs/sankey/hoverlabel/__init__.py plotly/graph_objs/sankey/hoverlabel/_font.py plotly/graph_objs/sankey/legendgrouptitle/__init__.py plotly/graph_objs/sankey/legendgrouptitle/_font.py plotly/graph_objs/sankey/link/__init__.py plotly/graph_objs/sankey/link/_colorscale.py plotly/graph_objs/sankey/link/_hoverlabel.py plotly/graph_objs/sankey/link/_line.py plotly/graph_objs/sankey/link/hoverlabel/__init__.py plotly/graph_objs/sankey/link/hoverlabel/_font.py plotly/graph_objs/sankey/node/__init__.py plotly/graph_objs/sankey/node/_hoverlabel.py plotly/graph_objs/sankey/node/_line.py plotly/graph_objs/sankey/node/hoverlabel/__init__.py plotly/graph_objs/sankey/node/hoverlabel/_font.py plotly/graph_objs/scatter/__init__.py plotly/graph_objs/scatter/_error_x.py plotly/graph_objs/scatter/_error_y.py plotly/graph_objs/scatter/_fillpattern.py plotly/graph_objs/scatter/_hoverlabel.py plotly/graph_objs/scatter/_legendgrouptitle.py plotly/graph_objs/scatter/_line.py plotly/graph_objs/scatter/_marker.py plotly/graph_objs/scatter/_selected.py plotly/graph_objs/scatter/_stream.py plotly/graph_objs/scatter/_textfont.py plotly/graph_objs/scatter/_unselected.py plotly/graph_objs/scatter/hoverlabel/__init__.py plotly/graph_objs/scatter/hoverlabel/_font.py plotly/graph_objs/scatter/legendgrouptitle/__init__.py plotly/graph_objs/scatter/legendgrouptitle/_font.py plotly/graph_objs/scatter/marker/__init__.py plotly/graph_objs/scatter/marker/_colorbar.py plotly/graph_objs/scatter/marker/_gradient.py plotly/graph_objs/scatter/marker/_line.py plotly/graph_objs/scatter/marker/colorbar/__init__.py plotly/graph_objs/scatter/marker/colorbar/_tickfont.py plotly/graph_objs/scatter/marker/colorbar/_tickformatstop.py plotly/graph_objs/scatter/marker/colorbar/_title.py plotly/graph_objs/scatter/marker/colorbar/title/__init__.py plotly/graph_objs/scatter/marker/colorbar/title/_font.py plotly/graph_objs/scatter/selected/__init__.py plotly/graph_objs/scatter/selected/_marker.py plotly/graph_objs/scatter/selected/_textfont.py plotly/graph_objs/scatter/unselected/__init__.py plotly/graph_objs/scatter/unselected/_marker.py plotly/graph_objs/scatter/unselected/_textfont.py plotly/graph_objs/scatter3d/__init__.py plotly/graph_objs/scatter3d/_error_x.py plotly/graph_objs/scatter3d/_error_y.py plotly/graph_objs/scatter3d/_error_z.py plotly/graph_objs/scatter3d/_hoverlabel.py plotly/graph_objs/scatter3d/_legendgrouptitle.py plotly/graph_objs/scatter3d/_line.py plotly/graph_objs/scatter3d/_marker.py plotly/graph_objs/scatter3d/_projection.py plotly/graph_objs/scatter3d/_stream.py plotly/graph_objs/scatter3d/_textfont.py plotly/graph_objs/scatter3d/hoverlabel/__init__.py plotly/graph_objs/scatter3d/hoverlabel/_font.py plotly/graph_objs/scatter3d/legendgrouptitle/__init__.py plotly/graph_objs/scatter3d/legendgrouptitle/_font.py plotly/graph_objs/scatter3d/line/__init__.py plotly/graph_objs/scatter3d/line/_colorbar.py plotly/graph_objs/scatter3d/line/colorbar/__init__.py plotly/graph_objs/scatter3d/line/colorbar/_tickfont.py plotly/graph_objs/scatter3d/line/colorbar/_tickformatstop.py plotly/graph_objs/scatter3d/line/colorbar/_title.py plotly/graph_objs/scatter3d/line/colorbar/title/__init__.py plotly/graph_objs/scatter3d/line/colorbar/title/_font.py plotly/graph_objs/scatter3d/marker/__init__.py plotly/graph_objs/scatter3d/marker/_colorbar.py plotly/graph_objs/scatter3d/marker/_line.py plotly/graph_objs/scatter3d/marker/colorbar/__init__.py plotly/graph_objs/scatter3d/marker/colorbar/_tickfont.py plotly/graph_objs/scatter3d/marker/colorbar/_tickformatstop.py plotly/graph_objs/scatter3d/marker/colorbar/_title.py plotly/graph_objs/scatter3d/marker/colorbar/title/__init__.py plotly/graph_objs/scatter3d/marker/colorbar/title/_font.py plotly/graph_objs/scatter3d/projection/__init__.py plotly/graph_objs/scatter3d/projection/_x.py plotly/graph_objs/scatter3d/projection/_y.py plotly/graph_objs/scatter3d/projection/_z.py plotly/graph_objs/scattercarpet/__init__.py plotly/graph_objs/scattercarpet/_hoverlabel.py plotly/graph_objs/scattercarpet/_legendgrouptitle.py plotly/graph_objs/scattercarpet/_line.py plotly/graph_objs/scattercarpet/_marker.py plotly/graph_objs/scattercarpet/_selected.py plotly/graph_objs/scattercarpet/_stream.py plotly/graph_objs/scattercarpet/_textfont.py plotly/graph_objs/scattercarpet/_unselected.py plotly/graph_objs/scattercarpet/hoverlabel/__init__.py plotly/graph_objs/scattercarpet/hoverlabel/_font.py plotly/graph_objs/scattercarpet/legendgrouptitle/__init__.py plotly/graph_objs/scattercarpet/legendgrouptitle/_font.py plotly/graph_objs/scattercarpet/marker/__init__.py plotly/graph_objs/scattercarpet/marker/_colorbar.py plotly/graph_objs/scattercarpet/marker/_gradient.py plotly/graph_objs/scattercarpet/marker/_line.py plotly/graph_objs/scattercarpet/marker/colorbar/__init__.py plotly/graph_objs/scattercarpet/marker/colorbar/_tickfont.py plotly/graph_objs/scattercarpet/marker/colorbar/_tickformatstop.py plotly/graph_objs/scattercarpet/marker/colorbar/_title.py plotly/graph_objs/scattercarpet/marker/colorbar/title/__init__.py plotly/graph_objs/scattercarpet/marker/colorbar/title/_font.py plotly/graph_objs/scattercarpet/selected/__init__.py plotly/graph_objs/scattercarpet/selected/_marker.py plotly/graph_objs/scattercarpet/selected/_textfont.py plotly/graph_objs/scattercarpet/unselected/__init__.py plotly/graph_objs/scattercarpet/unselected/_marker.py plotly/graph_objs/scattercarpet/unselected/_textfont.py plotly/graph_objs/scattergeo/__init__.py plotly/graph_objs/scattergeo/_hoverlabel.py plotly/graph_objs/scattergeo/_legendgrouptitle.py plotly/graph_objs/scattergeo/_line.py plotly/graph_objs/scattergeo/_marker.py plotly/graph_objs/scattergeo/_selected.py plotly/graph_objs/scattergeo/_stream.py plotly/graph_objs/scattergeo/_textfont.py plotly/graph_objs/scattergeo/_unselected.py plotly/graph_objs/scattergeo/hoverlabel/__init__.py plotly/graph_objs/scattergeo/hoverlabel/_font.py plotly/graph_objs/scattergeo/legendgrouptitle/__init__.py plotly/graph_objs/scattergeo/legendgrouptitle/_font.py plotly/graph_objs/scattergeo/marker/__init__.py plotly/graph_objs/scattergeo/marker/_colorbar.py plotly/graph_objs/scattergeo/marker/_gradient.py plotly/graph_objs/scattergeo/marker/_line.py plotly/graph_objs/scattergeo/marker/colorbar/__init__.py plotly/graph_objs/scattergeo/marker/colorbar/_tickfont.py plotly/graph_objs/scattergeo/marker/colorbar/_tickformatstop.py plotly/graph_objs/scattergeo/marker/colorbar/_title.py plotly/graph_objs/scattergeo/marker/colorbar/title/__init__.py plotly/graph_objs/scattergeo/marker/colorbar/title/_font.py plotly/graph_objs/scattergeo/selected/__init__.py plotly/graph_objs/scattergeo/selected/_marker.py plotly/graph_objs/scattergeo/selected/_textfont.py plotly/graph_objs/scattergeo/unselected/__init__.py plotly/graph_objs/scattergeo/unselected/_marker.py plotly/graph_objs/scattergeo/unselected/_textfont.py plotly/graph_objs/scattergl/__init__.py plotly/graph_objs/scattergl/_error_x.py plotly/graph_objs/scattergl/_error_y.py plotly/graph_objs/scattergl/_hoverlabel.py plotly/graph_objs/scattergl/_legendgrouptitle.py plotly/graph_objs/scattergl/_line.py plotly/graph_objs/scattergl/_marker.py plotly/graph_objs/scattergl/_selected.py plotly/graph_objs/scattergl/_stream.py plotly/graph_objs/scattergl/_textfont.py plotly/graph_objs/scattergl/_unselected.py plotly/graph_objs/scattergl/hoverlabel/__init__.py plotly/graph_objs/scattergl/hoverlabel/_font.py plotly/graph_objs/scattergl/legendgrouptitle/__init__.py plotly/graph_objs/scattergl/legendgrouptitle/_font.py plotly/graph_objs/scattergl/marker/__init__.py plotly/graph_objs/scattergl/marker/_colorbar.py plotly/graph_objs/scattergl/marker/_line.py plotly/graph_objs/scattergl/marker/colorbar/__init__.py plotly/graph_objs/scattergl/marker/colorbar/_tickfont.py plotly/graph_objs/scattergl/marker/colorbar/_tickformatstop.py plotly/graph_objs/scattergl/marker/colorbar/_title.py plotly/graph_objs/scattergl/marker/colorbar/title/__init__.py plotly/graph_objs/scattergl/marker/colorbar/title/_font.py plotly/graph_objs/scattergl/selected/__init__.py plotly/graph_objs/scattergl/selected/_marker.py plotly/graph_objs/scattergl/selected/_textfont.py plotly/graph_objs/scattergl/unselected/__init__.py plotly/graph_objs/scattergl/unselected/_marker.py plotly/graph_objs/scattergl/unselected/_textfont.py plotly/graph_objs/scattermapbox/__init__.py plotly/graph_objs/scattermapbox/_cluster.py plotly/graph_objs/scattermapbox/_hoverlabel.py plotly/graph_objs/scattermapbox/_legendgrouptitle.py plotly/graph_objs/scattermapbox/_line.py plotly/graph_objs/scattermapbox/_marker.py plotly/graph_objs/scattermapbox/_selected.py plotly/graph_objs/scattermapbox/_stream.py plotly/graph_objs/scattermapbox/_textfont.py plotly/graph_objs/scattermapbox/_unselected.py plotly/graph_objs/scattermapbox/hoverlabel/__init__.py plotly/graph_objs/scattermapbox/hoverlabel/_font.py plotly/graph_objs/scattermapbox/legendgrouptitle/__init__.py plotly/graph_objs/scattermapbox/legendgrouptitle/_font.py plotly/graph_objs/scattermapbox/marker/__init__.py plotly/graph_objs/scattermapbox/marker/_colorbar.py plotly/graph_objs/scattermapbox/marker/colorbar/__init__.py plotly/graph_objs/scattermapbox/marker/colorbar/_tickfont.py plotly/graph_objs/scattermapbox/marker/colorbar/_tickformatstop.py plotly/graph_objs/scattermapbox/marker/colorbar/_title.py plotly/graph_objs/scattermapbox/marker/colorbar/title/__init__.py plotly/graph_objs/scattermapbox/marker/colorbar/title/_font.py plotly/graph_objs/scattermapbox/selected/__init__.py plotly/graph_objs/scattermapbox/selected/_marker.py plotly/graph_objs/scattermapbox/unselected/__init__.py plotly/graph_objs/scattermapbox/unselected/_marker.py plotly/graph_objs/scatterpolar/__init__.py plotly/graph_objs/scatterpolar/_hoverlabel.py plotly/graph_objs/scatterpolar/_legendgrouptitle.py plotly/graph_objs/scatterpolar/_line.py plotly/graph_objs/scatterpolar/_marker.py plotly/graph_objs/scatterpolar/_selected.py plotly/graph_objs/scatterpolar/_stream.py plotly/graph_objs/scatterpolar/_textfont.py plotly/graph_objs/scatterpolar/_unselected.py plotly/graph_objs/scatterpolar/hoverlabel/__init__.py plotly/graph_objs/scatterpolar/hoverlabel/_font.py plotly/graph_objs/scatterpolar/legendgrouptitle/__init__.py plotly/graph_objs/scatterpolar/legendgrouptitle/_font.py plotly/graph_objs/scatterpolar/marker/__init__.py plotly/graph_objs/scatterpolar/marker/_colorbar.py plotly/graph_objs/scatterpolar/marker/_gradient.py plotly/graph_objs/scatterpolar/marker/_line.py plotly/graph_objs/scatterpolar/marker/colorbar/__init__.py plotly/graph_objs/scatterpolar/marker/colorbar/_tickfont.py plotly/graph_objs/scatterpolar/marker/colorbar/_tickformatstop.py plotly/graph_objs/scatterpolar/marker/colorbar/_title.py plotly/graph_objs/scatterpolar/marker/colorbar/title/__init__.py plotly/graph_objs/scatterpolar/marker/colorbar/title/_font.py plotly/graph_objs/scatterpolar/selected/__init__.py plotly/graph_objs/scatterpolar/selected/_marker.py plotly/graph_objs/scatterpolar/selected/_textfont.py plotly/graph_objs/scatterpolar/unselected/__init__.py plotly/graph_objs/scatterpolar/unselected/_marker.py plotly/graph_objs/scatterpolar/unselected/_textfont.py plotly/graph_objs/scatterpolargl/__init__.py plotly/graph_objs/scatterpolargl/_hoverlabel.py plotly/graph_objs/scatterpolargl/_legendgrouptitle.py plotly/graph_objs/scatterpolargl/_line.py plotly/graph_objs/scatterpolargl/_marker.py plotly/graph_objs/scatterpolargl/_selected.py plotly/graph_objs/scatterpolargl/_stream.py plotly/graph_objs/scatterpolargl/_textfont.py plotly/graph_objs/scatterpolargl/_unselected.py plotly/graph_objs/scatterpolargl/hoverlabel/__init__.py plotly/graph_objs/scatterpolargl/hoverlabel/_font.py plotly/graph_objs/scatterpolargl/legendgrouptitle/__init__.py plotly/graph_objs/scatterpolargl/legendgrouptitle/_font.py plotly/graph_objs/scatterpolargl/marker/__init__.py plotly/graph_objs/scatterpolargl/marker/_colorbar.py plotly/graph_objs/scatterpolargl/marker/_line.py plotly/graph_objs/scatterpolargl/marker/colorbar/__init__.py plotly/graph_objs/scatterpolargl/marker/colorbar/_tickfont.py plotly/graph_objs/scatterpolargl/marker/colorbar/_tickformatstop.py plotly/graph_objs/scatterpolargl/marker/colorbar/_title.py plotly/graph_objs/scatterpolargl/marker/colorbar/title/__init__.py plotly/graph_objs/scatterpolargl/marker/colorbar/title/_font.py plotly/graph_objs/scatterpolargl/selected/__init__.py plotly/graph_objs/scatterpolargl/selected/_marker.py plotly/graph_objs/scatterpolargl/selected/_textfont.py plotly/graph_objs/scatterpolargl/unselected/__init__.py plotly/graph_objs/scatterpolargl/unselected/_marker.py plotly/graph_objs/scatterpolargl/unselected/_textfont.py plotly/graph_objs/scattersmith/__init__.py plotly/graph_objs/scattersmith/_hoverlabel.py plotly/graph_objs/scattersmith/_legendgrouptitle.py plotly/graph_objs/scattersmith/_line.py plotly/graph_objs/scattersmith/_marker.py plotly/graph_objs/scattersmith/_selected.py plotly/graph_objs/scattersmith/_stream.py plotly/graph_objs/scattersmith/_textfont.py plotly/graph_objs/scattersmith/_unselected.py plotly/graph_objs/scattersmith/hoverlabel/__init__.py plotly/graph_objs/scattersmith/hoverlabel/_font.py plotly/graph_objs/scattersmith/legendgrouptitle/__init__.py plotly/graph_objs/scattersmith/legendgrouptitle/_font.py plotly/graph_objs/scattersmith/marker/__init__.py plotly/graph_objs/scattersmith/marker/_colorbar.py plotly/graph_objs/scattersmith/marker/_gradient.py plotly/graph_objs/scattersmith/marker/_line.py plotly/graph_objs/scattersmith/marker/colorbar/__init__.py plotly/graph_objs/scattersmith/marker/colorbar/_tickfont.py plotly/graph_objs/scattersmith/marker/colorbar/_tickformatstop.py plotly/graph_objs/scattersmith/marker/colorbar/_title.py plotly/graph_objs/scattersmith/marker/colorbar/title/__init__.py plotly/graph_objs/scattersmith/marker/colorbar/title/_font.py plotly/graph_objs/scattersmith/selected/__init__.py plotly/graph_objs/scattersmith/selected/_marker.py plotly/graph_objs/scattersmith/selected/_textfont.py plotly/graph_objs/scattersmith/unselected/__init__.py plotly/graph_objs/scattersmith/unselected/_marker.py plotly/graph_objs/scattersmith/unselected/_textfont.py plotly/graph_objs/scatterternary/__init__.py plotly/graph_objs/scatterternary/_hoverlabel.py plotly/graph_objs/scatterternary/_legendgrouptitle.py plotly/graph_objs/scatterternary/_line.py plotly/graph_objs/scatterternary/_marker.py plotly/graph_objs/scatterternary/_selected.py plotly/graph_objs/scatterternary/_stream.py plotly/graph_objs/scatterternary/_textfont.py plotly/graph_objs/scatterternary/_unselected.py plotly/graph_objs/scatterternary/hoverlabel/__init__.py plotly/graph_objs/scatterternary/hoverlabel/_font.py plotly/graph_objs/scatterternary/legendgrouptitle/__init__.py plotly/graph_objs/scatterternary/legendgrouptitle/_font.py plotly/graph_objs/scatterternary/marker/__init__.py plotly/graph_objs/scatterternary/marker/_colorbar.py plotly/graph_objs/scatterternary/marker/_gradient.py plotly/graph_objs/scatterternary/marker/_line.py plotly/graph_objs/scatterternary/marker/colorbar/__init__.py plotly/graph_objs/scatterternary/marker/colorbar/_tickfont.py plotly/graph_objs/scatterternary/marker/colorbar/_tickformatstop.py plotly/graph_objs/scatterternary/marker/colorbar/_title.py plotly/graph_objs/scatterternary/marker/colorbar/title/__init__.py plotly/graph_objs/scatterternary/marker/colorbar/title/_font.py plotly/graph_objs/scatterternary/selected/__init__.py plotly/graph_objs/scatterternary/selected/_marker.py plotly/graph_objs/scatterternary/selected/_textfont.py plotly/graph_objs/scatterternary/unselected/__init__.py plotly/graph_objs/scatterternary/unselected/_marker.py plotly/graph_objs/scatterternary/unselected/_textfont.py plotly/graph_objs/splom/__init__.py plotly/graph_objs/splom/_diagonal.py plotly/graph_objs/splom/_dimension.py plotly/graph_objs/splom/_hoverlabel.py plotly/graph_objs/splom/_legendgrouptitle.py plotly/graph_objs/splom/_marker.py plotly/graph_objs/splom/_selected.py plotly/graph_objs/splom/_stream.py plotly/graph_objs/splom/_unselected.py plotly/graph_objs/splom/dimension/__init__.py plotly/graph_objs/splom/dimension/_axis.py plotly/graph_objs/splom/hoverlabel/__init__.py plotly/graph_objs/splom/hoverlabel/_font.py plotly/graph_objs/splom/legendgrouptitle/__init__.py plotly/graph_objs/splom/legendgrouptitle/_font.py plotly/graph_objs/splom/marker/__init__.py plotly/graph_objs/splom/marker/_colorbar.py plotly/graph_objs/splom/marker/_line.py plotly/graph_objs/splom/marker/colorbar/__init__.py plotly/graph_objs/splom/marker/colorbar/_tickfont.py plotly/graph_objs/splom/marker/colorbar/_tickformatstop.py plotly/graph_objs/splom/marker/colorbar/_title.py plotly/graph_objs/splom/marker/colorbar/title/__init__.py plotly/graph_objs/splom/marker/colorbar/title/_font.py plotly/graph_objs/splom/selected/__init__.py plotly/graph_objs/splom/selected/_marker.py plotly/graph_objs/splom/unselected/__init__.py plotly/graph_objs/splom/unselected/_marker.py plotly/graph_objs/streamtube/__init__.py plotly/graph_objs/streamtube/_colorbar.py plotly/graph_objs/streamtube/_hoverlabel.py plotly/graph_objs/streamtube/_legendgrouptitle.py plotly/graph_objs/streamtube/_lighting.py plotly/graph_objs/streamtube/_lightposition.py plotly/graph_objs/streamtube/_starts.py plotly/graph_objs/streamtube/_stream.py plotly/graph_objs/streamtube/colorbar/__init__.py plotly/graph_objs/streamtube/colorbar/_tickfont.py plotly/graph_objs/streamtube/colorbar/_tickformatstop.py plotly/graph_objs/streamtube/colorbar/_title.py plotly/graph_objs/streamtube/colorbar/title/__init__.py plotly/graph_objs/streamtube/colorbar/title/_font.py plotly/graph_objs/streamtube/hoverlabel/__init__.py plotly/graph_objs/streamtube/hoverlabel/_font.py plotly/graph_objs/streamtube/legendgrouptitle/__init__.py plotly/graph_objs/streamtube/legendgrouptitle/_font.py plotly/graph_objs/sunburst/__init__.py plotly/graph_objs/sunburst/_domain.py plotly/graph_objs/sunburst/_hoverlabel.py plotly/graph_objs/sunburst/_insidetextfont.py plotly/graph_objs/sunburst/_leaf.py plotly/graph_objs/sunburst/_legendgrouptitle.py plotly/graph_objs/sunburst/_marker.py plotly/graph_objs/sunburst/_outsidetextfont.py plotly/graph_objs/sunburst/_root.py plotly/graph_objs/sunburst/_stream.py plotly/graph_objs/sunburst/_textfont.py plotly/graph_objs/sunburst/hoverlabel/__init__.py plotly/graph_objs/sunburst/hoverlabel/_font.py plotly/graph_objs/sunburst/legendgrouptitle/__init__.py plotly/graph_objs/sunburst/legendgrouptitle/_font.py plotly/graph_objs/sunburst/marker/__init__.py plotly/graph_objs/sunburst/marker/_colorbar.py plotly/graph_objs/sunburst/marker/_line.py plotly/graph_objs/sunburst/marker/_pattern.py plotly/graph_objs/sunburst/marker/colorbar/__init__.py plotly/graph_objs/sunburst/marker/colorbar/_tickfont.py plotly/graph_objs/sunburst/marker/colorbar/_tickformatstop.py plotly/graph_objs/sunburst/marker/colorbar/_title.py plotly/graph_objs/sunburst/marker/colorbar/title/__init__.py plotly/graph_objs/sunburst/marker/colorbar/title/_font.py plotly/graph_objs/surface/__init__.py plotly/graph_objs/surface/_colorbar.py plotly/graph_objs/surface/_contours.py plotly/graph_objs/surface/_hoverlabel.py plotly/graph_objs/surface/_legendgrouptitle.py plotly/graph_objs/surface/_lighting.py plotly/graph_objs/surface/_lightposition.py plotly/graph_objs/surface/_stream.py plotly/graph_objs/surface/colorbar/__init__.py plotly/graph_objs/surface/colorbar/_tickfont.py plotly/graph_objs/surface/colorbar/_tickformatstop.py plotly/graph_objs/surface/colorbar/_title.py plotly/graph_objs/surface/colorbar/title/__init__.py plotly/graph_objs/surface/colorbar/title/_font.py plotly/graph_objs/surface/contours/__init__.py plotly/graph_objs/surface/contours/_x.py plotly/graph_objs/surface/contours/_y.py plotly/graph_objs/surface/contours/_z.py plotly/graph_objs/surface/contours/x/__init__.py plotly/graph_objs/surface/contours/x/_project.py plotly/graph_objs/surface/contours/y/__init__.py plotly/graph_objs/surface/contours/y/_project.py plotly/graph_objs/surface/contours/z/__init__.py plotly/graph_objs/surface/contours/z/_project.py plotly/graph_objs/surface/hoverlabel/__init__.py plotly/graph_objs/surface/hoverlabel/_font.py plotly/graph_objs/surface/legendgrouptitle/__init__.py plotly/graph_objs/surface/legendgrouptitle/_font.py plotly/graph_objs/table/__init__.py plotly/graph_objs/table/_cells.py plotly/graph_objs/table/_domain.py plotly/graph_objs/table/_header.py plotly/graph_objs/table/_hoverlabel.py plotly/graph_objs/table/_legendgrouptitle.py plotly/graph_objs/table/_stream.py plotly/graph_objs/table/cells/__init__.py plotly/graph_objs/table/cells/_fill.py plotly/graph_objs/table/cells/_font.py plotly/graph_objs/table/cells/_line.py plotly/graph_objs/table/header/__init__.py plotly/graph_objs/table/header/_fill.py plotly/graph_objs/table/header/_font.py plotly/graph_objs/table/header/_line.py plotly/graph_objs/table/hoverlabel/__init__.py plotly/graph_objs/table/hoverlabel/_font.py plotly/graph_objs/table/legendgrouptitle/__init__.py plotly/graph_objs/table/legendgrouptitle/_font.py plotly/graph_objs/treemap/__init__.py plotly/graph_objs/treemap/_domain.py plotly/graph_objs/treemap/_hoverlabel.py plotly/graph_objs/treemap/_insidetextfont.py plotly/graph_objs/treemap/_legendgrouptitle.py plotly/graph_objs/treemap/_marker.py plotly/graph_objs/treemap/_outsidetextfont.py plotly/graph_objs/treemap/_pathbar.py plotly/graph_objs/treemap/_root.py plotly/graph_objs/treemap/_stream.py plotly/graph_objs/treemap/_textfont.py plotly/graph_objs/treemap/_tiling.py plotly/graph_objs/treemap/hoverlabel/__init__.py plotly/graph_objs/treemap/hoverlabel/_font.py plotly/graph_objs/treemap/legendgrouptitle/__init__.py plotly/graph_objs/treemap/legendgrouptitle/_font.py plotly/graph_objs/treemap/marker/__init__.py plotly/graph_objs/treemap/marker/_colorbar.py plotly/graph_objs/treemap/marker/_line.py plotly/graph_objs/treemap/marker/_pad.py plotly/graph_objs/treemap/marker/_pattern.py plotly/graph_objs/treemap/marker/colorbar/__init__.py plotly/graph_objs/treemap/marker/colorbar/_tickfont.py plotly/graph_objs/treemap/marker/colorbar/_tickformatstop.py plotly/graph_objs/treemap/marker/colorbar/_title.py plotly/graph_objs/treemap/marker/colorbar/title/__init__.py plotly/graph_objs/treemap/marker/colorbar/title/_font.py plotly/graph_objs/treemap/pathbar/__init__.py plotly/graph_objs/treemap/pathbar/_textfont.py plotly/graph_objs/violin/__init__.py plotly/graph_objs/violin/_box.py plotly/graph_objs/violin/_hoverlabel.py plotly/graph_objs/violin/_legendgrouptitle.py plotly/graph_objs/violin/_line.py plotly/graph_objs/violin/_marker.py plotly/graph_objs/violin/_meanline.py plotly/graph_objs/violin/_selected.py plotly/graph_objs/violin/_stream.py plotly/graph_objs/violin/_unselected.py plotly/graph_objs/violin/box/__init__.py plotly/graph_objs/violin/box/_line.py plotly/graph_objs/violin/hoverlabel/__init__.py plotly/graph_objs/violin/hoverlabel/_font.py plotly/graph_objs/violin/legendgrouptitle/__init__.py plotly/graph_objs/violin/legendgrouptitle/_font.py plotly/graph_objs/violin/marker/__init__.py plotly/graph_objs/violin/marker/_line.py plotly/graph_objs/violin/selected/__init__.py plotly/graph_objs/violin/selected/_marker.py plotly/graph_objs/violin/unselected/__init__.py plotly/graph_objs/violin/unselected/_marker.py plotly/graph_objs/volume/__init__.py plotly/graph_objs/volume/_caps.py plotly/graph_objs/volume/_colorbar.py plotly/graph_objs/volume/_contour.py plotly/graph_objs/volume/_hoverlabel.py plotly/graph_objs/volume/_legendgrouptitle.py plotly/graph_objs/volume/_lighting.py plotly/graph_objs/volume/_lightposition.py plotly/graph_objs/volume/_slices.py plotly/graph_objs/volume/_spaceframe.py plotly/graph_objs/volume/_stream.py plotly/graph_objs/volume/_surface.py plotly/graph_objs/volume/caps/__init__.py plotly/graph_objs/volume/caps/_x.py plotly/graph_objs/volume/caps/_y.py plotly/graph_objs/volume/caps/_z.py plotly/graph_objs/volume/colorbar/__init__.py plotly/graph_objs/volume/colorbar/_tickfont.py plotly/graph_objs/volume/colorbar/_tickformatstop.py plotly/graph_objs/volume/colorbar/_title.py plotly/graph_objs/volume/colorbar/title/__init__.py plotly/graph_objs/volume/colorbar/title/_font.py plotly/graph_objs/volume/hoverlabel/__init__.py plotly/graph_objs/volume/hoverlabel/_font.py plotly/graph_objs/volume/legendgrouptitle/__init__.py plotly/graph_objs/volume/legendgrouptitle/_font.py plotly/graph_objs/volume/slices/__init__.py plotly/graph_objs/volume/slices/_x.py plotly/graph_objs/volume/slices/_y.py plotly/graph_objs/volume/slices/_z.py plotly/graph_objs/waterfall/__init__.py plotly/graph_objs/waterfall/_connector.py plotly/graph_objs/waterfall/_decreasing.py plotly/graph_objs/waterfall/_hoverlabel.py plotly/graph_objs/waterfall/_increasing.py plotly/graph_objs/waterfall/_insidetextfont.py plotly/graph_objs/waterfall/_legendgrouptitle.py plotly/graph_objs/waterfall/_outsidetextfont.py plotly/graph_objs/waterfall/_stream.py plotly/graph_objs/waterfall/_textfont.py plotly/graph_objs/waterfall/_totals.py plotly/graph_objs/waterfall/connector/__init__.py plotly/graph_objs/waterfall/connector/_line.py plotly/graph_objs/waterfall/decreasing/__init__.py plotly/graph_objs/waterfall/decreasing/_marker.py plotly/graph_objs/waterfall/decreasing/marker/__init__.py plotly/graph_objs/waterfall/decreasing/marker/_line.py plotly/graph_objs/waterfall/hoverlabel/__init__.py plotly/graph_objs/waterfall/hoverlabel/_font.py plotly/graph_objs/waterfall/increasing/__init__.py plotly/graph_objs/waterfall/increasing/_marker.py plotly/graph_objs/waterfall/increasing/marker/__init__.py plotly/graph_objs/waterfall/increasing/marker/_line.py plotly/graph_objs/waterfall/legendgrouptitle/__init__.py plotly/graph_objs/waterfall/legendgrouptitle/_font.py plotly/graph_objs/waterfall/totals/__init__.py plotly/graph_objs/waterfall/totals/_marker.py plotly/graph_objs/waterfall/totals/marker/__init__.py plotly/graph_objs/waterfall/totals/marker/_line.py plotly/io/__init__.py plotly/io/_base_renderers.py plotly/io/_html.py plotly/io/_json.py plotly/io/_kaleido.py plotly/io/_orca.py plotly/io/_renderers.py plotly/io/_sg_scraper.py plotly/io/_templates.py plotly/io/_utils.py plotly/io/base_renderers.py plotly/io/json.py plotly/io/kaleido.py plotly/io/orca.py plotly/matplotlylib/__init__.py plotly/matplotlylib/mpltools.py plotly/matplotlylib/renderer.py plotly/matplotlylib/mplexporter/__init__.py plotly/matplotlylib/mplexporter/_py3k_compat.py plotly/matplotlylib/mplexporter/exporter.py plotly/matplotlylib/mplexporter/tools.py plotly/matplotlylib/mplexporter/utils.py plotly/matplotlylib/mplexporter/renderers/__init__.py plotly/matplotlylib/mplexporter/renderers/base.py plotly/matplotlylib/mplexporter/renderers/fake_renderer.py plotly/matplotlylib/mplexporter/renderers/vega_renderer.py plotly/matplotlylib/mplexporter/renderers/vincent_renderer.py plotly/offline/__init__.py plotly/offline/_plotlyjs_version.py plotly/offline/offline.py plotly/package_data/plotly.min.js plotly/package_data/datasets/carshare.csv.gz plotly/package_data/datasets/election.csv.gz plotly/package_data/datasets/election.geojson.gz plotly/package_data/datasets/experiment.csv.gz plotly/package_data/datasets/gapminder.csv.gz plotly/package_data/datasets/iris.csv.gz plotly/package_data/datasets/medals.csv.gz plotly/package_data/datasets/stocks.csv.gz plotly/package_data/datasets/tips.csv.gz plotly/package_data/datasets/wind.csv.gz plotly/package_data/templates/ggplot2.json plotly/package_data/templates/gridon.json plotly/package_data/templates/plotly.json plotly/package_data/templates/plotly_dark.json plotly/package_data/templates/plotly_white.json plotly/package_data/templates/presentation.json plotly/package_data/templates/seaborn.json plotly/package_data/templates/simple_white.json plotly/package_data/templates/xgridoff.json plotly/package_data/templates/ygridoff.json plotly/plotly/__init__.py plotly/plotly/chunked_requests.py plotly/validators/__init__.py plotly/validators/_bar.py plotly/validators/_barpolar.py plotly/validators/_box.py plotly/validators/_candlestick.py plotly/validators/_carpet.py plotly/validators/_choropleth.py plotly/validators/_choroplethmapbox.py plotly/validators/_cone.py plotly/validators/_contour.py plotly/validators/_contourcarpet.py plotly/validators/_data.py plotly/validators/_densitymapbox.py plotly/validators/_frames.py plotly/validators/_funnel.py plotly/validators/_funnelarea.py plotly/validators/_heatmap.py plotly/validators/_heatmapgl.py plotly/validators/_histogram.py plotly/validators/_histogram2d.py plotly/validators/_histogram2dcontour.py plotly/validators/_icicle.py plotly/validators/_image.py plotly/validators/_indicator.py plotly/validators/_isosurface.py plotly/validators/_layout.py plotly/validators/_mesh3d.py plotly/validators/_ohlc.py plotly/validators/_parcats.py plotly/validators/_parcoords.py plotly/validators/_pie.py plotly/validators/_pointcloud.py plotly/validators/_sankey.py plotly/validators/_scatter.py plotly/validators/_scatter3d.py plotly/validators/_scattercarpet.py plotly/validators/_scattergeo.py plotly/validators/_scattergl.py plotly/validators/_scattermapbox.py plotly/validators/_scatterpolar.py plotly/validators/_scatterpolargl.py plotly/validators/_scattersmith.py plotly/validators/_scatterternary.py plotly/validators/_splom.py plotly/validators/_streamtube.py plotly/validators/_sunburst.py plotly/validators/_surface.py plotly/validators/_table.py plotly/validators/_treemap.py plotly/validators/_violin.py plotly/validators/_volume.py plotly/validators/_waterfall.py plotly/validators/bar/__init__.py plotly/validators/bar/_alignmentgroup.py plotly/validators/bar/_base.py plotly/validators/bar/_basesrc.py plotly/validators/bar/_cliponaxis.py plotly/validators/bar/_constraintext.py plotly/validators/bar/_customdata.py plotly/validators/bar/_customdatasrc.py plotly/validators/bar/_dx.py plotly/validators/bar/_dy.py plotly/validators/bar/_error_x.py plotly/validators/bar/_error_y.py plotly/validators/bar/_hoverinfo.py plotly/validators/bar/_hoverinfosrc.py plotly/validators/bar/_hoverlabel.py plotly/validators/bar/_hovertemplate.py plotly/validators/bar/_hovertemplatesrc.py plotly/validators/bar/_hovertext.py plotly/validators/bar/_hovertextsrc.py plotly/validators/bar/_ids.py plotly/validators/bar/_idssrc.py plotly/validators/bar/_insidetextanchor.py plotly/validators/bar/_insidetextfont.py plotly/validators/bar/_legend.py plotly/validators/bar/_legendgroup.py plotly/validators/bar/_legendgrouptitle.py plotly/validators/bar/_legendrank.py plotly/validators/bar/_legendwidth.py plotly/validators/bar/_marker.py plotly/validators/bar/_meta.py plotly/validators/bar/_metasrc.py plotly/validators/bar/_name.py plotly/validators/bar/_offset.py plotly/validators/bar/_offsetgroup.py plotly/validators/bar/_offsetsrc.py plotly/validators/bar/_opacity.py plotly/validators/bar/_orientation.py plotly/validators/bar/_outsidetextfont.py plotly/validators/bar/_selected.py plotly/validators/bar/_selectedpoints.py plotly/validators/bar/_showlegend.py plotly/validators/bar/_stream.py plotly/validators/bar/_text.py plotly/validators/bar/_textangle.py plotly/validators/bar/_textfont.py plotly/validators/bar/_textposition.py plotly/validators/bar/_textpositionsrc.py plotly/validators/bar/_textsrc.py plotly/validators/bar/_texttemplate.py plotly/validators/bar/_texttemplatesrc.py plotly/validators/bar/_uid.py plotly/validators/bar/_uirevision.py plotly/validators/bar/_unselected.py plotly/validators/bar/_visible.py plotly/validators/bar/_width.py plotly/validators/bar/_widthsrc.py plotly/validators/bar/_x.py plotly/validators/bar/_x0.py plotly/validators/bar/_xaxis.py plotly/validators/bar/_xcalendar.py plotly/validators/bar/_xhoverformat.py plotly/validators/bar/_xperiod.py plotly/validators/bar/_xperiod0.py plotly/validators/bar/_xperiodalignment.py plotly/validators/bar/_xsrc.py plotly/validators/bar/_y.py plotly/validators/bar/_y0.py plotly/validators/bar/_yaxis.py plotly/validators/bar/_ycalendar.py plotly/validators/bar/_yhoverformat.py plotly/validators/bar/_yperiod.py plotly/validators/bar/_yperiod0.py plotly/validators/bar/_yperiodalignment.py plotly/validators/bar/_ysrc.py plotly/validators/bar/error_x/__init__.py plotly/validators/bar/error_x/_array.py plotly/validators/bar/error_x/_arrayminus.py plotly/validators/bar/error_x/_arrayminussrc.py plotly/validators/bar/error_x/_arraysrc.py plotly/validators/bar/error_x/_color.py plotly/validators/bar/error_x/_copy_ystyle.py plotly/validators/bar/error_x/_symmetric.py plotly/validators/bar/error_x/_thickness.py plotly/validators/bar/error_x/_traceref.py plotly/validators/bar/error_x/_tracerefminus.py plotly/validators/bar/error_x/_type.py plotly/validators/bar/error_x/_value.py plotly/validators/bar/error_x/_valueminus.py plotly/validators/bar/error_x/_visible.py plotly/validators/bar/error_x/_width.py plotly/validators/bar/error_y/__init__.py plotly/validators/bar/error_y/_array.py plotly/validators/bar/error_y/_arrayminus.py plotly/validators/bar/error_y/_arrayminussrc.py plotly/validators/bar/error_y/_arraysrc.py plotly/validators/bar/error_y/_color.py plotly/validators/bar/error_y/_symmetric.py plotly/validators/bar/error_y/_thickness.py plotly/validators/bar/error_y/_traceref.py plotly/validators/bar/error_y/_tracerefminus.py plotly/validators/bar/error_y/_type.py plotly/validators/bar/error_y/_value.py plotly/validators/bar/error_y/_valueminus.py plotly/validators/bar/error_y/_visible.py plotly/validators/bar/error_y/_width.py plotly/validators/bar/hoverlabel/__init__.py plotly/validators/bar/hoverlabel/_align.py plotly/validators/bar/hoverlabel/_alignsrc.py plotly/validators/bar/hoverlabel/_bgcolor.py plotly/validators/bar/hoverlabel/_bgcolorsrc.py plotly/validators/bar/hoverlabel/_bordercolor.py plotly/validators/bar/hoverlabel/_bordercolorsrc.py plotly/validators/bar/hoverlabel/_font.py plotly/validators/bar/hoverlabel/_namelength.py plotly/validators/bar/hoverlabel/_namelengthsrc.py plotly/validators/bar/hoverlabel/font/__init__.py plotly/validators/bar/hoverlabel/font/_color.py plotly/validators/bar/hoverlabel/font/_colorsrc.py plotly/validators/bar/hoverlabel/font/_family.py plotly/validators/bar/hoverlabel/font/_familysrc.py plotly/validators/bar/hoverlabel/font/_size.py plotly/validators/bar/hoverlabel/font/_sizesrc.py plotly/validators/bar/insidetextfont/__init__.py plotly/validators/bar/insidetextfont/_color.py plotly/validators/bar/insidetextfont/_colorsrc.py plotly/validators/bar/insidetextfont/_family.py plotly/validators/bar/insidetextfont/_familysrc.py plotly/validators/bar/insidetextfont/_size.py plotly/validators/bar/insidetextfont/_sizesrc.py plotly/validators/bar/legendgrouptitle/__init__.py plotly/validators/bar/legendgrouptitle/_font.py plotly/validators/bar/legendgrouptitle/_text.py plotly/validators/bar/legendgrouptitle/font/__init__.py plotly/validators/bar/legendgrouptitle/font/_color.py plotly/validators/bar/legendgrouptitle/font/_family.py plotly/validators/bar/legendgrouptitle/font/_size.py plotly/validators/bar/marker/__init__.py plotly/validators/bar/marker/_autocolorscale.py plotly/validators/bar/marker/_cauto.py plotly/validators/bar/marker/_cmax.py plotly/validators/bar/marker/_cmid.py plotly/validators/bar/marker/_cmin.py plotly/validators/bar/marker/_color.py plotly/validators/bar/marker/_coloraxis.py plotly/validators/bar/marker/_colorbar.py plotly/validators/bar/marker/_colorscale.py plotly/validators/bar/marker/_colorsrc.py plotly/validators/bar/marker/_line.py plotly/validators/bar/marker/_opacity.py plotly/validators/bar/marker/_opacitysrc.py plotly/validators/bar/marker/_pattern.py plotly/validators/bar/marker/_reversescale.py plotly/validators/bar/marker/_showscale.py plotly/validators/bar/marker/colorbar/__init__.py plotly/validators/bar/marker/colorbar/_bgcolor.py plotly/validators/bar/marker/colorbar/_bordercolor.py plotly/validators/bar/marker/colorbar/_borderwidth.py plotly/validators/bar/marker/colorbar/_dtick.py plotly/validators/bar/marker/colorbar/_exponentformat.py plotly/validators/bar/marker/colorbar/_labelalias.py plotly/validators/bar/marker/colorbar/_len.py plotly/validators/bar/marker/colorbar/_lenmode.py plotly/validators/bar/marker/colorbar/_minexponent.py plotly/validators/bar/marker/colorbar/_nticks.py plotly/validators/bar/marker/colorbar/_orientation.py plotly/validators/bar/marker/colorbar/_outlinecolor.py plotly/validators/bar/marker/colorbar/_outlinewidth.py plotly/validators/bar/marker/colorbar/_separatethousands.py plotly/validators/bar/marker/colorbar/_showexponent.py plotly/validators/bar/marker/colorbar/_showticklabels.py plotly/validators/bar/marker/colorbar/_showtickprefix.py plotly/validators/bar/marker/colorbar/_showticksuffix.py plotly/validators/bar/marker/colorbar/_thickness.py plotly/validators/bar/marker/colorbar/_thicknessmode.py plotly/validators/bar/marker/colorbar/_tick0.py plotly/validators/bar/marker/colorbar/_tickangle.py plotly/validators/bar/marker/colorbar/_tickcolor.py plotly/validators/bar/marker/colorbar/_tickfont.py plotly/validators/bar/marker/colorbar/_tickformat.py plotly/validators/bar/marker/colorbar/_tickformatstopdefaults.py plotly/validators/bar/marker/colorbar/_tickformatstops.py plotly/validators/bar/marker/colorbar/_ticklabeloverflow.py plotly/validators/bar/marker/colorbar/_ticklabelposition.py plotly/validators/bar/marker/colorbar/_ticklabelstep.py plotly/validators/bar/marker/colorbar/_ticklen.py plotly/validators/bar/marker/colorbar/_tickmode.py plotly/validators/bar/marker/colorbar/_tickprefix.py plotly/validators/bar/marker/colorbar/_ticks.py plotly/validators/bar/marker/colorbar/_ticksuffix.py plotly/validators/bar/marker/colorbar/_ticktext.py plotly/validators/bar/marker/colorbar/_ticktextsrc.py plotly/validators/bar/marker/colorbar/_tickvals.py plotly/validators/bar/marker/colorbar/_tickvalssrc.py plotly/validators/bar/marker/colorbar/_tickwidth.py plotly/validators/bar/marker/colorbar/_title.py plotly/validators/bar/marker/colorbar/_x.py plotly/validators/bar/marker/colorbar/_xanchor.py plotly/validators/bar/marker/colorbar/_xpad.py plotly/validators/bar/marker/colorbar/_xref.py plotly/validators/bar/marker/colorbar/_y.py plotly/validators/bar/marker/colorbar/_yanchor.py plotly/validators/bar/marker/colorbar/_ypad.py plotly/validators/bar/marker/colorbar/_yref.py plotly/validators/bar/marker/colorbar/tickfont/__init__.py plotly/validators/bar/marker/colorbar/tickfont/_color.py plotly/validators/bar/marker/colorbar/tickfont/_family.py plotly/validators/bar/marker/colorbar/tickfont/_size.py plotly/validators/bar/marker/colorbar/tickformatstop/__init__.py plotly/validators/bar/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/bar/marker/colorbar/tickformatstop/_enabled.py plotly/validators/bar/marker/colorbar/tickformatstop/_name.py plotly/validators/bar/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/bar/marker/colorbar/tickformatstop/_value.py plotly/validators/bar/marker/colorbar/title/__init__.py plotly/validators/bar/marker/colorbar/title/_font.py plotly/validators/bar/marker/colorbar/title/_side.py plotly/validators/bar/marker/colorbar/title/_text.py plotly/validators/bar/marker/colorbar/title/font/__init__.py plotly/validators/bar/marker/colorbar/title/font/_color.py plotly/validators/bar/marker/colorbar/title/font/_family.py plotly/validators/bar/marker/colorbar/title/font/_size.py plotly/validators/bar/marker/line/__init__.py plotly/validators/bar/marker/line/_autocolorscale.py plotly/validators/bar/marker/line/_cauto.py plotly/validators/bar/marker/line/_cmax.py plotly/validators/bar/marker/line/_cmid.py plotly/validators/bar/marker/line/_cmin.py plotly/validators/bar/marker/line/_color.py plotly/validators/bar/marker/line/_coloraxis.py plotly/validators/bar/marker/line/_colorscale.py plotly/validators/bar/marker/line/_colorsrc.py plotly/validators/bar/marker/line/_reversescale.py plotly/validators/bar/marker/line/_width.py plotly/validators/bar/marker/line/_widthsrc.py plotly/validators/bar/marker/pattern/__init__.py plotly/validators/bar/marker/pattern/_bgcolor.py plotly/validators/bar/marker/pattern/_bgcolorsrc.py plotly/validators/bar/marker/pattern/_fgcolor.py plotly/validators/bar/marker/pattern/_fgcolorsrc.py plotly/validators/bar/marker/pattern/_fgopacity.py plotly/validators/bar/marker/pattern/_fillmode.py plotly/validators/bar/marker/pattern/_shape.py plotly/validators/bar/marker/pattern/_shapesrc.py plotly/validators/bar/marker/pattern/_size.py plotly/validators/bar/marker/pattern/_sizesrc.py plotly/validators/bar/marker/pattern/_solidity.py plotly/validators/bar/marker/pattern/_soliditysrc.py plotly/validators/bar/outsidetextfont/__init__.py plotly/validators/bar/outsidetextfont/_color.py plotly/validators/bar/outsidetextfont/_colorsrc.py plotly/validators/bar/outsidetextfont/_family.py plotly/validators/bar/outsidetextfont/_familysrc.py plotly/validators/bar/outsidetextfont/_size.py plotly/validators/bar/outsidetextfont/_sizesrc.py plotly/validators/bar/selected/__init__.py plotly/validators/bar/selected/_marker.py plotly/validators/bar/selected/_textfont.py plotly/validators/bar/selected/marker/__init__.py plotly/validators/bar/selected/marker/_color.py plotly/validators/bar/selected/marker/_opacity.py plotly/validators/bar/selected/textfont/__init__.py plotly/validators/bar/selected/textfont/_color.py plotly/validators/bar/stream/__init__.py plotly/validators/bar/stream/_maxpoints.py plotly/validators/bar/stream/_token.py plotly/validators/bar/textfont/__init__.py plotly/validators/bar/textfont/_color.py plotly/validators/bar/textfont/_colorsrc.py plotly/validators/bar/textfont/_family.py plotly/validators/bar/textfont/_familysrc.py plotly/validators/bar/textfont/_size.py plotly/validators/bar/textfont/_sizesrc.py plotly/validators/bar/unselected/__init__.py plotly/validators/bar/unselected/_marker.py plotly/validators/bar/unselected/_textfont.py plotly/validators/bar/unselected/marker/__init__.py plotly/validators/bar/unselected/marker/_color.py plotly/validators/bar/unselected/marker/_opacity.py plotly/validators/bar/unselected/textfont/__init__.py plotly/validators/bar/unselected/textfont/_color.py plotly/validators/barpolar/__init__.py plotly/validators/barpolar/_base.py plotly/validators/barpolar/_basesrc.py plotly/validators/barpolar/_customdata.py plotly/validators/barpolar/_customdatasrc.py plotly/validators/barpolar/_dr.py plotly/validators/barpolar/_dtheta.py plotly/validators/barpolar/_hoverinfo.py plotly/validators/barpolar/_hoverinfosrc.py plotly/validators/barpolar/_hoverlabel.py plotly/validators/barpolar/_hovertemplate.py plotly/validators/barpolar/_hovertemplatesrc.py plotly/validators/barpolar/_hovertext.py plotly/validators/barpolar/_hovertextsrc.py plotly/validators/barpolar/_ids.py plotly/validators/barpolar/_idssrc.py plotly/validators/barpolar/_legend.py plotly/validators/barpolar/_legendgroup.py plotly/validators/barpolar/_legendgrouptitle.py plotly/validators/barpolar/_legendrank.py plotly/validators/barpolar/_legendwidth.py plotly/validators/barpolar/_marker.py plotly/validators/barpolar/_meta.py plotly/validators/barpolar/_metasrc.py plotly/validators/barpolar/_name.py plotly/validators/barpolar/_offset.py plotly/validators/barpolar/_offsetsrc.py plotly/validators/barpolar/_opacity.py plotly/validators/barpolar/_r.py plotly/validators/barpolar/_r0.py plotly/validators/barpolar/_rsrc.py plotly/validators/barpolar/_selected.py plotly/validators/barpolar/_selectedpoints.py plotly/validators/barpolar/_showlegend.py plotly/validators/barpolar/_stream.py plotly/validators/barpolar/_subplot.py plotly/validators/barpolar/_text.py plotly/validators/barpolar/_textsrc.py plotly/validators/barpolar/_theta.py plotly/validators/barpolar/_theta0.py plotly/validators/barpolar/_thetasrc.py plotly/validators/barpolar/_thetaunit.py plotly/validators/barpolar/_uid.py plotly/validators/barpolar/_uirevision.py plotly/validators/barpolar/_unselected.py plotly/validators/barpolar/_visible.py plotly/validators/barpolar/_width.py plotly/validators/barpolar/_widthsrc.py plotly/validators/barpolar/hoverlabel/__init__.py plotly/validators/barpolar/hoverlabel/_align.py plotly/validators/barpolar/hoverlabel/_alignsrc.py plotly/validators/barpolar/hoverlabel/_bgcolor.py plotly/validators/barpolar/hoverlabel/_bgcolorsrc.py plotly/validators/barpolar/hoverlabel/_bordercolor.py plotly/validators/barpolar/hoverlabel/_bordercolorsrc.py plotly/validators/barpolar/hoverlabel/_font.py plotly/validators/barpolar/hoverlabel/_namelength.py plotly/validators/barpolar/hoverlabel/_namelengthsrc.py plotly/validators/barpolar/hoverlabel/font/__init__.py plotly/validators/barpolar/hoverlabel/font/_color.py plotly/validators/barpolar/hoverlabel/font/_colorsrc.py plotly/validators/barpolar/hoverlabel/font/_family.py plotly/validators/barpolar/hoverlabel/font/_familysrc.py plotly/validators/barpolar/hoverlabel/font/_size.py plotly/validators/barpolar/hoverlabel/font/_sizesrc.py plotly/validators/barpolar/legendgrouptitle/__init__.py plotly/validators/barpolar/legendgrouptitle/_font.py plotly/validators/barpolar/legendgrouptitle/_text.py plotly/validators/barpolar/legendgrouptitle/font/__init__.py plotly/validators/barpolar/legendgrouptitle/font/_color.py plotly/validators/barpolar/legendgrouptitle/font/_family.py plotly/validators/barpolar/legendgrouptitle/font/_size.py plotly/validators/barpolar/marker/__init__.py plotly/validators/barpolar/marker/_autocolorscale.py plotly/validators/barpolar/marker/_cauto.py plotly/validators/barpolar/marker/_cmax.py plotly/validators/barpolar/marker/_cmid.py plotly/validators/barpolar/marker/_cmin.py plotly/validators/barpolar/marker/_color.py plotly/validators/barpolar/marker/_coloraxis.py plotly/validators/barpolar/marker/_colorbar.py plotly/validators/barpolar/marker/_colorscale.py plotly/validators/barpolar/marker/_colorsrc.py plotly/validators/barpolar/marker/_line.py plotly/validators/barpolar/marker/_opacity.py plotly/validators/barpolar/marker/_opacitysrc.py plotly/validators/barpolar/marker/_pattern.py plotly/validators/barpolar/marker/_reversescale.py plotly/validators/barpolar/marker/_showscale.py plotly/validators/barpolar/marker/colorbar/__init__.py plotly/validators/barpolar/marker/colorbar/_bgcolor.py plotly/validators/barpolar/marker/colorbar/_bordercolor.py plotly/validators/barpolar/marker/colorbar/_borderwidth.py plotly/validators/barpolar/marker/colorbar/_dtick.py plotly/validators/barpolar/marker/colorbar/_exponentformat.py plotly/validators/barpolar/marker/colorbar/_labelalias.py plotly/validators/barpolar/marker/colorbar/_len.py plotly/validators/barpolar/marker/colorbar/_lenmode.py plotly/validators/barpolar/marker/colorbar/_minexponent.py plotly/validators/barpolar/marker/colorbar/_nticks.py plotly/validators/barpolar/marker/colorbar/_orientation.py plotly/validators/barpolar/marker/colorbar/_outlinecolor.py plotly/validators/barpolar/marker/colorbar/_outlinewidth.py plotly/validators/barpolar/marker/colorbar/_separatethousands.py plotly/validators/barpolar/marker/colorbar/_showexponent.py plotly/validators/barpolar/marker/colorbar/_showticklabels.py plotly/validators/barpolar/marker/colorbar/_showtickprefix.py plotly/validators/barpolar/marker/colorbar/_showticksuffix.py plotly/validators/barpolar/marker/colorbar/_thickness.py plotly/validators/barpolar/marker/colorbar/_thicknessmode.py plotly/validators/barpolar/marker/colorbar/_tick0.py plotly/validators/barpolar/marker/colorbar/_tickangle.py plotly/validators/barpolar/marker/colorbar/_tickcolor.py plotly/validators/barpolar/marker/colorbar/_tickfont.py plotly/validators/barpolar/marker/colorbar/_tickformat.py plotly/validators/barpolar/marker/colorbar/_tickformatstopdefaults.py plotly/validators/barpolar/marker/colorbar/_tickformatstops.py plotly/validators/barpolar/marker/colorbar/_ticklabeloverflow.py plotly/validators/barpolar/marker/colorbar/_ticklabelposition.py plotly/validators/barpolar/marker/colorbar/_ticklabelstep.py plotly/validators/barpolar/marker/colorbar/_ticklen.py plotly/validators/barpolar/marker/colorbar/_tickmode.py plotly/validators/barpolar/marker/colorbar/_tickprefix.py plotly/validators/barpolar/marker/colorbar/_ticks.py plotly/validators/barpolar/marker/colorbar/_ticksuffix.py plotly/validators/barpolar/marker/colorbar/_ticktext.py plotly/validators/barpolar/marker/colorbar/_ticktextsrc.py plotly/validators/barpolar/marker/colorbar/_tickvals.py plotly/validators/barpolar/marker/colorbar/_tickvalssrc.py plotly/validators/barpolar/marker/colorbar/_tickwidth.py plotly/validators/barpolar/marker/colorbar/_title.py plotly/validators/barpolar/marker/colorbar/_x.py plotly/validators/barpolar/marker/colorbar/_xanchor.py plotly/validators/barpolar/marker/colorbar/_xpad.py plotly/validators/barpolar/marker/colorbar/_xref.py plotly/validators/barpolar/marker/colorbar/_y.py plotly/validators/barpolar/marker/colorbar/_yanchor.py plotly/validators/barpolar/marker/colorbar/_ypad.py plotly/validators/barpolar/marker/colorbar/_yref.py plotly/validators/barpolar/marker/colorbar/tickfont/__init__.py plotly/validators/barpolar/marker/colorbar/tickfont/_color.py plotly/validators/barpolar/marker/colorbar/tickfont/_family.py plotly/validators/barpolar/marker/colorbar/tickfont/_size.py plotly/validators/barpolar/marker/colorbar/tickformatstop/__init__.py plotly/validators/barpolar/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/barpolar/marker/colorbar/tickformatstop/_enabled.py plotly/validators/barpolar/marker/colorbar/tickformatstop/_name.py plotly/validators/barpolar/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/barpolar/marker/colorbar/tickformatstop/_value.py plotly/validators/barpolar/marker/colorbar/title/__init__.py plotly/validators/barpolar/marker/colorbar/title/_font.py plotly/validators/barpolar/marker/colorbar/title/_side.py plotly/validators/barpolar/marker/colorbar/title/_text.py plotly/validators/barpolar/marker/colorbar/title/font/__init__.py plotly/validators/barpolar/marker/colorbar/title/font/_color.py plotly/validators/barpolar/marker/colorbar/title/font/_family.py plotly/validators/barpolar/marker/colorbar/title/font/_size.py plotly/validators/barpolar/marker/line/__init__.py plotly/validators/barpolar/marker/line/_autocolorscale.py plotly/validators/barpolar/marker/line/_cauto.py plotly/validators/barpolar/marker/line/_cmax.py plotly/validators/barpolar/marker/line/_cmid.py plotly/validators/barpolar/marker/line/_cmin.py plotly/validators/barpolar/marker/line/_color.py plotly/validators/barpolar/marker/line/_coloraxis.py plotly/validators/barpolar/marker/line/_colorscale.py plotly/validators/barpolar/marker/line/_colorsrc.py plotly/validators/barpolar/marker/line/_reversescale.py plotly/validators/barpolar/marker/line/_width.py plotly/validators/barpolar/marker/line/_widthsrc.py plotly/validators/barpolar/marker/pattern/__init__.py plotly/validators/barpolar/marker/pattern/_bgcolor.py plotly/validators/barpolar/marker/pattern/_bgcolorsrc.py plotly/validators/barpolar/marker/pattern/_fgcolor.py plotly/validators/barpolar/marker/pattern/_fgcolorsrc.py plotly/validators/barpolar/marker/pattern/_fgopacity.py plotly/validators/barpolar/marker/pattern/_fillmode.py plotly/validators/barpolar/marker/pattern/_shape.py plotly/validators/barpolar/marker/pattern/_shapesrc.py plotly/validators/barpolar/marker/pattern/_size.py plotly/validators/barpolar/marker/pattern/_sizesrc.py plotly/validators/barpolar/marker/pattern/_solidity.py plotly/validators/barpolar/marker/pattern/_soliditysrc.py plotly/validators/barpolar/selected/__init__.py plotly/validators/barpolar/selected/_marker.py plotly/validators/barpolar/selected/_textfont.py plotly/validators/barpolar/selected/marker/__init__.py plotly/validators/barpolar/selected/marker/_color.py plotly/validators/barpolar/selected/marker/_opacity.py plotly/validators/barpolar/selected/textfont/__init__.py plotly/validators/barpolar/selected/textfont/_color.py plotly/validators/barpolar/stream/__init__.py plotly/validators/barpolar/stream/_maxpoints.py plotly/validators/barpolar/stream/_token.py plotly/validators/barpolar/unselected/__init__.py plotly/validators/barpolar/unselected/_marker.py plotly/validators/barpolar/unselected/_textfont.py plotly/validators/barpolar/unselected/marker/__init__.py plotly/validators/barpolar/unselected/marker/_color.py plotly/validators/barpolar/unselected/marker/_opacity.py plotly/validators/barpolar/unselected/textfont/__init__.py plotly/validators/barpolar/unselected/textfont/_color.py plotly/validators/box/__init__.py plotly/validators/box/_alignmentgroup.py plotly/validators/box/_boxmean.py plotly/validators/box/_boxpoints.py plotly/validators/box/_customdata.py plotly/validators/box/_customdatasrc.py plotly/validators/box/_dx.py plotly/validators/box/_dy.py plotly/validators/box/_fillcolor.py plotly/validators/box/_hoverinfo.py plotly/validators/box/_hoverinfosrc.py plotly/validators/box/_hoverlabel.py plotly/validators/box/_hoveron.py plotly/validators/box/_hovertemplate.py plotly/validators/box/_hovertemplatesrc.py plotly/validators/box/_hovertext.py plotly/validators/box/_hovertextsrc.py plotly/validators/box/_ids.py plotly/validators/box/_idssrc.py plotly/validators/box/_jitter.py plotly/validators/box/_legend.py plotly/validators/box/_legendgroup.py plotly/validators/box/_legendgrouptitle.py plotly/validators/box/_legendrank.py plotly/validators/box/_legendwidth.py plotly/validators/box/_line.py plotly/validators/box/_lowerfence.py plotly/validators/box/_lowerfencesrc.py plotly/validators/box/_marker.py plotly/validators/box/_mean.py plotly/validators/box/_meansrc.py plotly/validators/box/_median.py plotly/validators/box/_mediansrc.py plotly/validators/box/_meta.py plotly/validators/box/_metasrc.py plotly/validators/box/_name.py plotly/validators/box/_notched.py plotly/validators/box/_notchspan.py plotly/validators/box/_notchspansrc.py plotly/validators/box/_notchwidth.py plotly/validators/box/_offsetgroup.py plotly/validators/box/_opacity.py plotly/validators/box/_orientation.py plotly/validators/box/_pointpos.py plotly/validators/box/_q1.py plotly/validators/box/_q1src.py plotly/validators/box/_q3.py plotly/validators/box/_q3src.py plotly/validators/box/_quartilemethod.py plotly/validators/box/_sd.py plotly/validators/box/_sdsrc.py plotly/validators/box/_selected.py plotly/validators/box/_selectedpoints.py plotly/validators/box/_showlegend.py plotly/validators/box/_stream.py plotly/validators/box/_text.py plotly/validators/box/_textsrc.py plotly/validators/box/_uid.py plotly/validators/box/_uirevision.py plotly/validators/box/_unselected.py plotly/validators/box/_upperfence.py plotly/validators/box/_upperfencesrc.py plotly/validators/box/_visible.py plotly/validators/box/_whiskerwidth.py plotly/validators/box/_width.py plotly/validators/box/_x.py plotly/validators/box/_x0.py plotly/validators/box/_xaxis.py plotly/validators/box/_xcalendar.py plotly/validators/box/_xhoverformat.py plotly/validators/box/_xperiod.py plotly/validators/box/_xperiod0.py plotly/validators/box/_xperiodalignment.py plotly/validators/box/_xsrc.py plotly/validators/box/_y.py plotly/validators/box/_y0.py plotly/validators/box/_yaxis.py plotly/validators/box/_ycalendar.py plotly/validators/box/_yhoverformat.py plotly/validators/box/_yperiod.py plotly/validators/box/_yperiod0.py plotly/validators/box/_yperiodalignment.py plotly/validators/box/_ysrc.py plotly/validators/box/hoverlabel/__init__.py plotly/validators/box/hoverlabel/_align.py plotly/validators/box/hoverlabel/_alignsrc.py plotly/validators/box/hoverlabel/_bgcolor.py plotly/validators/box/hoverlabel/_bgcolorsrc.py plotly/validators/box/hoverlabel/_bordercolor.py plotly/validators/box/hoverlabel/_bordercolorsrc.py plotly/validators/box/hoverlabel/_font.py plotly/validators/box/hoverlabel/_namelength.py plotly/validators/box/hoverlabel/_namelengthsrc.py plotly/validators/box/hoverlabel/font/__init__.py plotly/validators/box/hoverlabel/font/_color.py plotly/validators/box/hoverlabel/font/_colorsrc.py plotly/validators/box/hoverlabel/font/_family.py plotly/validators/box/hoverlabel/font/_familysrc.py plotly/validators/box/hoverlabel/font/_size.py plotly/validators/box/hoverlabel/font/_sizesrc.py plotly/validators/box/legendgrouptitle/__init__.py plotly/validators/box/legendgrouptitle/_font.py plotly/validators/box/legendgrouptitle/_text.py plotly/validators/box/legendgrouptitle/font/__init__.py plotly/validators/box/legendgrouptitle/font/_color.py plotly/validators/box/legendgrouptitle/font/_family.py plotly/validators/box/legendgrouptitle/font/_size.py plotly/validators/box/line/__init__.py plotly/validators/box/line/_color.py plotly/validators/box/line/_width.py plotly/validators/box/marker/__init__.py plotly/validators/box/marker/_angle.py plotly/validators/box/marker/_color.py plotly/validators/box/marker/_line.py plotly/validators/box/marker/_opacity.py plotly/validators/box/marker/_outliercolor.py plotly/validators/box/marker/_size.py plotly/validators/box/marker/_symbol.py plotly/validators/box/marker/line/__init__.py plotly/validators/box/marker/line/_color.py plotly/validators/box/marker/line/_outliercolor.py plotly/validators/box/marker/line/_outlierwidth.py plotly/validators/box/marker/line/_width.py plotly/validators/box/selected/__init__.py plotly/validators/box/selected/_marker.py plotly/validators/box/selected/marker/__init__.py plotly/validators/box/selected/marker/_color.py plotly/validators/box/selected/marker/_opacity.py plotly/validators/box/selected/marker/_size.py plotly/validators/box/stream/__init__.py plotly/validators/box/stream/_maxpoints.py plotly/validators/box/stream/_token.py plotly/validators/box/unselected/__init__.py plotly/validators/box/unselected/_marker.py plotly/validators/box/unselected/marker/__init__.py plotly/validators/box/unselected/marker/_color.py plotly/validators/box/unselected/marker/_opacity.py plotly/validators/box/unselected/marker/_size.py plotly/validators/candlestick/__init__.py plotly/validators/candlestick/_close.py plotly/validators/candlestick/_closesrc.py plotly/validators/candlestick/_customdata.py plotly/validators/candlestick/_customdatasrc.py plotly/validators/candlestick/_decreasing.py plotly/validators/candlestick/_high.py plotly/validators/candlestick/_highsrc.py plotly/validators/candlestick/_hoverinfo.py plotly/validators/candlestick/_hoverinfosrc.py plotly/validators/candlestick/_hoverlabel.py plotly/validators/candlestick/_hovertext.py plotly/validators/candlestick/_hovertextsrc.py plotly/validators/candlestick/_ids.py plotly/validators/candlestick/_idssrc.py plotly/validators/candlestick/_increasing.py plotly/validators/candlestick/_legend.py plotly/validators/candlestick/_legendgroup.py plotly/validators/candlestick/_legendgrouptitle.py plotly/validators/candlestick/_legendrank.py plotly/validators/candlestick/_legendwidth.py plotly/validators/candlestick/_line.py plotly/validators/candlestick/_low.py plotly/validators/candlestick/_lowsrc.py plotly/validators/candlestick/_meta.py plotly/validators/candlestick/_metasrc.py plotly/validators/candlestick/_name.py plotly/validators/candlestick/_opacity.py plotly/validators/candlestick/_open.py plotly/validators/candlestick/_opensrc.py plotly/validators/candlestick/_selectedpoints.py plotly/validators/candlestick/_showlegend.py plotly/validators/candlestick/_stream.py plotly/validators/candlestick/_text.py plotly/validators/candlestick/_textsrc.py plotly/validators/candlestick/_uid.py plotly/validators/candlestick/_uirevision.py plotly/validators/candlestick/_visible.py plotly/validators/candlestick/_whiskerwidth.py plotly/validators/candlestick/_x.py plotly/validators/candlestick/_xaxis.py plotly/validators/candlestick/_xcalendar.py plotly/validators/candlestick/_xhoverformat.py plotly/validators/candlestick/_xperiod.py plotly/validators/candlestick/_xperiod0.py plotly/validators/candlestick/_xperiodalignment.py plotly/validators/candlestick/_xsrc.py plotly/validators/candlestick/_yaxis.py plotly/validators/candlestick/_yhoverformat.py plotly/validators/candlestick/decreasing/__init__.py plotly/validators/candlestick/decreasing/_fillcolor.py plotly/validators/candlestick/decreasing/_line.py plotly/validators/candlestick/decreasing/line/__init__.py plotly/validators/candlestick/decreasing/line/_color.py plotly/validators/candlestick/decreasing/line/_width.py plotly/validators/candlestick/hoverlabel/__init__.py plotly/validators/candlestick/hoverlabel/_align.py plotly/validators/candlestick/hoverlabel/_alignsrc.py plotly/validators/candlestick/hoverlabel/_bgcolor.py plotly/validators/candlestick/hoverlabel/_bgcolorsrc.py plotly/validators/candlestick/hoverlabel/_bordercolor.py plotly/validators/candlestick/hoverlabel/_bordercolorsrc.py plotly/validators/candlestick/hoverlabel/_font.py plotly/validators/candlestick/hoverlabel/_namelength.py plotly/validators/candlestick/hoverlabel/_namelengthsrc.py plotly/validators/candlestick/hoverlabel/_split.py plotly/validators/candlestick/hoverlabel/font/__init__.py plotly/validators/candlestick/hoverlabel/font/_color.py plotly/validators/candlestick/hoverlabel/font/_colorsrc.py plotly/validators/candlestick/hoverlabel/font/_family.py plotly/validators/candlestick/hoverlabel/font/_familysrc.py plotly/validators/candlestick/hoverlabel/font/_size.py plotly/validators/candlestick/hoverlabel/font/_sizesrc.py plotly/validators/candlestick/increasing/__init__.py plotly/validators/candlestick/increasing/_fillcolor.py plotly/validators/candlestick/increasing/_line.py plotly/validators/candlestick/increasing/line/__init__.py plotly/validators/candlestick/increasing/line/_color.py plotly/validators/candlestick/increasing/line/_width.py plotly/validators/candlestick/legendgrouptitle/__init__.py plotly/validators/candlestick/legendgrouptitle/_font.py plotly/validators/candlestick/legendgrouptitle/_text.py plotly/validators/candlestick/legendgrouptitle/font/__init__.py plotly/validators/candlestick/legendgrouptitle/font/_color.py plotly/validators/candlestick/legendgrouptitle/font/_family.py plotly/validators/candlestick/legendgrouptitle/font/_size.py plotly/validators/candlestick/line/__init__.py plotly/validators/candlestick/line/_width.py plotly/validators/candlestick/stream/__init__.py plotly/validators/candlestick/stream/_maxpoints.py plotly/validators/candlestick/stream/_token.py plotly/validators/carpet/__init__.py plotly/validators/carpet/_a.py plotly/validators/carpet/_a0.py plotly/validators/carpet/_aaxis.py plotly/validators/carpet/_asrc.py plotly/validators/carpet/_b.py plotly/validators/carpet/_b0.py plotly/validators/carpet/_baxis.py plotly/validators/carpet/_bsrc.py plotly/validators/carpet/_carpet.py plotly/validators/carpet/_cheaterslope.py plotly/validators/carpet/_color.py plotly/validators/carpet/_customdata.py plotly/validators/carpet/_customdatasrc.py plotly/validators/carpet/_da.py plotly/validators/carpet/_db.py plotly/validators/carpet/_font.py plotly/validators/carpet/_ids.py plotly/validators/carpet/_idssrc.py plotly/validators/carpet/_legend.py plotly/validators/carpet/_legendgrouptitle.py plotly/validators/carpet/_legendrank.py plotly/validators/carpet/_legendwidth.py plotly/validators/carpet/_meta.py plotly/validators/carpet/_metasrc.py plotly/validators/carpet/_name.py plotly/validators/carpet/_opacity.py plotly/validators/carpet/_stream.py plotly/validators/carpet/_uid.py plotly/validators/carpet/_uirevision.py plotly/validators/carpet/_visible.py plotly/validators/carpet/_x.py plotly/validators/carpet/_xaxis.py plotly/validators/carpet/_xsrc.py plotly/validators/carpet/_y.py plotly/validators/carpet/_yaxis.py plotly/validators/carpet/_ysrc.py plotly/validators/carpet/aaxis/__init__.py plotly/validators/carpet/aaxis/_arraydtick.py plotly/validators/carpet/aaxis/_arraytick0.py plotly/validators/carpet/aaxis/_autorange.py plotly/validators/carpet/aaxis/_autotypenumbers.py plotly/validators/carpet/aaxis/_categoryarray.py plotly/validators/carpet/aaxis/_categoryarraysrc.py plotly/validators/carpet/aaxis/_categoryorder.py plotly/validators/carpet/aaxis/_cheatertype.py plotly/validators/carpet/aaxis/_color.py plotly/validators/carpet/aaxis/_dtick.py plotly/validators/carpet/aaxis/_endline.py plotly/validators/carpet/aaxis/_endlinecolor.py plotly/validators/carpet/aaxis/_endlinewidth.py plotly/validators/carpet/aaxis/_exponentformat.py plotly/validators/carpet/aaxis/_fixedrange.py plotly/validators/carpet/aaxis/_gridcolor.py plotly/validators/carpet/aaxis/_griddash.py plotly/validators/carpet/aaxis/_gridwidth.py plotly/validators/carpet/aaxis/_labelalias.py plotly/validators/carpet/aaxis/_labelpadding.py plotly/validators/carpet/aaxis/_labelprefix.py plotly/validators/carpet/aaxis/_labelsuffix.py plotly/validators/carpet/aaxis/_linecolor.py plotly/validators/carpet/aaxis/_linewidth.py plotly/validators/carpet/aaxis/_minexponent.py plotly/validators/carpet/aaxis/_minorgridcolor.py plotly/validators/carpet/aaxis/_minorgridcount.py plotly/validators/carpet/aaxis/_minorgriddash.py plotly/validators/carpet/aaxis/_minorgridwidth.py plotly/validators/carpet/aaxis/_nticks.py plotly/validators/carpet/aaxis/_range.py plotly/validators/carpet/aaxis/_rangemode.py plotly/validators/carpet/aaxis/_separatethousands.py plotly/validators/carpet/aaxis/_showexponent.py plotly/validators/carpet/aaxis/_showgrid.py plotly/validators/carpet/aaxis/_showline.py plotly/validators/carpet/aaxis/_showticklabels.py plotly/validators/carpet/aaxis/_showtickprefix.py plotly/validators/carpet/aaxis/_showticksuffix.py plotly/validators/carpet/aaxis/_smoothing.py plotly/validators/carpet/aaxis/_startline.py plotly/validators/carpet/aaxis/_startlinecolor.py plotly/validators/carpet/aaxis/_startlinewidth.py plotly/validators/carpet/aaxis/_tick0.py plotly/validators/carpet/aaxis/_tickangle.py plotly/validators/carpet/aaxis/_tickfont.py plotly/validators/carpet/aaxis/_tickformat.py plotly/validators/carpet/aaxis/_tickformatstopdefaults.py plotly/validators/carpet/aaxis/_tickformatstops.py plotly/validators/carpet/aaxis/_tickmode.py plotly/validators/carpet/aaxis/_tickprefix.py plotly/validators/carpet/aaxis/_ticksuffix.py plotly/validators/carpet/aaxis/_ticktext.py plotly/validators/carpet/aaxis/_ticktextsrc.py plotly/validators/carpet/aaxis/_tickvals.py plotly/validators/carpet/aaxis/_tickvalssrc.py plotly/validators/carpet/aaxis/_title.py plotly/validators/carpet/aaxis/_type.py plotly/validators/carpet/aaxis/tickfont/__init__.py plotly/validators/carpet/aaxis/tickfont/_color.py plotly/validators/carpet/aaxis/tickfont/_family.py plotly/validators/carpet/aaxis/tickfont/_size.py plotly/validators/carpet/aaxis/tickformatstop/__init__.py plotly/validators/carpet/aaxis/tickformatstop/_dtickrange.py plotly/validators/carpet/aaxis/tickformatstop/_enabled.py plotly/validators/carpet/aaxis/tickformatstop/_name.py plotly/validators/carpet/aaxis/tickformatstop/_templateitemname.py plotly/validators/carpet/aaxis/tickformatstop/_value.py plotly/validators/carpet/aaxis/title/__init__.py plotly/validators/carpet/aaxis/title/_font.py plotly/validators/carpet/aaxis/title/_offset.py plotly/validators/carpet/aaxis/title/_text.py plotly/validators/carpet/aaxis/title/font/__init__.py plotly/validators/carpet/aaxis/title/font/_color.py plotly/validators/carpet/aaxis/title/font/_family.py plotly/validators/carpet/aaxis/title/font/_size.py plotly/validators/carpet/baxis/__init__.py plotly/validators/carpet/baxis/_arraydtick.py plotly/validators/carpet/baxis/_arraytick0.py plotly/validators/carpet/baxis/_autorange.py plotly/validators/carpet/baxis/_autotypenumbers.py plotly/validators/carpet/baxis/_categoryarray.py plotly/validators/carpet/baxis/_categoryarraysrc.py plotly/validators/carpet/baxis/_categoryorder.py plotly/validators/carpet/baxis/_cheatertype.py plotly/validators/carpet/baxis/_color.py plotly/validators/carpet/baxis/_dtick.py plotly/validators/carpet/baxis/_endline.py plotly/validators/carpet/baxis/_endlinecolor.py plotly/validators/carpet/baxis/_endlinewidth.py plotly/validators/carpet/baxis/_exponentformat.py plotly/validators/carpet/baxis/_fixedrange.py plotly/validators/carpet/baxis/_gridcolor.py plotly/validators/carpet/baxis/_griddash.py plotly/validators/carpet/baxis/_gridwidth.py plotly/validators/carpet/baxis/_labelalias.py plotly/validators/carpet/baxis/_labelpadding.py plotly/validators/carpet/baxis/_labelprefix.py plotly/validators/carpet/baxis/_labelsuffix.py plotly/validators/carpet/baxis/_linecolor.py plotly/validators/carpet/baxis/_linewidth.py plotly/validators/carpet/baxis/_minexponent.py plotly/validators/carpet/baxis/_minorgridcolor.py plotly/validators/carpet/baxis/_minorgridcount.py plotly/validators/carpet/baxis/_minorgriddash.py plotly/validators/carpet/baxis/_minorgridwidth.py plotly/validators/carpet/baxis/_nticks.py plotly/validators/carpet/baxis/_range.py plotly/validators/carpet/baxis/_rangemode.py plotly/validators/carpet/baxis/_separatethousands.py plotly/validators/carpet/baxis/_showexponent.py plotly/validators/carpet/baxis/_showgrid.py plotly/validators/carpet/baxis/_showline.py plotly/validators/carpet/baxis/_showticklabels.py plotly/validators/carpet/baxis/_showtickprefix.py plotly/validators/carpet/baxis/_showticksuffix.py plotly/validators/carpet/baxis/_smoothing.py plotly/validators/carpet/baxis/_startline.py plotly/validators/carpet/baxis/_startlinecolor.py plotly/validators/carpet/baxis/_startlinewidth.py plotly/validators/carpet/baxis/_tick0.py plotly/validators/carpet/baxis/_tickangle.py plotly/validators/carpet/baxis/_tickfont.py plotly/validators/carpet/baxis/_tickformat.py plotly/validators/carpet/baxis/_tickformatstopdefaults.py plotly/validators/carpet/baxis/_tickformatstops.py plotly/validators/carpet/baxis/_tickmode.py plotly/validators/carpet/baxis/_tickprefix.py plotly/validators/carpet/baxis/_ticksuffix.py plotly/validators/carpet/baxis/_ticktext.py plotly/validators/carpet/baxis/_ticktextsrc.py plotly/validators/carpet/baxis/_tickvals.py plotly/validators/carpet/baxis/_tickvalssrc.py plotly/validators/carpet/baxis/_title.py plotly/validators/carpet/baxis/_type.py plotly/validators/carpet/baxis/tickfont/__init__.py plotly/validators/carpet/baxis/tickfont/_color.py plotly/validators/carpet/baxis/tickfont/_family.py plotly/validators/carpet/baxis/tickfont/_size.py plotly/validators/carpet/baxis/tickformatstop/__init__.py plotly/validators/carpet/baxis/tickformatstop/_dtickrange.py plotly/validators/carpet/baxis/tickformatstop/_enabled.py plotly/validators/carpet/baxis/tickformatstop/_name.py plotly/validators/carpet/baxis/tickformatstop/_templateitemname.py plotly/validators/carpet/baxis/tickformatstop/_value.py plotly/validators/carpet/baxis/title/__init__.py plotly/validators/carpet/baxis/title/_font.py plotly/validators/carpet/baxis/title/_offset.py plotly/validators/carpet/baxis/title/_text.py plotly/validators/carpet/baxis/title/font/__init__.py plotly/validators/carpet/baxis/title/font/_color.py plotly/validators/carpet/baxis/title/font/_family.py plotly/validators/carpet/baxis/title/font/_size.py plotly/validators/carpet/font/__init__.py plotly/validators/carpet/font/_color.py plotly/validators/carpet/font/_family.py plotly/validators/carpet/font/_size.py plotly/validators/carpet/legendgrouptitle/__init__.py plotly/validators/carpet/legendgrouptitle/_font.py plotly/validators/carpet/legendgrouptitle/_text.py plotly/validators/carpet/legendgrouptitle/font/__init__.py plotly/validators/carpet/legendgrouptitle/font/_color.py plotly/validators/carpet/legendgrouptitle/font/_family.py plotly/validators/carpet/legendgrouptitle/font/_size.py plotly/validators/carpet/stream/__init__.py plotly/validators/carpet/stream/_maxpoints.py plotly/validators/carpet/stream/_token.py plotly/validators/choropleth/__init__.py plotly/validators/choropleth/_autocolorscale.py plotly/validators/choropleth/_coloraxis.py plotly/validators/choropleth/_colorbar.py plotly/validators/choropleth/_colorscale.py plotly/validators/choropleth/_customdata.py plotly/validators/choropleth/_customdatasrc.py plotly/validators/choropleth/_featureidkey.py plotly/validators/choropleth/_geo.py plotly/validators/choropleth/_geojson.py plotly/validators/choropleth/_hoverinfo.py plotly/validators/choropleth/_hoverinfosrc.py plotly/validators/choropleth/_hoverlabel.py plotly/validators/choropleth/_hovertemplate.py plotly/validators/choropleth/_hovertemplatesrc.py plotly/validators/choropleth/_hovertext.py plotly/validators/choropleth/_hovertextsrc.py plotly/validators/choropleth/_ids.py plotly/validators/choropleth/_idssrc.py plotly/validators/choropleth/_legend.py plotly/validators/choropleth/_legendgroup.py plotly/validators/choropleth/_legendgrouptitle.py plotly/validators/choropleth/_legendrank.py plotly/validators/choropleth/_legendwidth.py plotly/validators/choropleth/_locationmode.py plotly/validators/choropleth/_locations.py plotly/validators/choropleth/_locationssrc.py plotly/validators/choropleth/_marker.py plotly/validators/choropleth/_meta.py plotly/validators/choropleth/_metasrc.py plotly/validators/choropleth/_name.py plotly/validators/choropleth/_reversescale.py plotly/validators/choropleth/_selected.py plotly/validators/choropleth/_selectedpoints.py plotly/validators/choropleth/_showlegend.py plotly/validators/choropleth/_showscale.py plotly/validators/choropleth/_stream.py plotly/validators/choropleth/_text.py plotly/validators/choropleth/_textsrc.py plotly/validators/choropleth/_uid.py plotly/validators/choropleth/_uirevision.py plotly/validators/choropleth/_unselected.py plotly/validators/choropleth/_visible.py plotly/validators/choropleth/_z.py plotly/validators/choropleth/_zauto.py plotly/validators/choropleth/_zmax.py plotly/validators/choropleth/_zmid.py plotly/validators/choropleth/_zmin.py plotly/validators/choropleth/_zsrc.py plotly/validators/choropleth/colorbar/__init__.py plotly/validators/choropleth/colorbar/_bgcolor.py plotly/validators/choropleth/colorbar/_bordercolor.py plotly/validators/choropleth/colorbar/_borderwidth.py plotly/validators/choropleth/colorbar/_dtick.py plotly/validators/choropleth/colorbar/_exponentformat.py plotly/validators/choropleth/colorbar/_labelalias.py plotly/validators/choropleth/colorbar/_len.py plotly/validators/choropleth/colorbar/_lenmode.py plotly/validators/choropleth/colorbar/_minexponent.py plotly/validators/choropleth/colorbar/_nticks.py plotly/validators/choropleth/colorbar/_orientation.py plotly/validators/choropleth/colorbar/_outlinecolor.py plotly/validators/choropleth/colorbar/_outlinewidth.py plotly/validators/choropleth/colorbar/_separatethousands.py plotly/validators/choropleth/colorbar/_showexponent.py plotly/validators/choropleth/colorbar/_showticklabels.py plotly/validators/choropleth/colorbar/_showtickprefix.py plotly/validators/choropleth/colorbar/_showticksuffix.py plotly/validators/choropleth/colorbar/_thickness.py plotly/validators/choropleth/colorbar/_thicknessmode.py plotly/validators/choropleth/colorbar/_tick0.py plotly/validators/choropleth/colorbar/_tickangle.py plotly/validators/choropleth/colorbar/_tickcolor.py plotly/validators/choropleth/colorbar/_tickfont.py plotly/validators/choropleth/colorbar/_tickformat.py plotly/validators/choropleth/colorbar/_tickformatstopdefaults.py plotly/validators/choropleth/colorbar/_tickformatstops.py plotly/validators/choropleth/colorbar/_ticklabeloverflow.py plotly/validators/choropleth/colorbar/_ticklabelposition.py plotly/validators/choropleth/colorbar/_ticklabelstep.py plotly/validators/choropleth/colorbar/_ticklen.py plotly/validators/choropleth/colorbar/_tickmode.py plotly/validators/choropleth/colorbar/_tickprefix.py plotly/validators/choropleth/colorbar/_ticks.py plotly/validators/choropleth/colorbar/_ticksuffix.py plotly/validators/choropleth/colorbar/_ticktext.py plotly/validators/choropleth/colorbar/_ticktextsrc.py plotly/validators/choropleth/colorbar/_tickvals.py plotly/validators/choropleth/colorbar/_tickvalssrc.py plotly/validators/choropleth/colorbar/_tickwidth.py plotly/validators/choropleth/colorbar/_title.py plotly/validators/choropleth/colorbar/_x.py plotly/validators/choropleth/colorbar/_xanchor.py plotly/validators/choropleth/colorbar/_xpad.py plotly/validators/choropleth/colorbar/_xref.py plotly/validators/choropleth/colorbar/_y.py plotly/validators/choropleth/colorbar/_yanchor.py plotly/validators/choropleth/colorbar/_ypad.py plotly/validators/choropleth/colorbar/_yref.py plotly/validators/choropleth/colorbar/tickfont/__init__.py plotly/validators/choropleth/colorbar/tickfont/_color.py plotly/validators/choropleth/colorbar/tickfont/_family.py plotly/validators/choropleth/colorbar/tickfont/_size.py plotly/validators/choropleth/colorbar/tickformatstop/__init__.py plotly/validators/choropleth/colorbar/tickformatstop/_dtickrange.py plotly/validators/choropleth/colorbar/tickformatstop/_enabled.py plotly/validators/choropleth/colorbar/tickformatstop/_name.py plotly/validators/choropleth/colorbar/tickformatstop/_templateitemname.py plotly/validators/choropleth/colorbar/tickformatstop/_value.py plotly/validators/choropleth/colorbar/title/__init__.py plotly/validators/choropleth/colorbar/title/_font.py plotly/validators/choropleth/colorbar/title/_side.py plotly/validators/choropleth/colorbar/title/_text.py plotly/validators/choropleth/colorbar/title/font/__init__.py plotly/validators/choropleth/colorbar/title/font/_color.py plotly/validators/choropleth/colorbar/title/font/_family.py plotly/validators/choropleth/colorbar/title/font/_size.py plotly/validators/choropleth/hoverlabel/__init__.py plotly/validators/choropleth/hoverlabel/_align.py plotly/validators/choropleth/hoverlabel/_alignsrc.py plotly/validators/choropleth/hoverlabel/_bgcolor.py plotly/validators/choropleth/hoverlabel/_bgcolorsrc.py plotly/validators/choropleth/hoverlabel/_bordercolor.py plotly/validators/choropleth/hoverlabel/_bordercolorsrc.py plotly/validators/choropleth/hoverlabel/_font.py plotly/validators/choropleth/hoverlabel/_namelength.py plotly/validators/choropleth/hoverlabel/_namelengthsrc.py plotly/validators/choropleth/hoverlabel/font/__init__.py plotly/validators/choropleth/hoverlabel/font/_color.py plotly/validators/choropleth/hoverlabel/font/_colorsrc.py plotly/validators/choropleth/hoverlabel/font/_family.py plotly/validators/choropleth/hoverlabel/font/_familysrc.py plotly/validators/choropleth/hoverlabel/font/_size.py plotly/validators/choropleth/hoverlabel/font/_sizesrc.py plotly/validators/choropleth/legendgrouptitle/__init__.py plotly/validators/choropleth/legendgrouptitle/_font.py plotly/validators/choropleth/legendgrouptitle/_text.py plotly/validators/choropleth/legendgrouptitle/font/__init__.py plotly/validators/choropleth/legendgrouptitle/font/_color.py plotly/validators/choropleth/legendgrouptitle/font/_family.py plotly/validators/choropleth/legendgrouptitle/font/_size.py plotly/validators/choropleth/marker/__init__.py plotly/validators/choropleth/marker/_line.py plotly/validators/choropleth/marker/_opacity.py plotly/validators/choropleth/marker/_opacitysrc.py plotly/validators/choropleth/marker/line/__init__.py plotly/validators/choropleth/marker/line/_color.py plotly/validators/choropleth/marker/line/_colorsrc.py plotly/validators/choropleth/marker/line/_width.py plotly/validators/choropleth/marker/line/_widthsrc.py plotly/validators/choropleth/selected/__init__.py plotly/validators/choropleth/selected/_marker.py plotly/validators/choropleth/selected/marker/__init__.py plotly/validators/choropleth/selected/marker/_opacity.py plotly/validators/choropleth/stream/__init__.py plotly/validators/choropleth/stream/_maxpoints.py plotly/validators/choropleth/stream/_token.py plotly/validators/choropleth/unselected/__init__.py plotly/validators/choropleth/unselected/_marker.py plotly/validators/choropleth/unselected/marker/__init__.py plotly/validators/choropleth/unselected/marker/_opacity.py plotly/validators/choroplethmapbox/__init__.py plotly/validators/choroplethmapbox/_autocolorscale.py plotly/validators/choroplethmapbox/_below.py plotly/validators/choroplethmapbox/_coloraxis.py plotly/validators/choroplethmapbox/_colorbar.py plotly/validators/choroplethmapbox/_colorscale.py plotly/validators/choroplethmapbox/_customdata.py plotly/validators/choroplethmapbox/_customdatasrc.py plotly/validators/choroplethmapbox/_featureidkey.py plotly/validators/choroplethmapbox/_geojson.py plotly/validators/choroplethmapbox/_hoverinfo.py plotly/validators/choroplethmapbox/_hoverinfosrc.py plotly/validators/choroplethmapbox/_hoverlabel.py plotly/validators/choroplethmapbox/_hovertemplate.py plotly/validators/choroplethmapbox/_hovertemplatesrc.py plotly/validators/choroplethmapbox/_hovertext.py plotly/validators/choroplethmapbox/_hovertextsrc.py plotly/validators/choroplethmapbox/_ids.py plotly/validators/choroplethmapbox/_idssrc.py plotly/validators/choroplethmapbox/_legend.py plotly/validators/choroplethmapbox/_legendgroup.py plotly/validators/choroplethmapbox/_legendgrouptitle.py plotly/validators/choroplethmapbox/_legendrank.py plotly/validators/choroplethmapbox/_legendwidth.py plotly/validators/choroplethmapbox/_locations.py plotly/validators/choroplethmapbox/_locationssrc.py plotly/validators/choroplethmapbox/_marker.py plotly/validators/choroplethmapbox/_meta.py plotly/validators/choroplethmapbox/_metasrc.py plotly/validators/choroplethmapbox/_name.py plotly/validators/choroplethmapbox/_reversescale.py plotly/validators/choroplethmapbox/_selected.py plotly/validators/choroplethmapbox/_selectedpoints.py plotly/validators/choroplethmapbox/_showlegend.py plotly/validators/choroplethmapbox/_showscale.py plotly/validators/choroplethmapbox/_stream.py plotly/validators/choroplethmapbox/_subplot.py plotly/validators/choroplethmapbox/_text.py plotly/validators/choroplethmapbox/_textsrc.py plotly/validators/choroplethmapbox/_uid.py plotly/validators/choroplethmapbox/_uirevision.py plotly/validators/choroplethmapbox/_unselected.py plotly/validators/choroplethmapbox/_visible.py plotly/validators/choroplethmapbox/_z.py plotly/validators/choroplethmapbox/_zauto.py plotly/validators/choroplethmapbox/_zmax.py plotly/validators/choroplethmapbox/_zmid.py plotly/validators/choroplethmapbox/_zmin.py plotly/validators/choroplethmapbox/_zsrc.py plotly/validators/choroplethmapbox/colorbar/__init__.py plotly/validators/choroplethmapbox/colorbar/_bgcolor.py plotly/validators/choroplethmapbox/colorbar/_bordercolor.py plotly/validators/choroplethmapbox/colorbar/_borderwidth.py plotly/validators/choroplethmapbox/colorbar/_dtick.py plotly/validators/choroplethmapbox/colorbar/_exponentformat.py plotly/validators/choroplethmapbox/colorbar/_labelalias.py plotly/validators/choroplethmapbox/colorbar/_len.py plotly/validators/choroplethmapbox/colorbar/_lenmode.py plotly/validators/choroplethmapbox/colorbar/_minexponent.py plotly/validators/choroplethmapbox/colorbar/_nticks.py plotly/validators/choroplethmapbox/colorbar/_orientation.py plotly/validators/choroplethmapbox/colorbar/_outlinecolor.py plotly/validators/choroplethmapbox/colorbar/_outlinewidth.py plotly/validators/choroplethmapbox/colorbar/_separatethousands.py plotly/validators/choroplethmapbox/colorbar/_showexponent.py plotly/validators/choroplethmapbox/colorbar/_showticklabels.py plotly/validators/choroplethmapbox/colorbar/_showtickprefix.py plotly/validators/choroplethmapbox/colorbar/_showticksuffix.py plotly/validators/choroplethmapbox/colorbar/_thickness.py plotly/validators/choroplethmapbox/colorbar/_thicknessmode.py plotly/validators/choroplethmapbox/colorbar/_tick0.py plotly/validators/choroplethmapbox/colorbar/_tickangle.py plotly/validators/choroplethmapbox/colorbar/_tickcolor.py plotly/validators/choroplethmapbox/colorbar/_tickfont.py plotly/validators/choroplethmapbox/colorbar/_tickformat.py plotly/validators/choroplethmapbox/colorbar/_tickformatstopdefaults.py plotly/validators/choroplethmapbox/colorbar/_tickformatstops.py plotly/validators/choroplethmapbox/colorbar/_ticklabeloverflow.py plotly/validators/choroplethmapbox/colorbar/_ticklabelposition.py plotly/validators/choroplethmapbox/colorbar/_ticklabelstep.py plotly/validators/choroplethmapbox/colorbar/_ticklen.py plotly/validators/choroplethmapbox/colorbar/_tickmode.py plotly/validators/choroplethmapbox/colorbar/_tickprefix.py plotly/validators/choroplethmapbox/colorbar/_ticks.py plotly/validators/choroplethmapbox/colorbar/_ticksuffix.py plotly/validators/choroplethmapbox/colorbar/_ticktext.py plotly/validators/choroplethmapbox/colorbar/_ticktextsrc.py plotly/validators/choroplethmapbox/colorbar/_tickvals.py plotly/validators/choroplethmapbox/colorbar/_tickvalssrc.py plotly/validators/choroplethmapbox/colorbar/_tickwidth.py plotly/validators/choroplethmapbox/colorbar/_title.py plotly/validators/choroplethmapbox/colorbar/_x.py plotly/validators/choroplethmapbox/colorbar/_xanchor.py plotly/validators/choroplethmapbox/colorbar/_xpad.py plotly/validators/choroplethmapbox/colorbar/_xref.py plotly/validators/choroplethmapbox/colorbar/_y.py plotly/validators/choroplethmapbox/colorbar/_yanchor.py plotly/validators/choroplethmapbox/colorbar/_ypad.py plotly/validators/choroplethmapbox/colorbar/_yref.py plotly/validators/choroplethmapbox/colorbar/tickfont/__init__.py plotly/validators/choroplethmapbox/colorbar/tickfont/_color.py plotly/validators/choroplethmapbox/colorbar/tickfont/_family.py plotly/validators/choroplethmapbox/colorbar/tickfont/_size.py plotly/validators/choroplethmapbox/colorbar/tickformatstop/__init__.py plotly/validators/choroplethmapbox/colorbar/tickformatstop/_dtickrange.py plotly/validators/choroplethmapbox/colorbar/tickformatstop/_enabled.py plotly/validators/choroplethmapbox/colorbar/tickformatstop/_name.py plotly/validators/choroplethmapbox/colorbar/tickformatstop/_templateitemname.py plotly/validators/choroplethmapbox/colorbar/tickformatstop/_value.py plotly/validators/choroplethmapbox/colorbar/title/__init__.py plotly/validators/choroplethmapbox/colorbar/title/_font.py plotly/validators/choroplethmapbox/colorbar/title/_side.py plotly/validators/choroplethmapbox/colorbar/title/_text.py plotly/validators/choroplethmapbox/colorbar/title/font/__init__.py plotly/validators/choroplethmapbox/colorbar/title/font/_color.py plotly/validators/choroplethmapbox/colorbar/title/font/_family.py plotly/validators/choroplethmapbox/colorbar/title/font/_size.py plotly/validators/choroplethmapbox/hoverlabel/__init__.py plotly/validators/choroplethmapbox/hoverlabel/_align.py plotly/validators/choroplethmapbox/hoverlabel/_alignsrc.py plotly/validators/choroplethmapbox/hoverlabel/_bgcolor.py plotly/validators/choroplethmapbox/hoverlabel/_bgcolorsrc.py plotly/validators/choroplethmapbox/hoverlabel/_bordercolor.py plotly/validators/choroplethmapbox/hoverlabel/_bordercolorsrc.py plotly/validators/choroplethmapbox/hoverlabel/_font.py plotly/validators/choroplethmapbox/hoverlabel/_namelength.py plotly/validators/choroplethmapbox/hoverlabel/_namelengthsrc.py plotly/validators/choroplethmapbox/hoverlabel/font/__init__.py plotly/validators/choroplethmapbox/hoverlabel/font/_color.py plotly/validators/choroplethmapbox/hoverlabel/font/_colorsrc.py plotly/validators/choroplethmapbox/hoverlabel/font/_family.py plotly/validators/choroplethmapbox/hoverlabel/font/_familysrc.py plotly/validators/choroplethmapbox/hoverlabel/font/_size.py plotly/validators/choroplethmapbox/hoverlabel/font/_sizesrc.py plotly/validators/choroplethmapbox/legendgrouptitle/__init__.py plotly/validators/choroplethmapbox/legendgrouptitle/_font.py plotly/validators/choroplethmapbox/legendgrouptitle/_text.py plotly/validators/choroplethmapbox/legendgrouptitle/font/__init__.py plotly/validators/choroplethmapbox/legendgrouptitle/font/_color.py plotly/validators/choroplethmapbox/legendgrouptitle/font/_family.py plotly/validators/choroplethmapbox/legendgrouptitle/font/_size.py plotly/validators/choroplethmapbox/marker/__init__.py plotly/validators/choroplethmapbox/marker/_line.py plotly/validators/choroplethmapbox/marker/_opacity.py plotly/validators/choroplethmapbox/marker/_opacitysrc.py plotly/validators/choroplethmapbox/marker/line/__init__.py plotly/validators/choroplethmapbox/marker/line/_color.py plotly/validators/choroplethmapbox/marker/line/_colorsrc.py plotly/validators/choroplethmapbox/marker/line/_width.py plotly/validators/choroplethmapbox/marker/line/_widthsrc.py plotly/validators/choroplethmapbox/selected/__init__.py plotly/validators/choroplethmapbox/selected/_marker.py plotly/validators/choroplethmapbox/selected/marker/__init__.py plotly/validators/choroplethmapbox/selected/marker/_opacity.py plotly/validators/choroplethmapbox/stream/__init__.py plotly/validators/choroplethmapbox/stream/_maxpoints.py plotly/validators/choroplethmapbox/stream/_token.py plotly/validators/choroplethmapbox/unselected/__init__.py plotly/validators/choroplethmapbox/unselected/_marker.py plotly/validators/choroplethmapbox/unselected/marker/__init__.py plotly/validators/choroplethmapbox/unselected/marker/_opacity.py plotly/validators/cone/__init__.py plotly/validators/cone/_anchor.py plotly/validators/cone/_autocolorscale.py plotly/validators/cone/_cauto.py plotly/validators/cone/_cmax.py plotly/validators/cone/_cmid.py plotly/validators/cone/_cmin.py plotly/validators/cone/_coloraxis.py plotly/validators/cone/_colorbar.py plotly/validators/cone/_colorscale.py plotly/validators/cone/_customdata.py plotly/validators/cone/_customdatasrc.py plotly/validators/cone/_hoverinfo.py plotly/validators/cone/_hoverinfosrc.py plotly/validators/cone/_hoverlabel.py plotly/validators/cone/_hovertemplate.py plotly/validators/cone/_hovertemplatesrc.py plotly/validators/cone/_hovertext.py plotly/validators/cone/_hovertextsrc.py plotly/validators/cone/_ids.py plotly/validators/cone/_idssrc.py plotly/validators/cone/_legend.py plotly/validators/cone/_legendgroup.py plotly/validators/cone/_legendgrouptitle.py plotly/validators/cone/_legendrank.py plotly/validators/cone/_legendwidth.py plotly/validators/cone/_lighting.py plotly/validators/cone/_lightposition.py plotly/validators/cone/_meta.py plotly/validators/cone/_metasrc.py plotly/validators/cone/_name.py plotly/validators/cone/_opacity.py plotly/validators/cone/_reversescale.py plotly/validators/cone/_scene.py plotly/validators/cone/_showlegend.py plotly/validators/cone/_showscale.py plotly/validators/cone/_sizemode.py plotly/validators/cone/_sizeref.py plotly/validators/cone/_stream.py plotly/validators/cone/_text.py plotly/validators/cone/_textsrc.py plotly/validators/cone/_u.py plotly/validators/cone/_uhoverformat.py plotly/validators/cone/_uid.py plotly/validators/cone/_uirevision.py plotly/validators/cone/_usrc.py plotly/validators/cone/_v.py plotly/validators/cone/_vhoverformat.py plotly/validators/cone/_visible.py plotly/validators/cone/_vsrc.py plotly/validators/cone/_w.py plotly/validators/cone/_whoverformat.py plotly/validators/cone/_wsrc.py plotly/validators/cone/_x.py plotly/validators/cone/_xhoverformat.py plotly/validators/cone/_xsrc.py plotly/validators/cone/_y.py plotly/validators/cone/_yhoverformat.py plotly/validators/cone/_ysrc.py plotly/validators/cone/_z.py plotly/validators/cone/_zhoverformat.py plotly/validators/cone/_zsrc.py plotly/validators/cone/colorbar/__init__.py plotly/validators/cone/colorbar/_bgcolor.py plotly/validators/cone/colorbar/_bordercolor.py plotly/validators/cone/colorbar/_borderwidth.py plotly/validators/cone/colorbar/_dtick.py plotly/validators/cone/colorbar/_exponentformat.py plotly/validators/cone/colorbar/_labelalias.py plotly/validators/cone/colorbar/_len.py plotly/validators/cone/colorbar/_lenmode.py plotly/validators/cone/colorbar/_minexponent.py plotly/validators/cone/colorbar/_nticks.py plotly/validators/cone/colorbar/_orientation.py plotly/validators/cone/colorbar/_outlinecolor.py plotly/validators/cone/colorbar/_outlinewidth.py plotly/validators/cone/colorbar/_separatethousands.py plotly/validators/cone/colorbar/_showexponent.py plotly/validators/cone/colorbar/_showticklabels.py plotly/validators/cone/colorbar/_showtickprefix.py plotly/validators/cone/colorbar/_showticksuffix.py plotly/validators/cone/colorbar/_thickness.py plotly/validators/cone/colorbar/_thicknessmode.py plotly/validators/cone/colorbar/_tick0.py plotly/validators/cone/colorbar/_tickangle.py plotly/validators/cone/colorbar/_tickcolor.py plotly/validators/cone/colorbar/_tickfont.py plotly/validators/cone/colorbar/_tickformat.py plotly/validators/cone/colorbar/_tickformatstopdefaults.py plotly/validators/cone/colorbar/_tickformatstops.py plotly/validators/cone/colorbar/_ticklabeloverflow.py plotly/validators/cone/colorbar/_ticklabelposition.py plotly/validators/cone/colorbar/_ticklabelstep.py plotly/validators/cone/colorbar/_ticklen.py plotly/validators/cone/colorbar/_tickmode.py plotly/validators/cone/colorbar/_tickprefix.py plotly/validators/cone/colorbar/_ticks.py plotly/validators/cone/colorbar/_ticksuffix.py plotly/validators/cone/colorbar/_ticktext.py plotly/validators/cone/colorbar/_ticktextsrc.py plotly/validators/cone/colorbar/_tickvals.py plotly/validators/cone/colorbar/_tickvalssrc.py plotly/validators/cone/colorbar/_tickwidth.py plotly/validators/cone/colorbar/_title.py plotly/validators/cone/colorbar/_x.py plotly/validators/cone/colorbar/_xanchor.py plotly/validators/cone/colorbar/_xpad.py plotly/validators/cone/colorbar/_xref.py plotly/validators/cone/colorbar/_y.py plotly/validators/cone/colorbar/_yanchor.py plotly/validators/cone/colorbar/_ypad.py plotly/validators/cone/colorbar/_yref.py plotly/validators/cone/colorbar/tickfont/__init__.py plotly/validators/cone/colorbar/tickfont/_color.py plotly/validators/cone/colorbar/tickfont/_family.py plotly/validators/cone/colorbar/tickfont/_size.py plotly/validators/cone/colorbar/tickformatstop/__init__.py plotly/validators/cone/colorbar/tickformatstop/_dtickrange.py plotly/validators/cone/colorbar/tickformatstop/_enabled.py plotly/validators/cone/colorbar/tickformatstop/_name.py plotly/validators/cone/colorbar/tickformatstop/_templateitemname.py plotly/validators/cone/colorbar/tickformatstop/_value.py plotly/validators/cone/colorbar/title/__init__.py plotly/validators/cone/colorbar/title/_font.py plotly/validators/cone/colorbar/title/_side.py plotly/validators/cone/colorbar/title/_text.py plotly/validators/cone/colorbar/title/font/__init__.py plotly/validators/cone/colorbar/title/font/_color.py plotly/validators/cone/colorbar/title/font/_family.py plotly/validators/cone/colorbar/title/font/_size.py plotly/validators/cone/hoverlabel/__init__.py plotly/validators/cone/hoverlabel/_align.py plotly/validators/cone/hoverlabel/_alignsrc.py plotly/validators/cone/hoverlabel/_bgcolor.py plotly/validators/cone/hoverlabel/_bgcolorsrc.py plotly/validators/cone/hoverlabel/_bordercolor.py plotly/validators/cone/hoverlabel/_bordercolorsrc.py plotly/validators/cone/hoverlabel/_font.py plotly/validators/cone/hoverlabel/_namelength.py plotly/validators/cone/hoverlabel/_namelengthsrc.py plotly/validators/cone/hoverlabel/font/__init__.py plotly/validators/cone/hoverlabel/font/_color.py plotly/validators/cone/hoverlabel/font/_colorsrc.py plotly/validators/cone/hoverlabel/font/_family.py plotly/validators/cone/hoverlabel/font/_familysrc.py plotly/validators/cone/hoverlabel/font/_size.py plotly/validators/cone/hoverlabel/font/_sizesrc.py plotly/validators/cone/legendgrouptitle/__init__.py plotly/validators/cone/legendgrouptitle/_font.py plotly/validators/cone/legendgrouptitle/_text.py plotly/validators/cone/legendgrouptitle/font/__init__.py plotly/validators/cone/legendgrouptitle/font/_color.py plotly/validators/cone/legendgrouptitle/font/_family.py plotly/validators/cone/legendgrouptitle/font/_size.py plotly/validators/cone/lighting/__init__.py plotly/validators/cone/lighting/_ambient.py plotly/validators/cone/lighting/_diffuse.py plotly/validators/cone/lighting/_facenormalsepsilon.py plotly/validators/cone/lighting/_fresnel.py plotly/validators/cone/lighting/_roughness.py plotly/validators/cone/lighting/_specular.py plotly/validators/cone/lighting/_vertexnormalsepsilon.py plotly/validators/cone/lightposition/__init__.py plotly/validators/cone/lightposition/_x.py plotly/validators/cone/lightposition/_y.py plotly/validators/cone/lightposition/_z.py plotly/validators/cone/stream/__init__.py plotly/validators/cone/stream/_maxpoints.py plotly/validators/cone/stream/_token.py plotly/validators/contour/__init__.py plotly/validators/contour/_autocolorscale.py plotly/validators/contour/_autocontour.py plotly/validators/contour/_coloraxis.py plotly/validators/contour/_colorbar.py plotly/validators/contour/_colorscale.py plotly/validators/contour/_connectgaps.py plotly/validators/contour/_contours.py plotly/validators/contour/_customdata.py plotly/validators/contour/_customdatasrc.py plotly/validators/contour/_dx.py plotly/validators/contour/_dy.py plotly/validators/contour/_fillcolor.py plotly/validators/contour/_hoverinfo.py plotly/validators/contour/_hoverinfosrc.py plotly/validators/contour/_hoverlabel.py plotly/validators/contour/_hoverongaps.py plotly/validators/contour/_hovertemplate.py plotly/validators/contour/_hovertemplatesrc.py plotly/validators/contour/_hovertext.py plotly/validators/contour/_hovertextsrc.py plotly/validators/contour/_ids.py plotly/validators/contour/_idssrc.py plotly/validators/contour/_legend.py plotly/validators/contour/_legendgroup.py plotly/validators/contour/_legendgrouptitle.py plotly/validators/contour/_legendrank.py plotly/validators/contour/_legendwidth.py plotly/validators/contour/_line.py plotly/validators/contour/_meta.py plotly/validators/contour/_metasrc.py plotly/validators/contour/_name.py plotly/validators/contour/_ncontours.py plotly/validators/contour/_opacity.py plotly/validators/contour/_reversescale.py plotly/validators/contour/_showlegend.py plotly/validators/contour/_showscale.py plotly/validators/contour/_stream.py plotly/validators/contour/_text.py plotly/validators/contour/_textfont.py plotly/validators/contour/_textsrc.py plotly/validators/contour/_texttemplate.py plotly/validators/contour/_transpose.py plotly/validators/contour/_uid.py plotly/validators/contour/_uirevision.py plotly/validators/contour/_visible.py plotly/validators/contour/_x.py plotly/validators/contour/_x0.py plotly/validators/contour/_xaxis.py plotly/validators/contour/_xcalendar.py plotly/validators/contour/_xhoverformat.py plotly/validators/contour/_xperiod.py plotly/validators/contour/_xperiod0.py plotly/validators/contour/_xperiodalignment.py plotly/validators/contour/_xsrc.py plotly/validators/contour/_xtype.py plotly/validators/contour/_y.py plotly/validators/contour/_y0.py plotly/validators/contour/_yaxis.py plotly/validators/contour/_ycalendar.py plotly/validators/contour/_yhoverformat.py plotly/validators/contour/_yperiod.py plotly/validators/contour/_yperiod0.py plotly/validators/contour/_yperiodalignment.py plotly/validators/contour/_ysrc.py plotly/validators/contour/_ytype.py plotly/validators/contour/_z.py plotly/validators/contour/_zauto.py plotly/validators/contour/_zhoverformat.py plotly/validators/contour/_zmax.py plotly/validators/contour/_zmid.py plotly/validators/contour/_zmin.py plotly/validators/contour/_zsrc.py plotly/validators/contour/colorbar/__init__.py plotly/validators/contour/colorbar/_bgcolor.py plotly/validators/contour/colorbar/_bordercolor.py plotly/validators/contour/colorbar/_borderwidth.py plotly/validators/contour/colorbar/_dtick.py plotly/validators/contour/colorbar/_exponentformat.py plotly/validators/contour/colorbar/_labelalias.py plotly/validators/contour/colorbar/_len.py plotly/validators/contour/colorbar/_lenmode.py plotly/validators/contour/colorbar/_minexponent.py plotly/validators/contour/colorbar/_nticks.py plotly/validators/contour/colorbar/_orientation.py plotly/validators/contour/colorbar/_outlinecolor.py plotly/validators/contour/colorbar/_outlinewidth.py plotly/validators/contour/colorbar/_separatethousands.py plotly/validators/contour/colorbar/_showexponent.py plotly/validators/contour/colorbar/_showticklabels.py plotly/validators/contour/colorbar/_showtickprefix.py plotly/validators/contour/colorbar/_showticksuffix.py plotly/validators/contour/colorbar/_thickness.py plotly/validators/contour/colorbar/_thicknessmode.py plotly/validators/contour/colorbar/_tick0.py plotly/validators/contour/colorbar/_tickangle.py plotly/validators/contour/colorbar/_tickcolor.py plotly/validators/contour/colorbar/_tickfont.py plotly/validators/contour/colorbar/_tickformat.py plotly/validators/contour/colorbar/_tickformatstopdefaults.py plotly/validators/contour/colorbar/_tickformatstops.py plotly/validators/contour/colorbar/_ticklabeloverflow.py plotly/validators/contour/colorbar/_ticklabelposition.py plotly/validators/contour/colorbar/_ticklabelstep.py plotly/validators/contour/colorbar/_ticklen.py plotly/validators/contour/colorbar/_tickmode.py plotly/validators/contour/colorbar/_tickprefix.py plotly/validators/contour/colorbar/_ticks.py plotly/validators/contour/colorbar/_ticksuffix.py plotly/validators/contour/colorbar/_ticktext.py plotly/validators/contour/colorbar/_ticktextsrc.py plotly/validators/contour/colorbar/_tickvals.py plotly/validators/contour/colorbar/_tickvalssrc.py plotly/validators/contour/colorbar/_tickwidth.py plotly/validators/contour/colorbar/_title.py plotly/validators/contour/colorbar/_x.py plotly/validators/contour/colorbar/_xanchor.py plotly/validators/contour/colorbar/_xpad.py plotly/validators/contour/colorbar/_xref.py plotly/validators/contour/colorbar/_y.py plotly/validators/contour/colorbar/_yanchor.py plotly/validators/contour/colorbar/_ypad.py plotly/validators/contour/colorbar/_yref.py plotly/validators/contour/colorbar/tickfont/__init__.py plotly/validators/contour/colorbar/tickfont/_color.py plotly/validators/contour/colorbar/tickfont/_family.py plotly/validators/contour/colorbar/tickfont/_size.py plotly/validators/contour/colorbar/tickformatstop/__init__.py plotly/validators/contour/colorbar/tickformatstop/_dtickrange.py plotly/validators/contour/colorbar/tickformatstop/_enabled.py plotly/validators/contour/colorbar/tickformatstop/_name.py plotly/validators/contour/colorbar/tickformatstop/_templateitemname.py plotly/validators/contour/colorbar/tickformatstop/_value.py plotly/validators/contour/colorbar/title/__init__.py plotly/validators/contour/colorbar/title/_font.py plotly/validators/contour/colorbar/title/_side.py plotly/validators/contour/colorbar/title/_text.py plotly/validators/contour/colorbar/title/font/__init__.py plotly/validators/contour/colorbar/title/font/_color.py plotly/validators/contour/colorbar/title/font/_family.py plotly/validators/contour/colorbar/title/font/_size.py plotly/validators/contour/contours/__init__.py plotly/validators/contour/contours/_coloring.py plotly/validators/contour/contours/_end.py plotly/validators/contour/contours/_labelfont.py plotly/validators/contour/contours/_labelformat.py plotly/validators/contour/contours/_operation.py plotly/validators/contour/contours/_showlabels.py plotly/validators/contour/contours/_showlines.py plotly/validators/contour/contours/_size.py plotly/validators/contour/contours/_start.py plotly/validators/contour/contours/_type.py plotly/validators/contour/contours/_value.py plotly/validators/contour/contours/labelfont/__init__.py plotly/validators/contour/contours/labelfont/_color.py plotly/validators/contour/contours/labelfont/_family.py plotly/validators/contour/contours/labelfont/_size.py plotly/validators/contour/hoverlabel/__init__.py plotly/validators/contour/hoverlabel/_align.py plotly/validators/contour/hoverlabel/_alignsrc.py plotly/validators/contour/hoverlabel/_bgcolor.py plotly/validators/contour/hoverlabel/_bgcolorsrc.py plotly/validators/contour/hoverlabel/_bordercolor.py plotly/validators/contour/hoverlabel/_bordercolorsrc.py plotly/validators/contour/hoverlabel/_font.py plotly/validators/contour/hoverlabel/_namelength.py plotly/validators/contour/hoverlabel/_namelengthsrc.py plotly/validators/contour/hoverlabel/font/__init__.py plotly/validators/contour/hoverlabel/font/_color.py plotly/validators/contour/hoverlabel/font/_colorsrc.py plotly/validators/contour/hoverlabel/font/_family.py plotly/validators/contour/hoverlabel/font/_familysrc.py plotly/validators/contour/hoverlabel/font/_size.py plotly/validators/contour/hoverlabel/font/_sizesrc.py plotly/validators/contour/legendgrouptitle/__init__.py plotly/validators/contour/legendgrouptitle/_font.py plotly/validators/contour/legendgrouptitle/_text.py plotly/validators/contour/legendgrouptitle/font/__init__.py plotly/validators/contour/legendgrouptitle/font/_color.py plotly/validators/contour/legendgrouptitle/font/_family.py plotly/validators/contour/legendgrouptitle/font/_size.py plotly/validators/contour/line/__init__.py plotly/validators/contour/line/_color.py plotly/validators/contour/line/_dash.py plotly/validators/contour/line/_smoothing.py plotly/validators/contour/line/_width.py plotly/validators/contour/stream/__init__.py plotly/validators/contour/stream/_maxpoints.py plotly/validators/contour/stream/_token.py plotly/validators/contour/textfont/__init__.py plotly/validators/contour/textfont/_color.py plotly/validators/contour/textfont/_family.py plotly/validators/contour/textfont/_size.py plotly/validators/contourcarpet/__init__.py plotly/validators/contourcarpet/_a.py plotly/validators/contourcarpet/_a0.py plotly/validators/contourcarpet/_asrc.py plotly/validators/contourcarpet/_atype.py plotly/validators/contourcarpet/_autocolorscale.py plotly/validators/contourcarpet/_autocontour.py plotly/validators/contourcarpet/_b.py plotly/validators/contourcarpet/_b0.py plotly/validators/contourcarpet/_bsrc.py plotly/validators/contourcarpet/_btype.py plotly/validators/contourcarpet/_carpet.py plotly/validators/contourcarpet/_coloraxis.py plotly/validators/contourcarpet/_colorbar.py plotly/validators/contourcarpet/_colorscale.py plotly/validators/contourcarpet/_contours.py plotly/validators/contourcarpet/_customdata.py plotly/validators/contourcarpet/_customdatasrc.py plotly/validators/contourcarpet/_da.py plotly/validators/contourcarpet/_db.py plotly/validators/contourcarpet/_fillcolor.py plotly/validators/contourcarpet/_hovertext.py plotly/validators/contourcarpet/_hovertextsrc.py plotly/validators/contourcarpet/_ids.py plotly/validators/contourcarpet/_idssrc.py plotly/validators/contourcarpet/_legend.py plotly/validators/contourcarpet/_legendgroup.py plotly/validators/contourcarpet/_legendgrouptitle.py plotly/validators/contourcarpet/_legendrank.py plotly/validators/contourcarpet/_legendwidth.py plotly/validators/contourcarpet/_line.py plotly/validators/contourcarpet/_meta.py plotly/validators/contourcarpet/_metasrc.py plotly/validators/contourcarpet/_name.py plotly/validators/contourcarpet/_ncontours.py plotly/validators/contourcarpet/_opacity.py plotly/validators/contourcarpet/_reversescale.py plotly/validators/contourcarpet/_showlegend.py plotly/validators/contourcarpet/_showscale.py plotly/validators/contourcarpet/_stream.py plotly/validators/contourcarpet/_text.py plotly/validators/contourcarpet/_textsrc.py plotly/validators/contourcarpet/_transpose.py plotly/validators/contourcarpet/_uid.py plotly/validators/contourcarpet/_uirevision.py plotly/validators/contourcarpet/_visible.py plotly/validators/contourcarpet/_xaxis.py plotly/validators/contourcarpet/_yaxis.py plotly/validators/contourcarpet/_z.py plotly/validators/contourcarpet/_zauto.py plotly/validators/contourcarpet/_zmax.py plotly/validators/contourcarpet/_zmid.py plotly/validators/contourcarpet/_zmin.py plotly/validators/contourcarpet/_zsrc.py plotly/validators/contourcarpet/colorbar/__init__.py plotly/validators/contourcarpet/colorbar/_bgcolor.py plotly/validators/contourcarpet/colorbar/_bordercolor.py plotly/validators/contourcarpet/colorbar/_borderwidth.py plotly/validators/contourcarpet/colorbar/_dtick.py plotly/validators/contourcarpet/colorbar/_exponentformat.py plotly/validators/contourcarpet/colorbar/_labelalias.py plotly/validators/contourcarpet/colorbar/_len.py plotly/validators/contourcarpet/colorbar/_lenmode.py plotly/validators/contourcarpet/colorbar/_minexponent.py plotly/validators/contourcarpet/colorbar/_nticks.py plotly/validators/contourcarpet/colorbar/_orientation.py plotly/validators/contourcarpet/colorbar/_outlinecolor.py plotly/validators/contourcarpet/colorbar/_outlinewidth.py plotly/validators/contourcarpet/colorbar/_separatethousands.py plotly/validators/contourcarpet/colorbar/_showexponent.py plotly/validators/contourcarpet/colorbar/_showticklabels.py plotly/validators/contourcarpet/colorbar/_showtickprefix.py plotly/validators/contourcarpet/colorbar/_showticksuffix.py plotly/validators/contourcarpet/colorbar/_thickness.py plotly/validators/contourcarpet/colorbar/_thicknessmode.py plotly/validators/contourcarpet/colorbar/_tick0.py plotly/validators/contourcarpet/colorbar/_tickangle.py plotly/validators/contourcarpet/colorbar/_tickcolor.py plotly/validators/contourcarpet/colorbar/_tickfont.py plotly/validators/contourcarpet/colorbar/_tickformat.py plotly/validators/contourcarpet/colorbar/_tickformatstopdefaults.py plotly/validators/contourcarpet/colorbar/_tickformatstops.py plotly/validators/contourcarpet/colorbar/_ticklabeloverflow.py plotly/validators/contourcarpet/colorbar/_ticklabelposition.py plotly/validators/contourcarpet/colorbar/_ticklabelstep.py plotly/validators/contourcarpet/colorbar/_ticklen.py plotly/validators/contourcarpet/colorbar/_tickmode.py plotly/validators/contourcarpet/colorbar/_tickprefix.py plotly/validators/contourcarpet/colorbar/_ticks.py plotly/validators/contourcarpet/colorbar/_ticksuffix.py plotly/validators/contourcarpet/colorbar/_ticktext.py plotly/validators/contourcarpet/colorbar/_ticktextsrc.py plotly/validators/contourcarpet/colorbar/_tickvals.py plotly/validators/contourcarpet/colorbar/_tickvalssrc.py plotly/validators/contourcarpet/colorbar/_tickwidth.py plotly/validators/contourcarpet/colorbar/_title.py plotly/validators/contourcarpet/colorbar/_x.py plotly/validators/contourcarpet/colorbar/_xanchor.py plotly/validators/contourcarpet/colorbar/_xpad.py plotly/validators/contourcarpet/colorbar/_xref.py plotly/validators/contourcarpet/colorbar/_y.py plotly/validators/contourcarpet/colorbar/_yanchor.py plotly/validators/contourcarpet/colorbar/_ypad.py plotly/validators/contourcarpet/colorbar/_yref.py plotly/validators/contourcarpet/colorbar/tickfont/__init__.py plotly/validators/contourcarpet/colorbar/tickfont/_color.py plotly/validators/contourcarpet/colorbar/tickfont/_family.py plotly/validators/contourcarpet/colorbar/tickfont/_size.py plotly/validators/contourcarpet/colorbar/tickformatstop/__init__.py plotly/validators/contourcarpet/colorbar/tickformatstop/_dtickrange.py plotly/validators/contourcarpet/colorbar/tickformatstop/_enabled.py plotly/validators/contourcarpet/colorbar/tickformatstop/_name.py plotly/validators/contourcarpet/colorbar/tickformatstop/_templateitemname.py plotly/validators/contourcarpet/colorbar/tickformatstop/_value.py plotly/validators/contourcarpet/colorbar/title/__init__.py plotly/validators/contourcarpet/colorbar/title/_font.py plotly/validators/contourcarpet/colorbar/title/_side.py plotly/validators/contourcarpet/colorbar/title/_text.py plotly/validators/contourcarpet/colorbar/title/font/__init__.py plotly/validators/contourcarpet/colorbar/title/font/_color.py plotly/validators/contourcarpet/colorbar/title/font/_family.py plotly/validators/contourcarpet/colorbar/title/font/_size.py plotly/validators/contourcarpet/contours/__init__.py plotly/validators/contourcarpet/contours/_coloring.py plotly/validators/contourcarpet/contours/_end.py plotly/validators/contourcarpet/contours/_labelfont.py plotly/validators/contourcarpet/contours/_labelformat.py plotly/validators/contourcarpet/contours/_operation.py plotly/validators/contourcarpet/contours/_showlabels.py plotly/validators/contourcarpet/contours/_showlines.py plotly/validators/contourcarpet/contours/_size.py plotly/validators/contourcarpet/contours/_start.py plotly/validators/contourcarpet/contours/_type.py plotly/validators/contourcarpet/contours/_value.py plotly/validators/contourcarpet/contours/labelfont/__init__.py plotly/validators/contourcarpet/contours/labelfont/_color.py plotly/validators/contourcarpet/contours/labelfont/_family.py plotly/validators/contourcarpet/contours/labelfont/_size.py plotly/validators/contourcarpet/legendgrouptitle/__init__.py plotly/validators/contourcarpet/legendgrouptitle/_font.py plotly/validators/contourcarpet/legendgrouptitle/_text.py plotly/validators/contourcarpet/legendgrouptitle/font/__init__.py plotly/validators/contourcarpet/legendgrouptitle/font/_color.py plotly/validators/contourcarpet/legendgrouptitle/font/_family.py plotly/validators/contourcarpet/legendgrouptitle/font/_size.py plotly/validators/contourcarpet/line/__init__.py plotly/validators/contourcarpet/line/_color.py plotly/validators/contourcarpet/line/_dash.py plotly/validators/contourcarpet/line/_smoothing.py plotly/validators/contourcarpet/line/_width.py plotly/validators/contourcarpet/stream/__init__.py plotly/validators/contourcarpet/stream/_maxpoints.py plotly/validators/contourcarpet/stream/_token.py plotly/validators/densitymapbox/__init__.py plotly/validators/densitymapbox/_autocolorscale.py plotly/validators/densitymapbox/_below.py plotly/validators/densitymapbox/_coloraxis.py plotly/validators/densitymapbox/_colorbar.py plotly/validators/densitymapbox/_colorscale.py plotly/validators/densitymapbox/_customdata.py plotly/validators/densitymapbox/_customdatasrc.py plotly/validators/densitymapbox/_hoverinfo.py plotly/validators/densitymapbox/_hoverinfosrc.py plotly/validators/densitymapbox/_hoverlabel.py plotly/validators/densitymapbox/_hovertemplate.py plotly/validators/densitymapbox/_hovertemplatesrc.py plotly/validators/densitymapbox/_hovertext.py plotly/validators/densitymapbox/_hovertextsrc.py plotly/validators/densitymapbox/_ids.py plotly/validators/densitymapbox/_idssrc.py plotly/validators/densitymapbox/_lat.py plotly/validators/densitymapbox/_latsrc.py plotly/validators/densitymapbox/_legend.py plotly/validators/densitymapbox/_legendgroup.py plotly/validators/densitymapbox/_legendgrouptitle.py plotly/validators/densitymapbox/_legendrank.py plotly/validators/densitymapbox/_legendwidth.py plotly/validators/densitymapbox/_lon.py plotly/validators/densitymapbox/_lonsrc.py plotly/validators/densitymapbox/_meta.py plotly/validators/densitymapbox/_metasrc.py plotly/validators/densitymapbox/_name.py plotly/validators/densitymapbox/_opacity.py plotly/validators/densitymapbox/_radius.py plotly/validators/densitymapbox/_radiussrc.py plotly/validators/densitymapbox/_reversescale.py plotly/validators/densitymapbox/_showlegend.py plotly/validators/densitymapbox/_showscale.py plotly/validators/densitymapbox/_stream.py plotly/validators/densitymapbox/_subplot.py plotly/validators/densitymapbox/_text.py plotly/validators/densitymapbox/_textsrc.py plotly/validators/densitymapbox/_uid.py plotly/validators/densitymapbox/_uirevision.py plotly/validators/densitymapbox/_visible.py plotly/validators/densitymapbox/_z.py plotly/validators/densitymapbox/_zauto.py plotly/validators/densitymapbox/_zmax.py plotly/validators/densitymapbox/_zmid.py plotly/validators/densitymapbox/_zmin.py plotly/validators/densitymapbox/_zsrc.py plotly/validators/densitymapbox/colorbar/__init__.py plotly/validators/densitymapbox/colorbar/_bgcolor.py plotly/validators/densitymapbox/colorbar/_bordercolor.py plotly/validators/densitymapbox/colorbar/_borderwidth.py plotly/validators/densitymapbox/colorbar/_dtick.py plotly/validators/densitymapbox/colorbar/_exponentformat.py plotly/validators/densitymapbox/colorbar/_labelalias.py plotly/validators/densitymapbox/colorbar/_len.py plotly/validators/densitymapbox/colorbar/_lenmode.py plotly/validators/densitymapbox/colorbar/_minexponent.py plotly/validators/densitymapbox/colorbar/_nticks.py plotly/validators/densitymapbox/colorbar/_orientation.py plotly/validators/densitymapbox/colorbar/_outlinecolor.py plotly/validators/densitymapbox/colorbar/_outlinewidth.py plotly/validators/densitymapbox/colorbar/_separatethousands.py plotly/validators/densitymapbox/colorbar/_showexponent.py plotly/validators/densitymapbox/colorbar/_showticklabels.py plotly/validators/densitymapbox/colorbar/_showtickprefix.py plotly/validators/densitymapbox/colorbar/_showticksuffix.py plotly/validators/densitymapbox/colorbar/_thickness.py plotly/validators/densitymapbox/colorbar/_thicknessmode.py plotly/validators/densitymapbox/colorbar/_tick0.py plotly/validators/densitymapbox/colorbar/_tickangle.py plotly/validators/densitymapbox/colorbar/_tickcolor.py plotly/validators/densitymapbox/colorbar/_tickfont.py plotly/validators/densitymapbox/colorbar/_tickformat.py plotly/validators/densitymapbox/colorbar/_tickformatstopdefaults.py plotly/validators/densitymapbox/colorbar/_tickformatstops.py plotly/validators/densitymapbox/colorbar/_ticklabeloverflow.py plotly/validators/densitymapbox/colorbar/_ticklabelposition.py plotly/validators/densitymapbox/colorbar/_ticklabelstep.py plotly/validators/densitymapbox/colorbar/_ticklen.py plotly/validators/densitymapbox/colorbar/_tickmode.py plotly/validators/densitymapbox/colorbar/_tickprefix.py plotly/validators/densitymapbox/colorbar/_ticks.py plotly/validators/densitymapbox/colorbar/_ticksuffix.py plotly/validators/densitymapbox/colorbar/_ticktext.py plotly/validators/densitymapbox/colorbar/_ticktextsrc.py plotly/validators/densitymapbox/colorbar/_tickvals.py plotly/validators/densitymapbox/colorbar/_tickvalssrc.py plotly/validators/densitymapbox/colorbar/_tickwidth.py plotly/validators/densitymapbox/colorbar/_title.py plotly/validators/densitymapbox/colorbar/_x.py plotly/validators/densitymapbox/colorbar/_xanchor.py plotly/validators/densitymapbox/colorbar/_xpad.py plotly/validators/densitymapbox/colorbar/_xref.py plotly/validators/densitymapbox/colorbar/_y.py plotly/validators/densitymapbox/colorbar/_yanchor.py plotly/validators/densitymapbox/colorbar/_ypad.py plotly/validators/densitymapbox/colorbar/_yref.py plotly/validators/densitymapbox/colorbar/tickfont/__init__.py plotly/validators/densitymapbox/colorbar/tickfont/_color.py plotly/validators/densitymapbox/colorbar/tickfont/_family.py plotly/validators/densitymapbox/colorbar/tickfont/_size.py plotly/validators/densitymapbox/colorbar/tickformatstop/__init__.py plotly/validators/densitymapbox/colorbar/tickformatstop/_dtickrange.py plotly/validators/densitymapbox/colorbar/tickformatstop/_enabled.py plotly/validators/densitymapbox/colorbar/tickformatstop/_name.py plotly/validators/densitymapbox/colorbar/tickformatstop/_templateitemname.py plotly/validators/densitymapbox/colorbar/tickformatstop/_value.py plotly/validators/densitymapbox/colorbar/title/__init__.py plotly/validators/densitymapbox/colorbar/title/_font.py plotly/validators/densitymapbox/colorbar/title/_side.py plotly/validators/densitymapbox/colorbar/title/_text.py plotly/validators/densitymapbox/colorbar/title/font/__init__.py plotly/validators/densitymapbox/colorbar/title/font/_color.py plotly/validators/densitymapbox/colorbar/title/font/_family.py plotly/validators/densitymapbox/colorbar/title/font/_size.py plotly/validators/densitymapbox/hoverlabel/__init__.py plotly/validators/densitymapbox/hoverlabel/_align.py plotly/validators/densitymapbox/hoverlabel/_alignsrc.py plotly/validators/densitymapbox/hoverlabel/_bgcolor.py plotly/validators/densitymapbox/hoverlabel/_bgcolorsrc.py plotly/validators/densitymapbox/hoverlabel/_bordercolor.py plotly/validators/densitymapbox/hoverlabel/_bordercolorsrc.py plotly/validators/densitymapbox/hoverlabel/_font.py plotly/validators/densitymapbox/hoverlabel/_namelength.py plotly/validators/densitymapbox/hoverlabel/_namelengthsrc.py plotly/validators/densitymapbox/hoverlabel/font/__init__.py plotly/validators/densitymapbox/hoverlabel/font/_color.py plotly/validators/densitymapbox/hoverlabel/font/_colorsrc.py plotly/validators/densitymapbox/hoverlabel/font/_family.py plotly/validators/densitymapbox/hoverlabel/font/_familysrc.py plotly/validators/densitymapbox/hoverlabel/font/_size.py plotly/validators/densitymapbox/hoverlabel/font/_sizesrc.py plotly/validators/densitymapbox/legendgrouptitle/__init__.py plotly/validators/densitymapbox/legendgrouptitle/_font.py plotly/validators/densitymapbox/legendgrouptitle/_text.py plotly/validators/densitymapbox/legendgrouptitle/font/__init__.py plotly/validators/densitymapbox/legendgrouptitle/font/_color.py plotly/validators/densitymapbox/legendgrouptitle/font/_family.py plotly/validators/densitymapbox/legendgrouptitle/font/_size.py plotly/validators/densitymapbox/stream/__init__.py plotly/validators/densitymapbox/stream/_maxpoints.py plotly/validators/densitymapbox/stream/_token.py plotly/validators/frame/__init__.py plotly/validators/frame/_baseframe.py plotly/validators/frame/_data.py plotly/validators/frame/_group.py plotly/validators/frame/_layout.py plotly/validators/frame/_name.py plotly/validators/frame/_traces.py plotly/validators/funnel/__init__.py plotly/validators/funnel/_alignmentgroup.py plotly/validators/funnel/_cliponaxis.py plotly/validators/funnel/_connector.py plotly/validators/funnel/_constraintext.py plotly/validators/funnel/_customdata.py plotly/validators/funnel/_customdatasrc.py plotly/validators/funnel/_dx.py plotly/validators/funnel/_dy.py plotly/validators/funnel/_hoverinfo.py plotly/validators/funnel/_hoverinfosrc.py plotly/validators/funnel/_hoverlabel.py plotly/validators/funnel/_hovertemplate.py plotly/validators/funnel/_hovertemplatesrc.py plotly/validators/funnel/_hovertext.py plotly/validators/funnel/_hovertextsrc.py plotly/validators/funnel/_ids.py plotly/validators/funnel/_idssrc.py plotly/validators/funnel/_insidetextanchor.py plotly/validators/funnel/_insidetextfont.py plotly/validators/funnel/_legend.py plotly/validators/funnel/_legendgroup.py plotly/validators/funnel/_legendgrouptitle.py plotly/validators/funnel/_legendrank.py plotly/validators/funnel/_legendwidth.py plotly/validators/funnel/_marker.py plotly/validators/funnel/_meta.py plotly/validators/funnel/_metasrc.py plotly/validators/funnel/_name.py plotly/validators/funnel/_offset.py plotly/validators/funnel/_offsetgroup.py plotly/validators/funnel/_opacity.py plotly/validators/funnel/_orientation.py plotly/validators/funnel/_outsidetextfont.py plotly/validators/funnel/_selectedpoints.py plotly/validators/funnel/_showlegend.py plotly/validators/funnel/_stream.py plotly/validators/funnel/_text.py plotly/validators/funnel/_textangle.py plotly/validators/funnel/_textfont.py plotly/validators/funnel/_textinfo.py plotly/validators/funnel/_textposition.py plotly/validators/funnel/_textpositionsrc.py plotly/validators/funnel/_textsrc.py plotly/validators/funnel/_texttemplate.py plotly/validators/funnel/_texttemplatesrc.py plotly/validators/funnel/_uid.py plotly/validators/funnel/_uirevision.py plotly/validators/funnel/_visible.py plotly/validators/funnel/_width.py plotly/validators/funnel/_x.py plotly/validators/funnel/_x0.py plotly/validators/funnel/_xaxis.py plotly/validators/funnel/_xhoverformat.py plotly/validators/funnel/_xperiod.py plotly/validators/funnel/_xperiod0.py plotly/validators/funnel/_xperiodalignment.py plotly/validators/funnel/_xsrc.py plotly/validators/funnel/_y.py plotly/validators/funnel/_y0.py plotly/validators/funnel/_yaxis.py plotly/validators/funnel/_yhoverformat.py plotly/validators/funnel/_yperiod.py plotly/validators/funnel/_yperiod0.py plotly/validators/funnel/_yperiodalignment.py plotly/validators/funnel/_ysrc.py plotly/validators/funnel/connector/__init__.py plotly/validators/funnel/connector/_fillcolor.py plotly/validators/funnel/connector/_line.py plotly/validators/funnel/connector/_visible.py plotly/validators/funnel/connector/line/__init__.py plotly/validators/funnel/connector/line/_color.py plotly/validators/funnel/connector/line/_dash.py plotly/validators/funnel/connector/line/_width.py plotly/validators/funnel/hoverlabel/__init__.py plotly/validators/funnel/hoverlabel/_align.py plotly/validators/funnel/hoverlabel/_alignsrc.py plotly/validators/funnel/hoverlabel/_bgcolor.py plotly/validators/funnel/hoverlabel/_bgcolorsrc.py plotly/validators/funnel/hoverlabel/_bordercolor.py plotly/validators/funnel/hoverlabel/_bordercolorsrc.py plotly/validators/funnel/hoverlabel/_font.py plotly/validators/funnel/hoverlabel/_namelength.py plotly/validators/funnel/hoverlabel/_namelengthsrc.py plotly/validators/funnel/hoverlabel/font/__init__.py plotly/validators/funnel/hoverlabel/font/_color.py plotly/validators/funnel/hoverlabel/font/_colorsrc.py plotly/validators/funnel/hoverlabel/font/_family.py plotly/validators/funnel/hoverlabel/font/_familysrc.py plotly/validators/funnel/hoverlabel/font/_size.py plotly/validators/funnel/hoverlabel/font/_sizesrc.py plotly/validators/funnel/insidetextfont/__init__.py plotly/validators/funnel/insidetextfont/_color.py plotly/validators/funnel/insidetextfont/_colorsrc.py plotly/validators/funnel/insidetextfont/_family.py plotly/validators/funnel/insidetextfont/_familysrc.py plotly/validators/funnel/insidetextfont/_size.py plotly/validators/funnel/insidetextfont/_sizesrc.py plotly/validators/funnel/legendgrouptitle/__init__.py plotly/validators/funnel/legendgrouptitle/_font.py plotly/validators/funnel/legendgrouptitle/_text.py plotly/validators/funnel/legendgrouptitle/font/__init__.py plotly/validators/funnel/legendgrouptitle/font/_color.py plotly/validators/funnel/legendgrouptitle/font/_family.py plotly/validators/funnel/legendgrouptitle/font/_size.py plotly/validators/funnel/marker/__init__.py plotly/validators/funnel/marker/_autocolorscale.py plotly/validators/funnel/marker/_cauto.py plotly/validators/funnel/marker/_cmax.py plotly/validators/funnel/marker/_cmid.py plotly/validators/funnel/marker/_cmin.py plotly/validators/funnel/marker/_color.py plotly/validators/funnel/marker/_coloraxis.py plotly/validators/funnel/marker/_colorbar.py plotly/validators/funnel/marker/_colorscale.py plotly/validators/funnel/marker/_colorsrc.py plotly/validators/funnel/marker/_line.py plotly/validators/funnel/marker/_opacity.py plotly/validators/funnel/marker/_opacitysrc.py plotly/validators/funnel/marker/_reversescale.py plotly/validators/funnel/marker/_showscale.py plotly/validators/funnel/marker/colorbar/__init__.py plotly/validators/funnel/marker/colorbar/_bgcolor.py plotly/validators/funnel/marker/colorbar/_bordercolor.py plotly/validators/funnel/marker/colorbar/_borderwidth.py plotly/validators/funnel/marker/colorbar/_dtick.py plotly/validators/funnel/marker/colorbar/_exponentformat.py plotly/validators/funnel/marker/colorbar/_labelalias.py plotly/validators/funnel/marker/colorbar/_len.py plotly/validators/funnel/marker/colorbar/_lenmode.py plotly/validators/funnel/marker/colorbar/_minexponent.py plotly/validators/funnel/marker/colorbar/_nticks.py plotly/validators/funnel/marker/colorbar/_orientation.py plotly/validators/funnel/marker/colorbar/_outlinecolor.py plotly/validators/funnel/marker/colorbar/_outlinewidth.py plotly/validators/funnel/marker/colorbar/_separatethousands.py plotly/validators/funnel/marker/colorbar/_showexponent.py plotly/validators/funnel/marker/colorbar/_showticklabels.py plotly/validators/funnel/marker/colorbar/_showtickprefix.py plotly/validators/funnel/marker/colorbar/_showticksuffix.py plotly/validators/funnel/marker/colorbar/_thickness.py plotly/validators/funnel/marker/colorbar/_thicknessmode.py plotly/validators/funnel/marker/colorbar/_tick0.py plotly/validators/funnel/marker/colorbar/_tickangle.py plotly/validators/funnel/marker/colorbar/_tickcolor.py plotly/validators/funnel/marker/colorbar/_tickfont.py plotly/validators/funnel/marker/colorbar/_tickformat.py plotly/validators/funnel/marker/colorbar/_tickformatstopdefaults.py plotly/validators/funnel/marker/colorbar/_tickformatstops.py plotly/validators/funnel/marker/colorbar/_ticklabeloverflow.py plotly/validators/funnel/marker/colorbar/_ticklabelposition.py plotly/validators/funnel/marker/colorbar/_ticklabelstep.py plotly/validators/funnel/marker/colorbar/_ticklen.py plotly/validators/funnel/marker/colorbar/_tickmode.py plotly/validators/funnel/marker/colorbar/_tickprefix.py plotly/validators/funnel/marker/colorbar/_ticks.py plotly/validators/funnel/marker/colorbar/_ticksuffix.py plotly/validators/funnel/marker/colorbar/_ticktext.py plotly/validators/funnel/marker/colorbar/_ticktextsrc.py plotly/validators/funnel/marker/colorbar/_tickvals.py plotly/validators/funnel/marker/colorbar/_tickvalssrc.py plotly/validators/funnel/marker/colorbar/_tickwidth.py plotly/validators/funnel/marker/colorbar/_title.py plotly/validators/funnel/marker/colorbar/_x.py plotly/validators/funnel/marker/colorbar/_xanchor.py plotly/validators/funnel/marker/colorbar/_xpad.py plotly/validators/funnel/marker/colorbar/_xref.py plotly/validators/funnel/marker/colorbar/_y.py plotly/validators/funnel/marker/colorbar/_yanchor.py plotly/validators/funnel/marker/colorbar/_ypad.py plotly/validators/funnel/marker/colorbar/_yref.py plotly/validators/funnel/marker/colorbar/tickfont/__init__.py plotly/validators/funnel/marker/colorbar/tickfont/_color.py plotly/validators/funnel/marker/colorbar/tickfont/_family.py plotly/validators/funnel/marker/colorbar/tickfont/_size.py plotly/validators/funnel/marker/colorbar/tickformatstop/__init__.py plotly/validators/funnel/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/funnel/marker/colorbar/tickformatstop/_enabled.py plotly/validators/funnel/marker/colorbar/tickformatstop/_name.py plotly/validators/funnel/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/funnel/marker/colorbar/tickformatstop/_value.py plotly/validators/funnel/marker/colorbar/title/__init__.py plotly/validators/funnel/marker/colorbar/title/_font.py plotly/validators/funnel/marker/colorbar/title/_side.py plotly/validators/funnel/marker/colorbar/title/_text.py plotly/validators/funnel/marker/colorbar/title/font/__init__.py plotly/validators/funnel/marker/colorbar/title/font/_color.py plotly/validators/funnel/marker/colorbar/title/font/_family.py plotly/validators/funnel/marker/colorbar/title/font/_size.py plotly/validators/funnel/marker/line/__init__.py plotly/validators/funnel/marker/line/_autocolorscale.py plotly/validators/funnel/marker/line/_cauto.py plotly/validators/funnel/marker/line/_cmax.py plotly/validators/funnel/marker/line/_cmid.py plotly/validators/funnel/marker/line/_cmin.py plotly/validators/funnel/marker/line/_color.py plotly/validators/funnel/marker/line/_coloraxis.py plotly/validators/funnel/marker/line/_colorscale.py plotly/validators/funnel/marker/line/_colorsrc.py plotly/validators/funnel/marker/line/_reversescale.py plotly/validators/funnel/marker/line/_width.py plotly/validators/funnel/marker/line/_widthsrc.py plotly/validators/funnel/outsidetextfont/__init__.py plotly/validators/funnel/outsidetextfont/_color.py plotly/validators/funnel/outsidetextfont/_colorsrc.py plotly/validators/funnel/outsidetextfont/_family.py plotly/validators/funnel/outsidetextfont/_familysrc.py plotly/validators/funnel/outsidetextfont/_size.py plotly/validators/funnel/outsidetextfont/_sizesrc.py plotly/validators/funnel/stream/__init__.py plotly/validators/funnel/stream/_maxpoints.py plotly/validators/funnel/stream/_token.py plotly/validators/funnel/textfont/__init__.py plotly/validators/funnel/textfont/_color.py plotly/validators/funnel/textfont/_colorsrc.py plotly/validators/funnel/textfont/_family.py plotly/validators/funnel/textfont/_familysrc.py plotly/validators/funnel/textfont/_size.py plotly/validators/funnel/textfont/_sizesrc.py plotly/validators/funnelarea/__init__.py plotly/validators/funnelarea/_aspectratio.py plotly/validators/funnelarea/_baseratio.py plotly/validators/funnelarea/_customdata.py plotly/validators/funnelarea/_customdatasrc.py plotly/validators/funnelarea/_dlabel.py plotly/validators/funnelarea/_domain.py plotly/validators/funnelarea/_hoverinfo.py plotly/validators/funnelarea/_hoverinfosrc.py plotly/validators/funnelarea/_hoverlabel.py plotly/validators/funnelarea/_hovertemplate.py plotly/validators/funnelarea/_hovertemplatesrc.py plotly/validators/funnelarea/_hovertext.py plotly/validators/funnelarea/_hovertextsrc.py plotly/validators/funnelarea/_ids.py plotly/validators/funnelarea/_idssrc.py plotly/validators/funnelarea/_insidetextfont.py plotly/validators/funnelarea/_label0.py plotly/validators/funnelarea/_labels.py plotly/validators/funnelarea/_labelssrc.py plotly/validators/funnelarea/_legend.py plotly/validators/funnelarea/_legendgroup.py plotly/validators/funnelarea/_legendgrouptitle.py plotly/validators/funnelarea/_legendrank.py plotly/validators/funnelarea/_legendwidth.py plotly/validators/funnelarea/_marker.py plotly/validators/funnelarea/_meta.py plotly/validators/funnelarea/_metasrc.py plotly/validators/funnelarea/_name.py plotly/validators/funnelarea/_opacity.py plotly/validators/funnelarea/_scalegroup.py plotly/validators/funnelarea/_showlegend.py plotly/validators/funnelarea/_stream.py plotly/validators/funnelarea/_text.py plotly/validators/funnelarea/_textfont.py plotly/validators/funnelarea/_textinfo.py plotly/validators/funnelarea/_textposition.py plotly/validators/funnelarea/_textpositionsrc.py plotly/validators/funnelarea/_textsrc.py plotly/validators/funnelarea/_texttemplate.py plotly/validators/funnelarea/_texttemplatesrc.py plotly/validators/funnelarea/_title.py plotly/validators/funnelarea/_uid.py plotly/validators/funnelarea/_uirevision.py plotly/validators/funnelarea/_values.py plotly/validators/funnelarea/_valuessrc.py plotly/validators/funnelarea/_visible.py plotly/validators/funnelarea/domain/__init__.py plotly/validators/funnelarea/domain/_column.py plotly/validators/funnelarea/domain/_row.py plotly/validators/funnelarea/domain/_x.py plotly/validators/funnelarea/domain/_y.py plotly/validators/funnelarea/hoverlabel/__init__.py plotly/validators/funnelarea/hoverlabel/_align.py plotly/validators/funnelarea/hoverlabel/_alignsrc.py plotly/validators/funnelarea/hoverlabel/_bgcolor.py plotly/validators/funnelarea/hoverlabel/_bgcolorsrc.py plotly/validators/funnelarea/hoverlabel/_bordercolor.py plotly/validators/funnelarea/hoverlabel/_bordercolorsrc.py plotly/validators/funnelarea/hoverlabel/_font.py plotly/validators/funnelarea/hoverlabel/_namelength.py plotly/validators/funnelarea/hoverlabel/_namelengthsrc.py plotly/validators/funnelarea/hoverlabel/font/__init__.py plotly/validators/funnelarea/hoverlabel/font/_color.py plotly/validators/funnelarea/hoverlabel/font/_colorsrc.py plotly/validators/funnelarea/hoverlabel/font/_family.py plotly/validators/funnelarea/hoverlabel/font/_familysrc.py plotly/validators/funnelarea/hoverlabel/font/_size.py plotly/validators/funnelarea/hoverlabel/font/_sizesrc.py plotly/validators/funnelarea/insidetextfont/__init__.py plotly/validators/funnelarea/insidetextfont/_color.py plotly/validators/funnelarea/insidetextfont/_colorsrc.py plotly/validators/funnelarea/insidetextfont/_family.py plotly/validators/funnelarea/insidetextfont/_familysrc.py plotly/validators/funnelarea/insidetextfont/_size.py plotly/validators/funnelarea/insidetextfont/_sizesrc.py plotly/validators/funnelarea/legendgrouptitle/__init__.py plotly/validators/funnelarea/legendgrouptitle/_font.py plotly/validators/funnelarea/legendgrouptitle/_text.py plotly/validators/funnelarea/legendgrouptitle/font/__init__.py plotly/validators/funnelarea/legendgrouptitle/font/_color.py plotly/validators/funnelarea/legendgrouptitle/font/_family.py plotly/validators/funnelarea/legendgrouptitle/font/_size.py plotly/validators/funnelarea/marker/__init__.py plotly/validators/funnelarea/marker/_colors.py plotly/validators/funnelarea/marker/_colorssrc.py plotly/validators/funnelarea/marker/_line.py plotly/validators/funnelarea/marker/_pattern.py plotly/validators/funnelarea/marker/line/__init__.py plotly/validators/funnelarea/marker/line/_color.py plotly/validators/funnelarea/marker/line/_colorsrc.py plotly/validators/funnelarea/marker/line/_width.py plotly/validators/funnelarea/marker/line/_widthsrc.py plotly/validators/funnelarea/marker/pattern/__init__.py plotly/validators/funnelarea/marker/pattern/_bgcolor.py plotly/validators/funnelarea/marker/pattern/_bgcolorsrc.py plotly/validators/funnelarea/marker/pattern/_fgcolor.py plotly/validators/funnelarea/marker/pattern/_fgcolorsrc.py plotly/validators/funnelarea/marker/pattern/_fgopacity.py plotly/validators/funnelarea/marker/pattern/_fillmode.py plotly/validators/funnelarea/marker/pattern/_shape.py plotly/validators/funnelarea/marker/pattern/_shapesrc.py plotly/validators/funnelarea/marker/pattern/_size.py plotly/validators/funnelarea/marker/pattern/_sizesrc.py plotly/validators/funnelarea/marker/pattern/_solidity.py plotly/validators/funnelarea/marker/pattern/_soliditysrc.py plotly/validators/funnelarea/stream/__init__.py plotly/validators/funnelarea/stream/_maxpoints.py plotly/validators/funnelarea/stream/_token.py plotly/validators/funnelarea/textfont/__init__.py plotly/validators/funnelarea/textfont/_color.py plotly/validators/funnelarea/textfont/_colorsrc.py plotly/validators/funnelarea/textfont/_family.py plotly/validators/funnelarea/textfont/_familysrc.py plotly/validators/funnelarea/textfont/_size.py plotly/validators/funnelarea/textfont/_sizesrc.py plotly/validators/funnelarea/title/__init__.py plotly/validators/funnelarea/title/_font.py plotly/validators/funnelarea/title/_position.py plotly/validators/funnelarea/title/_text.py plotly/validators/funnelarea/title/font/__init__.py plotly/validators/funnelarea/title/font/_color.py plotly/validators/funnelarea/title/font/_colorsrc.py plotly/validators/funnelarea/title/font/_family.py plotly/validators/funnelarea/title/font/_familysrc.py plotly/validators/funnelarea/title/font/_size.py plotly/validators/funnelarea/title/font/_sizesrc.py plotly/validators/heatmap/__init__.py plotly/validators/heatmap/_autocolorscale.py plotly/validators/heatmap/_coloraxis.py plotly/validators/heatmap/_colorbar.py plotly/validators/heatmap/_colorscale.py plotly/validators/heatmap/_connectgaps.py plotly/validators/heatmap/_customdata.py plotly/validators/heatmap/_customdatasrc.py plotly/validators/heatmap/_dx.py plotly/validators/heatmap/_dy.py plotly/validators/heatmap/_hoverinfo.py plotly/validators/heatmap/_hoverinfosrc.py plotly/validators/heatmap/_hoverlabel.py plotly/validators/heatmap/_hoverongaps.py plotly/validators/heatmap/_hovertemplate.py plotly/validators/heatmap/_hovertemplatesrc.py plotly/validators/heatmap/_hovertext.py plotly/validators/heatmap/_hovertextsrc.py plotly/validators/heatmap/_ids.py plotly/validators/heatmap/_idssrc.py plotly/validators/heatmap/_legend.py plotly/validators/heatmap/_legendgroup.py plotly/validators/heatmap/_legendgrouptitle.py plotly/validators/heatmap/_legendrank.py plotly/validators/heatmap/_legendwidth.py plotly/validators/heatmap/_meta.py plotly/validators/heatmap/_metasrc.py plotly/validators/heatmap/_name.py plotly/validators/heatmap/_opacity.py plotly/validators/heatmap/_reversescale.py plotly/validators/heatmap/_showlegend.py plotly/validators/heatmap/_showscale.py plotly/validators/heatmap/_stream.py plotly/validators/heatmap/_text.py plotly/validators/heatmap/_textfont.py plotly/validators/heatmap/_textsrc.py plotly/validators/heatmap/_texttemplate.py plotly/validators/heatmap/_transpose.py plotly/validators/heatmap/_uid.py plotly/validators/heatmap/_uirevision.py plotly/validators/heatmap/_visible.py plotly/validators/heatmap/_x.py plotly/validators/heatmap/_x0.py plotly/validators/heatmap/_xaxis.py plotly/validators/heatmap/_xcalendar.py plotly/validators/heatmap/_xgap.py plotly/validators/heatmap/_xhoverformat.py plotly/validators/heatmap/_xperiod.py plotly/validators/heatmap/_xperiod0.py plotly/validators/heatmap/_xperiodalignment.py plotly/validators/heatmap/_xsrc.py plotly/validators/heatmap/_xtype.py plotly/validators/heatmap/_y.py plotly/validators/heatmap/_y0.py plotly/validators/heatmap/_yaxis.py plotly/validators/heatmap/_ycalendar.py plotly/validators/heatmap/_ygap.py plotly/validators/heatmap/_yhoverformat.py plotly/validators/heatmap/_yperiod.py plotly/validators/heatmap/_yperiod0.py plotly/validators/heatmap/_yperiodalignment.py plotly/validators/heatmap/_ysrc.py plotly/validators/heatmap/_ytype.py plotly/validators/heatmap/_z.py plotly/validators/heatmap/_zauto.py plotly/validators/heatmap/_zhoverformat.py plotly/validators/heatmap/_zmax.py plotly/validators/heatmap/_zmid.py plotly/validators/heatmap/_zmin.py plotly/validators/heatmap/_zsmooth.py plotly/validators/heatmap/_zsrc.py plotly/validators/heatmap/colorbar/__init__.py plotly/validators/heatmap/colorbar/_bgcolor.py plotly/validators/heatmap/colorbar/_bordercolor.py plotly/validators/heatmap/colorbar/_borderwidth.py plotly/validators/heatmap/colorbar/_dtick.py plotly/validators/heatmap/colorbar/_exponentformat.py plotly/validators/heatmap/colorbar/_labelalias.py plotly/validators/heatmap/colorbar/_len.py plotly/validators/heatmap/colorbar/_lenmode.py plotly/validators/heatmap/colorbar/_minexponent.py plotly/validators/heatmap/colorbar/_nticks.py plotly/validators/heatmap/colorbar/_orientation.py plotly/validators/heatmap/colorbar/_outlinecolor.py plotly/validators/heatmap/colorbar/_outlinewidth.py plotly/validators/heatmap/colorbar/_separatethousands.py plotly/validators/heatmap/colorbar/_showexponent.py plotly/validators/heatmap/colorbar/_showticklabels.py plotly/validators/heatmap/colorbar/_showtickprefix.py plotly/validators/heatmap/colorbar/_showticksuffix.py plotly/validators/heatmap/colorbar/_thickness.py plotly/validators/heatmap/colorbar/_thicknessmode.py plotly/validators/heatmap/colorbar/_tick0.py plotly/validators/heatmap/colorbar/_tickangle.py plotly/validators/heatmap/colorbar/_tickcolor.py plotly/validators/heatmap/colorbar/_tickfont.py plotly/validators/heatmap/colorbar/_tickformat.py plotly/validators/heatmap/colorbar/_tickformatstopdefaults.py plotly/validators/heatmap/colorbar/_tickformatstops.py plotly/validators/heatmap/colorbar/_ticklabeloverflow.py plotly/validators/heatmap/colorbar/_ticklabelposition.py plotly/validators/heatmap/colorbar/_ticklabelstep.py plotly/validators/heatmap/colorbar/_ticklen.py plotly/validators/heatmap/colorbar/_tickmode.py plotly/validators/heatmap/colorbar/_tickprefix.py plotly/validators/heatmap/colorbar/_ticks.py plotly/validators/heatmap/colorbar/_ticksuffix.py plotly/validators/heatmap/colorbar/_ticktext.py plotly/validators/heatmap/colorbar/_ticktextsrc.py plotly/validators/heatmap/colorbar/_tickvals.py plotly/validators/heatmap/colorbar/_tickvalssrc.py plotly/validators/heatmap/colorbar/_tickwidth.py plotly/validators/heatmap/colorbar/_title.py plotly/validators/heatmap/colorbar/_x.py plotly/validators/heatmap/colorbar/_xanchor.py plotly/validators/heatmap/colorbar/_xpad.py plotly/validators/heatmap/colorbar/_xref.py plotly/validators/heatmap/colorbar/_y.py plotly/validators/heatmap/colorbar/_yanchor.py plotly/validators/heatmap/colorbar/_ypad.py plotly/validators/heatmap/colorbar/_yref.py plotly/validators/heatmap/colorbar/tickfont/__init__.py plotly/validators/heatmap/colorbar/tickfont/_color.py plotly/validators/heatmap/colorbar/tickfont/_family.py plotly/validators/heatmap/colorbar/tickfont/_size.py plotly/validators/heatmap/colorbar/tickformatstop/__init__.py plotly/validators/heatmap/colorbar/tickformatstop/_dtickrange.py plotly/validators/heatmap/colorbar/tickformatstop/_enabled.py plotly/validators/heatmap/colorbar/tickformatstop/_name.py plotly/validators/heatmap/colorbar/tickformatstop/_templateitemname.py plotly/validators/heatmap/colorbar/tickformatstop/_value.py plotly/validators/heatmap/colorbar/title/__init__.py plotly/validators/heatmap/colorbar/title/_font.py plotly/validators/heatmap/colorbar/title/_side.py plotly/validators/heatmap/colorbar/title/_text.py plotly/validators/heatmap/colorbar/title/font/__init__.py plotly/validators/heatmap/colorbar/title/font/_color.py plotly/validators/heatmap/colorbar/title/font/_family.py plotly/validators/heatmap/colorbar/title/font/_size.py plotly/validators/heatmap/hoverlabel/__init__.py plotly/validators/heatmap/hoverlabel/_align.py plotly/validators/heatmap/hoverlabel/_alignsrc.py plotly/validators/heatmap/hoverlabel/_bgcolor.py plotly/validators/heatmap/hoverlabel/_bgcolorsrc.py plotly/validators/heatmap/hoverlabel/_bordercolor.py plotly/validators/heatmap/hoverlabel/_bordercolorsrc.py plotly/validators/heatmap/hoverlabel/_font.py plotly/validators/heatmap/hoverlabel/_namelength.py plotly/validators/heatmap/hoverlabel/_namelengthsrc.py plotly/validators/heatmap/hoverlabel/font/__init__.py plotly/validators/heatmap/hoverlabel/font/_color.py plotly/validators/heatmap/hoverlabel/font/_colorsrc.py plotly/validators/heatmap/hoverlabel/font/_family.py plotly/validators/heatmap/hoverlabel/font/_familysrc.py plotly/validators/heatmap/hoverlabel/font/_size.py plotly/validators/heatmap/hoverlabel/font/_sizesrc.py plotly/validators/heatmap/legendgrouptitle/__init__.py plotly/validators/heatmap/legendgrouptitle/_font.py plotly/validators/heatmap/legendgrouptitle/_text.py plotly/validators/heatmap/legendgrouptitle/font/__init__.py plotly/validators/heatmap/legendgrouptitle/font/_color.py plotly/validators/heatmap/legendgrouptitle/font/_family.py plotly/validators/heatmap/legendgrouptitle/font/_size.py plotly/validators/heatmap/stream/__init__.py plotly/validators/heatmap/stream/_maxpoints.py plotly/validators/heatmap/stream/_token.py plotly/validators/heatmap/textfont/__init__.py plotly/validators/heatmap/textfont/_color.py plotly/validators/heatmap/textfont/_family.py plotly/validators/heatmap/textfont/_size.py plotly/validators/heatmapgl/__init__.py plotly/validators/heatmapgl/_autocolorscale.py plotly/validators/heatmapgl/_coloraxis.py plotly/validators/heatmapgl/_colorbar.py plotly/validators/heatmapgl/_colorscale.py plotly/validators/heatmapgl/_customdata.py plotly/validators/heatmapgl/_customdatasrc.py plotly/validators/heatmapgl/_dx.py plotly/validators/heatmapgl/_dy.py plotly/validators/heatmapgl/_hoverinfo.py plotly/validators/heatmapgl/_hoverinfosrc.py plotly/validators/heatmapgl/_hoverlabel.py plotly/validators/heatmapgl/_ids.py plotly/validators/heatmapgl/_idssrc.py plotly/validators/heatmapgl/_legend.py plotly/validators/heatmapgl/_legendgrouptitle.py plotly/validators/heatmapgl/_legendrank.py plotly/validators/heatmapgl/_legendwidth.py plotly/validators/heatmapgl/_meta.py plotly/validators/heatmapgl/_metasrc.py plotly/validators/heatmapgl/_name.py plotly/validators/heatmapgl/_opacity.py plotly/validators/heatmapgl/_reversescale.py plotly/validators/heatmapgl/_showscale.py plotly/validators/heatmapgl/_stream.py plotly/validators/heatmapgl/_text.py plotly/validators/heatmapgl/_textsrc.py plotly/validators/heatmapgl/_transpose.py plotly/validators/heatmapgl/_uid.py plotly/validators/heatmapgl/_uirevision.py plotly/validators/heatmapgl/_visible.py plotly/validators/heatmapgl/_x.py plotly/validators/heatmapgl/_x0.py plotly/validators/heatmapgl/_xaxis.py plotly/validators/heatmapgl/_xsrc.py plotly/validators/heatmapgl/_xtype.py plotly/validators/heatmapgl/_y.py plotly/validators/heatmapgl/_y0.py plotly/validators/heatmapgl/_yaxis.py plotly/validators/heatmapgl/_ysrc.py plotly/validators/heatmapgl/_ytype.py plotly/validators/heatmapgl/_z.py plotly/validators/heatmapgl/_zauto.py plotly/validators/heatmapgl/_zmax.py plotly/validators/heatmapgl/_zmid.py plotly/validators/heatmapgl/_zmin.py plotly/validators/heatmapgl/_zsmooth.py plotly/validators/heatmapgl/_zsrc.py plotly/validators/heatmapgl/colorbar/__init__.py plotly/validators/heatmapgl/colorbar/_bgcolor.py plotly/validators/heatmapgl/colorbar/_bordercolor.py plotly/validators/heatmapgl/colorbar/_borderwidth.py plotly/validators/heatmapgl/colorbar/_dtick.py plotly/validators/heatmapgl/colorbar/_exponentformat.py plotly/validators/heatmapgl/colorbar/_labelalias.py plotly/validators/heatmapgl/colorbar/_len.py plotly/validators/heatmapgl/colorbar/_lenmode.py plotly/validators/heatmapgl/colorbar/_minexponent.py plotly/validators/heatmapgl/colorbar/_nticks.py plotly/validators/heatmapgl/colorbar/_orientation.py plotly/validators/heatmapgl/colorbar/_outlinecolor.py plotly/validators/heatmapgl/colorbar/_outlinewidth.py plotly/validators/heatmapgl/colorbar/_separatethousands.py plotly/validators/heatmapgl/colorbar/_showexponent.py plotly/validators/heatmapgl/colorbar/_showticklabels.py plotly/validators/heatmapgl/colorbar/_showtickprefix.py plotly/validators/heatmapgl/colorbar/_showticksuffix.py plotly/validators/heatmapgl/colorbar/_thickness.py plotly/validators/heatmapgl/colorbar/_thicknessmode.py plotly/validators/heatmapgl/colorbar/_tick0.py plotly/validators/heatmapgl/colorbar/_tickangle.py plotly/validators/heatmapgl/colorbar/_tickcolor.py plotly/validators/heatmapgl/colorbar/_tickfont.py plotly/validators/heatmapgl/colorbar/_tickformat.py plotly/validators/heatmapgl/colorbar/_tickformatstopdefaults.py plotly/validators/heatmapgl/colorbar/_tickformatstops.py plotly/validators/heatmapgl/colorbar/_ticklabeloverflow.py plotly/validators/heatmapgl/colorbar/_ticklabelposition.py plotly/validators/heatmapgl/colorbar/_ticklabelstep.py plotly/validators/heatmapgl/colorbar/_ticklen.py plotly/validators/heatmapgl/colorbar/_tickmode.py plotly/validators/heatmapgl/colorbar/_tickprefix.py plotly/validators/heatmapgl/colorbar/_ticks.py plotly/validators/heatmapgl/colorbar/_ticksuffix.py plotly/validators/heatmapgl/colorbar/_ticktext.py plotly/validators/heatmapgl/colorbar/_ticktextsrc.py plotly/validators/heatmapgl/colorbar/_tickvals.py plotly/validators/heatmapgl/colorbar/_tickvalssrc.py plotly/validators/heatmapgl/colorbar/_tickwidth.py plotly/validators/heatmapgl/colorbar/_title.py plotly/validators/heatmapgl/colorbar/_x.py plotly/validators/heatmapgl/colorbar/_xanchor.py plotly/validators/heatmapgl/colorbar/_xpad.py plotly/validators/heatmapgl/colorbar/_xref.py plotly/validators/heatmapgl/colorbar/_y.py plotly/validators/heatmapgl/colorbar/_yanchor.py plotly/validators/heatmapgl/colorbar/_ypad.py plotly/validators/heatmapgl/colorbar/_yref.py plotly/validators/heatmapgl/colorbar/tickfont/__init__.py plotly/validators/heatmapgl/colorbar/tickfont/_color.py plotly/validators/heatmapgl/colorbar/tickfont/_family.py plotly/validators/heatmapgl/colorbar/tickfont/_size.py plotly/validators/heatmapgl/colorbar/tickformatstop/__init__.py plotly/validators/heatmapgl/colorbar/tickformatstop/_dtickrange.py plotly/validators/heatmapgl/colorbar/tickformatstop/_enabled.py plotly/validators/heatmapgl/colorbar/tickformatstop/_name.py plotly/validators/heatmapgl/colorbar/tickformatstop/_templateitemname.py plotly/validators/heatmapgl/colorbar/tickformatstop/_value.py plotly/validators/heatmapgl/colorbar/title/__init__.py plotly/validators/heatmapgl/colorbar/title/_font.py plotly/validators/heatmapgl/colorbar/title/_side.py plotly/validators/heatmapgl/colorbar/title/_text.py plotly/validators/heatmapgl/colorbar/title/font/__init__.py plotly/validators/heatmapgl/colorbar/title/font/_color.py plotly/validators/heatmapgl/colorbar/title/font/_family.py plotly/validators/heatmapgl/colorbar/title/font/_size.py plotly/validators/heatmapgl/hoverlabel/__init__.py plotly/validators/heatmapgl/hoverlabel/_align.py plotly/validators/heatmapgl/hoverlabel/_alignsrc.py plotly/validators/heatmapgl/hoverlabel/_bgcolor.py plotly/validators/heatmapgl/hoverlabel/_bgcolorsrc.py plotly/validators/heatmapgl/hoverlabel/_bordercolor.py plotly/validators/heatmapgl/hoverlabel/_bordercolorsrc.py plotly/validators/heatmapgl/hoverlabel/_font.py plotly/validators/heatmapgl/hoverlabel/_namelength.py plotly/validators/heatmapgl/hoverlabel/_namelengthsrc.py plotly/validators/heatmapgl/hoverlabel/font/__init__.py plotly/validators/heatmapgl/hoverlabel/font/_color.py plotly/validators/heatmapgl/hoverlabel/font/_colorsrc.py plotly/validators/heatmapgl/hoverlabel/font/_family.py plotly/validators/heatmapgl/hoverlabel/font/_familysrc.py plotly/validators/heatmapgl/hoverlabel/font/_size.py plotly/validators/heatmapgl/hoverlabel/font/_sizesrc.py plotly/validators/heatmapgl/legendgrouptitle/__init__.py plotly/validators/heatmapgl/legendgrouptitle/_font.py plotly/validators/heatmapgl/legendgrouptitle/_text.py plotly/validators/heatmapgl/legendgrouptitle/font/__init__.py plotly/validators/heatmapgl/legendgrouptitle/font/_color.py plotly/validators/heatmapgl/legendgrouptitle/font/_family.py plotly/validators/heatmapgl/legendgrouptitle/font/_size.py plotly/validators/heatmapgl/stream/__init__.py plotly/validators/heatmapgl/stream/_maxpoints.py plotly/validators/heatmapgl/stream/_token.py plotly/validators/histogram/__init__.py plotly/validators/histogram/_alignmentgroup.py plotly/validators/histogram/_autobinx.py plotly/validators/histogram/_autobiny.py plotly/validators/histogram/_bingroup.py plotly/validators/histogram/_cliponaxis.py plotly/validators/histogram/_constraintext.py plotly/validators/histogram/_cumulative.py plotly/validators/histogram/_customdata.py plotly/validators/histogram/_customdatasrc.py plotly/validators/histogram/_error_x.py plotly/validators/histogram/_error_y.py plotly/validators/histogram/_histfunc.py plotly/validators/histogram/_histnorm.py plotly/validators/histogram/_hoverinfo.py plotly/validators/histogram/_hoverinfosrc.py plotly/validators/histogram/_hoverlabel.py plotly/validators/histogram/_hovertemplate.py plotly/validators/histogram/_hovertemplatesrc.py plotly/validators/histogram/_hovertext.py plotly/validators/histogram/_hovertextsrc.py plotly/validators/histogram/_ids.py plotly/validators/histogram/_idssrc.py plotly/validators/histogram/_insidetextanchor.py plotly/validators/histogram/_insidetextfont.py plotly/validators/histogram/_legend.py plotly/validators/histogram/_legendgroup.py plotly/validators/histogram/_legendgrouptitle.py plotly/validators/histogram/_legendrank.py plotly/validators/histogram/_legendwidth.py plotly/validators/histogram/_marker.py plotly/validators/histogram/_meta.py plotly/validators/histogram/_metasrc.py plotly/validators/histogram/_name.py plotly/validators/histogram/_nbinsx.py plotly/validators/histogram/_nbinsy.py plotly/validators/histogram/_offsetgroup.py plotly/validators/histogram/_opacity.py plotly/validators/histogram/_orientation.py plotly/validators/histogram/_outsidetextfont.py plotly/validators/histogram/_selected.py plotly/validators/histogram/_selectedpoints.py plotly/validators/histogram/_showlegend.py plotly/validators/histogram/_stream.py plotly/validators/histogram/_text.py plotly/validators/histogram/_textangle.py plotly/validators/histogram/_textfont.py plotly/validators/histogram/_textposition.py plotly/validators/histogram/_textsrc.py plotly/validators/histogram/_texttemplate.py plotly/validators/histogram/_uid.py plotly/validators/histogram/_uirevision.py plotly/validators/histogram/_unselected.py plotly/validators/histogram/_visible.py plotly/validators/histogram/_x.py plotly/validators/histogram/_xaxis.py plotly/validators/histogram/_xbins.py plotly/validators/histogram/_xcalendar.py plotly/validators/histogram/_xhoverformat.py plotly/validators/histogram/_xsrc.py plotly/validators/histogram/_y.py plotly/validators/histogram/_yaxis.py plotly/validators/histogram/_ybins.py plotly/validators/histogram/_ycalendar.py plotly/validators/histogram/_yhoverformat.py plotly/validators/histogram/_ysrc.py plotly/validators/histogram/cumulative/__init__.py plotly/validators/histogram/cumulative/_currentbin.py plotly/validators/histogram/cumulative/_direction.py plotly/validators/histogram/cumulative/_enabled.py plotly/validators/histogram/error_x/__init__.py plotly/validators/histogram/error_x/_array.py plotly/validators/histogram/error_x/_arrayminus.py plotly/validators/histogram/error_x/_arrayminussrc.py plotly/validators/histogram/error_x/_arraysrc.py plotly/validators/histogram/error_x/_color.py plotly/validators/histogram/error_x/_copy_ystyle.py plotly/validators/histogram/error_x/_symmetric.py plotly/validators/histogram/error_x/_thickness.py plotly/validators/histogram/error_x/_traceref.py plotly/validators/histogram/error_x/_tracerefminus.py plotly/validators/histogram/error_x/_type.py plotly/validators/histogram/error_x/_value.py plotly/validators/histogram/error_x/_valueminus.py plotly/validators/histogram/error_x/_visible.py plotly/validators/histogram/error_x/_width.py plotly/validators/histogram/error_y/__init__.py plotly/validators/histogram/error_y/_array.py plotly/validators/histogram/error_y/_arrayminus.py plotly/validators/histogram/error_y/_arrayminussrc.py plotly/validators/histogram/error_y/_arraysrc.py plotly/validators/histogram/error_y/_color.py plotly/validators/histogram/error_y/_symmetric.py plotly/validators/histogram/error_y/_thickness.py plotly/validators/histogram/error_y/_traceref.py plotly/validators/histogram/error_y/_tracerefminus.py plotly/validators/histogram/error_y/_type.py plotly/validators/histogram/error_y/_value.py plotly/validators/histogram/error_y/_valueminus.py plotly/validators/histogram/error_y/_visible.py plotly/validators/histogram/error_y/_width.py plotly/validators/histogram/hoverlabel/__init__.py plotly/validators/histogram/hoverlabel/_align.py plotly/validators/histogram/hoverlabel/_alignsrc.py plotly/validators/histogram/hoverlabel/_bgcolor.py plotly/validators/histogram/hoverlabel/_bgcolorsrc.py plotly/validators/histogram/hoverlabel/_bordercolor.py plotly/validators/histogram/hoverlabel/_bordercolorsrc.py plotly/validators/histogram/hoverlabel/_font.py plotly/validators/histogram/hoverlabel/_namelength.py plotly/validators/histogram/hoverlabel/_namelengthsrc.py plotly/validators/histogram/hoverlabel/font/__init__.py plotly/validators/histogram/hoverlabel/font/_color.py plotly/validators/histogram/hoverlabel/font/_colorsrc.py plotly/validators/histogram/hoverlabel/font/_family.py plotly/validators/histogram/hoverlabel/font/_familysrc.py plotly/validators/histogram/hoverlabel/font/_size.py plotly/validators/histogram/hoverlabel/font/_sizesrc.py plotly/validators/histogram/insidetextfont/__init__.py plotly/validators/histogram/insidetextfont/_color.py plotly/validators/histogram/insidetextfont/_family.py plotly/validators/histogram/insidetextfont/_size.py plotly/validators/histogram/legendgrouptitle/__init__.py plotly/validators/histogram/legendgrouptitle/_font.py plotly/validators/histogram/legendgrouptitle/_text.py plotly/validators/histogram/legendgrouptitle/font/__init__.py plotly/validators/histogram/legendgrouptitle/font/_color.py plotly/validators/histogram/legendgrouptitle/font/_family.py plotly/validators/histogram/legendgrouptitle/font/_size.py plotly/validators/histogram/marker/__init__.py plotly/validators/histogram/marker/_autocolorscale.py plotly/validators/histogram/marker/_cauto.py plotly/validators/histogram/marker/_cmax.py plotly/validators/histogram/marker/_cmid.py plotly/validators/histogram/marker/_cmin.py plotly/validators/histogram/marker/_color.py plotly/validators/histogram/marker/_coloraxis.py plotly/validators/histogram/marker/_colorbar.py plotly/validators/histogram/marker/_colorscale.py plotly/validators/histogram/marker/_colorsrc.py plotly/validators/histogram/marker/_line.py plotly/validators/histogram/marker/_opacity.py plotly/validators/histogram/marker/_opacitysrc.py plotly/validators/histogram/marker/_pattern.py plotly/validators/histogram/marker/_reversescale.py plotly/validators/histogram/marker/_showscale.py plotly/validators/histogram/marker/colorbar/__init__.py plotly/validators/histogram/marker/colorbar/_bgcolor.py plotly/validators/histogram/marker/colorbar/_bordercolor.py plotly/validators/histogram/marker/colorbar/_borderwidth.py plotly/validators/histogram/marker/colorbar/_dtick.py plotly/validators/histogram/marker/colorbar/_exponentformat.py plotly/validators/histogram/marker/colorbar/_labelalias.py plotly/validators/histogram/marker/colorbar/_len.py plotly/validators/histogram/marker/colorbar/_lenmode.py plotly/validators/histogram/marker/colorbar/_minexponent.py plotly/validators/histogram/marker/colorbar/_nticks.py plotly/validators/histogram/marker/colorbar/_orientation.py plotly/validators/histogram/marker/colorbar/_outlinecolor.py plotly/validators/histogram/marker/colorbar/_outlinewidth.py plotly/validators/histogram/marker/colorbar/_separatethousands.py plotly/validators/histogram/marker/colorbar/_showexponent.py plotly/validators/histogram/marker/colorbar/_showticklabels.py plotly/validators/histogram/marker/colorbar/_showtickprefix.py plotly/validators/histogram/marker/colorbar/_showticksuffix.py plotly/validators/histogram/marker/colorbar/_thickness.py plotly/validators/histogram/marker/colorbar/_thicknessmode.py plotly/validators/histogram/marker/colorbar/_tick0.py plotly/validators/histogram/marker/colorbar/_tickangle.py plotly/validators/histogram/marker/colorbar/_tickcolor.py plotly/validators/histogram/marker/colorbar/_tickfont.py plotly/validators/histogram/marker/colorbar/_tickformat.py plotly/validators/histogram/marker/colorbar/_tickformatstopdefaults.py plotly/validators/histogram/marker/colorbar/_tickformatstops.py plotly/validators/histogram/marker/colorbar/_ticklabeloverflow.py plotly/validators/histogram/marker/colorbar/_ticklabelposition.py plotly/validators/histogram/marker/colorbar/_ticklabelstep.py plotly/validators/histogram/marker/colorbar/_ticklen.py plotly/validators/histogram/marker/colorbar/_tickmode.py plotly/validators/histogram/marker/colorbar/_tickprefix.py plotly/validators/histogram/marker/colorbar/_ticks.py plotly/validators/histogram/marker/colorbar/_ticksuffix.py plotly/validators/histogram/marker/colorbar/_ticktext.py plotly/validators/histogram/marker/colorbar/_ticktextsrc.py plotly/validators/histogram/marker/colorbar/_tickvals.py plotly/validators/histogram/marker/colorbar/_tickvalssrc.py plotly/validators/histogram/marker/colorbar/_tickwidth.py plotly/validators/histogram/marker/colorbar/_title.py plotly/validators/histogram/marker/colorbar/_x.py plotly/validators/histogram/marker/colorbar/_xanchor.py plotly/validators/histogram/marker/colorbar/_xpad.py plotly/validators/histogram/marker/colorbar/_xref.py plotly/validators/histogram/marker/colorbar/_y.py plotly/validators/histogram/marker/colorbar/_yanchor.py plotly/validators/histogram/marker/colorbar/_ypad.py plotly/validators/histogram/marker/colorbar/_yref.py plotly/validators/histogram/marker/colorbar/tickfont/__init__.py plotly/validators/histogram/marker/colorbar/tickfont/_color.py plotly/validators/histogram/marker/colorbar/tickfont/_family.py plotly/validators/histogram/marker/colorbar/tickfont/_size.py plotly/validators/histogram/marker/colorbar/tickformatstop/__init__.py plotly/validators/histogram/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/histogram/marker/colorbar/tickformatstop/_enabled.py plotly/validators/histogram/marker/colorbar/tickformatstop/_name.py plotly/validators/histogram/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/histogram/marker/colorbar/tickformatstop/_value.py plotly/validators/histogram/marker/colorbar/title/__init__.py plotly/validators/histogram/marker/colorbar/title/_font.py plotly/validators/histogram/marker/colorbar/title/_side.py plotly/validators/histogram/marker/colorbar/title/_text.py plotly/validators/histogram/marker/colorbar/title/font/__init__.py plotly/validators/histogram/marker/colorbar/title/font/_color.py plotly/validators/histogram/marker/colorbar/title/font/_family.py plotly/validators/histogram/marker/colorbar/title/font/_size.py plotly/validators/histogram/marker/line/__init__.py plotly/validators/histogram/marker/line/_autocolorscale.py plotly/validators/histogram/marker/line/_cauto.py plotly/validators/histogram/marker/line/_cmax.py plotly/validators/histogram/marker/line/_cmid.py plotly/validators/histogram/marker/line/_cmin.py plotly/validators/histogram/marker/line/_color.py plotly/validators/histogram/marker/line/_coloraxis.py plotly/validators/histogram/marker/line/_colorscale.py plotly/validators/histogram/marker/line/_colorsrc.py plotly/validators/histogram/marker/line/_reversescale.py plotly/validators/histogram/marker/line/_width.py plotly/validators/histogram/marker/line/_widthsrc.py plotly/validators/histogram/marker/pattern/__init__.py plotly/validators/histogram/marker/pattern/_bgcolor.py plotly/validators/histogram/marker/pattern/_bgcolorsrc.py plotly/validators/histogram/marker/pattern/_fgcolor.py plotly/validators/histogram/marker/pattern/_fgcolorsrc.py plotly/validators/histogram/marker/pattern/_fgopacity.py plotly/validators/histogram/marker/pattern/_fillmode.py plotly/validators/histogram/marker/pattern/_shape.py plotly/validators/histogram/marker/pattern/_shapesrc.py plotly/validators/histogram/marker/pattern/_size.py plotly/validators/histogram/marker/pattern/_sizesrc.py plotly/validators/histogram/marker/pattern/_solidity.py plotly/validators/histogram/marker/pattern/_soliditysrc.py plotly/validators/histogram/outsidetextfont/__init__.py plotly/validators/histogram/outsidetextfont/_color.py plotly/validators/histogram/outsidetextfont/_family.py plotly/validators/histogram/outsidetextfont/_size.py plotly/validators/histogram/selected/__init__.py plotly/validators/histogram/selected/_marker.py plotly/validators/histogram/selected/_textfont.py plotly/validators/histogram/selected/marker/__init__.py plotly/validators/histogram/selected/marker/_color.py plotly/validators/histogram/selected/marker/_opacity.py plotly/validators/histogram/selected/textfont/__init__.py plotly/validators/histogram/selected/textfont/_color.py plotly/validators/histogram/stream/__init__.py plotly/validators/histogram/stream/_maxpoints.py plotly/validators/histogram/stream/_token.py plotly/validators/histogram/textfont/__init__.py plotly/validators/histogram/textfont/_color.py plotly/validators/histogram/textfont/_family.py plotly/validators/histogram/textfont/_size.py plotly/validators/histogram/unselected/__init__.py plotly/validators/histogram/unselected/_marker.py plotly/validators/histogram/unselected/_textfont.py plotly/validators/histogram/unselected/marker/__init__.py plotly/validators/histogram/unselected/marker/_color.py plotly/validators/histogram/unselected/marker/_opacity.py plotly/validators/histogram/unselected/textfont/__init__.py plotly/validators/histogram/unselected/textfont/_color.py plotly/validators/histogram/xbins/__init__.py plotly/validators/histogram/xbins/_end.py plotly/validators/histogram/xbins/_size.py plotly/validators/histogram/xbins/_start.py plotly/validators/histogram/ybins/__init__.py plotly/validators/histogram/ybins/_end.py plotly/validators/histogram/ybins/_size.py plotly/validators/histogram/ybins/_start.py plotly/validators/histogram2d/__init__.py plotly/validators/histogram2d/_autobinx.py plotly/validators/histogram2d/_autobiny.py plotly/validators/histogram2d/_autocolorscale.py plotly/validators/histogram2d/_bingroup.py plotly/validators/histogram2d/_coloraxis.py plotly/validators/histogram2d/_colorbar.py plotly/validators/histogram2d/_colorscale.py plotly/validators/histogram2d/_customdata.py plotly/validators/histogram2d/_customdatasrc.py plotly/validators/histogram2d/_histfunc.py plotly/validators/histogram2d/_histnorm.py plotly/validators/histogram2d/_hoverinfo.py plotly/validators/histogram2d/_hoverinfosrc.py plotly/validators/histogram2d/_hoverlabel.py plotly/validators/histogram2d/_hovertemplate.py plotly/validators/histogram2d/_hovertemplatesrc.py plotly/validators/histogram2d/_ids.py plotly/validators/histogram2d/_idssrc.py plotly/validators/histogram2d/_legend.py plotly/validators/histogram2d/_legendgroup.py plotly/validators/histogram2d/_legendgrouptitle.py plotly/validators/histogram2d/_legendrank.py plotly/validators/histogram2d/_legendwidth.py plotly/validators/histogram2d/_marker.py plotly/validators/histogram2d/_meta.py plotly/validators/histogram2d/_metasrc.py plotly/validators/histogram2d/_name.py plotly/validators/histogram2d/_nbinsx.py plotly/validators/histogram2d/_nbinsy.py plotly/validators/histogram2d/_opacity.py plotly/validators/histogram2d/_reversescale.py plotly/validators/histogram2d/_showlegend.py plotly/validators/histogram2d/_showscale.py plotly/validators/histogram2d/_stream.py plotly/validators/histogram2d/_textfont.py plotly/validators/histogram2d/_texttemplate.py plotly/validators/histogram2d/_uid.py plotly/validators/histogram2d/_uirevision.py plotly/validators/histogram2d/_visible.py plotly/validators/histogram2d/_x.py plotly/validators/histogram2d/_xaxis.py plotly/validators/histogram2d/_xbingroup.py plotly/validators/histogram2d/_xbins.py plotly/validators/histogram2d/_xcalendar.py plotly/validators/histogram2d/_xgap.py plotly/validators/histogram2d/_xhoverformat.py plotly/validators/histogram2d/_xsrc.py plotly/validators/histogram2d/_y.py plotly/validators/histogram2d/_yaxis.py plotly/validators/histogram2d/_ybingroup.py plotly/validators/histogram2d/_ybins.py plotly/validators/histogram2d/_ycalendar.py plotly/validators/histogram2d/_ygap.py plotly/validators/histogram2d/_yhoverformat.py plotly/validators/histogram2d/_ysrc.py plotly/validators/histogram2d/_z.py plotly/validators/histogram2d/_zauto.py plotly/validators/histogram2d/_zhoverformat.py plotly/validators/histogram2d/_zmax.py plotly/validators/histogram2d/_zmid.py plotly/validators/histogram2d/_zmin.py plotly/validators/histogram2d/_zsmooth.py plotly/validators/histogram2d/_zsrc.py plotly/validators/histogram2d/colorbar/__init__.py plotly/validators/histogram2d/colorbar/_bgcolor.py plotly/validators/histogram2d/colorbar/_bordercolor.py plotly/validators/histogram2d/colorbar/_borderwidth.py plotly/validators/histogram2d/colorbar/_dtick.py plotly/validators/histogram2d/colorbar/_exponentformat.py plotly/validators/histogram2d/colorbar/_labelalias.py plotly/validators/histogram2d/colorbar/_len.py plotly/validators/histogram2d/colorbar/_lenmode.py plotly/validators/histogram2d/colorbar/_minexponent.py plotly/validators/histogram2d/colorbar/_nticks.py plotly/validators/histogram2d/colorbar/_orientation.py plotly/validators/histogram2d/colorbar/_outlinecolor.py plotly/validators/histogram2d/colorbar/_outlinewidth.py plotly/validators/histogram2d/colorbar/_separatethousands.py plotly/validators/histogram2d/colorbar/_showexponent.py plotly/validators/histogram2d/colorbar/_showticklabels.py plotly/validators/histogram2d/colorbar/_showtickprefix.py plotly/validators/histogram2d/colorbar/_showticksuffix.py plotly/validators/histogram2d/colorbar/_thickness.py plotly/validators/histogram2d/colorbar/_thicknessmode.py plotly/validators/histogram2d/colorbar/_tick0.py plotly/validators/histogram2d/colorbar/_tickangle.py plotly/validators/histogram2d/colorbar/_tickcolor.py plotly/validators/histogram2d/colorbar/_tickfont.py plotly/validators/histogram2d/colorbar/_tickformat.py plotly/validators/histogram2d/colorbar/_tickformatstopdefaults.py plotly/validators/histogram2d/colorbar/_tickformatstops.py plotly/validators/histogram2d/colorbar/_ticklabeloverflow.py plotly/validators/histogram2d/colorbar/_ticklabelposition.py plotly/validators/histogram2d/colorbar/_ticklabelstep.py plotly/validators/histogram2d/colorbar/_ticklen.py plotly/validators/histogram2d/colorbar/_tickmode.py plotly/validators/histogram2d/colorbar/_tickprefix.py plotly/validators/histogram2d/colorbar/_ticks.py plotly/validators/histogram2d/colorbar/_ticksuffix.py plotly/validators/histogram2d/colorbar/_ticktext.py plotly/validators/histogram2d/colorbar/_ticktextsrc.py plotly/validators/histogram2d/colorbar/_tickvals.py plotly/validators/histogram2d/colorbar/_tickvalssrc.py plotly/validators/histogram2d/colorbar/_tickwidth.py plotly/validators/histogram2d/colorbar/_title.py plotly/validators/histogram2d/colorbar/_x.py plotly/validators/histogram2d/colorbar/_xanchor.py plotly/validators/histogram2d/colorbar/_xpad.py plotly/validators/histogram2d/colorbar/_xref.py plotly/validators/histogram2d/colorbar/_y.py plotly/validators/histogram2d/colorbar/_yanchor.py plotly/validators/histogram2d/colorbar/_ypad.py plotly/validators/histogram2d/colorbar/_yref.py plotly/validators/histogram2d/colorbar/tickfont/__init__.py plotly/validators/histogram2d/colorbar/tickfont/_color.py plotly/validators/histogram2d/colorbar/tickfont/_family.py plotly/validators/histogram2d/colorbar/tickfont/_size.py plotly/validators/histogram2d/colorbar/tickformatstop/__init__.py plotly/validators/histogram2d/colorbar/tickformatstop/_dtickrange.py plotly/validators/histogram2d/colorbar/tickformatstop/_enabled.py plotly/validators/histogram2d/colorbar/tickformatstop/_name.py plotly/validators/histogram2d/colorbar/tickformatstop/_templateitemname.py plotly/validators/histogram2d/colorbar/tickformatstop/_value.py plotly/validators/histogram2d/colorbar/title/__init__.py plotly/validators/histogram2d/colorbar/title/_font.py plotly/validators/histogram2d/colorbar/title/_side.py plotly/validators/histogram2d/colorbar/title/_text.py plotly/validators/histogram2d/colorbar/title/font/__init__.py plotly/validators/histogram2d/colorbar/title/font/_color.py plotly/validators/histogram2d/colorbar/title/font/_family.py plotly/validators/histogram2d/colorbar/title/font/_size.py plotly/validators/histogram2d/hoverlabel/__init__.py plotly/validators/histogram2d/hoverlabel/_align.py plotly/validators/histogram2d/hoverlabel/_alignsrc.py plotly/validators/histogram2d/hoverlabel/_bgcolor.py plotly/validators/histogram2d/hoverlabel/_bgcolorsrc.py plotly/validators/histogram2d/hoverlabel/_bordercolor.py plotly/validators/histogram2d/hoverlabel/_bordercolorsrc.py plotly/validators/histogram2d/hoverlabel/_font.py plotly/validators/histogram2d/hoverlabel/_namelength.py plotly/validators/histogram2d/hoverlabel/_namelengthsrc.py plotly/validators/histogram2d/hoverlabel/font/__init__.py plotly/validators/histogram2d/hoverlabel/font/_color.py plotly/validators/histogram2d/hoverlabel/font/_colorsrc.py plotly/validators/histogram2d/hoverlabel/font/_family.py plotly/validators/histogram2d/hoverlabel/font/_familysrc.py plotly/validators/histogram2d/hoverlabel/font/_size.py plotly/validators/histogram2d/hoverlabel/font/_sizesrc.py plotly/validators/histogram2d/legendgrouptitle/__init__.py plotly/validators/histogram2d/legendgrouptitle/_font.py plotly/validators/histogram2d/legendgrouptitle/_text.py plotly/validators/histogram2d/legendgrouptitle/font/__init__.py plotly/validators/histogram2d/legendgrouptitle/font/_color.py plotly/validators/histogram2d/legendgrouptitle/font/_family.py plotly/validators/histogram2d/legendgrouptitle/font/_size.py plotly/validators/histogram2d/marker/__init__.py plotly/validators/histogram2d/marker/_color.py plotly/validators/histogram2d/marker/_colorsrc.py plotly/validators/histogram2d/stream/__init__.py plotly/validators/histogram2d/stream/_maxpoints.py plotly/validators/histogram2d/stream/_token.py plotly/validators/histogram2d/textfont/__init__.py plotly/validators/histogram2d/textfont/_color.py plotly/validators/histogram2d/textfont/_family.py plotly/validators/histogram2d/textfont/_size.py plotly/validators/histogram2d/xbins/__init__.py plotly/validators/histogram2d/xbins/_end.py plotly/validators/histogram2d/xbins/_size.py plotly/validators/histogram2d/xbins/_start.py plotly/validators/histogram2d/ybins/__init__.py plotly/validators/histogram2d/ybins/_end.py plotly/validators/histogram2d/ybins/_size.py plotly/validators/histogram2d/ybins/_start.py plotly/validators/histogram2dcontour/__init__.py plotly/validators/histogram2dcontour/_autobinx.py plotly/validators/histogram2dcontour/_autobiny.py plotly/validators/histogram2dcontour/_autocolorscale.py plotly/validators/histogram2dcontour/_autocontour.py plotly/validators/histogram2dcontour/_bingroup.py plotly/validators/histogram2dcontour/_coloraxis.py plotly/validators/histogram2dcontour/_colorbar.py plotly/validators/histogram2dcontour/_colorscale.py plotly/validators/histogram2dcontour/_contours.py plotly/validators/histogram2dcontour/_customdata.py plotly/validators/histogram2dcontour/_customdatasrc.py plotly/validators/histogram2dcontour/_histfunc.py plotly/validators/histogram2dcontour/_histnorm.py plotly/validators/histogram2dcontour/_hoverinfo.py plotly/validators/histogram2dcontour/_hoverinfosrc.py plotly/validators/histogram2dcontour/_hoverlabel.py plotly/validators/histogram2dcontour/_hovertemplate.py plotly/validators/histogram2dcontour/_hovertemplatesrc.py plotly/validators/histogram2dcontour/_ids.py plotly/validators/histogram2dcontour/_idssrc.py plotly/validators/histogram2dcontour/_legend.py plotly/validators/histogram2dcontour/_legendgroup.py plotly/validators/histogram2dcontour/_legendgrouptitle.py plotly/validators/histogram2dcontour/_legendrank.py plotly/validators/histogram2dcontour/_legendwidth.py plotly/validators/histogram2dcontour/_line.py plotly/validators/histogram2dcontour/_marker.py plotly/validators/histogram2dcontour/_meta.py plotly/validators/histogram2dcontour/_metasrc.py plotly/validators/histogram2dcontour/_name.py plotly/validators/histogram2dcontour/_nbinsx.py plotly/validators/histogram2dcontour/_nbinsy.py plotly/validators/histogram2dcontour/_ncontours.py plotly/validators/histogram2dcontour/_opacity.py plotly/validators/histogram2dcontour/_reversescale.py plotly/validators/histogram2dcontour/_showlegend.py plotly/validators/histogram2dcontour/_showscale.py plotly/validators/histogram2dcontour/_stream.py plotly/validators/histogram2dcontour/_textfont.py plotly/validators/histogram2dcontour/_texttemplate.py plotly/validators/histogram2dcontour/_uid.py plotly/validators/histogram2dcontour/_uirevision.py plotly/validators/histogram2dcontour/_visible.py plotly/validators/histogram2dcontour/_x.py plotly/validators/histogram2dcontour/_xaxis.py plotly/validators/histogram2dcontour/_xbingroup.py plotly/validators/histogram2dcontour/_xbins.py plotly/validators/histogram2dcontour/_xcalendar.py plotly/validators/histogram2dcontour/_xhoverformat.py plotly/validators/histogram2dcontour/_xsrc.py plotly/validators/histogram2dcontour/_y.py plotly/validators/histogram2dcontour/_yaxis.py plotly/validators/histogram2dcontour/_ybingroup.py plotly/validators/histogram2dcontour/_ybins.py plotly/validators/histogram2dcontour/_ycalendar.py plotly/validators/histogram2dcontour/_yhoverformat.py plotly/validators/histogram2dcontour/_ysrc.py plotly/validators/histogram2dcontour/_z.py plotly/validators/histogram2dcontour/_zauto.py plotly/validators/histogram2dcontour/_zhoverformat.py plotly/validators/histogram2dcontour/_zmax.py plotly/validators/histogram2dcontour/_zmid.py plotly/validators/histogram2dcontour/_zmin.py plotly/validators/histogram2dcontour/_zsrc.py plotly/validators/histogram2dcontour/colorbar/__init__.py plotly/validators/histogram2dcontour/colorbar/_bgcolor.py plotly/validators/histogram2dcontour/colorbar/_bordercolor.py plotly/validators/histogram2dcontour/colorbar/_borderwidth.py plotly/validators/histogram2dcontour/colorbar/_dtick.py plotly/validators/histogram2dcontour/colorbar/_exponentformat.py plotly/validators/histogram2dcontour/colorbar/_labelalias.py plotly/validators/histogram2dcontour/colorbar/_len.py plotly/validators/histogram2dcontour/colorbar/_lenmode.py plotly/validators/histogram2dcontour/colorbar/_minexponent.py plotly/validators/histogram2dcontour/colorbar/_nticks.py plotly/validators/histogram2dcontour/colorbar/_orientation.py plotly/validators/histogram2dcontour/colorbar/_outlinecolor.py plotly/validators/histogram2dcontour/colorbar/_outlinewidth.py plotly/validators/histogram2dcontour/colorbar/_separatethousands.py plotly/validators/histogram2dcontour/colorbar/_showexponent.py plotly/validators/histogram2dcontour/colorbar/_showticklabels.py plotly/validators/histogram2dcontour/colorbar/_showtickprefix.py plotly/validators/histogram2dcontour/colorbar/_showticksuffix.py plotly/validators/histogram2dcontour/colorbar/_thickness.py plotly/validators/histogram2dcontour/colorbar/_thicknessmode.py plotly/validators/histogram2dcontour/colorbar/_tick0.py plotly/validators/histogram2dcontour/colorbar/_tickangle.py plotly/validators/histogram2dcontour/colorbar/_tickcolor.py plotly/validators/histogram2dcontour/colorbar/_tickfont.py plotly/validators/histogram2dcontour/colorbar/_tickformat.py plotly/validators/histogram2dcontour/colorbar/_tickformatstopdefaults.py plotly/validators/histogram2dcontour/colorbar/_tickformatstops.py plotly/validators/histogram2dcontour/colorbar/_ticklabeloverflow.py plotly/validators/histogram2dcontour/colorbar/_ticklabelposition.py plotly/validators/histogram2dcontour/colorbar/_ticklabelstep.py plotly/validators/histogram2dcontour/colorbar/_ticklen.py plotly/validators/histogram2dcontour/colorbar/_tickmode.py plotly/validators/histogram2dcontour/colorbar/_tickprefix.py plotly/validators/histogram2dcontour/colorbar/_ticks.py plotly/validators/histogram2dcontour/colorbar/_ticksuffix.py plotly/validators/histogram2dcontour/colorbar/_ticktext.py plotly/validators/histogram2dcontour/colorbar/_ticktextsrc.py plotly/validators/histogram2dcontour/colorbar/_tickvals.py plotly/validators/histogram2dcontour/colorbar/_tickvalssrc.py plotly/validators/histogram2dcontour/colorbar/_tickwidth.py plotly/validators/histogram2dcontour/colorbar/_title.py plotly/validators/histogram2dcontour/colorbar/_x.py plotly/validators/histogram2dcontour/colorbar/_xanchor.py plotly/validators/histogram2dcontour/colorbar/_xpad.py plotly/validators/histogram2dcontour/colorbar/_xref.py plotly/validators/histogram2dcontour/colorbar/_y.py plotly/validators/histogram2dcontour/colorbar/_yanchor.py plotly/validators/histogram2dcontour/colorbar/_ypad.py plotly/validators/histogram2dcontour/colorbar/_yref.py plotly/validators/histogram2dcontour/colorbar/tickfont/__init__.py plotly/validators/histogram2dcontour/colorbar/tickfont/_color.py plotly/validators/histogram2dcontour/colorbar/tickfont/_family.py plotly/validators/histogram2dcontour/colorbar/tickfont/_size.py plotly/validators/histogram2dcontour/colorbar/tickformatstop/__init__.py plotly/validators/histogram2dcontour/colorbar/tickformatstop/_dtickrange.py plotly/validators/histogram2dcontour/colorbar/tickformatstop/_enabled.py plotly/validators/histogram2dcontour/colorbar/tickformatstop/_name.py plotly/validators/histogram2dcontour/colorbar/tickformatstop/_templateitemname.py plotly/validators/histogram2dcontour/colorbar/tickformatstop/_value.py plotly/validators/histogram2dcontour/colorbar/title/__init__.py plotly/validators/histogram2dcontour/colorbar/title/_font.py plotly/validators/histogram2dcontour/colorbar/title/_side.py plotly/validators/histogram2dcontour/colorbar/title/_text.py plotly/validators/histogram2dcontour/colorbar/title/font/__init__.py plotly/validators/histogram2dcontour/colorbar/title/font/_color.py plotly/validators/histogram2dcontour/colorbar/title/font/_family.py plotly/validators/histogram2dcontour/colorbar/title/font/_size.py plotly/validators/histogram2dcontour/contours/__init__.py plotly/validators/histogram2dcontour/contours/_coloring.py plotly/validators/histogram2dcontour/contours/_end.py plotly/validators/histogram2dcontour/contours/_labelfont.py plotly/validators/histogram2dcontour/contours/_labelformat.py plotly/validators/histogram2dcontour/contours/_operation.py plotly/validators/histogram2dcontour/contours/_showlabels.py plotly/validators/histogram2dcontour/contours/_showlines.py plotly/validators/histogram2dcontour/contours/_size.py plotly/validators/histogram2dcontour/contours/_start.py plotly/validators/histogram2dcontour/contours/_type.py plotly/validators/histogram2dcontour/contours/_value.py plotly/validators/histogram2dcontour/contours/labelfont/__init__.py plotly/validators/histogram2dcontour/contours/labelfont/_color.py plotly/validators/histogram2dcontour/contours/labelfont/_family.py plotly/validators/histogram2dcontour/contours/labelfont/_size.py plotly/validators/histogram2dcontour/hoverlabel/__init__.py plotly/validators/histogram2dcontour/hoverlabel/_align.py plotly/validators/histogram2dcontour/hoverlabel/_alignsrc.py plotly/validators/histogram2dcontour/hoverlabel/_bgcolor.py plotly/validators/histogram2dcontour/hoverlabel/_bgcolorsrc.py plotly/validators/histogram2dcontour/hoverlabel/_bordercolor.py plotly/validators/histogram2dcontour/hoverlabel/_bordercolorsrc.py plotly/validators/histogram2dcontour/hoverlabel/_font.py plotly/validators/histogram2dcontour/hoverlabel/_namelength.py plotly/validators/histogram2dcontour/hoverlabel/_namelengthsrc.py plotly/validators/histogram2dcontour/hoverlabel/font/__init__.py plotly/validators/histogram2dcontour/hoverlabel/font/_color.py plotly/validators/histogram2dcontour/hoverlabel/font/_colorsrc.py plotly/validators/histogram2dcontour/hoverlabel/font/_family.py plotly/validators/histogram2dcontour/hoverlabel/font/_familysrc.py plotly/validators/histogram2dcontour/hoverlabel/font/_size.py plotly/validators/histogram2dcontour/hoverlabel/font/_sizesrc.py plotly/validators/histogram2dcontour/legendgrouptitle/__init__.py plotly/validators/histogram2dcontour/legendgrouptitle/_font.py plotly/validators/histogram2dcontour/legendgrouptitle/_text.py plotly/validators/histogram2dcontour/legendgrouptitle/font/__init__.py plotly/validators/histogram2dcontour/legendgrouptitle/font/_color.py plotly/validators/histogram2dcontour/legendgrouptitle/font/_family.py plotly/validators/histogram2dcontour/legendgrouptitle/font/_size.py plotly/validators/histogram2dcontour/line/__init__.py plotly/validators/histogram2dcontour/line/_color.py plotly/validators/histogram2dcontour/line/_dash.py plotly/validators/histogram2dcontour/line/_smoothing.py plotly/validators/histogram2dcontour/line/_width.py plotly/validators/histogram2dcontour/marker/__init__.py plotly/validators/histogram2dcontour/marker/_color.py plotly/validators/histogram2dcontour/marker/_colorsrc.py plotly/validators/histogram2dcontour/stream/__init__.py plotly/validators/histogram2dcontour/stream/_maxpoints.py plotly/validators/histogram2dcontour/stream/_token.py plotly/validators/histogram2dcontour/textfont/__init__.py plotly/validators/histogram2dcontour/textfont/_color.py plotly/validators/histogram2dcontour/textfont/_family.py plotly/validators/histogram2dcontour/textfont/_size.py plotly/validators/histogram2dcontour/xbins/__init__.py plotly/validators/histogram2dcontour/xbins/_end.py plotly/validators/histogram2dcontour/xbins/_size.py plotly/validators/histogram2dcontour/xbins/_start.py plotly/validators/histogram2dcontour/ybins/__init__.py plotly/validators/histogram2dcontour/ybins/_end.py plotly/validators/histogram2dcontour/ybins/_size.py plotly/validators/histogram2dcontour/ybins/_start.py plotly/validators/icicle/__init__.py plotly/validators/icicle/_branchvalues.py plotly/validators/icicle/_count.py plotly/validators/icicle/_customdata.py plotly/validators/icicle/_customdatasrc.py plotly/validators/icicle/_domain.py plotly/validators/icicle/_hoverinfo.py plotly/validators/icicle/_hoverinfosrc.py plotly/validators/icicle/_hoverlabel.py plotly/validators/icicle/_hovertemplate.py plotly/validators/icicle/_hovertemplatesrc.py plotly/validators/icicle/_hovertext.py plotly/validators/icicle/_hovertextsrc.py plotly/validators/icicle/_ids.py plotly/validators/icicle/_idssrc.py plotly/validators/icicle/_insidetextfont.py plotly/validators/icicle/_labels.py plotly/validators/icicle/_labelssrc.py plotly/validators/icicle/_leaf.py plotly/validators/icicle/_legend.py plotly/validators/icicle/_legendgrouptitle.py plotly/validators/icicle/_legendrank.py plotly/validators/icicle/_legendwidth.py plotly/validators/icicle/_level.py plotly/validators/icicle/_marker.py plotly/validators/icicle/_maxdepth.py plotly/validators/icicle/_meta.py plotly/validators/icicle/_metasrc.py plotly/validators/icicle/_name.py plotly/validators/icicle/_opacity.py plotly/validators/icicle/_outsidetextfont.py plotly/validators/icicle/_parents.py plotly/validators/icicle/_parentssrc.py plotly/validators/icicle/_pathbar.py plotly/validators/icicle/_root.py plotly/validators/icicle/_sort.py plotly/validators/icicle/_stream.py plotly/validators/icicle/_text.py plotly/validators/icicle/_textfont.py plotly/validators/icicle/_textinfo.py plotly/validators/icicle/_textposition.py plotly/validators/icicle/_textsrc.py plotly/validators/icicle/_texttemplate.py plotly/validators/icicle/_texttemplatesrc.py plotly/validators/icicle/_tiling.py plotly/validators/icicle/_uid.py plotly/validators/icicle/_uirevision.py plotly/validators/icicle/_values.py plotly/validators/icicle/_valuessrc.py plotly/validators/icicle/_visible.py plotly/validators/icicle/domain/__init__.py plotly/validators/icicle/domain/_column.py plotly/validators/icicle/domain/_row.py plotly/validators/icicle/domain/_x.py plotly/validators/icicle/domain/_y.py plotly/validators/icicle/hoverlabel/__init__.py plotly/validators/icicle/hoverlabel/_align.py plotly/validators/icicle/hoverlabel/_alignsrc.py plotly/validators/icicle/hoverlabel/_bgcolor.py plotly/validators/icicle/hoverlabel/_bgcolorsrc.py plotly/validators/icicle/hoverlabel/_bordercolor.py plotly/validators/icicle/hoverlabel/_bordercolorsrc.py plotly/validators/icicle/hoverlabel/_font.py plotly/validators/icicle/hoverlabel/_namelength.py plotly/validators/icicle/hoverlabel/_namelengthsrc.py plotly/validators/icicle/hoverlabel/font/__init__.py plotly/validators/icicle/hoverlabel/font/_color.py plotly/validators/icicle/hoverlabel/font/_colorsrc.py plotly/validators/icicle/hoverlabel/font/_family.py plotly/validators/icicle/hoverlabel/font/_familysrc.py plotly/validators/icicle/hoverlabel/font/_size.py plotly/validators/icicle/hoverlabel/font/_sizesrc.py plotly/validators/icicle/insidetextfont/__init__.py plotly/validators/icicle/insidetextfont/_color.py plotly/validators/icicle/insidetextfont/_colorsrc.py plotly/validators/icicle/insidetextfont/_family.py plotly/validators/icicle/insidetextfont/_familysrc.py plotly/validators/icicle/insidetextfont/_size.py plotly/validators/icicle/insidetextfont/_sizesrc.py plotly/validators/icicle/leaf/__init__.py plotly/validators/icicle/leaf/_opacity.py plotly/validators/icicle/legendgrouptitle/__init__.py plotly/validators/icicle/legendgrouptitle/_font.py plotly/validators/icicle/legendgrouptitle/_text.py plotly/validators/icicle/legendgrouptitle/font/__init__.py plotly/validators/icicle/legendgrouptitle/font/_color.py plotly/validators/icicle/legendgrouptitle/font/_family.py plotly/validators/icicle/legendgrouptitle/font/_size.py plotly/validators/icicle/marker/__init__.py plotly/validators/icicle/marker/_autocolorscale.py plotly/validators/icicle/marker/_cauto.py plotly/validators/icicle/marker/_cmax.py plotly/validators/icicle/marker/_cmid.py plotly/validators/icicle/marker/_cmin.py plotly/validators/icicle/marker/_coloraxis.py plotly/validators/icicle/marker/_colorbar.py plotly/validators/icicle/marker/_colors.py plotly/validators/icicle/marker/_colorscale.py plotly/validators/icicle/marker/_colorssrc.py plotly/validators/icicle/marker/_line.py plotly/validators/icicle/marker/_pattern.py plotly/validators/icicle/marker/_reversescale.py plotly/validators/icicle/marker/_showscale.py plotly/validators/icicle/marker/colorbar/__init__.py plotly/validators/icicle/marker/colorbar/_bgcolor.py plotly/validators/icicle/marker/colorbar/_bordercolor.py plotly/validators/icicle/marker/colorbar/_borderwidth.py plotly/validators/icicle/marker/colorbar/_dtick.py plotly/validators/icicle/marker/colorbar/_exponentformat.py plotly/validators/icicle/marker/colorbar/_labelalias.py plotly/validators/icicle/marker/colorbar/_len.py plotly/validators/icicle/marker/colorbar/_lenmode.py plotly/validators/icicle/marker/colorbar/_minexponent.py plotly/validators/icicle/marker/colorbar/_nticks.py plotly/validators/icicle/marker/colorbar/_orientation.py plotly/validators/icicle/marker/colorbar/_outlinecolor.py plotly/validators/icicle/marker/colorbar/_outlinewidth.py plotly/validators/icicle/marker/colorbar/_separatethousands.py plotly/validators/icicle/marker/colorbar/_showexponent.py plotly/validators/icicle/marker/colorbar/_showticklabels.py plotly/validators/icicle/marker/colorbar/_showtickprefix.py plotly/validators/icicle/marker/colorbar/_showticksuffix.py plotly/validators/icicle/marker/colorbar/_thickness.py plotly/validators/icicle/marker/colorbar/_thicknessmode.py plotly/validators/icicle/marker/colorbar/_tick0.py plotly/validators/icicle/marker/colorbar/_tickangle.py plotly/validators/icicle/marker/colorbar/_tickcolor.py plotly/validators/icicle/marker/colorbar/_tickfont.py plotly/validators/icicle/marker/colorbar/_tickformat.py plotly/validators/icicle/marker/colorbar/_tickformatstopdefaults.py plotly/validators/icicle/marker/colorbar/_tickformatstops.py plotly/validators/icicle/marker/colorbar/_ticklabeloverflow.py plotly/validators/icicle/marker/colorbar/_ticklabelposition.py plotly/validators/icicle/marker/colorbar/_ticklabelstep.py plotly/validators/icicle/marker/colorbar/_ticklen.py plotly/validators/icicle/marker/colorbar/_tickmode.py plotly/validators/icicle/marker/colorbar/_tickprefix.py plotly/validators/icicle/marker/colorbar/_ticks.py plotly/validators/icicle/marker/colorbar/_ticksuffix.py plotly/validators/icicle/marker/colorbar/_ticktext.py plotly/validators/icicle/marker/colorbar/_ticktextsrc.py plotly/validators/icicle/marker/colorbar/_tickvals.py plotly/validators/icicle/marker/colorbar/_tickvalssrc.py plotly/validators/icicle/marker/colorbar/_tickwidth.py plotly/validators/icicle/marker/colorbar/_title.py plotly/validators/icicle/marker/colorbar/_x.py plotly/validators/icicle/marker/colorbar/_xanchor.py plotly/validators/icicle/marker/colorbar/_xpad.py plotly/validators/icicle/marker/colorbar/_xref.py plotly/validators/icicle/marker/colorbar/_y.py plotly/validators/icicle/marker/colorbar/_yanchor.py plotly/validators/icicle/marker/colorbar/_ypad.py plotly/validators/icicle/marker/colorbar/_yref.py plotly/validators/icicle/marker/colorbar/tickfont/__init__.py plotly/validators/icicle/marker/colorbar/tickfont/_color.py plotly/validators/icicle/marker/colorbar/tickfont/_family.py plotly/validators/icicle/marker/colorbar/tickfont/_size.py plotly/validators/icicle/marker/colorbar/tickformatstop/__init__.py plotly/validators/icicle/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/icicle/marker/colorbar/tickformatstop/_enabled.py plotly/validators/icicle/marker/colorbar/tickformatstop/_name.py plotly/validators/icicle/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/icicle/marker/colorbar/tickformatstop/_value.py plotly/validators/icicle/marker/colorbar/title/__init__.py plotly/validators/icicle/marker/colorbar/title/_font.py plotly/validators/icicle/marker/colorbar/title/_side.py plotly/validators/icicle/marker/colorbar/title/_text.py plotly/validators/icicle/marker/colorbar/title/font/__init__.py plotly/validators/icicle/marker/colorbar/title/font/_color.py plotly/validators/icicle/marker/colorbar/title/font/_family.py plotly/validators/icicle/marker/colorbar/title/font/_size.py plotly/validators/icicle/marker/line/__init__.py plotly/validators/icicle/marker/line/_color.py plotly/validators/icicle/marker/line/_colorsrc.py plotly/validators/icicle/marker/line/_width.py plotly/validators/icicle/marker/line/_widthsrc.py plotly/validators/icicle/marker/pattern/__init__.py plotly/validators/icicle/marker/pattern/_bgcolor.py plotly/validators/icicle/marker/pattern/_bgcolorsrc.py plotly/validators/icicle/marker/pattern/_fgcolor.py plotly/validators/icicle/marker/pattern/_fgcolorsrc.py plotly/validators/icicle/marker/pattern/_fgopacity.py plotly/validators/icicle/marker/pattern/_fillmode.py plotly/validators/icicle/marker/pattern/_shape.py plotly/validators/icicle/marker/pattern/_shapesrc.py plotly/validators/icicle/marker/pattern/_size.py plotly/validators/icicle/marker/pattern/_sizesrc.py plotly/validators/icicle/marker/pattern/_solidity.py plotly/validators/icicle/marker/pattern/_soliditysrc.py plotly/validators/icicle/outsidetextfont/__init__.py plotly/validators/icicle/outsidetextfont/_color.py plotly/validators/icicle/outsidetextfont/_colorsrc.py plotly/validators/icicle/outsidetextfont/_family.py plotly/validators/icicle/outsidetextfont/_familysrc.py plotly/validators/icicle/outsidetextfont/_size.py plotly/validators/icicle/outsidetextfont/_sizesrc.py plotly/validators/icicle/pathbar/__init__.py plotly/validators/icicle/pathbar/_edgeshape.py plotly/validators/icicle/pathbar/_side.py plotly/validators/icicle/pathbar/_textfont.py plotly/validators/icicle/pathbar/_thickness.py plotly/validators/icicle/pathbar/_visible.py plotly/validators/icicle/pathbar/textfont/__init__.py plotly/validators/icicle/pathbar/textfont/_color.py plotly/validators/icicle/pathbar/textfont/_colorsrc.py plotly/validators/icicle/pathbar/textfont/_family.py plotly/validators/icicle/pathbar/textfont/_familysrc.py plotly/validators/icicle/pathbar/textfont/_size.py plotly/validators/icicle/pathbar/textfont/_sizesrc.py plotly/validators/icicle/root/__init__.py plotly/validators/icicle/root/_color.py plotly/validators/icicle/stream/__init__.py plotly/validators/icicle/stream/_maxpoints.py plotly/validators/icicle/stream/_token.py plotly/validators/icicle/textfont/__init__.py plotly/validators/icicle/textfont/_color.py plotly/validators/icicle/textfont/_colorsrc.py plotly/validators/icicle/textfont/_family.py plotly/validators/icicle/textfont/_familysrc.py plotly/validators/icicle/textfont/_size.py plotly/validators/icicle/textfont/_sizesrc.py plotly/validators/icicle/tiling/__init__.py plotly/validators/icicle/tiling/_flip.py plotly/validators/icicle/tiling/_orientation.py plotly/validators/icicle/tiling/_pad.py plotly/validators/image/__init__.py plotly/validators/image/_colormodel.py plotly/validators/image/_customdata.py plotly/validators/image/_customdatasrc.py plotly/validators/image/_dx.py plotly/validators/image/_dy.py plotly/validators/image/_hoverinfo.py plotly/validators/image/_hoverinfosrc.py plotly/validators/image/_hoverlabel.py plotly/validators/image/_hovertemplate.py plotly/validators/image/_hovertemplatesrc.py plotly/validators/image/_hovertext.py plotly/validators/image/_hovertextsrc.py plotly/validators/image/_ids.py plotly/validators/image/_idssrc.py plotly/validators/image/_legend.py plotly/validators/image/_legendgrouptitle.py plotly/validators/image/_legendrank.py plotly/validators/image/_legendwidth.py plotly/validators/image/_meta.py plotly/validators/image/_metasrc.py plotly/validators/image/_name.py plotly/validators/image/_opacity.py plotly/validators/image/_source.py plotly/validators/image/_stream.py plotly/validators/image/_text.py plotly/validators/image/_textsrc.py plotly/validators/image/_uid.py plotly/validators/image/_uirevision.py plotly/validators/image/_visible.py plotly/validators/image/_x0.py plotly/validators/image/_xaxis.py plotly/validators/image/_y0.py plotly/validators/image/_yaxis.py plotly/validators/image/_z.py plotly/validators/image/_zmax.py plotly/validators/image/_zmin.py plotly/validators/image/_zsmooth.py plotly/validators/image/_zsrc.py plotly/validators/image/hoverlabel/__init__.py plotly/validators/image/hoverlabel/_align.py plotly/validators/image/hoverlabel/_alignsrc.py plotly/validators/image/hoverlabel/_bgcolor.py plotly/validators/image/hoverlabel/_bgcolorsrc.py plotly/validators/image/hoverlabel/_bordercolor.py plotly/validators/image/hoverlabel/_bordercolorsrc.py plotly/validators/image/hoverlabel/_font.py plotly/validators/image/hoverlabel/_namelength.py plotly/validators/image/hoverlabel/_namelengthsrc.py plotly/validators/image/hoverlabel/font/__init__.py plotly/validators/image/hoverlabel/font/_color.py plotly/validators/image/hoverlabel/font/_colorsrc.py plotly/validators/image/hoverlabel/font/_family.py plotly/validators/image/hoverlabel/font/_familysrc.py plotly/validators/image/hoverlabel/font/_size.py plotly/validators/image/hoverlabel/font/_sizesrc.py plotly/validators/image/legendgrouptitle/__init__.py plotly/validators/image/legendgrouptitle/_font.py plotly/validators/image/legendgrouptitle/_text.py plotly/validators/image/legendgrouptitle/font/__init__.py plotly/validators/image/legendgrouptitle/font/_color.py plotly/validators/image/legendgrouptitle/font/_family.py plotly/validators/image/legendgrouptitle/font/_size.py plotly/validators/image/stream/__init__.py plotly/validators/image/stream/_maxpoints.py plotly/validators/image/stream/_token.py plotly/validators/indicator/__init__.py plotly/validators/indicator/_align.py plotly/validators/indicator/_customdata.py plotly/validators/indicator/_customdatasrc.py plotly/validators/indicator/_delta.py plotly/validators/indicator/_domain.py plotly/validators/indicator/_gauge.py plotly/validators/indicator/_ids.py plotly/validators/indicator/_idssrc.py plotly/validators/indicator/_legend.py plotly/validators/indicator/_legendgrouptitle.py plotly/validators/indicator/_legendrank.py plotly/validators/indicator/_legendwidth.py plotly/validators/indicator/_meta.py plotly/validators/indicator/_metasrc.py plotly/validators/indicator/_mode.py plotly/validators/indicator/_name.py plotly/validators/indicator/_number.py plotly/validators/indicator/_stream.py plotly/validators/indicator/_title.py plotly/validators/indicator/_uid.py plotly/validators/indicator/_uirevision.py plotly/validators/indicator/_value.py plotly/validators/indicator/_visible.py plotly/validators/indicator/delta/__init__.py plotly/validators/indicator/delta/_decreasing.py plotly/validators/indicator/delta/_font.py plotly/validators/indicator/delta/_increasing.py plotly/validators/indicator/delta/_position.py plotly/validators/indicator/delta/_prefix.py plotly/validators/indicator/delta/_reference.py plotly/validators/indicator/delta/_relative.py plotly/validators/indicator/delta/_suffix.py plotly/validators/indicator/delta/_valueformat.py plotly/validators/indicator/delta/decreasing/__init__.py plotly/validators/indicator/delta/decreasing/_color.py plotly/validators/indicator/delta/decreasing/_symbol.py plotly/validators/indicator/delta/font/__init__.py plotly/validators/indicator/delta/font/_color.py plotly/validators/indicator/delta/font/_family.py plotly/validators/indicator/delta/font/_size.py plotly/validators/indicator/delta/increasing/__init__.py plotly/validators/indicator/delta/increasing/_color.py plotly/validators/indicator/delta/increasing/_symbol.py plotly/validators/indicator/domain/__init__.py plotly/validators/indicator/domain/_column.py plotly/validators/indicator/domain/_row.py plotly/validators/indicator/domain/_x.py plotly/validators/indicator/domain/_y.py plotly/validators/indicator/gauge/__init__.py plotly/validators/indicator/gauge/_axis.py plotly/validators/indicator/gauge/_bar.py plotly/validators/indicator/gauge/_bgcolor.py plotly/validators/indicator/gauge/_bordercolor.py plotly/validators/indicator/gauge/_borderwidth.py plotly/validators/indicator/gauge/_shape.py plotly/validators/indicator/gauge/_stepdefaults.py plotly/validators/indicator/gauge/_steps.py plotly/validators/indicator/gauge/_threshold.py plotly/validators/indicator/gauge/axis/__init__.py plotly/validators/indicator/gauge/axis/_dtick.py plotly/validators/indicator/gauge/axis/_exponentformat.py plotly/validators/indicator/gauge/axis/_labelalias.py plotly/validators/indicator/gauge/axis/_minexponent.py plotly/validators/indicator/gauge/axis/_nticks.py plotly/validators/indicator/gauge/axis/_range.py plotly/validators/indicator/gauge/axis/_separatethousands.py plotly/validators/indicator/gauge/axis/_showexponent.py plotly/validators/indicator/gauge/axis/_showticklabels.py plotly/validators/indicator/gauge/axis/_showtickprefix.py plotly/validators/indicator/gauge/axis/_showticksuffix.py plotly/validators/indicator/gauge/axis/_tick0.py plotly/validators/indicator/gauge/axis/_tickangle.py plotly/validators/indicator/gauge/axis/_tickcolor.py plotly/validators/indicator/gauge/axis/_tickfont.py plotly/validators/indicator/gauge/axis/_tickformat.py plotly/validators/indicator/gauge/axis/_tickformatstopdefaults.py plotly/validators/indicator/gauge/axis/_tickformatstops.py plotly/validators/indicator/gauge/axis/_ticklabelstep.py plotly/validators/indicator/gauge/axis/_ticklen.py plotly/validators/indicator/gauge/axis/_tickmode.py plotly/validators/indicator/gauge/axis/_tickprefix.py plotly/validators/indicator/gauge/axis/_ticks.py plotly/validators/indicator/gauge/axis/_ticksuffix.py plotly/validators/indicator/gauge/axis/_ticktext.py plotly/validators/indicator/gauge/axis/_ticktextsrc.py plotly/validators/indicator/gauge/axis/_tickvals.py plotly/validators/indicator/gauge/axis/_tickvalssrc.py plotly/validators/indicator/gauge/axis/_tickwidth.py plotly/validators/indicator/gauge/axis/_visible.py plotly/validators/indicator/gauge/axis/tickfont/__init__.py plotly/validators/indicator/gauge/axis/tickfont/_color.py plotly/validators/indicator/gauge/axis/tickfont/_family.py plotly/validators/indicator/gauge/axis/tickfont/_size.py plotly/validators/indicator/gauge/axis/tickformatstop/__init__.py plotly/validators/indicator/gauge/axis/tickformatstop/_dtickrange.py plotly/validators/indicator/gauge/axis/tickformatstop/_enabled.py plotly/validators/indicator/gauge/axis/tickformatstop/_name.py plotly/validators/indicator/gauge/axis/tickformatstop/_templateitemname.py plotly/validators/indicator/gauge/axis/tickformatstop/_value.py plotly/validators/indicator/gauge/bar/__init__.py plotly/validators/indicator/gauge/bar/_color.py plotly/validators/indicator/gauge/bar/_line.py plotly/validators/indicator/gauge/bar/_thickness.py plotly/validators/indicator/gauge/bar/line/__init__.py plotly/validators/indicator/gauge/bar/line/_color.py plotly/validators/indicator/gauge/bar/line/_width.py plotly/validators/indicator/gauge/step/__init__.py plotly/validators/indicator/gauge/step/_color.py plotly/validators/indicator/gauge/step/_line.py plotly/validators/indicator/gauge/step/_name.py plotly/validators/indicator/gauge/step/_range.py plotly/validators/indicator/gauge/step/_templateitemname.py plotly/validators/indicator/gauge/step/_thickness.py plotly/validators/indicator/gauge/step/line/__init__.py plotly/validators/indicator/gauge/step/line/_color.py plotly/validators/indicator/gauge/step/line/_width.py plotly/validators/indicator/gauge/threshold/__init__.py plotly/validators/indicator/gauge/threshold/_line.py plotly/validators/indicator/gauge/threshold/_thickness.py plotly/validators/indicator/gauge/threshold/_value.py plotly/validators/indicator/gauge/threshold/line/__init__.py plotly/validators/indicator/gauge/threshold/line/_color.py plotly/validators/indicator/gauge/threshold/line/_width.py plotly/validators/indicator/legendgrouptitle/__init__.py plotly/validators/indicator/legendgrouptitle/_font.py plotly/validators/indicator/legendgrouptitle/_text.py plotly/validators/indicator/legendgrouptitle/font/__init__.py plotly/validators/indicator/legendgrouptitle/font/_color.py plotly/validators/indicator/legendgrouptitle/font/_family.py plotly/validators/indicator/legendgrouptitle/font/_size.py plotly/validators/indicator/number/__init__.py plotly/validators/indicator/number/_font.py plotly/validators/indicator/number/_prefix.py plotly/validators/indicator/number/_suffix.py plotly/validators/indicator/number/_valueformat.py plotly/validators/indicator/number/font/__init__.py plotly/validators/indicator/number/font/_color.py plotly/validators/indicator/number/font/_family.py plotly/validators/indicator/number/font/_size.py plotly/validators/indicator/stream/__init__.py plotly/validators/indicator/stream/_maxpoints.py plotly/validators/indicator/stream/_token.py plotly/validators/indicator/title/__init__.py plotly/validators/indicator/title/_align.py plotly/validators/indicator/title/_font.py plotly/validators/indicator/title/_text.py plotly/validators/indicator/title/font/__init__.py plotly/validators/indicator/title/font/_color.py plotly/validators/indicator/title/font/_family.py plotly/validators/indicator/title/font/_size.py plotly/validators/isosurface/__init__.py plotly/validators/isosurface/_autocolorscale.py plotly/validators/isosurface/_caps.py plotly/validators/isosurface/_cauto.py plotly/validators/isosurface/_cmax.py plotly/validators/isosurface/_cmid.py plotly/validators/isosurface/_cmin.py plotly/validators/isosurface/_coloraxis.py plotly/validators/isosurface/_colorbar.py plotly/validators/isosurface/_colorscale.py plotly/validators/isosurface/_contour.py plotly/validators/isosurface/_customdata.py plotly/validators/isosurface/_customdatasrc.py plotly/validators/isosurface/_flatshading.py plotly/validators/isosurface/_hoverinfo.py plotly/validators/isosurface/_hoverinfosrc.py plotly/validators/isosurface/_hoverlabel.py plotly/validators/isosurface/_hovertemplate.py plotly/validators/isosurface/_hovertemplatesrc.py plotly/validators/isosurface/_hovertext.py plotly/validators/isosurface/_hovertextsrc.py plotly/validators/isosurface/_ids.py plotly/validators/isosurface/_idssrc.py plotly/validators/isosurface/_isomax.py plotly/validators/isosurface/_isomin.py plotly/validators/isosurface/_legend.py plotly/validators/isosurface/_legendgroup.py plotly/validators/isosurface/_legendgrouptitle.py plotly/validators/isosurface/_legendrank.py plotly/validators/isosurface/_legendwidth.py plotly/validators/isosurface/_lighting.py plotly/validators/isosurface/_lightposition.py plotly/validators/isosurface/_meta.py plotly/validators/isosurface/_metasrc.py plotly/validators/isosurface/_name.py plotly/validators/isosurface/_opacity.py plotly/validators/isosurface/_reversescale.py plotly/validators/isosurface/_scene.py plotly/validators/isosurface/_showlegend.py plotly/validators/isosurface/_showscale.py plotly/validators/isosurface/_slices.py plotly/validators/isosurface/_spaceframe.py plotly/validators/isosurface/_stream.py plotly/validators/isosurface/_surface.py plotly/validators/isosurface/_text.py plotly/validators/isosurface/_textsrc.py plotly/validators/isosurface/_uid.py plotly/validators/isosurface/_uirevision.py plotly/validators/isosurface/_value.py plotly/validators/isosurface/_valuehoverformat.py plotly/validators/isosurface/_valuesrc.py plotly/validators/isosurface/_visible.py plotly/validators/isosurface/_x.py plotly/validators/isosurface/_xhoverformat.py plotly/validators/isosurface/_xsrc.py plotly/validators/isosurface/_y.py plotly/validators/isosurface/_yhoverformat.py plotly/validators/isosurface/_ysrc.py plotly/validators/isosurface/_z.py plotly/validators/isosurface/_zhoverformat.py plotly/validators/isosurface/_zsrc.py plotly/validators/isosurface/caps/__init__.py plotly/validators/isosurface/caps/_x.py plotly/validators/isosurface/caps/_y.py plotly/validators/isosurface/caps/_z.py plotly/validators/isosurface/caps/x/__init__.py plotly/validators/isosurface/caps/x/_fill.py plotly/validators/isosurface/caps/x/_show.py plotly/validators/isosurface/caps/y/__init__.py plotly/validators/isosurface/caps/y/_fill.py plotly/validators/isosurface/caps/y/_show.py plotly/validators/isosurface/caps/z/__init__.py plotly/validators/isosurface/caps/z/_fill.py plotly/validators/isosurface/caps/z/_show.py plotly/validators/isosurface/colorbar/__init__.py plotly/validators/isosurface/colorbar/_bgcolor.py plotly/validators/isosurface/colorbar/_bordercolor.py plotly/validators/isosurface/colorbar/_borderwidth.py plotly/validators/isosurface/colorbar/_dtick.py plotly/validators/isosurface/colorbar/_exponentformat.py plotly/validators/isosurface/colorbar/_labelalias.py plotly/validators/isosurface/colorbar/_len.py plotly/validators/isosurface/colorbar/_lenmode.py plotly/validators/isosurface/colorbar/_minexponent.py plotly/validators/isosurface/colorbar/_nticks.py plotly/validators/isosurface/colorbar/_orientation.py plotly/validators/isosurface/colorbar/_outlinecolor.py plotly/validators/isosurface/colorbar/_outlinewidth.py plotly/validators/isosurface/colorbar/_separatethousands.py plotly/validators/isosurface/colorbar/_showexponent.py plotly/validators/isosurface/colorbar/_showticklabels.py plotly/validators/isosurface/colorbar/_showtickprefix.py plotly/validators/isosurface/colorbar/_showticksuffix.py plotly/validators/isosurface/colorbar/_thickness.py plotly/validators/isosurface/colorbar/_thicknessmode.py plotly/validators/isosurface/colorbar/_tick0.py plotly/validators/isosurface/colorbar/_tickangle.py plotly/validators/isosurface/colorbar/_tickcolor.py plotly/validators/isosurface/colorbar/_tickfont.py plotly/validators/isosurface/colorbar/_tickformat.py plotly/validators/isosurface/colorbar/_tickformatstopdefaults.py plotly/validators/isosurface/colorbar/_tickformatstops.py plotly/validators/isosurface/colorbar/_ticklabeloverflow.py plotly/validators/isosurface/colorbar/_ticklabelposition.py plotly/validators/isosurface/colorbar/_ticklabelstep.py plotly/validators/isosurface/colorbar/_ticklen.py plotly/validators/isosurface/colorbar/_tickmode.py plotly/validators/isosurface/colorbar/_tickprefix.py plotly/validators/isosurface/colorbar/_ticks.py plotly/validators/isosurface/colorbar/_ticksuffix.py plotly/validators/isosurface/colorbar/_ticktext.py plotly/validators/isosurface/colorbar/_ticktextsrc.py plotly/validators/isosurface/colorbar/_tickvals.py plotly/validators/isosurface/colorbar/_tickvalssrc.py plotly/validators/isosurface/colorbar/_tickwidth.py plotly/validators/isosurface/colorbar/_title.py plotly/validators/isosurface/colorbar/_x.py plotly/validators/isosurface/colorbar/_xanchor.py plotly/validators/isosurface/colorbar/_xpad.py plotly/validators/isosurface/colorbar/_xref.py plotly/validators/isosurface/colorbar/_y.py plotly/validators/isosurface/colorbar/_yanchor.py plotly/validators/isosurface/colorbar/_ypad.py plotly/validators/isosurface/colorbar/_yref.py plotly/validators/isosurface/colorbar/tickfont/__init__.py plotly/validators/isosurface/colorbar/tickfont/_color.py plotly/validators/isosurface/colorbar/tickfont/_family.py plotly/validators/isosurface/colorbar/tickfont/_size.py plotly/validators/isosurface/colorbar/tickformatstop/__init__.py plotly/validators/isosurface/colorbar/tickformatstop/_dtickrange.py plotly/validators/isosurface/colorbar/tickformatstop/_enabled.py plotly/validators/isosurface/colorbar/tickformatstop/_name.py plotly/validators/isosurface/colorbar/tickformatstop/_templateitemname.py plotly/validators/isosurface/colorbar/tickformatstop/_value.py plotly/validators/isosurface/colorbar/title/__init__.py plotly/validators/isosurface/colorbar/title/_font.py plotly/validators/isosurface/colorbar/title/_side.py plotly/validators/isosurface/colorbar/title/_text.py plotly/validators/isosurface/colorbar/title/font/__init__.py plotly/validators/isosurface/colorbar/title/font/_color.py plotly/validators/isosurface/colorbar/title/font/_family.py plotly/validators/isosurface/colorbar/title/font/_size.py plotly/validators/isosurface/contour/__init__.py plotly/validators/isosurface/contour/_color.py plotly/validators/isosurface/contour/_show.py plotly/validators/isosurface/contour/_width.py plotly/validators/isosurface/hoverlabel/__init__.py plotly/validators/isosurface/hoverlabel/_align.py plotly/validators/isosurface/hoverlabel/_alignsrc.py plotly/validators/isosurface/hoverlabel/_bgcolor.py plotly/validators/isosurface/hoverlabel/_bgcolorsrc.py plotly/validators/isosurface/hoverlabel/_bordercolor.py plotly/validators/isosurface/hoverlabel/_bordercolorsrc.py plotly/validators/isosurface/hoverlabel/_font.py plotly/validators/isosurface/hoverlabel/_namelength.py plotly/validators/isosurface/hoverlabel/_namelengthsrc.py plotly/validators/isosurface/hoverlabel/font/__init__.py plotly/validators/isosurface/hoverlabel/font/_color.py plotly/validators/isosurface/hoverlabel/font/_colorsrc.py plotly/validators/isosurface/hoverlabel/font/_family.py plotly/validators/isosurface/hoverlabel/font/_familysrc.py plotly/validators/isosurface/hoverlabel/font/_size.py plotly/validators/isosurface/hoverlabel/font/_sizesrc.py plotly/validators/isosurface/legendgrouptitle/__init__.py plotly/validators/isosurface/legendgrouptitle/_font.py plotly/validators/isosurface/legendgrouptitle/_text.py plotly/validators/isosurface/legendgrouptitle/font/__init__.py plotly/validators/isosurface/legendgrouptitle/font/_color.py plotly/validators/isosurface/legendgrouptitle/font/_family.py plotly/validators/isosurface/legendgrouptitle/font/_size.py plotly/validators/isosurface/lighting/__init__.py plotly/validators/isosurface/lighting/_ambient.py plotly/validators/isosurface/lighting/_diffuse.py plotly/validators/isosurface/lighting/_facenormalsepsilon.py plotly/validators/isosurface/lighting/_fresnel.py plotly/validators/isosurface/lighting/_roughness.py plotly/validators/isosurface/lighting/_specular.py plotly/validators/isosurface/lighting/_vertexnormalsepsilon.py plotly/validators/isosurface/lightposition/__init__.py plotly/validators/isosurface/lightposition/_x.py plotly/validators/isosurface/lightposition/_y.py plotly/validators/isosurface/lightposition/_z.py plotly/validators/isosurface/slices/__init__.py plotly/validators/isosurface/slices/_x.py plotly/validators/isosurface/slices/_y.py plotly/validators/isosurface/slices/_z.py plotly/validators/isosurface/slices/x/__init__.py plotly/validators/isosurface/slices/x/_fill.py plotly/validators/isosurface/slices/x/_locations.py plotly/validators/isosurface/slices/x/_locationssrc.py plotly/validators/isosurface/slices/x/_show.py plotly/validators/isosurface/slices/y/__init__.py plotly/validators/isosurface/slices/y/_fill.py plotly/validators/isosurface/slices/y/_locations.py plotly/validators/isosurface/slices/y/_locationssrc.py plotly/validators/isosurface/slices/y/_show.py plotly/validators/isosurface/slices/z/__init__.py plotly/validators/isosurface/slices/z/_fill.py plotly/validators/isosurface/slices/z/_locations.py plotly/validators/isosurface/slices/z/_locationssrc.py plotly/validators/isosurface/slices/z/_show.py plotly/validators/isosurface/spaceframe/__init__.py plotly/validators/isosurface/spaceframe/_fill.py plotly/validators/isosurface/spaceframe/_show.py plotly/validators/isosurface/stream/__init__.py plotly/validators/isosurface/stream/_maxpoints.py plotly/validators/isosurface/stream/_token.py plotly/validators/isosurface/surface/__init__.py plotly/validators/isosurface/surface/_count.py plotly/validators/isosurface/surface/_fill.py plotly/validators/isosurface/surface/_pattern.py plotly/validators/isosurface/surface/_show.py plotly/validators/layout/__init__.py plotly/validators/layout/_activeselection.py plotly/validators/layout/_activeshape.py plotly/validators/layout/_annotationdefaults.py plotly/validators/layout/_annotations.py plotly/validators/layout/_autosize.py plotly/validators/layout/_autotypenumbers.py plotly/validators/layout/_bargap.py plotly/validators/layout/_bargroupgap.py plotly/validators/layout/_barmode.py plotly/validators/layout/_barnorm.py plotly/validators/layout/_boxgap.py plotly/validators/layout/_boxgroupgap.py plotly/validators/layout/_boxmode.py plotly/validators/layout/_calendar.py plotly/validators/layout/_clickmode.py plotly/validators/layout/_coloraxis.py plotly/validators/layout/_colorscale.py plotly/validators/layout/_colorway.py plotly/validators/layout/_computed.py plotly/validators/layout/_datarevision.py plotly/validators/layout/_dragmode.py plotly/validators/layout/_editrevision.py plotly/validators/layout/_extendfunnelareacolors.py plotly/validators/layout/_extendiciclecolors.py plotly/validators/layout/_extendpiecolors.py plotly/validators/layout/_extendsunburstcolors.py plotly/validators/layout/_extendtreemapcolors.py plotly/validators/layout/_font.py plotly/validators/layout/_funnelareacolorway.py plotly/validators/layout/_funnelgap.py plotly/validators/layout/_funnelgroupgap.py plotly/validators/layout/_funnelmode.py plotly/validators/layout/_geo.py plotly/validators/layout/_grid.py plotly/validators/layout/_height.py plotly/validators/layout/_hiddenlabels.py plotly/validators/layout/_hiddenlabelssrc.py plotly/validators/layout/_hidesources.py plotly/validators/layout/_hoverdistance.py plotly/validators/layout/_hoverlabel.py plotly/validators/layout/_hovermode.py plotly/validators/layout/_iciclecolorway.py plotly/validators/layout/_imagedefaults.py plotly/validators/layout/_images.py plotly/validators/layout/_legend.py plotly/validators/layout/_mapbox.py plotly/validators/layout/_margin.py plotly/validators/layout/_meta.py plotly/validators/layout/_metasrc.py plotly/validators/layout/_minreducedheight.py plotly/validators/layout/_minreducedwidth.py plotly/validators/layout/_modebar.py plotly/validators/layout/_newselection.py plotly/validators/layout/_newshape.py plotly/validators/layout/_paper_bgcolor.py plotly/validators/layout/_piecolorway.py plotly/validators/layout/_plot_bgcolor.py plotly/validators/layout/_polar.py plotly/validators/layout/_scattergap.py plotly/validators/layout/_scattermode.py plotly/validators/layout/_scene.py plotly/validators/layout/_selectdirection.py plotly/validators/layout/_selectiondefaults.py plotly/validators/layout/_selectionrevision.py plotly/validators/layout/_selections.py plotly/validators/layout/_separators.py plotly/validators/layout/_shapedefaults.py plotly/validators/layout/_shapes.py plotly/validators/layout/_showlegend.py plotly/validators/layout/_sliderdefaults.py plotly/validators/layout/_sliders.py plotly/validators/layout/_smith.py plotly/validators/layout/_spikedistance.py plotly/validators/layout/_sunburstcolorway.py plotly/validators/layout/_template.py plotly/validators/layout/_ternary.py plotly/validators/layout/_title.py plotly/validators/layout/_transition.py plotly/validators/layout/_treemapcolorway.py plotly/validators/layout/_uirevision.py plotly/validators/layout/_uniformtext.py plotly/validators/layout/_updatemenudefaults.py plotly/validators/layout/_updatemenus.py plotly/validators/layout/_violingap.py plotly/validators/layout/_violingroupgap.py plotly/validators/layout/_violinmode.py plotly/validators/layout/_waterfallgap.py plotly/validators/layout/_waterfallgroupgap.py plotly/validators/layout/_waterfallmode.py plotly/validators/layout/_width.py plotly/validators/layout/_xaxis.py plotly/validators/layout/_yaxis.py plotly/validators/layout/activeselection/__init__.py plotly/validators/layout/activeselection/_fillcolor.py plotly/validators/layout/activeselection/_opacity.py plotly/validators/layout/activeshape/__init__.py plotly/validators/layout/activeshape/_fillcolor.py plotly/validators/layout/activeshape/_opacity.py plotly/validators/layout/annotation/__init__.py plotly/validators/layout/annotation/_align.py plotly/validators/layout/annotation/_arrowcolor.py plotly/validators/layout/annotation/_arrowhead.py plotly/validators/layout/annotation/_arrowside.py plotly/validators/layout/annotation/_arrowsize.py plotly/validators/layout/annotation/_arrowwidth.py plotly/validators/layout/annotation/_ax.py plotly/validators/layout/annotation/_axref.py plotly/validators/layout/annotation/_ay.py plotly/validators/layout/annotation/_ayref.py plotly/validators/layout/annotation/_bgcolor.py plotly/validators/layout/annotation/_bordercolor.py plotly/validators/layout/annotation/_borderpad.py plotly/validators/layout/annotation/_borderwidth.py plotly/validators/layout/annotation/_captureevents.py plotly/validators/layout/annotation/_clicktoshow.py plotly/validators/layout/annotation/_font.py plotly/validators/layout/annotation/_height.py plotly/validators/layout/annotation/_hoverlabel.py plotly/validators/layout/annotation/_hovertext.py plotly/validators/layout/annotation/_name.py plotly/validators/layout/annotation/_opacity.py plotly/validators/layout/annotation/_showarrow.py plotly/validators/layout/annotation/_standoff.py plotly/validators/layout/annotation/_startarrowhead.py plotly/validators/layout/annotation/_startarrowsize.py plotly/validators/layout/annotation/_startstandoff.py plotly/validators/layout/annotation/_templateitemname.py plotly/validators/layout/annotation/_text.py plotly/validators/layout/annotation/_textangle.py plotly/validators/layout/annotation/_valign.py plotly/validators/layout/annotation/_visible.py plotly/validators/layout/annotation/_width.py plotly/validators/layout/annotation/_x.py plotly/validators/layout/annotation/_xanchor.py plotly/validators/layout/annotation/_xclick.py plotly/validators/layout/annotation/_xref.py plotly/validators/layout/annotation/_xshift.py plotly/validators/layout/annotation/_y.py plotly/validators/layout/annotation/_yanchor.py plotly/validators/layout/annotation/_yclick.py plotly/validators/layout/annotation/_yref.py plotly/validators/layout/annotation/_yshift.py plotly/validators/layout/annotation/font/__init__.py plotly/validators/layout/annotation/font/_color.py plotly/validators/layout/annotation/font/_family.py plotly/validators/layout/annotation/font/_size.py plotly/validators/layout/annotation/hoverlabel/__init__.py plotly/validators/layout/annotation/hoverlabel/_bgcolor.py plotly/validators/layout/annotation/hoverlabel/_bordercolor.py plotly/validators/layout/annotation/hoverlabel/_font.py plotly/validators/layout/annotation/hoverlabel/font/__init__.py plotly/validators/layout/annotation/hoverlabel/font/_color.py plotly/validators/layout/annotation/hoverlabel/font/_family.py plotly/validators/layout/annotation/hoverlabel/font/_size.py plotly/validators/layout/coloraxis/__init__.py plotly/validators/layout/coloraxis/_autocolorscale.py plotly/validators/layout/coloraxis/_cauto.py plotly/validators/layout/coloraxis/_cmax.py plotly/validators/layout/coloraxis/_cmid.py plotly/validators/layout/coloraxis/_cmin.py plotly/validators/layout/coloraxis/_colorbar.py plotly/validators/layout/coloraxis/_colorscale.py plotly/validators/layout/coloraxis/_reversescale.py plotly/validators/layout/coloraxis/_showscale.py plotly/validators/layout/coloraxis/colorbar/__init__.py plotly/validators/layout/coloraxis/colorbar/_bgcolor.py plotly/validators/layout/coloraxis/colorbar/_bordercolor.py plotly/validators/layout/coloraxis/colorbar/_borderwidth.py plotly/validators/layout/coloraxis/colorbar/_dtick.py plotly/validators/layout/coloraxis/colorbar/_exponentformat.py plotly/validators/layout/coloraxis/colorbar/_labelalias.py plotly/validators/layout/coloraxis/colorbar/_len.py plotly/validators/layout/coloraxis/colorbar/_lenmode.py plotly/validators/layout/coloraxis/colorbar/_minexponent.py plotly/validators/layout/coloraxis/colorbar/_nticks.py plotly/validators/layout/coloraxis/colorbar/_orientation.py plotly/validators/layout/coloraxis/colorbar/_outlinecolor.py plotly/validators/layout/coloraxis/colorbar/_outlinewidth.py plotly/validators/layout/coloraxis/colorbar/_separatethousands.py plotly/validators/layout/coloraxis/colorbar/_showexponent.py plotly/validators/layout/coloraxis/colorbar/_showticklabels.py plotly/validators/layout/coloraxis/colorbar/_showtickprefix.py plotly/validators/layout/coloraxis/colorbar/_showticksuffix.py plotly/validators/layout/coloraxis/colorbar/_thickness.py plotly/validators/layout/coloraxis/colorbar/_thicknessmode.py plotly/validators/layout/coloraxis/colorbar/_tick0.py plotly/validators/layout/coloraxis/colorbar/_tickangle.py plotly/validators/layout/coloraxis/colorbar/_tickcolor.py plotly/validators/layout/coloraxis/colorbar/_tickfont.py plotly/validators/layout/coloraxis/colorbar/_tickformat.py plotly/validators/layout/coloraxis/colorbar/_tickformatstopdefaults.py plotly/validators/layout/coloraxis/colorbar/_tickformatstops.py plotly/validators/layout/coloraxis/colorbar/_ticklabeloverflow.py plotly/validators/layout/coloraxis/colorbar/_ticklabelposition.py plotly/validators/layout/coloraxis/colorbar/_ticklabelstep.py plotly/validators/layout/coloraxis/colorbar/_ticklen.py plotly/validators/layout/coloraxis/colorbar/_tickmode.py plotly/validators/layout/coloraxis/colorbar/_tickprefix.py plotly/validators/layout/coloraxis/colorbar/_ticks.py plotly/validators/layout/coloraxis/colorbar/_ticksuffix.py plotly/validators/layout/coloraxis/colorbar/_ticktext.py plotly/validators/layout/coloraxis/colorbar/_ticktextsrc.py plotly/validators/layout/coloraxis/colorbar/_tickvals.py plotly/validators/layout/coloraxis/colorbar/_tickvalssrc.py plotly/validators/layout/coloraxis/colorbar/_tickwidth.py plotly/validators/layout/coloraxis/colorbar/_title.py plotly/validators/layout/coloraxis/colorbar/_x.py plotly/validators/layout/coloraxis/colorbar/_xanchor.py plotly/validators/layout/coloraxis/colorbar/_xpad.py plotly/validators/layout/coloraxis/colorbar/_xref.py plotly/validators/layout/coloraxis/colorbar/_y.py plotly/validators/layout/coloraxis/colorbar/_yanchor.py plotly/validators/layout/coloraxis/colorbar/_ypad.py plotly/validators/layout/coloraxis/colorbar/_yref.py plotly/validators/layout/coloraxis/colorbar/tickfont/__init__.py plotly/validators/layout/coloraxis/colorbar/tickfont/_color.py plotly/validators/layout/coloraxis/colorbar/tickfont/_family.py plotly/validators/layout/coloraxis/colorbar/tickfont/_size.py plotly/validators/layout/coloraxis/colorbar/tickformatstop/__init__.py plotly/validators/layout/coloraxis/colorbar/tickformatstop/_dtickrange.py plotly/validators/layout/coloraxis/colorbar/tickformatstop/_enabled.py plotly/validators/layout/coloraxis/colorbar/tickformatstop/_name.py plotly/validators/layout/coloraxis/colorbar/tickformatstop/_templateitemname.py plotly/validators/layout/coloraxis/colorbar/tickformatstop/_value.py plotly/validators/layout/coloraxis/colorbar/title/__init__.py plotly/validators/layout/coloraxis/colorbar/title/_font.py plotly/validators/layout/coloraxis/colorbar/title/_side.py plotly/validators/layout/coloraxis/colorbar/title/_text.py plotly/validators/layout/coloraxis/colorbar/title/font/__init__.py plotly/validators/layout/coloraxis/colorbar/title/font/_color.py plotly/validators/layout/coloraxis/colorbar/title/font/_family.py plotly/validators/layout/coloraxis/colorbar/title/font/_size.py plotly/validators/layout/colorscale/__init__.py plotly/validators/layout/colorscale/_diverging.py plotly/validators/layout/colorscale/_sequential.py plotly/validators/layout/colorscale/_sequentialminus.py plotly/validators/layout/font/__init__.py plotly/validators/layout/font/_color.py plotly/validators/layout/font/_family.py plotly/validators/layout/font/_size.py plotly/validators/layout/geo/__init__.py plotly/validators/layout/geo/_bgcolor.py plotly/validators/layout/geo/_center.py plotly/validators/layout/geo/_coastlinecolor.py plotly/validators/layout/geo/_coastlinewidth.py plotly/validators/layout/geo/_countrycolor.py plotly/validators/layout/geo/_countrywidth.py plotly/validators/layout/geo/_domain.py plotly/validators/layout/geo/_fitbounds.py plotly/validators/layout/geo/_framecolor.py plotly/validators/layout/geo/_framewidth.py plotly/validators/layout/geo/_lakecolor.py plotly/validators/layout/geo/_landcolor.py plotly/validators/layout/geo/_lataxis.py plotly/validators/layout/geo/_lonaxis.py plotly/validators/layout/geo/_oceancolor.py plotly/validators/layout/geo/_projection.py plotly/validators/layout/geo/_resolution.py plotly/validators/layout/geo/_rivercolor.py plotly/validators/layout/geo/_riverwidth.py plotly/validators/layout/geo/_scope.py plotly/validators/layout/geo/_showcoastlines.py plotly/validators/layout/geo/_showcountries.py plotly/validators/layout/geo/_showframe.py plotly/validators/layout/geo/_showlakes.py plotly/validators/layout/geo/_showland.py plotly/validators/layout/geo/_showocean.py plotly/validators/layout/geo/_showrivers.py plotly/validators/layout/geo/_showsubunits.py plotly/validators/layout/geo/_subunitcolor.py plotly/validators/layout/geo/_subunitwidth.py plotly/validators/layout/geo/_uirevision.py plotly/validators/layout/geo/_visible.py plotly/validators/layout/geo/center/__init__.py plotly/validators/layout/geo/center/_lat.py plotly/validators/layout/geo/center/_lon.py plotly/validators/layout/geo/domain/__init__.py plotly/validators/layout/geo/domain/_column.py plotly/validators/layout/geo/domain/_row.py plotly/validators/layout/geo/domain/_x.py plotly/validators/layout/geo/domain/_y.py plotly/validators/layout/geo/lataxis/__init__.py plotly/validators/layout/geo/lataxis/_dtick.py plotly/validators/layout/geo/lataxis/_gridcolor.py plotly/validators/layout/geo/lataxis/_griddash.py plotly/validators/layout/geo/lataxis/_gridwidth.py plotly/validators/layout/geo/lataxis/_range.py plotly/validators/layout/geo/lataxis/_showgrid.py plotly/validators/layout/geo/lataxis/_tick0.py plotly/validators/layout/geo/lonaxis/__init__.py plotly/validators/layout/geo/lonaxis/_dtick.py plotly/validators/layout/geo/lonaxis/_gridcolor.py plotly/validators/layout/geo/lonaxis/_griddash.py plotly/validators/layout/geo/lonaxis/_gridwidth.py plotly/validators/layout/geo/lonaxis/_range.py plotly/validators/layout/geo/lonaxis/_showgrid.py plotly/validators/layout/geo/lonaxis/_tick0.py plotly/validators/layout/geo/projection/__init__.py plotly/validators/layout/geo/projection/_distance.py plotly/validators/layout/geo/projection/_parallels.py plotly/validators/layout/geo/projection/_rotation.py plotly/validators/layout/geo/projection/_scale.py plotly/validators/layout/geo/projection/_tilt.py plotly/validators/layout/geo/projection/_type.py plotly/validators/layout/geo/projection/rotation/__init__.py plotly/validators/layout/geo/projection/rotation/_lat.py plotly/validators/layout/geo/projection/rotation/_lon.py plotly/validators/layout/geo/projection/rotation/_roll.py plotly/validators/layout/grid/__init__.py plotly/validators/layout/grid/_columns.py plotly/validators/layout/grid/_domain.py plotly/validators/layout/grid/_pattern.py plotly/validators/layout/grid/_roworder.py plotly/validators/layout/grid/_rows.py plotly/validators/layout/grid/_subplots.py plotly/validators/layout/grid/_xaxes.py plotly/validators/layout/grid/_xgap.py plotly/validators/layout/grid/_xside.py plotly/validators/layout/grid/_yaxes.py plotly/validators/layout/grid/_ygap.py plotly/validators/layout/grid/_yside.py plotly/validators/layout/grid/domain/__init__.py plotly/validators/layout/grid/domain/_x.py plotly/validators/layout/grid/domain/_y.py plotly/validators/layout/hoverlabel/__init__.py plotly/validators/layout/hoverlabel/_align.py plotly/validators/layout/hoverlabel/_bgcolor.py plotly/validators/layout/hoverlabel/_bordercolor.py plotly/validators/layout/hoverlabel/_font.py plotly/validators/layout/hoverlabel/_grouptitlefont.py plotly/validators/layout/hoverlabel/_namelength.py plotly/validators/layout/hoverlabel/font/__init__.py plotly/validators/layout/hoverlabel/font/_color.py plotly/validators/layout/hoverlabel/font/_family.py plotly/validators/layout/hoverlabel/font/_size.py plotly/validators/layout/hoverlabel/grouptitlefont/__init__.py plotly/validators/layout/hoverlabel/grouptitlefont/_color.py plotly/validators/layout/hoverlabel/grouptitlefont/_family.py plotly/validators/layout/hoverlabel/grouptitlefont/_size.py plotly/validators/layout/image/__init__.py plotly/validators/layout/image/_layer.py plotly/validators/layout/image/_name.py plotly/validators/layout/image/_opacity.py plotly/validators/layout/image/_sizex.py plotly/validators/layout/image/_sizey.py plotly/validators/layout/image/_sizing.py plotly/validators/layout/image/_source.py plotly/validators/layout/image/_templateitemname.py plotly/validators/layout/image/_visible.py plotly/validators/layout/image/_x.py plotly/validators/layout/image/_xanchor.py plotly/validators/layout/image/_xref.py plotly/validators/layout/image/_y.py plotly/validators/layout/image/_yanchor.py plotly/validators/layout/image/_yref.py plotly/validators/layout/legend/__init__.py plotly/validators/layout/legend/_bgcolor.py plotly/validators/layout/legend/_bordercolor.py plotly/validators/layout/legend/_borderwidth.py plotly/validators/layout/legend/_entrywidth.py plotly/validators/layout/legend/_entrywidthmode.py plotly/validators/layout/legend/_font.py plotly/validators/layout/legend/_groupclick.py plotly/validators/layout/legend/_grouptitlefont.py plotly/validators/layout/legend/_itemclick.py plotly/validators/layout/legend/_itemdoubleclick.py plotly/validators/layout/legend/_itemsizing.py plotly/validators/layout/legend/_itemwidth.py plotly/validators/layout/legend/_orientation.py plotly/validators/layout/legend/_title.py plotly/validators/layout/legend/_tracegroupgap.py plotly/validators/layout/legend/_traceorder.py plotly/validators/layout/legend/_uirevision.py plotly/validators/layout/legend/_valign.py plotly/validators/layout/legend/_visible.py plotly/validators/layout/legend/_x.py plotly/validators/layout/legend/_xanchor.py plotly/validators/layout/legend/_xref.py plotly/validators/layout/legend/_y.py plotly/validators/layout/legend/_yanchor.py plotly/validators/layout/legend/_yref.py plotly/validators/layout/legend/font/__init__.py plotly/validators/layout/legend/font/_color.py plotly/validators/layout/legend/font/_family.py plotly/validators/layout/legend/font/_size.py plotly/validators/layout/legend/grouptitlefont/__init__.py plotly/validators/layout/legend/grouptitlefont/_color.py plotly/validators/layout/legend/grouptitlefont/_family.py plotly/validators/layout/legend/grouptitlefont/_size.py plotly/validators/layout/legend/title/__init__.py plotly/validators/layout/legend/title/_font.py plotly/validators/layout/legend/title/_side.py plotly/validators/layout/legend/title/_text.py plotly/validators/layout/legend/title/font/__init__.py plotly/validators/layout/legend/title/font/_color.py plotly/validators/layout/legend/title/font/_family.py plotly/validators/layout/legend/title/font/_size.py plotly/validators/layout/mapbox/__init__.py plotly/validators/layout/mapbox/_accesstoken.py plotly/validators/layout/mapbox/_bearing.py plotly/validators/layout/mapbox/_bounds.py plotly/validators/layout/mapbox/_center.py plotly/validators/layout/mapbox/_domain.py plotly/validators/layout/mapbox/_layerdefaults.py plotly/validators/layout/mapbox/_layers.py plotly/validators/layout/mapbox/_pitch.py plotly/validators/layout/mapbox/_style.py plotly/validators/layout/mapbox/_uirevision.py plotly/validators/layout/mapbox/_zoom.py plotly/validators/layout/mapbox/bounds/__init__.py plotly/validators/layout/mapbox/bounds/_east.py plotly/validators/layout/mapbox/bounds/_north.py plotly/validators/layout/mapbox/bounds/_south.py plotly/validators/layout/mapbox/bounds/_west.py plotly/validators/layout/mapbox/center/__init__.py plotly/validators/layout/mapbox/center/_lat.py plotly/validators/layout/mapbox/center/_lon.py plotly/validators/layout/mapbox/domain/__init__.py plotly/validators/layout/mapbox/domain/_column.py plotly/validators/layout/mapbox/domain/_row.py plotly/validators/layout/mapbox/domain/_x.py plotly/validators/layout/mapbox/domain/_y.py plotly/validators/layout/mapbox/layer/__init__.py plotly/validators/layout/mapbox/layer/_below.py plotly/validators/layout/mapbox/layer/_circle.py plotly/validators/layout/mapbox/layer/_color.py plotly/validators/layout/mapbox/layer/_coordinates.py plotly/validators/layout/mapbox/layer/_fill.py plotly/validators/layout/mapbox/layer/_line.py plotly/validators/layout/mapbox/layer/_maxzoom.py plotly/validators/layout/mapbox/layer/_minzoom.py plotly/validators/layout/mapbox/layer/_name.py plotly/validators/layout/mapbox/layer/_opacity.py plotly/validators/layout/mapbox/layer/_source.py plotly/validators/layout/mapbox/layer/_sourceattribution.py plotly/validators/layout/mapbox/layer/_sourcelayer.py plotly/validators/layout/mapbox/layer/_sourcetype.py plotly/validators/layout/mapbox/layer/_symbol.py plotly/validators/layout/mapbox/layer/_templateitemname.py plotly/validators/layout/mapbox/layer/_type.py plotly/validators/layout/mapbox/layer/_visible.py plotly/validators/layout/mapbox/layer/circle/__init__.py plotly/validators/layout/mapbox/layer/circle/_radius.py plotly/validators/layout/mapbox/layer/fill/__init__.py plotly/validators/layout/mapbox/layer/fill/_outlinecolor.py plotly/validators/layout/mapbox/layer/line/__init__.py plotly/validators/layout/mapbox/layer/line/_dash.py plotly/validators/layout/mapbox/layer/line/_dashsrc.py plotly/validators/layout/mapbox/layer/line/_width.py plotly/validators/layout/mapbox/layer/symbol/__init__.py plotly/validators/layout/mapbox/layer/symbol/_icon.py plotly/validators/layout/mapbox/layer/symbol/_iconsize.py plotly/validators/layout/mapbox/layer/symbol/_placement.py plotly/validators/layout/mapbox/layer/symbol/_text.py plotly/validators/layout/mapbox/layer/symbol/_textfont.py plotly/validators/layout/mapbox/layer/symbol/_textposition.py plotly/validators/layout/mapbox/layer/symbol/textfont/__init__.py plotly/validators/layout/mapbox/layer/symbol/textfont/_color.py plotly/validators/layout/mapbox/layer/symbol/textfont/_family.py plotly/validators/layout/mapbox/layer/symbol/textfont/_size.py plotly/validators/layout/margin/__init__.py plotly/validators/layout/margin/_autoexpand.py plotly/validators/layout/margin/_b.py plotly/validators/layout/margin/_l.py plotly/validators/layout/margin/_pad.py plotly/validators/layout/margin/_r.py plotly/validators/layout/margin/_t.py plotly/validators/layout/modebar/__init__.py plotly/validators/layout/modebar/_activecolor.py plotly/validators/layout/modebar/_add.py plotly/validators/layout/modebar/_addsrc.py plotly/validators/layout/modebar/_bgcolor.py plotly/validators/layout/modebar/_color.py plotly/validators/layout/modebar/_orientation.py plotly/validators/layout/modebar/_remove.py plotly/validators/layout/modebar/_removesrc.py plotly/validators/layout/modebar/_uirevision.py plotly/validators/layout/newselection/__init__.py plotly/validators/layout/newselection/_line.py plotly/validators/layout/newselection/_mode.py plotly/validators/layout/newselection/line/__init__.py plotly/validators/layout/newselection/line/_color.py plotly/validators/layout/newselection/line/_dash.py plotly/validators/layout/newselection/line/_width.py plotly/validators/layout/newshape/__init__.py plotly/validators/layout/newshape/_drawdirection.py plotly/validators/layout/newshape/_fillcolor.py plotly/validators/layout/newshape/_fillrule.py plotly/validators/layout/newshape/_label.py plotly/validators/layout/newshape/_layer.py plotly/validators/layout/newshape/_line.py plotly/validators/layout/newshape/_opacity.py plotly/validators/layout/newshape/label/__init__.py plotly/validators/layout/newshape/label/_font.py plotly/validators/layout/newshape/label/_padding.py plotly/validators/layout/newshape/label/_text.py plotly/validators/layout/newshape/label/_textangle.py plotly/validators/layout/newshape/label/_textposition.py plotly/validators/layout/newshape/label/_texttemplate.py plotly/validators/layout/newshape/label/_xanchor.py plotly/validators/layout/newshape/label/_yanchor.py plotly/validators/layout/newshape/label/font/__init__.py plotly/validators/layout/newshape/label/font/_color.py plotly/validators/layout/newshape/label/font/_family.py plotly/validators/layout/newshape/label/font/_size.py plotly/validators/layout/newshape/line/__init__.py plotly/validators/layout/newshape/line/_color.py plotly/validators/layout/newshape/line/_dash.py plotly/validators/layout/newshape/line/_width.py plotly/validators/layout/polar/__init__.py plotly/validators/layout/polar/_angularaxis.py plotly/validators/layout/polar/_bargap.py plotly/validators/layout/polar/_barmode.py plotly/validators/layout/polar/_bgcolor.py plotly/validators/layout/polar/_domain.py plotly/validators/layout/polar/_gridshape.py plotly/validators/layout/polar/_hole.py plotly/validators/layout/polar/_radialaxis.py plotly/validators/layout/polar/_sector.py plotly/validators/layout/polar/_uirevision.py plotly/validators/layout/polar/angularaxis/__init__.py plotly/validators/layout/polar/angularaxis/_autotypenumbers.py plotly/validators/layout/polar/angularaxis/_categoryarray.py plotly/validators/layout/polar/angularaxis/_categoryarraysrc.py plotly/validators/layout/polar/angularaxis/_categoryorder.py plotly/validators/layout/polar/angularaxis/_color.py plotly/validators/layout/polar/angularaxis/_direction.py plotly/validators/layout/polar/angularaxis/_dtick.py plotly/validators/layout/polar/angularaxis/_exponentformat.py plotly/validators/layout/polar/angularaxis/_gridcolor.py plotly/validators/layout/polar/angularaxis/_griddash.py plotly/validators/layout/polar/angularaxis/_gridwidth.py plotly/validators/layout/polar/angularaxis/_hoverformat.py plotly/validators/layout/polar/angularaxis/_labelalias.py plotly/validators/layout/polar/angularaxis/_layer.py plotly/validators/layout/polar/angularaxis/_linecolor.py plotly/validators/layout/polar/angularaxis/_linewidth.py plotly/validators/layout/polar/angularaxis/_minexponent.py plotly/validators/layout/polar/angularaxis/_nticks.py plotly/validators/layout/polar/angularaxis/_period.py plotly/validators/layout/polar/angularaxis/_rotation.py plotly/validators/layout/polar/angularaxis/_separatethousands.py plotly/validators/layout/polar/angularaxis/_showexponent.py plotly/validators/layout/polar/angularaxis/_showgrid.py plotly/validators/layout/polar/angularaxis/_showline.py plotly/validators/layout/polar/angularaxis/_showticklabels.py plotly/validators/layout/polar/angularaxis/_showtickprefix.py plotly/validators/layout/polar/angularaxis/_showticksuffix.py plotly/validators/layout/polar/angularaxis/_thetaunit.py plotly/validators/layout/polar/angularaxis/_tick0.py plotly/validators/layout/polar/angularaxis/_tickangle.py plotly/validators/layout/polar/angularaxis/_tickcolor.py plotly/validators/layout/polar/angularaxis/_tickfont.py plotly/validators/layout/polar/angularaxis/_tickformat.py plotly/validators/layout/polar/angularaxis/_tickformatstopdefaults.py plotly/validators/layout/polar/angularaxis/_tickformatstops.py plotly/validators/layout/polar/angularaxis/_ticklabelstep.py plotly/validators/layout/polar/angularaxis/_ticklen.py plotly/validators/layout/polar/angularaxis/_tickmode.py plotly/validators/layout/polar/angularaxis/_tickprefix.py plotly/validators/layout/polar/angularaxis/_ticks.py plotly/validators/layout/polar/angularaxis/_ticksuffix.py plotly/validators/layout/polar/angularaxis/_ticktext.py plotly/validators/layout/polar/angularaxis/_ticktextsrc.py plotly/validators/layout/polar/angularaxis/_tickvals.py plotly/validators/layout/polar/angularaxis/_tickvalssrc.py plotly/validators/layout/polar/angularaxis/_tickwidth.py plotly/validators/layout/polar/angularaxis/_type.py plotly/validators/layout/polar/angularaxis/_uirevision.py plotly/validators/layout/polar/angularaxis/_visible.py plotly/validators/layout/polar/angularaxis/tickfont/__init__.py plotly/validators/layout/polar/angularaxis/tickfont/_color.py plotly/validators/layout/polar/angularaxis/tickfont/_family.py plotly/validators/layout/polar/angularaxis/tickfont/_size.py plotly/validators/layout/polar/angularaxis/tickformatstop/__init__.py plotly/validators/layout/polar/angularaxis/tickformatstop/_dtickrange.py plotly/validators/layout/polar/angularaxis/tickformatstop/_enabled.py plotly/validators/layout/polar/angularaxis/tickformatstop/_name.py plotly/validators/layout/polar/angularaxis/tickformatstop/_templateitemname.py plotly/validators/layout/polar/angularaxis/tickformatstop/_value.py plotly/validators/layout/polar/domain/__init__.py plotly/validators/layout/polar/domain/_column.py plotly/validators/layout/polar/domain/_row.py plotly/validators/layout/polar/domain/_x.py plotly/validators/layout/polar/domain/_y.py plotly/validators/layout/polar/radialaxis/__init__.py plotly/validators/layout/polar/radialaxis/_angle.py plotly/validators/layout/polar/radialaxis/_autorange.py plotly/validators/layout/polar/radialaxis/_autotypenumbers.py plotly/validators/layout/polar/radialaxis/_calendar.py plotly/validators/layout/polar/radialaxis/_categoryarray.py plotly/validators/layout/polar/radialaxis/_categoryarraysrc.py plotly/validators/layout/polar/radialaxis/_categoryorder.py plotly/validators/layout/polar/radialaxis/_color.py plotly/validators/layout/polar/radialaxis/_dtick.py plotly/validators/layout/polar/radialaxis/_exponentformat.py plotly/validators/layout/polar/radialaxis/_gridcolor.py plotly/validators/layout/polar/radialaxis/_griddash.py plotly/validators/layout/polar/radialaxis/_gridwidth.py plotly/validators/layout/polar/radialaxis/_hoverformat.py plotly/validators/layout/polar/radialaxis/_labelalias.py plotly/validators/layout/polar/radialaxis/_layer.py plotly/validators/layout/polar/radialaxis/_linecolor.py plotly/validators/layout/polar/radialaxis/_linewidth.py plotly/validators/layout/polar/radialaxis/_minexponent.py plotly/validators/layout/polar/radialaxis/_nticks.py plotly/validators/layout/polar/radialaxis/_range.py plotly/validators/layout/polar/radialaxis/_rangemode.py plotly/validators/layout/polar/radialaxis/_separatethousands.py plotly/validators/layout/polar/radialaxis/_showexponent.py plotly/validators/layout/polar/radialaxis/_showgrid.py plotly/validators/layout/polar/radialaxis/_showline.py plotly/validators/layout/polar/radialaxis/_showticklabels.py plotly/validators/layout/polar/radialaxis/_showtickprefix.py plotly/validators/layout/polar/radialaxis/_showticksuffix.py plotly/validators/layout/polar/radialaxis/_side.py plotly/validators/layout/polar/radialaxis/_tick0.py plotly/validators/layout/polar/radialaxis/_tickangle.py plotly/validators/layout/polar/radialaxis/_tickcolor.py plotly/validators/layout/polar/radialaxis/_tickfont.py plotly/validators/layout/polar/radialaxis/_tickformat.py plotly/validators/layout/polar/radialaxis/_tickformatstopdefaults.py plotly/validators/layout/polar/radialaxis/_tickformatstops.py plotly/validators/layout/polar/radialaxis/_ticklabelstep.py plotly/validators/layout/polar/radialaxis/_ticklen.py plotly/validators/layout/polar/radialaxis/_tickmode.py plotly/validators/layout/polar/radialaxis/_tickprefix.py plotly/validators/layout/polar/radialaxis/_ticks.py plotly/validators/layout/polar/radialaxis/_ticksuffix.py plotly/validators/layout/polar/radialaxis/_ticktext.py plotly/validators/layout/polar/radialaxis/_ticktextsrc.py plotly/validators/layout/polar/radialaxis/_tickvals.py plotly/validators/layout/polar/radialaxis/_tickvalssrc.py plotly/validators/layout/polar/radialaxis/_tickwidth.py plotly/validators/layout/polar/radialaxis/_title.py plotly/validators/layout/polar/radialaxis/_type.py plotly/validators/layout/polar/radialaxis/_uirevision.py plotly/validators/layout/polar/radialaxis/_visible.py plotly/validators/layout/polar/radialaxis/tickfont/__init__.py plotly/validators/layout/polar/radialaxis/tickfont/_color.py plotly/validators/layout/polar/radialaxis/tickfont/_family.py plotly/validators/layout/polar/radialaxis/tickfont/_size.py plotly/validators/layout/polar/radialaxis/tickformatstop/__init__.py plotly/validators/layout/polar/radialaxis/tickformatstop/_dtickrange.py plotly/validators/layout/polar/radialaxis/tickformatstop/_enabled.py plotly/validators/layout/polar/radialaxis/tickformatstop/_name.py plotly/validators/layout/polar/radialaxis/tickformatstop/_templateitemname.py plotly/validators/layout/polar/radialaxis/tickformatstop/_value.py plotly/validators/layout/polar/radialaxis/title/__init__.py plotly/validators/layout/polar/radialaxis/title/_font.py plotly/validators/layout/polar/radialaxis/title/_text.py plotly/validators/layout/polar/radialaxis/title/font/__init__.py plotly/validators/layout/polar/radialaxis/title/font/_color.py plotly/validators/layout/polar/radialaxis/title/font/_family.py plotly/validators/layout/polar/radialaxis/title/font/_size.py plotly/validators/layout/scene/__init__.py plotly/validators/layout/scene/_annotationdefaults.py plotly/validators/layout/scene/_annotations.py plotly/validators/layout/scene/_aspectmode.py plotly/validators/layout/scene/_aspectratio.py plotly/validators/layout/scene/_bgcolor.py plotly/validators/layout/scene/_camera.py plotly/validators/layout/scene/_domain.py plotly/validators/layout/scene/_dragmode.py plotly/validators/layout/scene/_hovermode.py plotly/validators/layout/scene/_uirevision.py plotly/validators/layout/scene/_xaxis.py plotly/validators/layout/scene/_yaxis.py plotly/validators/layout/scene/_zaxis.py plotly/validators/layout/scene/annotation/__init__.py plotly/validators/layout/scene/annotation/_align.py plotly/validators/layout/scene/annotation/_arrowcolor.py plotly/validators/layout/scene/annotation/_arrowhead.py plotly/validators/layout/scene/annotation/_arrowside.py plotly/validators/layout/scene/annotation/_arrowsize.py plotly/validators/layout/scene/annotation/_arrowwidth.py plotly/validators/layout/scene/annotation/_ax.py plotly/validators/layout/scene/annotation/_ay.py plotly/validators/layout/scene/annotation/_bgcolor.py plotly/validators/layout/scene/annotation/_bordercolor.py plotly/validators/layout/scene/annotation/_borderpad.py plotly/validators/layout/scene/annotation/_borderwidth.py plotly/validators/layout/scene/annotation/_captureevents.py plotly/validators/layout/scene/annotation/_font.py plotly/validators/layout/scene/annotation/_height.py plotly/validators/layout/scene/annotation/_hoverlabel.py plotly/validators/layout/scene/annotation/_hovertext.py plotly/validators/layout/scene/annotation/_name.py plotly/validators/layout/scene/annotation/_opacity.py plotly/validators/layout/scene/annotation/_showarrow.py plotly/validators/layout/scene/annotation/_standoff.py plotly/validators/layout/scene/annotation/_startarrowhead.py plotly/validators/layout/scene/annotation/_startarrowsize.py plotly/validators/layout/scene/annotation/_startstandoff.py plotly/validators/layout/scene/annotation/_templateitemname.py plotly/validators/layout/scene/annotation/_text.py plotly/validators/layout/scene/annotation/_textangle.py plotly/validators/layout/scene/annotation/_valign.py plotly/validators/layout/scene/annotation/_visible.py plotly/validators/layout/scene/annotation/_width.py plotly/validators/layout/scene/annotation/_x.py plotly/validators/layout/scene/annotation/_xanchor.py plotly/validators/layout/scene/annotation/_xshift.py plotly/validators/layout/scene/annotation/_y.py plotly/validators/layout/scene/annotation/_yanchor.py plotly/validators/layout/scene/annotation/_yshift.py plotly/validators/layout/scene/annotation/_z.py plotly/validators/layout/scene/annotation/font/__init__.py plotly/validators/layout/scene/annotation/font/_color.py plotly/validators/layout/scene/annotation/font/_family.py plotly/validators/layout/scene/annotation/font/_size.py plotly/validators/layout/scene/annotation/hoverlabel/__init__.py plotly/validators/layout/scene/annotation/hoverlabel/_bgcolor.py plotly/validators/layout/scene/annotation/hoverlabel/_bordercolor.py plotly/validators/layout/scene/annotation/hoverlabel/_font.py plotly/validators/layout/scene/annotation/hoverlabel/font/__init__.py plotly/validators/layout/scene/annotation/hoverlabel/font/_color.py plotly/validators/layout/scene/annotation/hoverlabel/font/_family.py plotly/validators/layout/scene/annotation/hoverlabel/font/_size.py plotly/validators/layout/scene/aspectratio/__init__.py plotly/validators/layout/scene/aspectratio/_x.py plotly/validators/layout/scene/aspectratio/_y.py plotly/validators/layout/scene/aspectratio/_z.py plotly/validators/layout/scene/camera/__init__.py plotly/validators/layout/scene/camera/_center.py plotly/validators/layout/scene/camera/_eye.py plotly/validators/layout/scene/camera/_projection.py plotly/validators/layout/scene/camera/_up.py plotly/validators/layout/scene/camera/center/__init__.py plotly/validators/layout/scene/camera/center/_x.py plotly/validators/layout/scene/camera/center/_y.py plotly/validators/layout/scene/camera/center/_z.py plotly/validators/layout/scene/camera/eye/__init__.py plotly/validators/layout/scene/camera/eye/_x.py plotly/validators/layout/scene/camera/eye/_y.py plotly/validators/layout/scene/camera/eye/_z.py plotly/validators/layout/scene/camera/projection/__init__.py plotly/validators/layout/scene/camera/projection/_type.py plotly/validators/layout/scene/camera/up/__init__.py plotly/validators/layout/scene/camera/up/_x.py plotly/validators/layout/scene/camera/up/_y.py plotly/validators/layout/scene/camera/up/_z.py plotly/validators/layout/scene/domain/__init__.py plotly/validators/layout/scene/domain/_column.py plotly/validators/layout/scene/domain/_row.py plotly/validators/layout/scene/domain/_x.py plotly/validators/layout/scene/domain/_y.py plotly/validators/layout/scene/xaxis/__init__.py plotly/validators/layout/scene/xaxis/_autorange.py plotly/validators/layout/scene/xaxis/_autotypenumbers.py plotly/validators/layout/scene/xaxis/_backgroundcolor.py plotly/validators/layout/scene/xaxis/_calendar.py plotly/validators/layout/scene/xaxis/_categoryarray.py plotly/validators/layout/scene/xaxis/_categoryarraysrc.py plotly/validators/layout/scene/xaxis/_categoryorder.py plotly/validators/layout/scene/xaxis/_color.py plotly/validators/layout/scene/xaxis/_dtick.py plotly/validators/layout/scene/xaxis/_exponentformat.py plotly/validators/layout/scene/xaxis/_gridcolor.py plotly/validators/layout/scene/xaxis/_gridwidth.py plotly/validators/layout/scene/xaxis/_hoverformat.py plotly/validators/layout/scene/xaxis/_labelalias.py plotly/validators/layout/scene/xaxis/_linecolor.py plotly/validators/layout/scene/xaxis/_linewidth.py plotly/validators/layout/scene/xaxis/_minexponent.py plotly/validators/layout/scene/xaxis/_mirror.py plotly/validators/layout/scene/xaxis/_nticks.py plotly/validators/layout/scene/xaxis/_range.py plotly/validators/layout/scene/xaxis/_rangemode.py plotly/validators/layout/scene/xaxis/_separatethousands.py plotly/validators/layout/scene/xaxis/_showaxeslabels.py plotly/validators/layout/scene/xaxis/_showbackground.py plotly/validators/layout/scene/xaxis/_showexponent.py plotly/validators/layout/scene/xaxis/_showgrid.py plotly/validators/layout/scene/xaxis/_showline.py plotly/validators/layout/scene/xaxis/_showspikes.py plotly/validators/layout/scene/xaxis/_showticklabels.py plotly/validators/layout/scene/xaxis/_showtickprefix.py plotly/validators/layout/scene/xaxis/_showticksuffix.py plotly/validators/layout/scene/xaxis/_spikecolor.py plotly/validators/layout/scene/xaxis/_spikesides.py plotly/validators/layout/scene/xaxis/_spikethickness.py plotly/validators/layout/scene/xaxis/_tick0.py plotly/validators/layout/scene/xaxis/_tickangle.py plotly/validators/layout/scene/xaxis/_tickcolor.py plotly/validators/layout/scene/xaxis/_tickfont.py plotly/validators/layout/scene/xaxis/_tickformat.py plotly/validators/layout/scene/xaxis/_tickformatstopdefaults.py plotly/validators/layout/scene/xaxis/_tickformatstops.py plotly/validators/layout/scene/xaxis/_ticklen.py plotly/validators/layout/scene/xaxis/_tickmode.py plotly/validators/layout/scene/xaxis/_tickprefix.py plotly/validators/layout/scene/xaxis/_ticks.py plotly/validators/layout/scene/xaxis/_ticksuffix.py plotly/validators/layout/scene/xaxis/_ticktext.py plotly/validators/layout/scene/xaxis/_ticktextsrc.py plotly/validators/layout/scene/xaxis/_tickvals.py plotly/validators/layout/scene/xaxis/_tickvalssrc.py plotly/validators/layout/scene/xaxis/_tickwidth.py plotly/validators/layout/scene/xaxis/_title.py plotly/validators/layout/scene/xaxis/_type.py plotly/validators/layout/scene/xaxis/_visible.py plotly/validators/layout/scene/xaxis/_zeroline.py plotly/validators/layout/scene/xaxis/_zerolinecolor.py plotly/validators/layout/scene/xaxis/_zerolinewidth.py plotly/validators/layout/scene/xaxis/tickfont/__init__.py plotly/validators/layout/scene/xaxis/tickfont/_color.py plotly/validators/layout/scene/xaxis/tickfont/_family.py plotly/validators/layout/scene/xaxis/tickfont/_size.py plotly/validators/layout/scene/xaxis/tickformatstop/__init__.py plotly/validators/layout/scene/xaxis/tickformatstop/_dtickrange.py plotly/validators/layout/scene/xaxis/tickformatstop/_enabled.py plotly/validators/layout/scene/xaxis/tickformatstop/_name.py plotly/validators/layout/scene/xaxis/tickformatstop/_templateitemname.py plotly/validators/layout/scene/xaxis/tickformatstop/_value.py plotly/validators/layout/scene/xaxis/title/__init__.py plotly/validators/layout/scene/xaxis/title/_font.py plotly/validators/layout/scene/xaxis/title/_text.py plotly/validators/layout/scene/xaxis/title/font/__init__.py plotly/validators/layout/scene/xaxis/title/font/_color.py plotly/validators/layout/scene/xaxis/title/font/_family.py plotly/validators/layout/scene/xaxis/title/font/_size.py plotly/validators/layout/scene/yaxis/__init__.py plotly/validators/layout/scene/yaxis/_autorange.py plotly/validators/layout/scene/yaxis/_autotypenumbers.py plotly/validators/layout/scene/yaxis/_backgroundcolor.py plotly/validators/layout/scene/yaxis/_calendar.py plotly/validators/layout/scene/yaxis/_categoryarray.py plotly/validators/layout/scene/yaxis/_categoryarraysrc.py plotly/validators/layout/scene/yaxis/_categoryorder.py plotly/validators/layout/scene/yaxis/_color.py plotly/validators/layout/scene/yaxis/_dtick.py plotly/validators/layout/scene/yaxis/_exponentformat.py plotly/validators/layout/scene/yaxis/_gridcolor.py plotly/validators/layout/scene/yaxis/_gridwidth.py plotly/validators/layout/scene/yaxis/_hoverformat.py plotly/validators/layout/scene/yaxis/_labelalias.py plotly/validators/layout/scene/yaxis/_linecolor.py plotly/validators/layout/scene/yaxis/_linewidth.py plotly/validators/layout/scene/yaxis/_minexponent.py plotly/validators/layout/scene/yaxis/_mirror.py plotly/validators/layout/scene/yaxis/_nticks.py plotly/validators/layout/scene/yaxis/_range.py plotly/validators/layout/scene/yaxis/_rangemode.py plotly/validators/layout/scene/yaxis/_separatethousands.py plotly/validators/layout/scene/yaxis/_showaxeslabels.py plotly/validators/layout/scene/yaxis/_showbackground.py plotly/validators/layout/scene/yaxis/_showexponent.py plotly/validators/layout/scene/yaxis/_showgrid.py plotly/validators/layout/scene/yaxis/_showline.py plotly/validators/layout/scene/yaxis/_showspikes.py plotly/validators/layout/scene/yaxis/_showticklabels.py plotly/validators/layout/scene/yaxis/_showtickprefix.py plotly/validators/layout/scene/yaxis/_showticksuffix.py plotly/validators/layout/scene/yaxis/_spikecolor.py plotly/validators/layout/scene/yaxis/_spikesides.py plotly/validators/layout/scene/yaxis/_spikethickness.py plotly/validators/layout/scene/yaxis/_tick0.py plotly/validators/layout/scene/yaxis/_tickangle.py plotly/validators/layout/scene/yaxis/_tickcolor.py plotly/validators/layout/scene/yaxis/_tickfont.py plotly/validators/layout/scene/yaxis/_tickformat.py plotly/validators/layout/scene/yaxis/_tickformatstopdefaults.py plotly/validators/layout/scene/yaxis/_tickformatstops.py plotly/validators/layout/scene/yaxis/_ticklen.py plotly/validators/layout/scene/yaxis/_tickmode.py plotly/validators/layout/scene/yaxis/_tickprefix.py plotly/validators/layout/scene/yaxis/_ticks.py plotly/validators/layout/scene/yaxis/_ticksuffix.py plotly/validators/layout/scene/yaxis/_ticktext.py plotly/validators/layout/scene/yaxis/_ticktextsrc.py plotly/validators/layout/scene/yaxis/_tickvals.py plotly/validators/layout/scene/yaxis/_tickvalssrc.py plotly/validators/layout/scene/yaxis/_tickwidth.py plotly/validators/layout/scene/yaxis/_title.py plotly/validators/layout/scene/yaxis/_type.py plotly/validators/layout/scene/yaxis/_visible.py plotly/validators/layout/scene/yaxis/_zeroline.py plotly/validators/layout/scene/yaxis/_zerolinecolor.py plotly/validators/layout/scene/yaxis/_zerolinewidth.py plotly/validators/layout/scene/yaxis/tickfont/__init__.py plotly/validators/layout/scene/yaxis/tickfont/_color.py plotly/validators/layout/scene/yaxis/tickfont/_family.py plotly/validators/layout/scene/yaxis/tickfont/_size.py plotly/validators/layout/scene/yaxis/tickformatstop/__init__.py plotly/validators/layout/scene/yaxis/tickformatstop/_dtickrange.py plotly/validators/layout/scene/yaxis/tickformatstop/_enabled.py plotly/validators/layout/scene/yaxis/tickformatstop/_name.py plotly/validators/layout/scene/yaxis/tickformatstop/_templateitemname.py plotly/validators/layout/scene/yaxis/tickformatstop/_value.py plotly/validators/layout/scene/yaxis/title/__init__.py plotly/validators/layout/scene/yaxis/title/_font.py plotly/validators/layout/scene/yaxis/title/_text.py plotly/validators/layout/scene/yaxis/title/font/__init__.py plotly/validators/layout/scene/yaxis/title/font/_color.py plotly/validators/layout/scene/yaxis/title/font/_family.py plotly/validators/layout/scene/yaxis/title/font/_size.py plotly/validators/layout/scene/zaxis/__init__.py plotly/validators/layout/scene/zaxis/_autorange.py plotly/validators/layout/scene/zaxis/_autotypenumbers.py plotly/validators/layout/scene/zaxis/_backgroundcolor.py plotly/validators/layout/scene/zaxis/_calendar.py plotly/validators/layout/scene/zaxis/_categoryarray.py plotly/validators/layout/scene/zaxis/_categoryarraysrc.py plotly/validators/layout/scene/zaxis/_categoryorder.py plotly/validators/layout/scene/zaxis/_color.py plotly/validators/layout/scene/zaxis/_dtick.py plotly/validators/layout/scene/zaxis/_exponentformat.py plotly/validators/layout/scene/zaxis/_gridcolor.py plotly/validators/layout/scene/zaxis/_gridwidth.py plotly/validators/layout/scene/zaxis/_hoverformat.py plotly/validators/layout/scene/zaxis/_labelalias.py plotly/validators/layout/scene/zaxis/_linecolor.py plotly/validators/layout/scene/zaxis/_linewidth.py plotly/validators/layout/scene/zaxis/_minexponent.py plotly/validators/layout/scene/zaxis/_mirror.py plotly/validators/layout/scene/zaxis/_nticks.py plotly/validators/layout/scene/zaxis/_range.py plotly/validators/layout/scene/zaxis/_rangemode.py plotly/validators/layout/scene/zaxis/_separatethousands.py plotly/validators/layout/scene/zaxis/_showaxeslabels.py plotly/validators/layout/scene/zaxis/_showbackground.py plotly/validators/layout/scene/zaxis/_showexponent.py plotly/validators/layout/scene/zaxis/_showgrid.py plotly/validators/layout/scene/zaxis/_showline.py plotly/validators/layout/scene/zaxis/_showspikes.py plotly/validators/layout/scene/zaxis/_showticklabels.py plotly/validators/layout/scene/zaxis/_showtickprefix.py plotly/validators/layout/scene/zaxis/_showticksuffix.py plotly/validators/layout/scene/zaxis/_spikecolor.py plotly/validators/layout/scene/zaxis/_spikesides.py plotly/validators/layout/scene/zaxis/_spikethickness.py plotly/validators/layout/scene/zaxis/_tick0.py plotly/validators/layout/scene/zaxis/_tickangle.py plotly/validators/layout/scene/zaxis/_tickcolor.py plotly/validators/layout/scene/zaxis/_tickfont.py plotly/validators/layout/scene/zaxis/_tickformat.py plotly/validators/layout/scene/zaxis/_tickformatstopdefaults.py plotly/validators/layout/scene/zaxis/_tickformatstops.py plotly/validators/layout/scene/zaxis/_ticklen.py plotly/validators/layout/scene/zaxis/_tickmode.py plotly/validators/layout/scene/zaxis/_tickprefix.py plotly/validators/layout/scene/zaxis/_ticks.py plotly/validators/layout/scene/zaxis/_ticksuffix.py plotly/validators/layout/scene/zaxis/_ticktext.py plotly/validators/layout/scene/zaxis/_ticktextsrc.py plotly/validators/layout/scene/zaxis/_tickvals.py plotly/validators/layout/scene/zaxis/_tickvalssrc.py plotly/validators/layout/scene/zaxis/_tickwidth.py plotly/validators/layout/scene/zaxis/_title.py plotly/validators/layout/scene/zaxis/_type.py plotly/validators/layout/scene/zaxis/_visible.py plotly/validators/layout/scene/zaxis/_zeroline.py plotly/validators/layout/scene/zaxis/_zerolinecolor.py plotly/validators/layout/scene/zaxis/_zerolinewidth.py plotly/validators/layout/scene/zaxis/tickfont/__init__.py plotly/validators/layout/scene/zaxis/tickfont/_color.py plotly/validators/layout/scene/zaxis/tickfont/_family.py plotly/validators/layout/scene/zaxis/tickfont/_size.py plotly/validators/layout/scene/zaxis/tickformatstop/__init__.py plotly/validators/layout/scene/zaxis/tickformatstop/_dtickrange.py plotly/validators/layout/scene/zaxis/tickformatstop/_enabled.py plotly/validators/layout/scene/zaxis/tickformatstop/_name.py plotly/validators/layout/scene/zaxis/tickformatstop/_templateitemname.py plotly/validators/layout/scene/zaxis/tickformatstop/_value.py plotly/validators/layout/scene/zaxis/title/__init__.py plotly/validators/layout/scene/zaxis/title/_font.py plotly/validators/layout/scene/zaxis/title/_text.py plotly/validators/layout/scene/zaxis/title/font/__init__.py plotly/validators/layout/scene/zaxis/title/font/_color.py plotly/validators/layout/scene/zaxis/title/font/_family.py plotly/validators/layout/scene/zaxis/title/font/_size.py plotly/validators/layout/selection/__init__.py plotly/validators/layout/selection/_line.py plotly/validators/layout/selection/_name.py plotly/validators/layout/selection/_opacity.py plotly/validators/layout/selection/_path.py plotly/validators/layout/selection/_templateitemname.py plotly/validators/layout/selection/_type.py plotly/validators/layout/selection/_x0.py plotly/validators/layout/selection/_x1.py plotly/validators/layout/selection/_xref.py plotly/validators/layout/selection/_y0.py plotly/validators/layout/selection/_y1.py plotly/validators/layout/selection/_yref.py plotly/validators/layout/selection/line/__init__.py plotly/validators/layout/selection/line/_color.py plotly/validators/layout/selection/line/_dash.py plotly/validators/layout/selection/line/_width.py plotly/validators/layout/shape/__init__.py plotly/validators/layout/shape/_editable.py plotly/validators/layout/shape/_fillcolor.py plotly/validators/layout/shape/_fillrule.py plotly/validators/layout/shape/_label.py plotly/validators/layout/shape/_layer.py plotly/validators/layout/shape/_line.py plotly/validators/layout/shape/_name.py plotly/validators/layout/shape/_opacity.py plotly/validators/layout/shape/_path.py plotly/validators/layout/shape/_templateitemname.py plotly/validators/layout/shape/_type.py plotly/validators/layout/shape/_visible.py plotly/validators/layout/shape/_x0.py plotly/validators/layout/shape/_x1.py plotly/validators/layout/shape/_xanchor.py plotly/validators/layout/shape/_xref.py plotly/validators/layout/shape/_xsizemode.py plotly/validators/layout/shape/_y0.py plotly/validators/layout/shape/_y1.py plotly/validators/layout/shape/_yanchor.py plotly/validators/layout/shape/_yref.py plotly/validators/layout/shape/_ysizemode.py plotly/validators/layout/shape/label/__init__.py plotly/validators/layout/shape/label/_font.py plotly/validators/layout/shape/label/_padding.py plotly/validators/layout/shape/label/_text.py plotly/validators/layout/shape/label/_textangle.py plotly/validators/layout/shape/label/_textposition.py plotly/validators/layout/shape/label/_texttemplate.py plotly/validators/layout/shape/label/_xanchor.py plotly/validators/layout/shape/label/_yanchor.py plotly/validators/layout/shape/label/font/__init__.py plotly/validators/layout/shape/label/font/_color.py plotly/validators/layout/shape/label/font/_family.py plotly/validators/layout/shape/label/font/_size.py plotly/validators/layout/shape/line/__init__.py plotly/validators/layout/shape/line/_color.py plotly/validators/layout/shape/line/_dash.py plotly/validators/layout/shape/line/_width.py plotly/validators/layout/slider/__init__.py plotly/validators/layout/slider/_active.py plotly/validators/layout/slider/_activebgcolor.py plotly/validators/layout/slider/_bgcolor.py plotly/validators/layout/slider/_bordercolor.py plotly/validators/layout/slider/_borderwidth.py plotly/validators/layout/slider/_currentvalue.py plotly/validators/layout/slider/_font.py plotly/validators/layout/slider/_len.py plotly/validators/layout/slider/_lenmode.py plotly/validators/layout/slider/_minorticklen.py plotly/validators/layout/slider/_name.py plotly/validators/layout/slider/_pad.py plotly/validators/layout/slider/_stepdefaults.py plotly/validators/layout/slider/_steps.py plotly/validators/layout/slider/_templateitemname.py plotly/validators/layout/slider/_tickcolor.py plotly/validators/layout/slider/_ticklen.py plotly/validators/layout/slider/_tickwidth.py plotly/validators/layout/slider/_transition.py plotly/validators/layout/slider/_visible.py plotly/validators/layout/slider/_x.py plotly/validators/layout/slider/_xanchor.py plotly/validators/layout/slider/_y.py plotly/validators/layout/slider/_yanchor.py plotly/validators/layout/slider/currentvalue/__init__.py plotly/validators/layout/slider/currentvalue/_font.py plotly/validators/layout/slider/currentvalue/_offset.py plotly/validators/layout/slider/currentvalue/_prefix.py plotly/validators/layout/slider/currentvalue/_suffix.py plotly/validators/layout/slider/currentvalue/_visible.py plotly/validators/layout/slider/currentvalue/_xanchor.py plotly/validators/layout/slider/currentvalue/font/__init__.py plotly/validators/layout/slider/currentvalue/font/_color.py plotly/validators/layout/slider/currentvalue/font/_family.py plotly/validators/layout/slider/currentvalue/font/_size.py plotly/validators/layout/slider/font/__init__.py plotly/validators/layout/slider/font/_color.py plotly/validators/layout/slider/font/_family.py plotly/validators/layout/slider/font/_size.py plotly/validators/layout/slider/pad/__init__.py plotly/validators/layout/slider/pad/_b.py plotly/validators/layout/slider/pad/_l.py plotly/validators/layout/slider/pad/_r.py plotly/validators/layout/slider/pad/_t.py plotly/validators/layout/slider/step/__init__.py plotly/validators/layout/slider/step/_args.py plotly/validators/layout/slider/step/_execute.py plotly/validators/layout/slider/step/_label.py plotly/validators/layout/slider/step/_method.py plotly/validators/layout/slider/step/_name.py plotly/validators/layout/slider/step/_templateitemname.py plotly/validators/layout/slider/step/_value.py plotly/validators/layout/slider/step/_visible.py plotly/validators/layout/slider/transition/__init__.py plotly/validators/layout/slider/transition/_duration.py plotly/validators/layout/slider/transition/_easing.py plotly/validators/layout/smith/__init__.py plotly/validators/layout/smith/_bgcolor.py plotly/validators/layout/smith/_domain.py plotly/validators/layout/smith/_imaginaryaxis.py plotly/validators/layout/smith/_realaxis.py plotly/validators/layout/smith/domain/__init__.py plotly/validators/layout/smith/domain/_column.py plotly/validators/layout/smith/domain/_row.py plotly/validators/layout/smith/domain/_x.py plotly/validators/layout/smith/domain/_y.py plotly/validators/layout/smith/imaginaryaxis/__init__.py plotly/validators/layout/smith/imaginaryaxis/_color.py plotly/validators/layout/smith/imaginaryaxis/_gridcolor.py plotly/validators/layout/smith/imaginaryaxis/_griddash.py plotly/validators/layout/smith/imaginaryaxis/_gridwidth.py plotly/validators/layout/smith/imaginaryaxis/_hoverformat.py plotly/validators/layout/smith/imaginaryaxis/_labelalias.py plotly/validators/layout/smith/imaginaryaxis/_layer.py plotly/validators/layout/smith/imaginaryaxis/_linecolor.py plotly/validators/layout/smith/imaginaryaxis/_linewidth.py plotly/validators/layout/smith/imaginaryaxis/_showgrid.py plotly/validators/layout/smith/imaginaryaxis/_showline.py plotly/validators/layout/smith/imaginaryaxis/_showticklabels.py plotly/validators/layout/smith/imaginaryaxis/_showtickprefix.py plotly/validators/layout/smith/imaginaryaxis/_showticksuffix.py plotly/validators/layout/smith/imaginaryaxis/_tickcolor.py plotly/validators/layout/smith/imaginaryaxis/_tickfont.py plotly/validators/layout/smith/imaginaryaxis/_tickformat.py plotly/validators/layout/smith/imaginaryaxis/_ticklen.py plotly/validators/layout/smith/imaginaryaxis/_tickprefix.py plotly/validators/layout/smith/imaginaryaxis/_ticks.py plotly/validators/layout/smith/imaginaryaxis/_ticksuffix.py plotly/validators/layout/smith/imaginaryaxis/_tickvals.py plotly/validators/layout/smith/imaginaryaxis/_tickvalssrc.py plotly/validators/layout/smith/imaginaryaxis/_tickwidth.py plotly/validators/layout/smith/imaginaryaxis/_visible.py plotly/validators/layout/smith/imaginaryaxis/tickfont/__init__.py plotly/validators/layout/smith/imaginaryaxis/tickfont/_color.py plotly/validators/layout/smith/imaginaryaxis/tickfont/_family.py plotly/validators/layout/smith/imaginaryaxis/tickfont/_size.py plotly/validators/layout/smith/realaxis/__init__.py plotly/validators/layout/smith/realaxis/_color.py plotly/validators/layout/smith/realaxis/_gridcolor.py plotly/validators/layout/smith/realaxis/_griddash.py plotly/validators/layout/smith/realaxis/_gridwidth.py plotly/validators/layout/smith/realaxis/_hoverformat.py plotly/validators/layout/smith/realaxis/_labelalias.py plotly/validators/layout/smith/realaxis/_layer.py plotly/validators/layout/smith/realaxis/_linecolor.py plotly/validators/layout/smith/realaxis/_linewidth.py plotly/validators/layout/smith/realaxis/_showgrid.py plotly/validators/layout/smith/realaxis/_showline.py plotly/validators/layout/smith/realaxis/_showticklabels.py plotly/validators/layout/smith/realaxis/_showtickprefix.py plotly/validators/layout/smith/realaxis/_showticksuffix.py plotly/validators/layout/smith/realaxis/_side.py plotly/validators/layout/smith/realaxis/_tickangle.py plotly/validators/layout/smith/realaxis/_tickcolor.py plotly/validators/layout/smith/realaxis/_tickfont.py plotly/validators/layout/smith/realaxis/_tickformat.py plotly/validators/layout/smith/realaxis/_ticklen.py plotly/validators/layout/smith/realaxis/_tickprefix.py plotly/validators/layout/smith/realaxis/_ticks.py plotly/validators/layout/smith/realaxis/_ticksuffix.py plotly/validators/layout/smith/realaxis/_tickvals.py plotly/validators/layout/smith/realaxis/_tickvalssrc.py plotly/validators/layout/smith/realaxis/_tickwidth.py plotly/validators/layout/smith/realaxis/_visible.py plotly/validators/layout/smith/realaxis/tickfont/__init__.py plotly/validators/layout/smith/realaxis/tickfont/_color.py plotly/validators/layout/smith/realaxis/tickfont/_family.py plotly/validators/layout/smith/realaxis/tickfont/_size.py plotly/validators/layout/template/__init__.py plotly/validators/layout/template/_data.py plotly/validators/layout/template/_layout.py plotly/validators/layout/template/data/__init__.py plotly/validators/layout/template/data/_bar.py plotly/validators/layout/template/data/_barpolar.py plotly/validators/layout/template/data/_box.py plotly/validators/layout/template/data/_candlestick.py plotly/validators/layout/template/data/_carpet.py plotly/validators/layout/template/data/_choropleth.py plotly/validators/layout/template/data/_choroplethmapbox.py plotly/validators/layout/template/data/_cone.py plotly/validators/layout/template/data/_contour.py plotly/validators/layout/template/data/_contourcarpet.py plotly/validators/layout/template/data/_densitymapbox.py plotly/validators/layout/template/data/_funnel.py plotly/validators/layout/template/data/_funnelarea.py plotly/validators/layout/template/data/_heatmap.py plotly/validators/layout/template/data/_heatmapgl.py plotly/validators/layout/template/data/_histogram.py plotly/validators/layout/template/data/_histogram2d.py plotly/validators/layout/template/data/_histogram2dcontour.py plotly/validators/layout/template/data/_icicle.py plotly/validators/layout/template/data/_image.py plotly/validators/layout/template/data/_indicator.py plotly/validators/layout/template/data/_isosurface.py plotly/validators/layout/template/data/_mesh3d.py plotly/validators/layout/template/data/_ohlc.py plotly/validators/layout/template/data/_parcats.py plotly/validators/layout/template/data/_parcoords.py plotly/validators/layout/template/data/_pie.py plotly/validators/layout/template/data/_pointcloud.py plotly/validators/layout/template/data/_sankey.py plotly/validators/layout/template/data/_scatter.py plotly/validators/layout/template/data/_scatter3d.py plotly/validators/layout/template/data/_scattercarpet.py plotly/validators/layout/template/data/_scattergeo.py plotly/validators/layout/template/data/_scattergl.py plotly/validators/layout/template/data/_scattermapbox.py plotly/validators/layout/template/data/_scatterpolar.py plotly/validators/layout/template/data/_scatterpolargl.py plotly/validators/layout/template/data/_scattersmith.py plotly/validators/layout/template/data/_scatterternary.py plotly/validators/layout/template/data/_splom.py plotly/validators/layout/template/data/_streamtube.py plotly/validators/layout/template/data/_sunburst.py plotly/validators/layout/template/data/_surface.py plotly/validators/layout/template/data/_table.py plotly/validators/layout/template/data/_treemap.py plotly/validators/layout/template/data/_violin.py plotly/validators/layout/template/data/_volume.py plotly/validators/layout/template/data/_waterfall.py plotly/validators/layout/ternary/__init__.py plotly/validators/layout/ternary/_aaxis.py plotly/validators/layout/ternary/_baxis.py plotly/validators/layout/ternary/_bgcolor.py plotly/validators/layout/ternary/_caxis.py plotly/validators/layout/ternary/_domain.py plotly/validators/layout/ternary/_sum.py plotly/validators/layout/ternary/_uirevision.py plotly/validators/layout/ternary/aaxis/__init__.py plotly/validators/layout/ternary/aaxis/_color.py plotly/validators/layout/ternary/aaxis/_dtick.py plotly/validators/layout/ternary/aaxis/_exponentformat.py plotly/validators/layout/ternary/aaxis/_gridcolor.py plotly/validators/layout/ternary/aaxis/_griddash.py plotly/validators/layout/ternary/aaxis/_gridwidth.py plotly/validators/layout/ternary/aaxis/_hoverformat.py plotly/validators/layout/ternary/aaxis/_labelalias.py plotly/validators/layout/ternary/aaxis/_layer.py plotly/validators/layout/ternary/aaxis/_linecolor.py plotly/validators/layout/ternary/aaxis/_linewidth.py plotly/validators/layout/ternary/aaxis/_min.py plotly/validators/layout/ternary/aaxis/_minexponent.py plotly/validators/layout/ternary/aaxis/_nticks.py plotly/validators/layout/ternary/aaxis/_separatethousands.py plotly/validators/layout/ternary/aaxis/_showexponent.py plotly/validators/layout/ternary/aaxis/_showgrid.py plotly/validators/layout/ternary/aaxis/_showline.py plotly/validators/layout/ternary/aaxis/_showticklabels.py plotly/validators/layout/ternary/aaxis/_showtickprefix.py plotly/validators/layout/ternary/aaxis/_showticksuffix.py plotly/validators/layout/ternary/aaxis/_tick0.py plotly/validators/layout/ternary/aaxis/_tickangle.py plotly/validators/layout/ternary/aaxis/_tickcolor.py plotly/validators/layout/ternary/aaxis/_tickfont.py plotly/validators/layout/ternary/aaxis/_tickformat.py plotly/validators/layout/ternary/aaxis/_tickformatstopdefaults.py plotly/validators/layout/ternary/aaxis/_tickformatstops.py plotly/validators/layout/ternary/aaxis/_ticklabelstep.py plotly/validators/layout/ternary/aaxis/_ticklen.py plotly/validators/layout/ternary/aaxis/_tickmode.py plotly/validators/layout/ternary/aaxis/_tickprefix.py plotly/validators/layout/ternary/aaxis/_ticks.py plotly/validators/layout/ternary/aaxis/_ticksuffix.py plotly/validators/layout/ternary/aaxis/_ticktext.py plotly/validators/layout/ternary/aaxis/_ticktextsrc.py plotly/validators/layout/ternary/aaxis/_tickvals.py plotly/validators/layout/ternary/aaxis/_tickvalssrc.py plotly/validators/layout/ternary/aaxis/_tickwidth.py plotly/validators/layout/ternary/aaxis/_title.py plotly/validators/layout/ternary/aaxis/_uirevision.py plotly/validators/layout/ternary/aaxis/tickfont/__init__.py plotly/validators/layout/ternary/aaxis/tickfont/_color.py plotly/validators/layout/ternary/aaxis/tickfont/_family.py plotly/validators/layout/ternary/aaxis/tickfont/_size.py plotly/validators/layout/ternary/aaxis/tickformatstop/__init__.py plotly/validators/layout/ternary/aaxis/tickformatstop/_dtickrange.py plotly/validators/layout/ternary/aaxis/tickformatstop/_enabled.py plotly/validators/layout/ternary/aaxis/tickformatstop/_name.py plotly/validators/layout/ternary/aaxis/tickformatstop/_templateitemname.py plotly/validators/layout/ternary/aaxis/tickformatstop/_value.py plotly/validators/layout/ternary/aaxis/title/__init__.py plotly/validators/layout/ternary/aaxis/title/_font.py plotly/validators/layout/ternary/aaxis/title/_text.py plotly/validators/layout/ternary/aaxis/title/font/__init__.py plotly/validators/layout/ternary/aaxis/title/font/_color.py plotly/validators/layout/ternary/aaxis/title/font/_family.py plotly/validators/layout/ternary/aaxis/title/font/_size.py plotly/validators/layout/ternary/baxis/__init__.py plotly/validators/layout/ternary/baxis/_color.py plotly/validators/layout/ternary/baxis/_dtick.py plotly/validators/layout/ternary/baxis/_exponentformat.py plotly/validators/layout/ternary/baxis/_gridcolor.py plotly/validators/layout/ternary/baxis/_griddash.py plotly/validators/layout/ternary/baxis/_gridwidth.py plotly/validators/layout/ternary/baxis/_hoverformat.py plotly/validators/layout/ternary/baxis/_labelalias.py plotly/validators/layout/ternary/baxis/_layer.py plotly/validators/layout/ternary/baxis/_linecolor.py plotly/validators/layout/ternary/baxis/_linewidth.py plotly/validators/layout/ternary/baxis/_min.py plotly/validators/layout/ternary/baxis/_minexponent.py plotly/validators/layout/ternary/baxis/_nticks.py plotly/validators/layout/ternary/baxis/_separatethousands.py plotly/validators/layout/ternary/baxis/_showexponent.py plotly/validators/layout/ternary/baxis/_showgrid.py plotly/validators/layout/ternary/baxis/_showline.py plotly/validators/layout/ternary/baxis/_showticklabels.py plotly/validators/layout/ternary/baxis/_showtickprefix.py plotly/validators/layout/ternary/baxis/_showticksuffix.py plotly/validators/layout/ternary/baxis/_tick0.py plotly/validators/layout/ternary/baxis/_tickangle.py plotly/validators/layout/ternary/baxis/_tickcolor.py plotly/validators/layout/ternary/baxis/_tickfont.py plotly/validators/layout/ternary/baxis/_tickformat.py plotly/validators/layout/ternary/baxis/_tickformatstopdefaults.py plotly/validators/layout/ternary/baxis/_tickformatstops.py plotly/validators/layout/ternary/baxis/_ticklabelstep.py plotly/validators/layout/ternary/baxis/_ticklen.py plotly/validators/layout/ternary/baxis/_tickmode.py plotly/validators/layout/ternary/baxis/_tickprefix.py plotly/validators/layout/ternary/baxis/_ticks.py plotly/validators/layout/ternary/baxis/_ticksuffix.py plotly/validators/layout/ternary/baxis/_ticktext.py plotly/validators/layout/ternary/baxis/_ticktextsrc.py plotly/validators/layout/ternary/baxis/_tickvals.py plotly/validators/layout/ternary/baxis/_tickvalssrc.py plotly/validators/layout/ternary/baxis/_tickwidth.py plotly/validators/layout/ternary/baxis/_title.py plotly/validators/layout/ternary/baxis/_uirevision.py plotly/validators/layout/ternary/baxis/tickfont/__init__.py plotly/validators/layout/ternary/baxis/tickfont/_color.py plotly/validators/layout/ternary/baxis/tickfont/_family.py plotly/validators/layout/ternary/baxis/tickfont/_size.py plotly/validators/layout/ternary/baxis/tickformatstop/__init__.py plotly/validators/layout/ternary/baxis/tickformatstop/_dtickrange.py plotly/validators/layout/ternary/baxis/tickformatstop/_enabled.py plotly/validators/layout/ternary/baxis/tickformatstop/_name.py plotly/validators/layout/ternary/baxis/tickformatstop/_templateitemname.py plotly/validators/layout/ternary/baxis/tickformatstop/_value.py plotly/validators/layout/ternary/baxis/title/__init__.py plotly/validators/layout/ternary/baxis/title/_font.py plotly/validators/layout/ternary/baxis/title/_text.py plotly/validators/layout/ternary/baxis/title/font/__init__.py plotly/validators/layout/ternary/baxis/title/font/_color.py plotly/validators/layout/ternary/baxis/title/font/_family.py plotly/validators/layout/ternary/baxis/title/font/_size.py plotly/validators/layout/ternary/caxis/__init__.py plotly/validators/layout/ternary/caxis/_color.py plotly/validators/layout/ternary/caxis/_dtick.py plotly/validators/layout/ternary/caxis/_exponentformat.py plotly/validators/layout/ternary/caxis/_gridcolor.py plotly/validators/layout/ternary/caxis/_griddash.py plotly/validators/layout/ternary/caxis/_gridwidth.py plotly/validators/layout/ternary/caxis/_hoverformat.py plotly/validators/layout/ternary/caxis/_labelalias.py plotly/validators/layout/ternary/caxis/_layer.py plotly/validators/layout/ternary/caxis/_linecolor.py plotly/validators/layout/ternary/caxis/_linewidth.py plotly/validators/layout/ternary/caxis/_min.py plotly/validators/layout/ternary/caxis/_minexponent.py plotly/validators/layout/ternary/caxis/_nticks.py plotly/validators/layout/ternary/caxis/_separatethousands.py plotly/validators/layout/ternary/caxis/_showexponent.py plotly/validators/layout/ternary/caxis/_showgrid.py plotly/validators/layout/ternary/caxis/_showline.py plotly/validators/layout/ternary/caxis/_showticklabels.py plotly/validators/layout/ternary/caxis/_showtickprefix.py plotly/validators/layout/ternary/caxis/_showticksuffix.py plotly/validators/layout/ternary/caxis/_tick0.py plotly/validators/layout/ternary/caxis/_tickangle.py plotly/validators/layout/ternary/caxis/_tickcolor.py plotly/validators/layout/ternary/caxis/_tickfont.py plotly/validators/layout/ternary/caxis/_tickformat.py plotly/validators/layout/ternary/caxis/_tickformatstopdefaults.py plotly/validators/layout/ternary/caxis/_tickformatstops.py plotly/validators/layout/ternary/caxis/_ticklabelstep.py plotly/validators/layout/ternary/caxis/_ticklen.py plotly/validators/layout/ternary/caxis/_tickmode.py plotly/validators/layout/ternary/caxis/_tickprefix.py plotly/validators/layout/ternary/caxis/_ticks.py plotly/validators/layout/ternary/caxis/_ticksuffix.py plotly/validators/layout/ternary/caxis/_ticktext.py plotly/validators/layout/ternary/caxis/_ticktextsrc.py plotly/validators/layout/ternary/caxis/_tickvals.py plotly/validators/layout/ternary/caxis/_tickvalssrc.py plotly/validators/layout/ternary/caxis/_tickwidth.py plotly/validators/layout/ternary/caxis/_title.py plotly/validators/layout/ternary/caxis/_uirevision.py plotly/validators/layout/ternary/caxis/tickfont/__init__.py plotly/validators/layout/ternary/caxis/tickfont/_color.py plotly/validators/layout/ternary/caxis/tickfont/_family.py plotly/validators/layout/ternary/caxis/tickfont/_size.py plotly/validators/layout/ternary/caxis/tickformatstop/__init__.py plotly/validators/layout/ternary/caxis/tickformatstop/_dtickrange.py plotly/validators/layout/ternary/caxis/tickformatstop/_enabled.py plotly/validators/layout/ternary/caxis/tickformatstop/_name.py plotly/validators/layout/ternary/caxis/tickformatstop/_templateitemname.py plotly/validators/layout/ternary/caxis/tickformatstop/_value.py plotly/validators/layout/ternary/caxis/title/__init__.py plotly/validators/layout/ternary/caxis/title/_font.py plotly/validators/layout/ternary/caxis/title/_text.py plotly/validators/layout/ternary/caxis/title/font/__init__.py plotly/validators/layout/ternary/caxis/title/font/_color.py plotly/validators/layout/ternary/caxis/title/font/_family.py plotly/validators/layout/ternary/caxis/title/font/_size.py plotly/validators/layout/ternary/domain/__init__.py plotly/validators/layout/ternary/domain/_column.py plotly/validators/layout/ternary/domain/_row.py plotly/validators/layout/ternary/domain/_x.py plotly/validators/layout/ternary/domain/_y.py plotly/validators/layout/title/__init__.py plotly/validators/layout/title/_automargin.py plotly/validators/layout/title/_font.py plotly/validators/layout/title/_pad.py plotly/validators/layout/title/_text.py plotly/validators/layout/title/_x.py plotly/validators/layout/title/_xanchor.py plotly/validators/layout/title/_xref.py plotly/validators/layout/title/_y.py plotly/validators/layout/title/_yanchor.py plotly/validators/layout/title/_yref.py plotly/validators/layout/title/font/__init__.py plotly/validators/layout/title/font/_color.py plotly/validators/layout/title/font/_family.py plotly/validators/layout/title/font/_size.py plotly/validators/layout/title/pad/__init__.py plotly/validators/layout/title/pad/_b.py plotly/validators/layout/title/pad/_l.py plotly/validators/layout/title/pad/_r.py plotly/validators/layout/title/pad/_t.py plotly/validators/layout/transition/__init__.py plotly/validators/layout/transition/_duration.py plotly/validators/layout/transition/_easing.py plotly/validators/layout/transition/_ordering.py plotly/validators/layout/uniformtext/__init__.py plotly/validators/layout/uniformtext/_minsize.py plotly/validators/layout/uniformtext/_mode.py plotly/validators/layout/updatemenu/__init__.py plotly/validators/layout/updatemenu/_active.py plotly/validators/layout/updatemenu/_bgcolor.py plotly/validators/layout/updatemenu/_bordercolor.py plotly/validators/layout/updatemenu/_borderwidth.py plotly/validators/layout/updatemenu/_buttondefaults.py plotly/validators/layout/updatemenu/_buttons.py plotly/validators/layout/updatemenu/_direction.py plotly/validators/layout/updatemenu/_font.py plotly/validators/layout/updatemenu/_name.py plotly/validators/layout/updatemenu/_pad.py plotly/validators/layout/updatemenu/_showactive.py plotly/validators/layout/updatemenu/_templateitemname.py plotly/validators/layout/updatemenu/_type.py plotly/validators/layout/updatemenu/_visible.py plotly/validators/layout/updatemenu/_x.py plotly/validators/layout/updatemenu/_xanchor.py plotly/validators/layout/updatemenu/_y.py plotly/validators/layout/updatemenu/_yanchor.py plotly/validators/layout/updatemenu/button/__init__.py plotly/validators/layout/updatemenu/button/_args.py plotly/validators/layout/updatemenu/button/_args2.py plotly/validators/layout/updatemenu/button/_execute.py plotly/validators/layout/updatemenu/button/_label.py plotly/validators/layout/updatemenu/button/_method.py plotly/validators/layout/updatemenu/button/_name.py plotly/validators/layout/updatemenu/button/_templateitemname.py plotly/validators/layout/updatemenu/button/_visible.py plotly/validators/layout/updatemenu/font/__init__.py plotly/validators/layout/updatemenu/font/_color.py plotly/validators/layout/updatemenu/font/_family.py plotly/validators/layout/updatemenu/font/_size.py plotly/validators/layout/updatemenu/pad/__init__.py plotly/validators/layout/updatemenu/pad/_b.py plotly/validators/layout/updatemenu/pad/_l.py plotly/validators/layout/updatemenu/pad/_r.py plotly/validators/layout/updatemenu/pad/_t.py plotly/validators/layout/xaxis/__init__.py plotly/validators/layout/xaxis/_anchor.py plotly/validators/layout/xaxis/_automargin.py plotly/validators/layout/xaxis/_autorange.py plotly/validators/layout/xaxis/_autotypenumbers.py plotly/validators/layout/xaxis/_calendar.py plotly/validators/layout/xaxis/_categoryarray.py plotly/validators/layout/xaxis/_categoryarraysrc.py plotly/validators/layout/xaxis/_categoryorder.py plotly/validators/layout/xaxis/_color.py plotly/validators/layout/xaxis/_constrain.py plotly/validators/layout/xaxis/_constraintoward.py plotly/validators/layout/xaxis/_dividercolor.py plotly/validators/layout/xaxis/_dividerwidth.py plotly/validators/layout/xaxis/_domain.py plotly/validators/layout/xaxis/_dtick.py plotly/validators/layout/xaxis/_exponentformat.py plotly/validators/layout/xaxis/_fixedrange.py plotly/validators/layout/xaxis/_gridcolor.py plotly/validators/layout/xaxis/_griddash.py plotly/validators/layout/xaxis/_gridwidth.py plotly/validators/layout/xaxis/_hoverformat.py plotly/validators/layout/xaxis/_labelalias.py plotly/validators/layout/xaxis/_layer.py plotly/validators/layout/xaxis/_linecolor.py plotly/validators/layout/xaxis/_linewidth.py plotly/validators/layout/xaxis/_matches.py plotly/validators/layout/xaxis/_minexponent.py plotly/validators/layout/xaxis/_minor.py plotly/validators/layout/xaxis/_mirror.py plotly/validators/layout/xaxis/_nticks.py plotly/validators/layout/xaxis/_overlaying.py plotly/validators/layout/xaxis/_position.py plotly/validators/layout/xaxis/_range.py plotly/validators/layout/xaxis/_rangebreakdefaults.py plotly/validators/layout/xaxis/_rangebreaks.py plotly/validators/layout/xaxis/_rangemode.py plotly/validators/layout/xaxis/_rangeselector.py plotly/validators/layout/xaxis/_rangeslider.py plotly/validators/layout/xaxis/_scaleanchor.py plotly/validators/layout/xaxis/_scaleratio.py plotly/validators/layout/xaxis/_separatethousands.py plotly/validators/layout/xaxis/_showdividers.py plotly/validators/layout/xaxis/_showexponent.py plotly/validators/layout/xaxis/_showgrid.py plotly/validators/layout/xaxis/_showline.py plotly/validators/layout/xaxis/_showspikes.py plotly/validators/layout/xaxis/_showticklabels.py plotly/validators/layout/xaxis/_showtickprefix.py plotly/validators/layout/xaxis/_showticksuffix.py plotly/validators/layout/xaxis/_side.py plotly/validators/layout/xaxis/_spikecolor.py plotly/validators/layout/xaxis/_spikedash.py plotly/validators/layout/xaxis/_spikemode.py plotly/validators/layout/xaxis/_spikesnap.py plotly/validators/layout/xaxis/_spikethickness.py plotly/validators/layout/xaxis/_tick0.py plotly/validators/layout/xaxis/_tickangle.py plotly/validators/layout/xaxis/_tickcolor.py plotly/validators/layout/xaxis/_tickfont.py plotly/validators/layout/xaxis/_tickformat.py plotly/validators/layout/xaxis/_tickformatstopdefaults.py plotly/validators/layout/xaxis/_tickformatstops.py plotly/validators/layout/xaxis/_ticklabelmode.py plotly/validators/layout/xaxis/_ticklabeloverflow.py plotly/validators/layout/xaxis/_ticklabelposition.py plotly/validators/layout/xaxis/_ticklabelstep.py plotly/validators/layout/xaxis/_ticklen.py plotly/validators/layout/xaxis/_tickmode.py plotly/validators/layout/xaxis/_tickprefix.py plotly/validators/layout/xaxis/_ticks.py plotly/validators/layout/xaxis/_tickson.py plotly/validators/layout/xaxis/_ticksuffix.py plotly/validators/layout/xaxis/_ticktext.py plotly/validators/layout/xaxis/_ticktextsrc.py plotly/validators/layout/xaxis/_tickvals.py plotly/validators/layout/xaxis/_tickvalssrc.py plotly/validators/layout/xaxis/_tickwidth.py plotly/validators/layout/xaxis/_title.py plotly/validators/layout/xaxis/_type.py plotly/validators/layout/xaxis/_uirevision.py plotly/validators/layout/xaxis/_visible.py plotly/validators/layout/xaxis/_zeroline.py plotly/validators/layout/xaxis/_zerolinecolor.py plotly/validators/layout/xaxis/_zerolinewidth.py plotly/validators/layout/xaxis/minor/__init__.py plotly/validators/layout/xaxis/minor/_dtick.py plotly/validators/layout/xaxis/minor/_gridcolor.py plotly/validators/layout/xaxis/minor/_griddash.py plotly/validators/layout/xaxis/minor/_gridwidth.py plotly/validators/layout/xaxis/minor/_nticks.py plotly/validators/layout/xaxis/minor/_showgrid.py plotly/validators/layout/xaxis/minor/_tick0.py plotly/validators/layout/xaxis/minor/_tickcolor.py plotly/validators/layout/xaxis/minor/_ticklen.py plotly/validators/layout/xaxis/minor/_tickmode.py plotly/validators/layout/xaxis/minor/_ticks.py plotly/validators/layout/xaxis/minor/_tickvals.py plotly/validators/layout/xaxis/minor/_tickvalssrc.py plotly/validators/layout/xaxis/minor/_tickwidth.py plotly/validators/layout/xaxis/rangebreak/__init__.py plotly/validators/layout/xaxis/rangebreak/_bounds.py plotly/validators/layout/xaxis/rangebreak/_dvalue.py plotly/validators/layout/xaxis/rangebreak/_enabled.py plotly/validators/layout/xaxis/rangebreak/_name.py plotly/validators/layout/xaxis/rangebreak/_pattern.py plotly/validators/layout/xaxis/rangebreak/_templateitemname.py plotly/validators/layout/xaxis/rangebreak/_values.py plotly/validators/layout/xaxis/rangeselector/__init__.py plotly/validators/layout/xaxis/rangeselector/_activecolor.py plotly/validators/layout/xaxis/rangeselector/_bgcolor.py plotly/validators/layout/xaxis/rangeselector/_bordercolor.py plotly/validators/layout/xaxis/rangeselector/_borderwidth.py plotly/validators/layout/xaxis/rangeselector/_buttondefaults.py plotly/validators/layout/xaxis/rangeselector/_buttons.py plotly/validators/layout/xaxis/rangeselector/_font.py plotly/validators/layout/xaxis/rangeselector/_visible.py plotly/validators/layout/xaxis/rangeselector/_x.py plotly/validators/layout/xaxis/rangeselector/_xanchor.py plotly/validators/layout/xaxis/rangeselector/_y.py plotly/validators/layout/xaxis/rangeselector/_yanchor.py plotly/validators/layout/xaxis/rangeselector/button/__init__.py plotly/validators/layout/xaxis/rangeselector/button/_count.py plotly/validators/layout/xaxis/rangeselector/button/_label.py plotly/validators/layout/xaxis/rangeselector/button/_name.py plotly/validators/layout/xaxis/rangeselector/button/_step.py plotly/validators/layout/xaxis/rangeselector/button/_stepmode.py plotly/validators/layout/xaxis/rangeselector/button/_templateitemname.py plotly/validators/layout/xaxis/rangeselector/button/_visible.py plotly/validators/layout/xaxis/rangeselector/font/__init__.py plotly/validators/layout/xaxis/rangeselector/font/_color.py plotly/validators/layout/xaxis/rangeselector/font/_family.py plotly/validators/layout/xaxis/rangeselector/font/_size.py plotly/validators/layout/xaxis/rangeslider/__init__.py plotly/validators/layout/xaxis/rangeslider/_autorange.py plotly/validators/layout/xaxis/rangeslider/_bgcolor.py plotly/validators/layout/xaxis/rangeslider/_bordercolor.py plotly/validators/layout/xaxis/rangeslider/_borderwidth.py plotly/validators/layout/xaxis/rangeslider/_range.py plotly/validators/layout/xaxis/rangeslider/_thickness.py plotly/validators/layout/xaxis/rangeslider/_visible.py plotly/validators/layout/xaxis/rangeslider/_yaxis.py plotly/validators/layout/xaxis/rangeslider/yaxis/__init__.py plotly/validators/layout/xaxis/rangeslider/yaxis/_range.py plotly/validators/layout/xaxis/rangeslider/yaxis/_rangemode.py plotly/validators/layout/xaxis/tickfont/__init__.py plotly/validators/layout/xaxis/tickfont/_color.py plotly/validators/layout/xaxis/tickfont/_family.py plotly/validators/layout/xaxis/tickfont/_size.py plotly/validators/layout/xaxis/tickformatstop/__init__.py plotly/validators/layout/xaxis/tickformatstop/_dtickrange.py plotly/validators/layout/xaxis/tickformatstop/_enabled.py plotly/validators/layout/xaxis/tickformatstop/_name.py plotly/validators/layout/xaxis/tickformatstop/_templateitemname.py plotly/validators/layout/xaxis/tickformatstop/_value.py plotly/validators/layout/xaxis/title/__init__.py plotly/validators/layout/xaxis/title/_font.py plotly/validators/layout/xaxis/title/_standoff.py plotly/validators/layout/xaxis/title/_text.py plotly/validators/layout/xaxis/title/font/__init__.py plotly/validators/layout/xaxis/title/font/_color.py plotly/validators/layout/xaxis/title/font/_family.py plotly/validators/layout/xaxis/title/font/_size.py plotly/validators/layout/yaxis/__init__.py plotly/validators/layout/yaxis/_anchor.py plotly/validators/layout/yaxis/_automargin.py plotly/validators/layout/yaxis/_autorange.py plotly/validators/layout/yaxis/_autoshift.py plotly/validators/layout/yaxis/_autotypenumbers.py plotly/validators/layout/yaxis/_calendar.py plotly/validators/layout/yaxis/_categoryarray.py plotly/validators/layout/yaxis/_categoryarraysrc.py plotly/validators/layout/yaxis/_categoryorder.py plotly/validators/layout/yaxis/_color.py plotly/validators/layout/yaxis/_constrain.py plotly/validators/layout/yaxis/_constraintoward.py plotly/validators/layout/yaxis/_dividercolor.py plotly/validators/layout/yaxis/_dividerwidth.py plotly/validators/layout/yaxis/_domain.py plotly/validators/layout/yaxis/_dtick.py plotly/validators/layout/yaxis/_exponentformat.py plotly/validators/layout/yaxis/_fixedrange.py plotly/validators/layout/yaxis/_gridcolor.py plotly/validators/layout/yaxis/_griddash.py plotly/validators/layout/yaxis/_gridwidth.py plotly/validators/layout/yaxis/_hoverformat.py plotly/validators/layout/yaxis/_labelalias.py plotly/validators/layout/yaxis/_layer.py plotly/validators/layout/yaxis/_linecolor.py plotly/validators/layout/yaxis/_linewidth.py plotly/validators/layout/yaxis/_matches.py plotly/validators/layout/yaxis/_minexponent.py plotly/validators/layout/yaxis/_minor.py plotly/validators/layout/yaxis/_mirror.py plotly/validators/layout/yaxis/_nticks.py plotly/validators/layout/yaxis/_overlaying.py plotly/validators/layout/yaxis/_position.py plotly/validators/layout/yaxis/_range.py plotly/validators/layout/yaxis/_rangebreakdefaults.py plotly/validators/layout/yaxis/_rangebreaks.py plotly/validators/layout/yaxis/_rangemode.py plotly/validators/layout/yaxis/_scaleanchor.py plotly/validators/layout/yaxis/_scaleratio.py plotly/validators/layout/yaxis/_separatethousands.py plotly/validators/layout/yaxis/_shift.py plotly/validators/layout/yaxis/_showdividers.py plotly/validators/layout/yaxis/_showexponent.py plotly/validators/layout/yaxis/_showgrid.py plotly/validators/layout/yaxis/_showline.py plotly/validators/layout/yaxis/_showspikes.py plotly/validators/layout/yaxis/_showticklabels.py plotly/validators/layout/yaxis/_showtickprefix.py plotly/validators/layout/yaxis/_showticksuffix.py plotly/validators/layout/yaxis/_side.py plotly/validators/layout/yaxis/_spikecolor.py plotly/validators/layout/yaxis/_spikedash.py plotly/validators/layout/yaxis/_spikemode.py plotly/validators/layout/yaxis/_spikesnap.py plotly/validators/layout/yaxis/_spikethickness.py plotly/validators/layout/yaxis/_tick0.py plotly/validators/layout/yaxis/_tickangle.py plotly/validators/layout/yaxis/_tickcolor.py plotly/validators/layout/yaxis/_tickfont.py plotly/validators/layout/yaxis/_tickformat.py plotly/validators/layout/yaxis/_tickformatstopdefaults.py plotly/validators/layout/yaxis/_tickformatstops.py plotly/validators/layout/yaxis/_ticklabelmode.py plotly/validators/layout/yaxis/_ticklabeloverflow.py plotly/validators/layout/yaxis/_ticklabelposition.py plotly/validators/layout/yaxis/_ticklabelstep.py plotly/validators/layout/yaxis/_ticklen.py plotly/validators/layout/yaxis/_tickmode.py plotly/validators/layout/yaxis/_tickprefix.py plotly/validators/layout/yaxis/_ticks.py plotly/validators/layout/yaxis/_tickson.py plotly/validators/layout/yaxis/_ticksuffix.py plotly/validators/layout/yaxis/_ticktext.py plotly/validators/layout/yaxis/_ticktextsrc.py plotly/validators/layout/yaxis/_tickvals.py plotly/validators/layout/yaxis/_tickvalssrc.py plotly/validators/layout/yaxis/_tickwidth.py plotly/validators/layout/yaxis/_title.py plotly/validators/layout/yaxis/_type.py plotly/validators/layout/yaxis/_uirevision.py plotly/validators/layout/yaxis/_visible.py plotly/validators/layout/yaxis/_zeroline.py plotly/validators/layout/yaxis/_zerolinecolor.py plotly/validators/layout/yaxis/_zerolinewidth.py plotly/validators/layout/yaxis/minor/__init__.py plotly/validators/layout/yaxis/minor/_dtick.py plotly/validators/layout/yaxis/minor/_gridcolor.py plotly/validators/layout/yaxis/minor/_griddash.py plotly/validators/layout/yaxis/minor/_gridwidth.py plotly/validators/layout/yaxis/minor/_nticks.py plotly/validators/layout/yaxis/minor/_showgrid.py plotly/validators/layout/yaxis/minor/_tick0.py plotly/validators/layout/yaxis/minor/_tickcolor.py plotly/validators/layout/yaxis/minor/_ticklen.py plotly/validators/layout/yaxis/minor/_tickmode.py plotly/validators/layout/yaxis/minor/_ticks.py plotly/validators/layout/yaxis/minor/_tickvals.py plotly/validators/layout/yaxis/minor/_tickvalssrc.py plotly/validators/layout/yaxis/minor/_tickwidth.py plotly/validators/layout/yaxis/rangebreak/__init__.py plotly/validators/layout/yaxis/rangebreak/_bounds.py plotly/validators/layout/yaxis/rangebreak/_dvalue.py plotly/validators/layout/yaxis/rangebreak/_enabled.py plotly/validators/layout/yaxis/rangebreak/_name.py plotly/validators/layout/yaxis/rangebreak/_pattern.py plotly/validators/layout/yaxis/rangebreak/_templateitemname.py plotly/validators/layout/yaxis/rangebreak/_values.py plotly/validators/layout/yaxis/tickfont/__init__.py plotly/validators/layout/yaxis/tickfont/_color.py plotly/validators/layout/yaxis/tickfont/_family.py plotly/validators/layout/yaxis/tickfont/_size.py plotly/validators/layout/yaxis/tickformatstop/__init__.py plotly/validators/layout/yaxis/tickformatstop/_dtickrange.py plotly/validators/layout/yaxis/tickformatstop/_enabled.py plotly/validators/layout/yaxis/tickformatstop/_name.py plotly/validators/layout/yaxis/tickformatstop/_templateitemname.py plotly/validators/layout/yaxis/tickformatstop/_value.py plotly/validators/layout/yaxis/title/__init__.py plotly/validators/layout/yaxis/title/_font.py plotly/validators/layout/yaxis/title/_standoff.py plotly/validators/layout/yaxis/title/_text.py plotly/validators/layout/yaxis/title/font/__init__.py plotly/validators/layout/yaxis/title/font/_color.py plotly/validators/layout/yaxis/title/font/_family.py plotly/validators/layout/yaxis/title/font/_size.py plotly/validators/mesh3d/__init__.py plotly/validators/mesh3d/_alphahull.py plotly/validators/mesh3d/_autocolorscale.py plotly/validators/mesh3d/_cauto.py plotly/validators/mesh3d/_cmax.py plotly/validators/mesh3d/_cmid.py plotly/validators/mesh3d/_cmin.py plotly/validators/mesh3d/_color.py plotly/validators/mesh3d/_coloraxis.py plotly/validators/mesh3d/_colorbar.py plotly/validators/mesh3d/_colorscale.py plotly/validators/mesh3d/_contour.py plotly/validators/mesh3d/_customdata.py plotly/validators/mesh3d/_customdatasrc.py plotly/validators/mesh3d/_delaunayaxis.py plotly/validators/mesh3d/_facecolor.py plotly/validators/mesh3d/_facecolorsrc.py plotly/validators/mesh3d/_flatshading.py plotly/validators/mesh3d/_hoverinfo.py plotly/validators/mesh3d/_hoverinfosrc.py plotly/validators/mesh3d/_hoverlabel.py plotly/validators/mesh3d/_hovertemplate.py plotly/validators/mesh3d/_hovertemplatesrc.py plotly/validators/mesh3d/_hovertext.py plotly/validators/mesh3d/_hovertextsrc.py plotly/validators/mesh3d/_i.py plotly/validators/mesh3d/_ids.py plotly/validators/mesh3d/_idssrc.py plotly/validators/mesh3d/_intensity.py plotly/validators/mesh3d/_intensitymode.py plotly/validators/mesh3d/_intensitysrc.py plotly/validators/mesh3d/_isrc.py plotly/validators/mesh3d/_j.py plotly/validators/mesh3d/_jsrc.py plotly/validators/mesh3d/_k.py plotly/validators/mesh3d/_ksrc.py plotly/validators/mesh3d/_legend.py plotly/validators/mesh3d/_legendgroup.py plotly/validators/mesh3d/_legendgrouptitle.py plotly/validators/mesh3d/_legendrank.py plotly/validators/mesh3d/_legendwidth.py plotly/validators/mesh3d/_lighting.py plotly/validators/mesh3d/_lightposition.py plotly/validators/mesh3d/_meta.py plotly/validators/mesh3d/_metasrc.py plotly/validators/mesh3d/_name.py plotly/validators/mesh3d/_opacity.py plotly/validators/mesh3d/_reversescale.py plotly/validators/mesh3d/_scene.py plotly/validators/mesh3d/_showlegend.py plotly/validators/mesh3d/_showscale.py plotly/validators/mesh3d/_stream.py plotly/validators/mesh3d/_text.py plotly/validators/mesh3d/_textsrc.py plotly/validators/mesh3d/_uid.py plotly/validators/mesh3d/_uirevision.py plotly/validators/mesh3d/_vertexcolor.py plotly/validators/mesh3d/_vertexcolorsrc.py plotly/validators/mesh3d/_visible.py plotly/validators/mesh3d/_x.py plotly/validators/mesh3d/_xcalendar.py plotly/validators/mesh3d/_xhoverformat.py plotly/validators/mesh3d/_xsrc.py plotly/validators/mesh3d/_y.py plotly/validators/mesh3d/_ycalendar.py plotly/validators/mesh3d/_yhoverformat.py plotly/validators/mesh3d/_ysrc.py plotly/validators/mesh3d/_z.py plotly/validators/mesh3d/_zcalendar.py plotly/validators/mesh3d/_zhoverformat.py plotly/validators/mesh3d/_zsrc.py plotly/validators/mesh3d/colorbar/__init__.py plotly/validators/mesh3d/colorbar/_bgcolor.py plotly/validators/mesh3d/colorbar/_bordercolor.py plotly/validators/mesh3d/colorbar/_borderwidth.py plotly/validators/mesh3d/colorbar/_dtick.py plotly/validators/mesh3d/colorbar/_exponentformat.py plotly/validators/mesh3d/colorbar/_labelalias.py plotly/validators/mesh3d/colorbar/_len.py plotly/validators/mesh3d/colorbar/_lenmode.py plotly/validators/mesh3d/colorbar/_minexponent.py plotly/validators/mesh3d/colorbar/_nticks.py plotly/validators/mesh3d/colorbar/_orientation.py plotly/validators/mesh3d/colorbar/_outlinecolor.py plotly/validators/mesh3d/colorbar/_outlinewidth.py plotly/validators/mesh3d/colorbar/_separatethousands.py plotly/validators/mesh3d/colorbar/_showexponent.py plotly/validators/mesh3d/colorbar/_showticklabels.py plotly/validators/mesh3d/colorbar/_showtickprefix.py plotly/validators/mesh3d/colorbar/_showticksuffix.py plotly/validators/mesh3d/colorbar/_thickness.py plotly/validators/mesh3d/colorbar/_thicknessmode.py plotly/validators/mesh3d/colorbar/_tick0.py plotly/validators/mesh3d/colorbar/_tickangle.py plotly/validators/mesh3d/colorbar/_tickcolor.py plotly/validators/mesh3d/colorbar/_tickfont.py plotly/validators/mesh3d/colorbar/_tickformat.py plotly/validators/mesh3d/colorbar/_tickformatstopdefaults.py plotly/validators/mesh3d/colorbar/_tickformatstops.py plotly/validators/mesh3d/colorbar/_ticklabeloverflow.py plotly/validators/mesh3d/colorbar/_ticklabelposition.py plotly/validators/mesh3d/colorbar/_ticklabelstep.py plotly/validators/mesh3d/colorbar/_ticklen.py plotly/validators/mesh3d/colorbar/_tickmode.py plotly/validators/mesh3d/colorbar/_tickprefix.py plotly/validators/mesh3d/colorbar/_ticks.py plotly/validators/mesh3d/colorbar/_ticksuffix.py plotly/validators/mesh3d/colorbar/_ticktext.py plotly/validators/mesh3d/colorbar/_ticktextsrc.py plotly/validators/mesh3d/colorbar/_tickvals.py plotly/validators/mesh3d/colorbar/_tickvalssrc.py plotly/validators/mesh3d/colorbar/_tickwidth.py plotly/validators/mesh3d/colorbar/_title.py plotly/validators/mesh3d/colorbar/_x.py plotly/validators/mesh3d/colorbar/_xanchor.py plotly/validators/mesh3d/colorbar/_xpad.py plotly/validators/mesh3d/colorbar/_xref.py plotly/validators/mesh3d/colorbar/_y.py plotly/validators/mesh3d/colorbar/_yanchor.py plotly/validators/mesh3d/colorbar/_ypad.py plotly/validators/mesh3d/colorbar/_yref.py plotly/validators/mesh3d/colorbar/tickfont/__init__.py plotly/validators/mesh3d/colorbar/tickfont/_color.py plotly/validators/mesh3d/colorbar/tickfont/_family.py plotly/validators/mesh3d/colorbar/tickfont/_size.py plotly/validators/mesh3d/colorbar/tickformatstop/__init__.py plotly/validators/mesh3d/colorbar/tickformatstop/_dtickrange.py plotly/validators/mesh3d/colorbar/tickformatstop/_enabled.py plotly/validators/mesh3d/colorbar/tickformatstop/_name.py plotly/validators/mesh3d/colorbar/tickformatstop/_templateitemname.py plotly/validators/mesh3d/colorbar/tickformatstop/_value.py plotly/validators/mesh3d/colorbar/title/__init__.py plotly/validators/mesh3d/colorbar/title/_font.py plotly/validators/mesh3d/colorbar/title/_side.py plotly/validators/mesh3d/colorbar/title/_text.py plotly/validators/mesh3d/colorbar/title/font/__init__.py plotly/validators/mesh3d/colorbar/title/font/_color.py plotly/validators/mesh3d/colorbar/title/font/_family.py plotly/validators/mesh3d/colorbar/title/font/_size.py plotly/validators/mesh3d/contour/__init__.py plotly/validators/mesh3d/contour/_color.py plotly/validators/mesh3d/contour/_show.py plotly/validators/mesh3d/contour/_width.py plotly/validators/mesh3d/hoverlabel/__init__.py plotly/validators/mesh3d/hoverlabel/_align.py plotly/validators/mesh3d/hoverlabel/_alignsrc.py plotly/validators/mesh3d/hoverlabel/_bgcolor.py plotly/validators/mesh3d/hoverlabel/_bgcolorsrc.py plotly/validators/mesh3d/hoverlabel/_bordercolor.py plotly/validators/mesh3d/hoverlabel/_bordercolorsrc.py plotly/validators/mesh3d/hoverlabel/_font.py plotly/validators/mesh3d/hoverlabel/_namelength.py plotly/validators/mesh3d/hoverlabel/_namelengthsrc.py plotly/validators/mesh3d/hoverlabel/font/__init__.py plotly/validators/mesh3d/hoverlabel/font/_color.py plotly/validators/mesh3d/hoverlabel/font/_colorsrc.py plotly/validators/mesh3d/hoverlabel/font/_family.py plotly/validators/mesh3d/hoverlabel/font/_familysrc.py plotly/validators/mesh3d/hoverlabel/font/_size.py plotly/validators/mesh3d/hoverlabel/font/_sizesrc.py plotly/validators/mesh3d/legendgrouptitle/__init__.py plotly/validators/mesh3d/legendgrouptitle/_font.py plotly/validators/mesh3d/legendgrouptitle/_text.py plotly/validators/mesh3d/legendgrouptitle/font/__init__.py plotly/validators/mesh3d/legendgrouptitle/font/_color.py plotly/validators/mesh3d/legendgrouptitle/font/_family.py plotly/validators/mesh3d/legendgrouptitle/font/_size.py plotly/validators/mesh3d/lighting/__init__.py plotly/validators/mesh3d/lighting/_ambient.py plotly/validators/mesh3d/lighting/_diffuse.py plotly/validators/mesh3d/lighting/_facenormalsepsilon.py plotly/validators/mesh3d/lighting/_fresnel.py plotly/validators/mesh3d/lighting/_roughness.py plotly/validators/mesh3d/lighting/_specular.py plotly/validators/mesh3d/lighting/_vertexnormalsepsilon.py plotly/validators/mesh3d/lightposition/__init__.py plotly/validators/mesh3d/lightposition/_x.py plotly/validators/mesh3d/lightposition/_y.py plotly/validators/mesh3d/lightposition/_z.py plotly/validators/mesh3d/stream/__init__.py plotly/validators/mesh3d/stream/_maxpoints.py plotly/validators/mesh3d/stream/_token.py plotly/validators/ohlc/__init__.py plotly/validators/ohlc/_close.py plotly/validators/ohlc/_closesrc.py plotly/validators/ohlc/_customdata.py plotly/validators/ohlc/_customdatasrc.py plotly/validators/ohlc/_decreasing.py plotly/validators/ohlc/_high.py plotly/validators/ohlc/_highsrc.py plotly/validators/ohlc/_hoverinfo.py plotly/validators/ohlc/_hoverinfosrc.py plotly/validators/ohlc/_hoverlabel.py plotly/validators/ohlc/_hovertext.py plotly/validators/ohlc/_hovertextsrc.py plotly/validators/ohlc/_ids.py plotly/validators/ohlc/_idssrc.py plotly/validators/ohlc/_increasing.py plotly/validators/ohlc/_legend.py plotly/validators/ohlc/_legendgroup.py plotly/validators/ohlc/_legendgrouptitle.py plotly/validators/ohlc/_legendrank.py plotly/validators/ohlc/_legendwidth.py plotly/validators/ohlc/_line.py plotly/validators/ohlc/_low.py plotly/validators/ohlc/_lowsrc.py plotly/validators/ohlc/_meta.py plotly/validators/ohlc/_metasrc.py plotly/validators/ohlc/_name.py plotly/validators/ohlc/_opacity.py plotly/validators/ohlc/_open.py plotly/validators/ohlc/_opensrc.py plotly/validators/ohlc/_selectedpoints.py plotly/validators/ohlc/_showlegend.py plotly/validators/ohlc/_stream.py plotly/validators/ohlc/_text.py plotly/validators/ohlc/_textsrc.py plotly/validators/ohlc/_tickwidth.py plotly/validators/ohlc/_uid.py plotly/validators/ohlc/_uirevision.py plotly/validators/ohlc/_visible.py plotly/validators/ohlc/_x.py plotly/validators/ohlc/_xaxis.py plotly/validators/ohlc/_xcalendar.py plotly/validators/ohlc/_xhoverformat.py plotly/validators/ohlc/_xperiod.py plotly/validators/ohlc/_xperiod0.py plotly/validators/ohlc/_xperiodalignment.py plotly/validators/ohlc/_xsrc.py plotly/validators/ohlc/_yaxis.py plotly/validators/ohlc/_yhoverformat.py plotly/validators/ohlc/decreasing/__init__.py plotly/validators/ohlc/decreasing/_line.py plotly/validators/ohlc/decreasing/line/__init__.py plotly/validators/ohlc/decreasing/line/_color.py plotly/validators/ohlc/decreasing/line/_dash.py plotly/validators/ohlc/decreasing/line/_width.py plotly/validators/ohlc/hoverlabel/__init__.py plotly/validators/ohlc/hoverlabel/_align.py plotly/validators/ohlc/hoverlabel/_alignsrc.py plotly/validators/ohlc/hoverlabel/_bgcolor.py plotly/validators/ohlc/hoverlabel/_bgcolorsrc.py plotly/validators/ohlc/hoverlabel/_bordercolor.py plotly/validators/ohlc/hoverlabel/_bordercolorsrc.py plotly/validators/ohlc/hoverlabel/_font.py plotly/validators/ohlc/hoverlabel/_namelength.py plotly/validators/ohlc/hoverlabel/_namelengthsrc.py plotly/validators/ohlc/hoverlabel/_split.py plotly/validators/ohlc/hoverlabel/font/__init__.py plotly/validators/ohlc/hoverlabel/font/_color.py plotly/validators/ohlc/hoverlabel/font/_colorsrc.py plotly/validators/ohlc/hoverlabel/font/_family.py plotly/validators/ohlc/hoverlabel/font/_familysrc.py plotly/validators/ohlc/hoverlabel/font/_size.py plotly/validators/ohlc/hoverlabel/font/_sizesrc.py plotly/validators/ohlc/increasing/__init__.py plotly/validators/ohlc/increasing/_line.py plotly/validators/ohlc/increasing/line/__init__.py plotly/validators/ohlc/increasing/line/_color.py plotly/validators/ohlc/increasing/line/_dash.py plotly/validators/ohlc/increasing/line/_width.py plotly/validators/ohlc/legendgrouptitle/__init__.py plotly/validators/ohlc/legendgrouptitle/_font.py plotly/validators/ohlc/legendgrouptitle/_text.py plotly/validators/ohlc/legendgrouptitle/font/__init__.py plotly/validators/ohlc/legendgrouptitle/font/_color.py plotly/validators/ohlc/legendgrouptitle/font/_family.py plotly/validators/ohlc/legendgrouptitle/font/_size.py plotly/validators/ohlc/line/__init__.py plotly/validators/ohlc/line/_dash.py plotly/validators/ohlc/line/_width.py plotly/validators/ohlc/stream/__init__.py plotly/validators/ohlc/stream/_maxpoints.py plotly/validators/ohlc/stream/_token.py plotly/validators/parcats/__init__.py plotly/validators/parcats/_arrangement.py plotly/validators/parcats/_bundlecolors.py plotly/validators/parcats/_counts.py plotly/validators/parcats/_countssrc.py plotly/validators/parcats/_dimensiondefaults.py plotly/validators/parcats/_dimensions.py plotly/validators/parcats/_domain.py plotly/validators/parcats/_hoverinfo.py plotly/validators/parcats/_hoveron.py plotly/validators/parcats/_hovertemplate.py plotly/validators/parcats/_labelfont.py plotly/validators/parcats/_legendgrouptitle.py plotly/validators/parcats/_legendwidth.py plotly/validators/parcats/_line.py plotly/validators/parcats/_meta.py plotly/validators/parcats/_metasrc.py plotly/validators/parcats/_name.py plotly/validators/parcats/_sortpaths.py plotly/validators/parcats/_stream.py plotly/validators/parcats/_tickfont.py plotly/validators/parcats/_uid.py plotly/validators/parcats/_uirevision.py plotly/validators/parcats/_visible.py plotly/validators/parcats/dimension/__init__.py plotly/validators/parcats/dimension/_categoryarray.py plotly/validators/parcats/dimension/_categoryarraysrc.py plotly/validators/parcats/dimension/_categoryorder.py plotly/validators/parcats/dimension/_displayindex.py plotly/validators/parcats/dimension/_label.py plotly/validators/parcats/dimension/_ticktext.py plotly/validators/parcats/dimension/_ticktextsrc.py plotly/validators/parcats/dimension/_values.py plotly/validators/parcats/dimension/_valuessrc.py plotly/validators/parcats/dimension/_visible.py plotly/validators/parcats/domain/__init__.py plotly/validators/parcats/domain/_column.py plotly/validators/parcats/domain/_row.py plotly/validators/parcats/domain/_x.py plotly/validators/parcats/domain/_y.py plotly/validators/parcats/labelfont/__init__.py plotly/validators/parcats/labelfont/_color.py plotly/validators/parcats/labelfont/_family.py plotly/validators/parcats/labelfont/_size.py plotly/validators/parcats/legendgrouptitle/__init__.py plotly/validators/parcats/legendgrouptitle/_font.py plotly/validators/parcats/legendgrouptitle/_text.py plotly/validators/parcats/legendgrouptitle/font/__init__.py plotly/validators/parcats/legendgrouptitle/font/_color.py plotly/validators/parcats/legendgrouptitle/font/_family.py plotly/validators/parcats/legendgrouptitle/font/_size.py plotly/validators/parcats/line/__init__.py plotly/validators/parcats/line/_autocolorscale.py plotly/validators/parcats/line/_cauto.py plotly/validators/parcats/line/_cmax.py plotly/validators/parcats/line/_cmid.py plotly/validators/parcats/line/_cmin.py plotly/validators/parcats/line/_color.py plotly/validators/parcats/line/_coloraxis.py plotly/validators/parcats/line/_colorbar.py plotly/validators/parcats/line/_colorscale.py plotly/validators/parcats/line/_colorsrc.py plotly/validators/parcats/line/_hovertemplate.py plotly/validators/parcats/line/_reversescale.py plotly/validators/parcats/line/_shape.py plotly/validators/parcats/line/_showscale.py plotly/validators/parcats/line/colorbar/__init__.py plotly/validators/parcats/line/colorbar/_bgcolor.py plotly/validators/parcats/line/colorbar/_bordercolor.py plotly/validators/parcats/line/colorbar/_borderwidth.py plotly/validators/parcats/line/colorbar/_dtick.py plotly/validators/parcats/line/colorbar/_exponentformat.py plotly/validators/parcats/line/colorbar/_labelalias.py plotly/validators/parcats/line/colorbar/_len.py plotly/validators/parcats/line/colorbar/_lenmode.py plotly/validators/parcats/line/colorbar/_minexponent.py plotly/validators/parcats/line/colorbar/_nticks.py plotly/validators/parcats/line/colorbar/_orientation.py plotly/validators/parcats/line/colorbar/_outlinecolor.py plotly/validators/parcats/line/colorbar/_outlinewidth.py plotly/validators/parcats/line/colorbar/_separatethousands.py plotly/validators/parcats/line/colorbar/_showexponent.py plotly/validators/parcats/line/colorbar/_showticklabels.py plotly/validators/parcats/line/colorbar/_showtickprefix.py plotly/validators/parcats/line/colorbar/_showticksuffix.py plotly/validators/parcats/line/colorbar/_thickness.py plotly/validators/parcats/line/colorbar/_thicknessmode.py plotly/validators/parcats/line/colorbar/_tick0.py plotly/validators/parcats/line/colorbar/_tickangle.py plotly/validators/parcats/line/colorbar/_tickcolor.py plotly/validators/parcats/line/colorbar/_tickfont.py plotly/validators/parcats/line/colorbar/_tickformat.py plotly/validators/parcats/line/colorbar/_tickformatstopdefaults.py plotly/validators/parcats/line/colorbar/_tickformatstops.py plotly/validators/parcats/line/colorbar/_ticklabeloverflow.py plotly/validators/parcats/line/colorbar/_ticklabelposition.py plotly/validators/parcats/line/colorbar/_ticklabelstep.py plotly/validators/parcats/line/colorbar/_ticklen.py plotly/validators/parcats/line/colorbar/_tickmode.py plotly/validators/parcats/line/colorbar/_tickprefix.py plotly/validators/parcats/line/colorbar/_ticks.py plotly/validators/parcats/line/colorbar/_ticksuffix.py plotly/validators/parcats/line/colorbar/_ticktext.py plotly/validators/parcats/line/colorbar/_ticktextsrc.py plotly/validators/parcats/line/colorbar/_tickvals.py plotly/validators/parcats/line/colorbar/_tickvalssrc.py plotly/validators/parcats/line/colorbar/_tickwidth.py plotly/validators/parcats/line/colorbar/_title.py plotly/validators/parcats/line/colorbar/_x.py plotly/validators/parcats/line/colorbar/_xanchor.py plotly/validators/parcats/line/colorbar/_xpad.py plotly/validators/parcats/line/colorbar/_xref.py plotly/validators/parcats/line/colorbar/_y.py plotly/validators/parcats/line/colorbar/_yanchor.py plotly/validators/parcats/line/colorbar/_ypad.py plotly/validators/parcats/line/colorbar/_yref.py plotly/validators/parcats/line/colorbar/tickfont/__init__.py plotly/validators/parcats/line/colorbar/tickfont/_color.py plotly/validators/parcats/line/colorbar/tickfont/_family.py plotly/validators/parcats/line/colorbar/tickfont/_size.py plotly/validators/parcats/line/colorbar/tickformatstop/__init__.py plotly/validators/parcats/line/colorbar/tickformatstop/_dtickrange.py plotly/validators/parcats/line/colorbar/tickformatstop/_enabled.py plotly/validators/parcats/line/colorbar/tickformatstop/_name.py plotly/validators/parcats/line/colorbar/tickformatstop/_templateitemname.py plotly/validators/parcats/line/colorbar/tickformatstop/_value.py plotly/validators/parcats/line/colorbar/title/__init__.py plotly/validators/parcats/line/colorbar/title/_font.py plotly/validators/parcats/line/colorbar/title/_side.py plotly/validators/parcats/line/colorbar/title/_text.py plotly/validators/parcats/line/colorbar/title/font/__init__.py plotly/validators/parcats/line/colorbar/title/font/_color.py plotly/validators/parcats/line/colorbar/title/font/_family.py plotly/validators/parcats/line/colorbar/title/font/_size.py plotly/validators/parcats/stream/__init__.py plotly/validators/parcats/stream/_maxpoints.py plotly/validators/parcats/stream/_token.py plotly/validators/parcats/tickfont/__init__.py plotly/validators/parcats/tickfont/_color.py plotly/validators/parcats/tickfont/_family.py plotly/validators/parcats/tickfont/_size.py plotly/validators/parcoords/__init__.py plotly/validators/parcoords/_customdata.py plotly/validators/parcoords/_customdatasrc.py plotly/validators/parcoords/_dimensiondefaults.py plotly/validators/parcoords/_dimensions.py plotly/validators/parcoords/_domain.py plotly/validators/parcoords/_ids.py plotly/validators/parcoords/_idssrc.py plotly/validators/parcoords/_labelangle.py plotly/validators/parcoords/_labelfont.py plotly/validators/parcoords/_labelside.py plotly/validators/parcoords/_legend.py plotly/validators/parcoords/_legendgrouptitle.py plotly/validators/parcoords/_legendrank.py plotly/validators/parcoords/_legendwidth.py plotly/validators/parcoords/_line.py plotly/validators/parcoords/_meta.py plotly/validators/parcoords/_metasrc.py plotly/validators/parcoords/_name.py plotly/validators/parcoords/_rangefont.py plotly/validators/parcoords/_stream.py plotly/validators/parcoords/_tickfont.py plotly/validators/parcoords/_uid.py plotly/validators/parcoords/_uirevision.py plotly/validators/parcoords/_unselected.py plotly/validators/parcoords/_visible.py plotly/validators/parcoords/dimension/__init__.py plotly/validators/parcoords/dimension/_constraintrange.py plotly/validators/parcoords/dimension/_label.py plotly/validators/parcoords/dimension/_multiselect.py plotly/validators/parcoords/dimension/_name.py plotly/validators/parcoords/dimension/_range.py plotly/validators/parcoords/dimension/_templateitemname.py plotly/validators/parcoords/dimension/_tickformat.py plotly/validators/parcoords/dimension/_ticktext.py plotly/validators/parcoords/dimension/_ticktextsrc.py plotly/validators/parcoords/dimension/_tickvals.py plotly/validators/parcoords/dimension/_tickvalssrc.py plotly/validators/parcoords/dimension/_values.py plotly/validators/parcoords/dimension/_valuessrc.py plotly/validators/parcoords/dimension/_visible.py plotly/validators/parcoords/domain/__init__.py plotly/validators/parcoords/domain/_column.py plotly/validators/parcoords/domain/_row.py plotly/validators/parcoords/domain/_x.py plotly/validators/parcoords/domain/_y.py plotly/validators/parcoords/labelfont/__init__.py plotly/validators/parcoords/labelfont/_color.py plotly/validators/parcoords/labelfont/_family.py plotly/validators/parcoords/labelfont/_size.py plotly/validators/parcoords/legendgrouptitle/__init__.py plotly/validators/parcoords/legendgrouptitle/_font.py plotly/validators/parcoords/legendgrouptitle/_text.py plotly/validators/parcoords/legendgrouptitle/font/__init__.py plotly/validators/parcoords/legendgrouptitle/font/_color.py plotly/validators/parcoords/legendgrouptitle/font/_family.py plotly/validators/parcoords/legendgrouptitle/font/_size.py plotly/validators/parcoords/line/__init__.py plotly/validators/parcoords/line/_autocolorscale.py plotly/validators/parcoords/line/_cauto.py plotly/validators/parcoords/line/_cmax.py plotly/validators/parcoords/line/_cmid.py plotly/validators/parcoords/line/_cmin.py plotly/validators/parcoords/line/_color.py plotly/validators/parcoords/line/_coloraxis.py plotly/validators/parcoords/line/_colorbar.py plotly/validators/parcoords/line/_colorscale.py plotly/validators/parcoords/line/_colorsrc.py plotly/validators/parcoords/line/_reversescale.py plotly/validators/parcoords/line/_showscale.py plotly/validators/parcoords/line/colorbar/__init__.py plotly/validators/parcoords/line/colorbar/_bgcolor.py plotly/validators/parcoords/line/colorbar/_bordercolor.py plotly/validators/parcoords/line/colorbar/_borderwidth.py plotly/validators/parcoords/line/colorbar/_dtick.py plotly/validators/parcoords/line/colorbar/_exponentformat.py plotly/validators/parcoords/line/colorbar/_labelalias.py plotly/validators/parcoords/line/colorbar/_len.py plotly/validators/parcoords/line/colorbar/_lenmode.py plotly/validators/parcoords/line/colorbar/_minexponent.py plotly/validators/parcoords/line/colorbar/_nticks.py plotly/validators/parcoords/line/colorbar/_orientation.py plotly/validators/parcoords/line/colorbar/_outlinecolor.py plotly/validators/parcoords/line/colorbar/_outlinewidth.py plotly/validators/parcoords/line/colorbar/_separatethousands.py plotly/validators/parcoords/line/colorbar/_showexponent.py plotly/validators/parcoords/line/colorbar/_showticklabels.py plotly/validators/parcoords/line/colorbar/_showtickprefix.py plotly/validators/parcoords/line/colorbar/_showticksuffix.py plotly/validators/parcoords/line/colorbar/_thickness.py plotly/validators/parcoords/line/colorbar/_thicknessmode.py plotly/validators/parcoords/line/colorbar/_tick0.py plotly/validators/parcoords/line/colorbar/_tickangle.py plotly/validators/parcoords/line/colorbar/_tickcolor.py plotly/validators/parcoords/line/colorbar/_tickfont.py plotly/validators/parcoords/line/colorbar/_tickformat.py plotly/validators/parcoords/line/colorbar/_tickformatstopdefaults.py plotly/validators/parcoords/line/colorbar/_tickformatstops.py plotly/validators/parcoords/line/colorbar/_ticklabeloverflow.py plotly/validators/parcoords/line/colorbar/_ticklabelposition.py plotly/validators/parcoords/line/colorbar/_ticklabelstep.py plotly/validators/parcoords/line/colorbar/_ticklen.py plotly/validators/parcoords/line/colorbar/_tickmode.py plotly/validators/parcoords/line/colorbar/_tickprefix.py plotly/validators/parcoords/line/colorbar/_ticks.py plotly/validators/parcoords/line/colorbar/_ticksuffix.py plotly/validators/parcoords/line/colorbar/_ticktext.py plotly/validators/parcoords/line/colorbar/_ticktextsrc.py plotly/validators/parcoords/line/colorbar/_tickvals.py plotly/validators/parcoords/line/colorbar/_tickvalssrc.py plotly/validators/parcoords/line/colorbar/_tickwidth.py plotly/validators/parcoords/line/colorbar/_title.py plotly/validators/parcoords/line/colorbar/_x.py plotly/validators/parcoords/line/colorbar/_xanchor.py plotly/validators/parcoords/line/colorbar/_xpad.py plotly/validators/parcoords/line/colorbar/_xref.py plotly/validators/parcoords/line/colorbar/_y.py plotly/validators/parcoords/line/colorbar/_yanchor.py plotly/validators/parcoords/line/colorbar/_ypad.py plotly/validators/parcoords/line/colorbar/_yref.py plotly/validators/parcoords/line/colorbar/tickfont/__init__.py plotly/validators/parcoords/line/colorbar/tickfont/_color.py plotly/validators/parcoords/line/colorbar/tickfont/_family.py plotly/validators/parcoords/line/colorbar/tickfont/_size.py plotly/validators/parcoords/line/colorbar/tickformatstop/__init__.py plotly/validators/parcoords/line/colorbar/tickformatstop/_dtickrange.py plotly/validators/parcoords/line/colorbar/tickformatstop/_enabled.py plotly/validators/parcoords/line/colorbar/tickformatstop/_name.py plotly/validators/parcoords/line/colorbar/tickformatstop/_templateitemname.py plotly/validators/parcoords/line/colorbar/tickformatstop/_value.py plotly/validators/parcoords/line/colorbar/title/__init__.py plotly/validators/parcoords/line/colorbar/title/_font.py plotly/validators/parcoords/line/colorbar/title/_side.py plotly/validators/parcoords/line/colorbar/title/_text.py plotly/validators/parcoords/line/colorbar/title/font/__init__.py plotly/validators/parcoords/line/colorbar/title/font/_color.py plotly/validators/parcoords/line/colorbar/title/font/_family.py plotly/validators/parcoords/line/colorbar/title/font/_size.py plotly/validators/parcoords/rangefont/__init__.py plotly/validators/parcoords/rangefont/_color.py plotly/validators/parcoords/rangefont/_family.py plotly/validators/parcoords/rangefont/_size.py plotly/validators/parcoords/stream/__init__.py plotly/validators/parcoords/stream/_maxpoints.py plotly/validators/parcoords/stream/_token.py plotly/validators/parcoords/tickfont/__init__.py plotly/validators/parcoords/tickfont/_color.py plotly/validators/parcoords/tickfont/_family.py plotly/validators/parcoords/tickfont/_size.py plotly/validators/parcoords/unselected/__init__.py plotly/validators/parcoords/unselected/_line.py plotly/validators/parcoords/unselected/line/__init__.py plotly/validators/parcoords/unselected/line/_color.py plotly/validators/parcoords/unselected/line/_opacity.py plotly/validators/pie/__init__.py plotly/validators/pie/_automargin.py plotly/validators/pie/_customdata.py plotly/validators/pie/_customdatasrc.py plotly/validators/pie/_direction.py plotly/validators/pie/_dlabel.py plotly/validators/pie/_domain.py plotly/validators/pie/_hole.py plotly/validators/pie/_hoverinfo.py plotly/validators/pie/_hoverinfosrc.py plotly/validators/pie/_hoverlabel.py plotly/validators/pie/_hovertemplate.py plotly/validators/pie/_hovertemplatesrc.py plotly/validators/pie/_hovertext.py plotly/validators/pie/_hovertextsrc.py plotly/validators/pie/_ids.py plotly/validators/pie/_idssrc.py plotly/validators/pie/_insidetextfont.py plotly/validators/pie/_insidetextorientation.py plotly/validators/pie/_label0.py plotly/validators/pie/_labels.py plotly/validators/pie/_labelssrc.py plotly/validators/pie/_legend.py plotly/validators/pie/_legendgroup.py plotly/validators/pie/_legendgrouptitle.py plotly/validators/pie/_legendrank.py plotly/validators/pie/_legendwidth.py plotly/validators/pie/_marker.py plotly/validators/pie/_meta.py plotly/validators/pie/_metasrc.py plotly/validators/pie/_name.py plotly/validators/pie/_opacity.py plotly/validators/pie/_outsidetextfont.py plotly/validators/pie/_pull.py plotly/validators/pie/_pullsrc.py plotly/validators/pie/_rotation.py plotly/validators/pie/_scalegroup.py plotly/validators/pie/_showlegend.py plotly/validators/pie/_sort.py plotly/validators/pie/_stream.py plotly/validators/pie/_text.py plotly/validators/pie/_textfont.py plotly/validators/pie/_textinfo.py plotly/validators/pie/_textposition.py plotly/validators/pie/_textpositionsrc.py plotly/validators/pie/_textsrc.py plotly/validators/pie/_texttemplate.py plotly/validators/pie/_texttemplatesrc.py plotly/validators/pie/_title.py plotly/validators/pie/_uid.py plotly/validators/pie/_uirevision.py plotly/validators/pie/_values.py plotly/validators/pie/_valuessrc.py plotly/validators/pie/_visible.py plotly/validators/pie/domain/__init__.py plotly/validators/pie/domain/_column.py plotly/validators/pie/domain/_row.py plotly/validators/pie/domain/_x.py plotly/validators/pie/domain/_y.py plotly/validators/pie/hoverlabel/__init__.py plotly/validators/pie/hoverlabel/_align.py plotly/validators/pie/hoverlabel/_alignsrc.py plotly/validators/pie/hoverlabel/_bgcolor.py plotly/validators/pie/hoverlabel/_bgcolorsrc.py plotly/validators/pie/hoverlabel/_bordercolor.py plotly/validators/pie/hoverlabel/_bordercolorsrc.py plotly/validators/pie/hoverlabel/_font.py plotly/validators/pie/hoverlabel/_namelength.py plotly/validators/pie/hoverlabel/_namelengthsrc.py plotly/validators/pie/hoverlabel/font/__init__.py plotly/validators/pie/hoverlabel/font/_color.py plotly/validators/pie/hoverlabel/font/_colorsrc.py plotly/validators/pie/hoverlabel/font/_family.py plotly/validators/pie/hoverlabel/font/_familysrc.py plotly/validators/pie/hoverlabel/font/_size.py plotly/validators/pie/hoverlabel/font/_sizesrc.py plotly/validators/pie/insidetextfont/__init__.py plotly/validators/pie/insidetextfont/_color.py plotly/validators/pie/insidetextfont/_colorsrc.py plotly/validators/pie/insidetextfont/_family.py plotly/validators/pie/insidetextfont/_familysrc.py plotly/validators/pie/insidetextfont/_size.py plotly/validators/pie/insidetextfont/_sizesrc.py plotly/validators/pie/legendgrouptitle/__init__.py plotly/validators/pie/legendgrouptitle/_font.py plotly/validators/pie/legendgrouptitle/_text.py plotly/validators/pie/legendgrouptitle/font/__init__.py plotly/validators/pie/legendgrouptitle/font/_color.py plotly/validators/pie/legendgrouptitle/font/_family.py plotly/validators/pie/legendgrouptitle/font/_size.py plotly/validators/pie/marker/__init__.py plotly/validators/pie/marker/_colors.py plotly/validators/pie/marker/_colorssrc.py plotly/validators/pie/marker/_line.py plotly/validators/pie/marker/_pattern.py plotly/validators/pie/marker/line/__init__.py plotly/validators/pie/marker/line/_color.py plotly/validators/pie/marker/line/_colorsrc.py plotly/validators/pie/marker/line/_width.py plotly/validators/pie/marker/line/_widthsrc.py plotly/validators/pie/marker/pattern/__init__.py plotly/validators/pie/marker/pattern/_bgcolor.py plotly/validators/pie/marker/pattern/_bgcolorsrc.py plotly/validators/pie/marker/pattern/_fgcolor.py plotly/validators/pie/marker/pattern/_fgcolorsrc.py plotly/validators/pie/marker/pattern/_fgopacity.py plotly/validators/pie/marker/pattern/_fillmode.py plotly/validators/pie/marker/pattern/_shape.py plotly/validators/pie/marker/pattern/_shapesrc.py plotly/validators/pie/marker/pattern/_size.py plotly/validators/pie/marker/pattern/_sizesrc.py plotly/validators/pie/marker/pattern/_solidity.py plotly/validators/pie/marker/pattern/_soliditysrc.py plotly/validators/pie/outsidetextfont/__init__.py plotly/validators/pie/outsidetextfont/_color.py plotly/validators/pie/outsidetextfont/_colorsrc.py plotly/validators/pie/outsidetextfont/_family.py plotly/validators/pie/outsidetextfont/_familysrc.py plotly/validators/pie/outsidetextfont/_size.py plotly/validators/pie/outsidetextfont/_sizesrc.py plotly/validators/pie/stream/__init__.py plotly/validators/pie/stream/_maxpoints.py plotly/validators/pie/stream/_token.py plotly/validators/pie/textfont/__init__.py plotly/validators/pie/textfont/_color.py plotly/validators/pie/textfont/_colorsrc.py plotly/validators/pie/textfont/_family.py plotly/validators/pie/textfont/_familysrc.py plotly/validators/pie/textfont/_size.py plotly/validators/pie/textfont/_sizesrc.py plotly/validators/pie/title/__init__.py plotly/validators/pie/title/_font.py plotly/validators/pie/title/_position.py plotly/validators/pie/title/_text.py plotly/validators/pie/title/font/__init__.py plotly/validators/pie/title/font/_color.py plotly/validators/pie/title/font/_colorsrc.py plotly/validators/pie/title/font/_family.py plotly/validators/pie/title/font/_familysrc.py plotly/validators/pie/title/font/_size.py plotly/validators/pie/title/font/_sizesrc.py plotly/validators/pointcloud/__init__.py plotly/validators/pointcloud/_customdata.py plotly/validators/pointcloud/_customdatasrc.py plotly/validators/pointcloud/_hoverinfo.py plotly/validators/pointcloud/_hoverinfosrc.py plotly/validators/pointcloud/_hoverlabel.py plotly/validators/pointcloud/_ids.py plotly/validators/pointcloud/_idssrc.py plotly/validators/pointcloud/_indices.py plotly/validators/pointcloud/_indicessrc.py plotly/validators/pointcloud/_legend.py plotly/validators/pointcloud/_legendgroup.py plotly/validators/pointcloud/_legendgrouptitle.py plotly/validators/pointcloud/_legendrank.py plotly/validators/pointcloud/_legendwidth.py plotly/validators/pointcloud/_marker.py plotly/validators/pointcloud/_meta.py plotly/validators/pointcloud/_metasrc.py plotly/validators/pointcloud/_name.py plotly/validators/pointcloud/_opacity.py plotly/validators/pointcloud/_showlegend.py plotly/validators/pointcloud/_stream.py plotly/validators/pointcloud/_text.py plotly/validators/pointcloud/_textsrc.py plotly/validators/pointcloud/_uid.py plotly/validators/pointcloud/_uirevision.py plotly/validators/pointcloud/_visible.py plotly/validators/pointcloud/_x.py plotly/validators/pointcloud/_xaxis.py plotly/validators/pointcloud/_xbounds.py plotly/validators/pointcloud/_xboundssrc.py plotly/validators/pointcloud/_xsrc.py plotly/validators/pointcloud/_xy.py plotly/validators/pointcloud/_xysrc.py plotly/validators/pointcloud/_y.py plotly/validators/pointcloud/_yaxis.py plotly/validators/pointcloud/_ybounds.py plotly/validators/pointcloud/_yboundssrc.py plotly/validators/pointcloud/_ysrc.py plotly/validators/pointcloud/hoverlabel/__init__.py plotly/validators/pointcloud/hoverlabel/_align.py plotly/validators/pointcloud/hoverlabel/_alignsrc.py plotly/validators/pointcloud/hoverlabel/_bgcolor.py plotly/validators/pointcloud/hoverlabel/_bgcolorsrc.py plotly/validators/pointcloud/hoverlabel/_bordercolor.py plotly/validators/pointcloud/hoverlabel/_bordercolorsrc.py plotly/validators/pointcloud/hoverlabel/_font.py plotly/validators/pointcloud/hoverlabel/_namelength.py plotly/validators/pointcloud/hoverlabel/_namelengthsrc.py plotly/validators/pointcloud/hoverlabel/font/__init__.py plotly/validators/pointcloud/hoverlabel/font/_color.py plotly/validators/pointcloud/hoverlabel/font/_colorsrc.py plotly/validators/pointcloud/hoverlabel/font/_family.py plotly/validators/pointcloud/hoverlabel/font/_familysrc.py plotly/validators/pointcloud/hoverlabel/font/_size.py plotly/validators/pointcloud/hoverlabel/font/_sizesrc.py plotly/validators/pointcloud/legendgrouptitle/__init__.py plotly/validators/pointcloud/legendgrouptitle/_font.py plotly/validators/pointcloud/legendgrouptitle/_text.py plotly/validators/pointcloud/legendgrouptitle/font/__init__.py plotly/validators/pointcloud/legendgrouptitle/font/_color.py plotly/validators/pointcloud/legendgrouptitle/font/_family.py plotly/validators/pointcloud/legendgrouptitle/font/_size.py plotly/validators/pointcloud/marker/__init__.py plotly/validators/pointcloud/marker/_blend.py plotly/validators/pointcloud/marker/_border.py plotly/validators/pointcloud/marker/_color.py plotly/validators/pointcloud/marker/_opacity.py plotly/validators/pointcloud/marker/_sizemax.py plotly/validators/pointcloud/marker/_sizemin.py plotly/validators/pointcloud/marker/border/__init__.py plotly/validators/pointcloud/marker/border/_arearatio.py plotly/validators/pointcloud/marker/border/_color.py plotly/validators/pointcloud/stream/__init__.py plotly/validators/pointcloud/stream/_maxpoints.py plotly/validators/pointcloud/stream/_token.py plotly/validators/sankey/__init__.py plotly/validators/sankey/_arrangement.py plotly/validators/sankey/_customdata.py plotly/validators/sankey/_customdatasrc.py plotly/validators/sankey/_domain.py plotly/validators/sankey/_hoverinfo.py plotly/validators/sankey/_hoverlabel.py plotly/validators/sankey/_ids.py plotly/validators/sankey/_idssrc.py plotly/validators/sankey/_legend.py plotly/validators/sankey/_legendgrouptitle.py plotly/validators/sankey/_legendrank.py plotly/validators/sankey/_legendwidth.py plotly/validators/sankey/_link.py plotly/validators/sankey/_meta.py plotly/validators/sankey/_metasrc.py plotly/validators/sankey/_name.py plotly/validators/sankey/_node.py plotly/validators/sankey/_orientation.py plotly/validators/sankey/_selectedpoints.py plotly/validators/sankey/_stream.py plotly/validators/sankey/_textfont.py plotly/validators/sankey/_uid.py plotly/validators/sankey/_uirevision.py plotly/validators/sankey/_valueformat.py plotly/validators/sankey/_valuesuffix.py plotly/validators/sankey/_visible.py plotly/validators/sankey/domain/__init__.py plotly/validators/sankey/domain/_column.py plotly/validators/sankey/domain/_row.py plotly/validators/sankey/domain/_x.py plotly/validators/sankey/domain/_y.py plotly/validators/sankey/hoverlabel/__init__.py plotly/validators/sankey/hoverlabel/_align.py plotly/validators/sankey/hoverlabel/_alignsrc.py plotly/validators/sankey/hoverlabel/_bgcolor.py plotly/validators/sankey/hoverlabel/_bgcolorsrc.py plotly/validators/sankey/hoverlabel/_bordercolor.py plotly/validators/sankey/hoverlabel/_bordercolorsrc.py plotly/validators/sankey/hoverlabel/_font.py plotly/validators/sankey/hoverlabel/_namelength.py plotly/validators/sankey/hoverlabel/_namelengthsrc.py plotly/validators/sankey/hoverlabel/font/__init__.py plotly/validators/sankey/hoverlabel/font/_color.py plotly/validators/sankey/hoverlabel/font/_colorsrc.py plotly/validators/sankey/hoverlabel/font/_family.py plotly/validators/sankey/hoverlabel/font/_familysrc.py plotly/validators/sankey/hoverlabel/font/_size.py plotly/validators/sankey/hoverlabel/font/_sizesrc.py plotly/validators/sankey/legendgrouptitle/__init__.py plotly/validators/sankey/legendgrouptitle/_font.py plotly/validators/sankey/legendgrouptitle/_text.py plotly/validators/sankey/legendgrouptitle/font/__init__.py plotly/validators/sankey/legendgrouptitle/font/_color.py plotly/validators/sankey/legendgrouptitle/font/_family.py plotly/validators/sankey/legendgrouptitle/font/_size.py plotly/validators/sankey/link/__init__.py plotly/validators/sankey/link/_arrowlen.py plotly/validators/sankey/link/_color.py plotly/validators/sankey/link/_colorscaledefaults.py plotly/validators/sankey/link/_colorscales.py plotly/validators/sankey/link/_colorsrc.py plotly/validators/sankey/link/_customdata.py plotly/validators/sankey/link/_customdatasrc.py plotly/validators/sankey/link/_hoverinfo.py plotly/validators/sankey/link/_hoverlabel.py plotly/validators/sankey/link/_hovertemplate.py plotly/validators/sankey/link/_hovertemplatesrc.py plotly/validators/sankey/link/_label.py plotly/validators/sankey/link/_labelsrc.py plotly/validators/sankey/link/_line.py plotly/validators/sankey/link/_source.py plotly/validators/sankey/link/_sourcesrc.py plotly/validators/sankey/link/_target.py plotly/validators/sankey/link/_targetsrc.py plotly/validators/sankey/link/_value.py plotly/validators/sankey/link/_valuesrc.py plotly/validators/sankey/link/colorscale/__init__.py plotly/validators/sankey/link/colorscale/_cmax.py plotly/validators/sankey/link/colorscale/_cmin.py plotly/validators/sankey/link/colorscale/_colorscale.py plotly/validators/sankey/link/colorscale/_label.py plotly/validators/sankey/link/colorscale/_name.py plotly/validators/sankey/link/colorscale/_templateitemname.py plotly/validators/sankey/link/hoverlabel/__init__.py plotly/validators/sankey/link/hoverlabel/_align.py plotly/validators/sankey/link/hoverlabel/_alignsrc.py plotly/validators/sankey/link/hoverlabel/_bgcolor.py plotly/validators/sankey/link/hoverlabel/_bgcolorsrc.py plotly/validators/sankey/link/hoverlabel/_bordercolor.py plotly/validators/sankey/link/hoverlabel/_bordercolorsrc.py plotly/validators/sankey/link/hoverlabel/_font.py plotly/validators/sankey/link/hoverlabel/_namelength.py plotly/validators/sankey/link/hoverlabel/_namelengthsrc.py plotly/validators/sankey/link/hoverlabel/font/__init__.py plotly/validators/sankey/link/hoverlabel/font/_color.py plotly/validators/sankey/link/hoverlabel/font/_colorsrc.py plotly/validators/sankey/link/hoverlabel/font/_family.py plotly/validators/sankey/link/hoverlabel/font/_familysrc.py plotly/validators/sankey/link/hoverlabel/font/_size.py plotly/validators/sankey/link/hoverlabel/font/_sizesrc.py plotly/validators/sankey/link/line/__init__.py plotly/validators/sankey/link/line/_color.py plotly/validators/sankey/link/line/_colorsrc.py plotly/validators/sankey/link/line/_width.py plotly/validators/sankey/link/line/_widthsrc.py plotly/validators/sankey/node/__init__.py plotly/validators/sankey/node/_color.py plotly/validators/sankey/node/_colorsrc.py plotly/validators/sankey/node/_customdata.py plotly/validators/sankey/node/_customdatasrc.py plotly/validators/sankey/node/_groups.py plotly/validators/sankey/node/_hoverinfo.py plotly/validators/sankey/node/_hoverlabel.py plotly/validators/sankey/node/_hovertemplate.py plotly/validators/sankey/node/_hovertemplatesrc.py plotly/validators/sankey/node/_label.py plotly/validators/sankey/node/_labelsrc.py plotly/validators/sankey/node/_line.py plotly/validators/sankey/node/_pad.py plotly/validators/sankey/node/_thickness.py plotly/validators/sankey/node/_x.py plotly/validators/sankey/node/_xsrc.py plotly/validators/sankey/node/_y.py plotly/validators/sankey/node/_ysrc.py plotly/validators/sankey/node/hoverlabel/__init__.py plotly/validators/sankey/node/hoverlabel/_align.py plotly/validators/sankey/node/hoverlabel/_alignsrc.py plotly/validators/sankey/node/hoverlabel/_bgcolor.py plotly/validators/sankey/node/hoverlabel/_bgcolorsrc.py plotly/validators/sankey/node/hoverlabel/_bordercolor.py plotly/validators/sankey/node/hoverlabel/_bordercolorsrc.py plotly/validators/sankey/node/hoverlabel/_font.py plotly/validators/sankey/node/hoverlabel/_namelength.py plotly/validators/sankey/node/hoverlabel/_namelengthsrc.py plotly/validators/sankey/node/hoverlabel/font/__init__.py plotly/validators/sankey/node/hoverlabel/font/_color.py plotly/validators/sankey/node/hoverlabel/font/_colorsrc.py plotly/validators/sankey/node/hoverlabel/font/_family.py plotly/validators/sankey/node/hoverlabel/font/_familysrc.py plotly/validators/sankey/node/hoverlabel/font/_size.py plotly/validators/sankey/node/hoverlabel/font/_sizesrc.py plotly/validators/sankey/node/line/__init__.py plotly/validators/sankey/node/line/_color.py plotly/validators/sankey/node/line/_colorsrc.py plotly/validators/sankey/node/line/_width.py plotly/validators/sankey/node/line/_widthsrc.py plotly/validators/sankey/stream/__init__.py plotly/validators/sankey/stream/_maxpoints.py plotly/validators/sankey/stream/_token.py plotly/validators/sankey/textfont/__init__.py plotly/validators/sankey/textfont/_color.py plotly/validators/sankey/textfont/_family.py plotly/validators/sankey/textfont/_size.py plotly/validators/scatter/__init__.py plotly/validators/scatter/_alignmentgroup.py plotly/validators/scatter/_cliponaxis.py plotly/validators/scatter/_connectgaps.py plotly/validators/scatter/_customdata.py plotly/validators/scatter/_customdatasrc.py plotly/validators/scatter/_dx.py plotly/validators/scatter/_dy.py plotly/validators/scatter/_error_x.py plotly/validators/scatter/_error_y.py plotly/validators/scatter/_fill.py plotly/validators/scatter/_fillcolor.py plotly/validators/scatter/_fillpattern.py plotly/validators/scatter/_groupnorm.py plotly/validators/scatter/_hoverinfo.py plotly/validators/scatter/_hoverinfosrc.py plotly/validators/scatter/_hoverlabel.py plotly/validators/scatter/_hoveron.py plotly/validators/scatter/_hovertemplate.py plotly/validators/scatter/_hovertemplatesrc.py plotly/validators/scatter/_hovertext.py plotly/validators/scatter/_hovertextsrc.py plotly/validators/scatter/_ids.py plotly/validators/scatter/_idssrc.py plotly/validators/scatter/_legend.py plotly/validators/scatter/_legendgroup.py plotly/validators/scatter/_legendgrouptitle.py plotly/validators/scatter/_legendrank.py plotly/validators/scatter/_legendwidth.py plotly/validators/scatter/_line.py plotly/validators/scatter/_marker.py plotly/validators/scatter/_meta.py plotly/validators/scatter/_metasrc.py plotly/validators/scatter/_mode.py plotly/validators/scatter/_name.py plotly/validators/scatter/_offsetgroup.py plotly/validators/scatter/_opacity.py plotly/validators/scatter/_orientation.py plotly/validators/scatter/_selected.py plotly/validators/scatter/_selectedpoints.py plotly/validators/scatter/_showlegend.py plotly/validators/scatter/_stackgaps.py plotly/validators/scatter/_stackgroup.py plotly/validators/scatter/_stream.py plotly/validators/scatter/_text.py plotly/validators/scatter/_textfont.py plotly/validators/scatter/_textposition.py plotly/validators/scatter/_textpositionsrc.py plotly/validators/scatter/_textsrc.py plotly/validators/scatter/_texttemplate.py plotly/validators/scatter/_texttemplatesrc.py plotly/validators/scatter/_uid.py plotly/validators/scatter/_uirevision.py plotly/validators/scatter/_unselected.py plotly/validators/scatter/_visible.py plotly/validators/scatter/_x.py plotly/validators/scatter/_x0.py plotly/validators/scatter/_xaxis.py plotly/validators/scatter/_xcalendar.py plotly/validators/scatter/_xhoverformat.py plotly/validators/scatter/_xperiod.py plotly/validators/scatter/_xperiod0.py plotly/validators/scatter/_xperiodalignment.py plotly/validators/scatter/_xsrc.py plotly/validators/scatter/_y.py plotly/validators/scatter/_y0.py plotly/validators/scatter/_yaxis.py plotly/validators/scatter/_ycalendar.py plotly/validators/scatter/_yhoverformat.py plotly/validators/scatter/_yperiod.py plotly/validators/scatter/_yperiod0.py plotly/validators/scatter/_yperiodalignment.py plotly/validators/scatter/_ysrc.py plotly/validators/scatter/error_x/__init__.py plotly/validators/scatter/error_x/_array.py plotly/validators/scatter/error_x/_arrayminus.py plotly/validators/scatter/error_x/_arrayminussrc.py plotly/validators/scatter/error_x/_arraysrc.py plotly/validators/scatter/error_x/_color.py plotly/validators/scatter/error_x/_copy_ystyle.py plotly/validators/scatter/error_x/_symmetric.py plotly/validators/scatter/error_x/_thickness.py plotly/validators/scatter/error_x/_traceref.py plotly/validators/scatter/error_x/_tracerefminus.py plotly/validators/scatter/error_x/_type.py plotly/validators/scatter/error_x/_value.py plotly/validators/scatter/error_x/_valueminus.py plotly/validators/scatter/error_x/_visible.py plotly/validators/scatter/error_x/_width.py plotly/validators/scatter/error_y/__init__.py plotly/validators/scatter/error_y/_array.py plotly/validators/scatter/error_y/_arrayminus.py plotly/validators/scatter/error_y/_arrayminussrc.py plotly/validators/scatter/error_y/_arraysrc.py plotly/validators/scatter/error_y/_color.py plotly/validators/scatter/error_y/_symmetric.py plotly/validators/scatter/error_y/_thickness.py plotly/validators/scatter/error_y/_traceref.py plotly/validators/scatter/error_y/_tracerefminus.py plotly/validators/scatter/error_y/_type.py plotly/validators/scatter/error_y/_value.py plotly/validators/scatter/error_y/_valueminus.py plotly/validators/scatter/error_y/_visible.py plotly/validators/scatter/error_y/_width.py plotly/validators/scatter/fillpattern/__init__.py plotly/validators/scatter/fillpattern/_bgcolor.py plotly/validators/scatter/fillpattern/_bgcolorsrc.py plotly/validators/scatter/fillpattern/_fgcolor.py plotly/validators/scatter/fillpattern/_fgcolorsrc.py plotly/validators/scatter/fillpattern/_fgopacity.py plotly/validators/scatter/fillpattern/_fillmode.py plotly/validators/scatter/fillpattern/_shape.py plotly/validators/scatter/fillpattern/_shapesrc.py plotly/validators/scatter/fillpattern/_size.py plotly/validators/scatter/fillpattern/_sizesrc.py plotly/validators/scatter/fillpattern/_solidity.py plotly/validators/scatter/fillpattern/_soliditysrc.py plotly/validators/scatter/hoverlabel/__init__.py plotly/validators/scatter/hoverlabel/_align.py plotly/validators/scatter/hoverlabel/_alignsrc.py plotly/validators/scatter/hoverlabel/_bgcolor.py plotly/validators/scatter/hoverlabel/_bgcolorsrc.py plotly/validators/scatter/hoverlabel/_bordercolor.py plotly/validators/scatter/hoverlabel/_bordercolorsrc.py plotly/validators/scatter/hoverlabel/_font.py plotly/validators/scatter/hoverlabel/_namelength.py plotly/validators/scatter/hoverlabel/_namelengthsrc.py plotly/validators/scatter/hoverlabel/font/__init__.py plotly/validators/scatter/hoverlabel/font/_color.py plotly/validators/scatter/hoverlabel/font/_colorsrc.py plotly/validators/scatter/hoverlabel/font/_family.py plotly/validators/scatter/hoverlabel/font/_familysrc.py plotly/validators/scatter/hoverlabel/font/_size.py plotly/validators/scatter/hoverlabel/font/_sizesrc.py plotly/validators/scatter/legendgrouptitle/__init__.py plotly/validators/scatter/legendgrouptitle/_font.py plotly/validators/scatter/legendgrouptitle/_text.py plotly/validators/scatter/legendgrouptitle/font/__init__.py plotly/validators/scatter/legendgrouptitle/font/_color.py plotly/validators/scatter/legendgrouptitle/font/_family.py plotly/validators/scatter/legendgrouptitle/font/_size.py plotly/validators/scatter/line/__init__.py plotly/validators/scatter/line/_backoff.py plotly/validators/scatter/line/_backoffsrc.py plotly/validators/scatter/line/_color.py plotly/validators/scatter/line/_dash.py plotly/validators/scatter/line/_shape.py plotly/validators/scatter/line/_simplify.py plotly/validators/scatter/line/_smoothing.py plotly/validators/scatter/line/_width.py plotly/validators/scatter/marker/__init__.py plotly/validators/scatter/marker/_angle.py plotly/validators/scatter/marker/_angleref.py plotly/validators/scatter/marker/_anglesrc.py plotly/validators/scatter/marker/_autocolorscale.py plotly/validators/scatter/marker/_cauto.py plotly/validators/scatter/marker/_cmax.py plotly/validators/scatter/marker/_cmid.py plotly/validators/scatter/marker/_cmin.py plotly/validators/scatter/marker/_color.py plotly/validators/scatter/marker/_coloraxis.py plotly/validators/scatter/marker/_colorbar.py plotly/validators/scatter/marker/_colorscale.py plotly/validators/scatter/marker/_colorsrc.py plotly/validators/scatter/marker/_gradient.py plotly/validators/scatter/marker/_line.py plotly/validators/scatter/marker/_maxdisplayed.py plotly/validators/scatter/marker/_opacity.py plotly/validators/scatter/marker/_opacitysrc.py plotly/validators/scatter/marker/_reversescale.py plotly/validators/scatter/marker/_showscale.py plotly/validators/scatter/marker/_size.py plotly/validators/scatter/marker/_sizemin.py plotly/validators/scatter/marker/_sizemode.py plotly/validators/scatter/marker/_sizeref.py plotly/validators/scatter/marker/_sizesrc.py plotly/validators/scatter/marker/_standoff.py plotly/validators/scatter/marker/_standoffsrc.py plotly/validators/scatter/marker/_symbol.py plotly/validators/scatter/marker/_symbolsrc.py plotly/validators/scatter/marker/colorbar/__init__.py plotly/validators/scatter/marker/colorbar/_bgcolor.py plotly/validators/scatter/marker/colorbar/_bordercolor.py plotly/validators/scatter/marker/colorbar/_borderwidth.py plotly/validators/scatter/marker/colorbar/_dtick.py plotly/validators/scatter/marker/colorbar/_exponentformat.py plotly/validators/scatter/marker/colorbar/_labelalias.py plotly/validators/scatter/marker/colorbar/_len.py plotly/validators/scatter/marker/colorbar/_lenmode.py plotly/validators/scatter/marker/colorbar/_minexponent.py plotly/validators/scatter/marker/colorbar/_nticks.py plotly/validators/scatter/marker/colorbar/_orientation.py plotly/validators/scatter/marker/colorbar/_outlinecolor.py plotly/validators/scatter/marker/colorbar/_outlinewidth.py plotly/validators/scatter/marker/colorbar/_separatethousands.py plotly/validators/scatter/marker/colorbar/_showexponent.py plotly/validators/scatter/marker/colorbar/_showticklabels.py plotly/validators/scatter/marker/colorbar/_showtickprefix.py plotly/validators/scatter/marker/colorbar/_showticksuffix.py plotly/validators/scatter/marker/colorbar/_thickness.py plotly/validators/scatter/marker/colorbar/_thicknessmode.py plotly/validators/scatter/marker/colorbar/_tick0.py plotly/validators/scatter/marker/colorbar/_tickangle.py plotly/validators/scatter/marker/colorbar/_tickcolor.py plotly/validators/scatter/marker/colorbar/_tickfont.py plotly/validators/scatter/marker/colorbar/_tickformat.py plotly/validators/scatter/marker/colorbar/_tickformatstopdefaults.py plotly/validators/scatter/marker/colorbar/_tickformatstops.py plotly/validators/scatter/marker/colorbar/_ticklabeloverflow.py plotly/validators/scatter/marker/colorbar/_ticklabelposition.py plotly/validators/scatter/marker/colorbar/_ticklabelstep.py plotly/validators/scatter/marker/colorbar/_ticklen.py plotly/validators/scatter/marker/colorbar/_tickmode.py plotly/validators/scatter/marker/colorbar/_tickprefix.py plotly/validators/scatter/marker/colorbar/_ticks.py plotly/validators/scatter/marker/colorbar/_ticksuffix.py plotly/validators/scatter/marker/colorbar/_ticktext.py plotly/validators/scatter/marker/colorbar/_ticktextsrc.py plotly/validators/scatter/marker/colorbar/_tickvals.py plotly/validators/scatter/marker/colorbar/_tickvalssrc.py plotly/validators/scatter/marker/colorbar/_tickwidth.py plotly/validators/scatter/marker/colorbar/_title.py plotly/validators/scatter/marker/colorbar/_x.py plotly/validators/scatter/marker/colorbar/_xanchor.py plotly/validators/scatter/marker/colorbar/_xpad.py plotly/validators/scatter/marker/colorbar/_xref.py plotly/validators/scatter/marker/colorbar/_y.py plotly/validators/scatter/marker/colorbar/_yanchor.py plotly/validators/scatter/marker/colorbar/_ypad.py plotly/validators/scatter/marker/colorbar/_yref.py plotly/validators/scatter/marker/colorbar/tickfont/__init__.py plotly/validators/scatter/marker/colorbar/tickfont/_color.py plotly/validators/scatter/marker/colorbar/tickfont/_family.py plotly/validators/scatter/marker/colorbar/tickfont/_size.py plotly/validators/scatter/marker/colorbar/tickformatstop/__init__.py plotly/validators/scatter/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/scatter/marker/colorbar/tickformatstop/_enabled.py plotly/validators/scatter/marker/colorbar/tickformatstop/_name.py plotly/validators/scatter/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/scatter/marker/colorbar/tickformatstop/_value.py plotly/validators/scatter/marker/colorbar/title/__init__.py plotly/validators/scatter/marker/colorbar/title/_font.py plotly/validators/scatter/marker/colorbar/title/_side.py plotly/validators/scatter/marker/colorbar/title/_text.py plotly/validators/scatter/marker/colorbar/title/font/__init__.py plotly/validators/scatter/marker/colorbar/title/font/_color.py plotly/validators/scatter/marker/colorbar/title/font/_family.py plotly/validators/scatter/marker/colorbar/title/font/_size.py plotly/validators/scatter/marker/gradient/__init__.py plotly/validators/scatter/marker/gradient/_color.py plotly/validators/scatter/marker/gradient/_colorsrc.py plotly/validators/scatter/marker/gradient/_type.py plotly/validators/scatter/marker/gradient/_typesrc.py plotly/validators/scatter/marker/line/__init__.py plotly/validators/scatter/marker/line/_autocolorscale.py plotly/validators/scatter/marker/line/_cauto.py plotly/validators/scatter/marker/line/_cmax.py plotly/validators/scatter/marker/line/_cmid.py plotly/validators/scatter/marker/line/_cmin.py plotly/validators/scatter/marker/line/_color.py plotly/validators/scatter/marker/line/_coloraxis.py plotly/validators/scatter/marker/line/_colorscale.py plotly/validators/scatter/marker/line/_colorsrc.py plotly/validators/scatter/marker/line/_reversescale.py plotly/validators/scatter/marker/line/_width.py plotly/validators/scatter/marker/line/_widthsrc.py plotly/validators/scatter/selected/__init__.py plotly/validators/scatter/selected/_marker.py plotly/validators/scatter/selected/_textfont.py plotly/validators/scatter/selected/marker/__init__.py plotly/validators/scatter/selected/marker/_color.py plotly/validators/scatter/selected/marker/_opacity.py plotly/validators/scatter/selected/marker/_size.py plotly/validators/scatter/selected/textfont/__init__.py plotly/validators/scatter/selected/textfont/_color.py plotly/validators/scatter/stream/__init__.py plotly/validators/scatter/stream/_maxpoints.py plotly/validators/scatter/stream/_token.py plotly/validators/scatter/textfont/__init__.py plotly/validators/scatter/textfont/_color.py plotly/validators/scatter/textfont/_colorsrc.py plotly/validators/scatter/textfont/_family.py plotly/validators/scatter/textfont/_familysrc.py plotly/validators/scatter/textfont/_size.py plotly/validators/scatter/textfont/_sizesrc.py plotly/validators/scatter/unselected/__init__.py plotly/validators/scatter/unselected/_marker.py plotly/validators/scatter/unselected/_textfont.py plotly/validators/scatter/unselected/marker/__init__.py plotly/validators/scatter/unselected/marker/_color.py plotly/validators/scatter/unselected/marker/_opacity.py plotly/validators/scatter/unselected/marker/_size.py plotly/validators/scatter/unselected/textfont/__init__.py plotly/validators/scatter/unselected/textfont/_color.py plotly/validators/scatter3d/__init__.py plotly/validators/scatter3d/_connectgaps.py plotly/validators/scatter3d/_customdata.py plotly/validators/scatter3d/_customdatasrc.py plotly/validators/scatter3d/_error_x.py plotly/validators/scatter3d/_error_y.py plotly/validators/scatter3d/_error_z.py plotly/validators/scatter3d/_hoverinfo.py plotly/validators/scatter3d/_hoverinfosrc.py plotly/validators/scatter3d/_hoverlabel.py plotly/validators/scatter3d/_hovertemplate.py plotly/validators/scatter3d/_hovertemplatesrc.py plotly/validators/scatter3d/_hovertext.py plotly/validators/scatter3d/_hovertextsrc.py plotly/validators/scatter3d/_ids.py plotly/validators/scatter3d/_idssrc.py plotly/validators/scatter3d/_legend.py plotly/validators/scatter3d/_legendgroup.py plotly/validators/scatter3d/_legendgrouptitle.py plotly/validators/scatter3d/_legendrank.py plotly/validators/scatter3d/_legendwidth.py plotly/validators/scatter3d/_line.py plotly/validators/scatter3d/_marker.py plotly/validators/scatter3d/_meta.py plotly/validators/scatter3d/_metasrc.py plotly/validators/scatter3d/_mode.py plotly/validators/scatter3d/_name.py plotly/validators/scatter3d/_opacity.py plotly/validators/scatter3d/_projection.py plotly/validators/scatter3d/_scene.py plotly/validators/scatter3d/_showlegend.py plotly/validators/scatter3d/_stream.py plotly/validators/scatter3d/_surfaceaxis.py plotly/validators/scatter3d/_surfacecolor.py plotly/validators/scatter3d/_text.py plotly/validators/scatter3d/_textfont.py plotly/validators/scatter3d/_textposition.py plotly/validators/scatter3d/_textpositionsrc.py plotly/validators/scatter3d/_textsrc.py plotly/validators/scatter3d/_texttemplate.py plotly/validators/scatter3d/_texttemplatesrc.py plotly/validators/scatter3d/_uid.py plotly/validators/scatter3d/_uirevision.py plotly/validators/scatter3d/_visible.py plotly/validators/scatter3d/_x.py plotly/validators/scatter3d/_xcalendar.py plotly/validators/scatter3d/_xhoverformat.py plotly/validators/scatter3d/_xsrc.py plotly/validators/scatter3d/_y.py plotly/validators/scatter3d/_ycalendar.py plotly/validators/scatter3d/_yhoverformat.py plotly/validators/scatter3d/_ysrc.py plotly/validators/scatter3d/_z.py plotly/validators/scatter3d/_zcalendar.py plotly/validators/scatter3d/_zhoverformat.py plotly/validators/scatter3d/_zsrc.py plotly/validators/scatter3d/error_x/__init__.py plotly/validators/scatter3d/error_x/_array.py plotly/validators/scatter3d/error_x/_arrayminus.py plotly/validators/scatter3d/error_x/_arrayminussrc.py plotly/validators/scatter3d/error_x/_arraysrc.py plotly/validators/scatter3d/error_x/_color.py plotly/validators/scatter3d/error_x/_copy_zstyle.py plotly/validators/scatter3d/error_x/_symmetric.py plotly/validators/scatter3d/error_x/_thickness.py plotly/validators/scatter3d/error_x/_traceref.py plotly/validators/scatter3d/error_x/_tracerefminus.py plotly/validators/scatter3d/error_x/_type.py plotly/validators/scatter3d/error_x/_value.py plotly/validators/scatter3d/error_x/_valueminus.py plotly/validators/scatter3d/error_x/_visible.py plotly/validators/scatter3d/error_x/_width.py plotly/validators/scatter3d/error_y/__init__.py plotly/validators/scatter3d/error_y/_array.py plotly/validators/scatter3d/error_y/_arrayminus.py plotly/validators/scatter3d/error_y/_arrayminussrc.py plotly/validators/scatter3d/error_y/_arraysrc.py plotly/validators/scatter3d/error_y/_color.py plotly/validators/scatter3d/error_y/_copy_zstyle.py plotly/validators/scatter3d/error_y/_symmetric.py plotly/validators/scatter3d/error_y/_thickness.py plotly/validators/scatter3d/error_y/_traceref.py plotly/validators/scatter3d/error_y/_tracerefminus.py plotly/validators/scatter3d/error_y/_type.py plotly/validators/scatter3d/error_y/_value.py plotly/validators/scatter3d/error_y/_valueminus.py plotly/validators/scatter3d/error_y/_visible.py plotly/validators/scatter3d/error_y/_width.py plotly/validators/scatter3d/error_z/__init__.py plotly/validators/scatter3d/error_z/_array.py plotly/validators/scatter3d/error_z/_arrayminus.py plotly/validators/scatter3d/error_z/_arrayminussrc.py plotly/validators/scatter3d/error_z/_arraysrc.py plotly/validators/scatter3d/error_z/_color.py plotly/validators/scatter3d/error_z/_symmetric.py plotly/validators/scatter3d/error_z/_thickness.py plotly/validators/scatter3d/error_z/_traceref.py plotly/validators/scatter3d/error_z/_tracerefminus.py plotly/validators/scatter3d/error_z/_type.py plotly/validators/scatter3d/error_z/_value.py plotly/validators/scatter3d/error_z/_valueminus.py plotly/validators/scatter3d/error_z/_visible.py plotly/validators/scatter3d/error_z/_width.py plotly/validators/scatter3d/hoverlabel/__init__.py plotly/validators/scatter3d/hoverlabel/_align.py plotly/validators/scatter3d/hoverlabel/_alignsrc.py plotly/validators/scatter3d/hoverlabel/_bgcolor.py plotly/validators/scatter3d/hoverlabel/_bgcolorsrc.py plotly/validators/scatter3d/hoverlabel/_bordercolor.py plotly/validators/scatter3d/hoverlabel/_bordercolorsrc.py plotly/validators/scatter3d/hoverlabel/_font.py plotly/validators/scatter3d/hoverlabel/_namelength.py plotly/validators/scatter3d/hoverlabel/_namelengthsrc.py plotly/validators/scatter3d/hoverlabel/font/__init__.py plotly/validators/scatter3d/hoverlabel/font/_color.py plotly/validators/scatter3d/hoverlabel/font/_colorsrc.py plotly/validators/scatter3d/hoverlabel/font/_family.py plotly/validators/scatter3d/hoverlabel/font/_familysrc.py plotly/validators/scatter3d/hoverlabel/font/_size.py plotly/validators/scatter3d/hoverlabel/font/_sizesrc.py plotly/validators/scatter3d/legendgrouptitle/__init__.py plotly/validators/scatter3d/legendgrouptitle/_font.py plotly/validators/scatter3d/legendgrouptitle/_text.py plotly/validators/scatter3d/legendgrouptitle/font/__init__.py plotly/validators/scatter3d/legendgrouptitle/font/_color.py plotly/validators/scatter3d/legendgrouptitle/font/_family.py plotly/validators/scatter3d/legendgrouptitle/font/_size.py plotly/validators/scatter3d/line/__init__.py plotly/validators/scatter3d/line/_autocolorscale.py plotly/validators/scatter3d/line/_cauto.py plotly/validators/scatter3d/line/_cmax.py plotly/validators/scatter3d/line/_cmid.py plotly/validators/scatter3d/line/_cmin.py plotly/validators/scatter3d/line/_color.py plotly/validators/scatter3d/line/_coloraxis.py plotly/validators/scatter3d/line/_colorbar.py plotly/validators/scatter3d/line/_colorscale.py plotly/validators/scatter3d/line/_colorsrc.py plotly/validators/scatter3d/line/_dash.py plotly/validators/scatter3d/line/_reversescale.py plotly/validators/scatter3d/line/_showscale.py plotly/validators/scatter3d/line/_width.py plotly/validators/scatter3d/line/colorbar/__init__.py plotly/validators/scatter3d/line/colorbar/_bgcolor.py plotly/validators/scatter3d/line/colorbar/_bordercolor.py plotly/validators/scatter3d/line/colorbar/_borderwidth.py plotly/validators/scatter3d/line/colorbar/_dtick.py plotly/validators/scatter3d/line/colorbar/_exponentformat.py plotly/validators/scatter3d/line/colorbar/_labelalias.py plotly/validators/scatter3d/line/colorbar/_len.py plotly/validators/scatter3d/line/colorbar/_lenmode.py plotly/validators/scatter3d/line/colorbar/_minexponent.py plotly/validators/scatter3d/line/colorbar/_nticks.py plotly/validators/scatter3d/line/colorbar/_orientation.py plotly/validators/scatter3d/line/colorbar/_outlinecolor.py plotly/validators/scatter3d/line/colorbar/_outlinewidth.py plotly/validators/scatter3d/line/colorbar/_separatethousands.py plotly/validators/scatter3d/line/colorbar/_showexponent.py plotly/validators/scatter3d/line/colorbar/_showticklabels.py plotly/validators/scatter3d/line/colorbar/_showtickprefix.py plotly/validators/scatter3d/line/colorbar/_showticksuffix.py plotly/validators/scatter3d/line/colorbar/_thickness.py plotly/validators/scatter3d/line/colorbar/_thicknessmode.py plotly/validators/scatter3d/line/colorbar/_tick0.py plotly/validators/scatter3d/line/colorbar/_tickangle.py plotly/validators/scatter3d/line/colorbar/_tickcolor.py plotly/validators/scatter3d/line/colorbar/_tickfont.py plotly/validators/scatter3d/line/colorbar/_tickformat.py plotly/validators/scatter3d/line/colorbar/_tickformatstopdefaults.py plotly/validators/scatter3d/line/colorbar/_tickformatstops.py plotly/validators/scatter3d/line/colorbar/_ticklabeloverflow.py plotly/validators/scatter3d/line/colorbar/_ticklabelposition.py plotly/validators/scatter3d/line/colorbar/_ticklabelstep.py plotly/validators/scatter3d/line/colorbar/_ticklen.py plotly/validators/scatter3d/line/colorbar/_tickmode.py plotly/validators/scatter3d/line/colorbar/_tickprefix.py plotly/validators/scatter3d/line/colorbar/_ticks.py plotly/validators/scatter3d/line/colorbar/_ticksuffix.py plotly/validators/scatter3d/line/colorbar/_ticktext.py plotly/validators/scatter3d/line/colorbar/_ticktextsrc.py plotly/validators/scatter3d/line/colorbar/_tickvals.py plotly/validators/scatter3d/line/colorbar/_tickvalssrc.py plotly/validators/scatter3d/line/colorbar/_tickwidth.py plotly/validators/scatter3d/line/colorbar/_title.py plotly/validators/scatter3d/line/colorbar/_x.py plotly/validators/scatter3d/line/colorbar/_xanchor.py plotly/validators/scatter3d/line/colorbar/_xpad.py plotly/validators/scatter3d/line/colorbar/_xref.py plotly/validators/scatter3d/line/colorbar/_y.py plotly/validators/scatter3d/line/colorbar/_yanchor.py plotly/validators/scatter3d/line/colorbar/_ypad.py plotly/validators/scatter3d/line/colorbar/_yref.py plotly/validators/scatter3d/line/colorbar/tickfont/__init__.py plotly/validators/scatter3d/line/colorbar/tickfont/_color.py plotly/validators/scatter3d/line/colorbar/tickfont/_family.py plotly/validators/scatter3d/line/colorbar/tickfont/_size.py plotly/validators/scatter3d/line/colorbar/tickformatstop/__init__.py plotly/validators/scatter3d/line/colorbar/tickformatstop/_dtickrange.py plotly/validators/scatter3d/line/colorbar/tickformatstop/_enabled.py plotly/validators/scatter3d/line/colorbar/tickformatstop/_name.py plotly/validators/scatter3d/line/colorbar/tickformatstop/_templateitemname.py plotly/validators/scatter3d/line/colorbar/tickformatstop/_value.py plotly/validators/scatter3d/line/colorbar/title/__init__.py plotly/validators/scatter3d/line/colorbar/title/_font.py plotly/validators/scatter3d/line/colorbar/title/_side.py plotly/validators/scatter3d/line/colorbar/title/_text.py plotly/validators/scatter3d/line/colorbar/title/font/__init__.py plotly/validators/scatter3d/line/colorbar/title/font/_color.py plotly/validators/scatter3d/line/colorbar/title/font/_family.py plotly/validators/scatter3d/line/colorbar/title/font/_size.py plotly/validators/scatter3d/marker/__init__.py plotly/validators/scatter3d/marker/_autocolorscale.py plotly/validators/scatter3d/marker/_cauto.py plotly/validators/scatter3d/marker/_cmax.py plotly/validators/scatter3d/marker/_cmid.py plotly/validators/scatter3d/marker/_cmin.py plotly/validators/scatter3d/marker/_color.py plotly/validators/scatter3d/marker/_coloraxis.py plotly/validators/scatter3d/marker/_colorbar.py plotly/validators/scatter3d/marker/_colorscale.py plotly/validators/scatter3d/marker/_colorsrc.py plotly/validators/scatter3d/marker/_line.py plotly/validators/scatter3d/marker/_opacity.py plotly/validators/scatter3d/marker/_reversescale.py plotly/validators/scatter3d/marker/_showscale.py plotly/validators/scatter3d/marker/_size.py plotly/validators/scatter3d/marker/_sizemin.py plotly/validators/scatter3d/marker/_sizemode.py plotly/validators/scatter3d/marker/_sizeref.py plotly/validators/scatter3d/marker/_sizesrc.py plotly/validators/scatter3d/marker/_symbol.py plotly/validators/scatter3d/marker/_symbolsrc.py plotly/validators/scatter3d/marker/colorbar/__init__.py plotly/validators/scatter3d/marker/colorbar/_bgcolor.py plotly/validators/scatter3d/marker/colorbar/_bordercolor.py plotly/validators/scatter3d/marker/colorbar/_borderwidth.py plotly/validators/scatter3d/marker/colorbar/_dtick.py plotly/validators/scatter3d/marker/colorbar/_exponentformat.py plotly/validators/scatter3d/marker/colorbar/_labelalias.py plotly/validators/scatter3d/marker/colorbar/_len.py plotly/validators/scatter3d/marker/colorbar/_lenmode.py plotly/validators/scatter3d/marker/colorbar/_minexponent.py plotly/validators/scatter3d/marker/colorbar/_nticks.py plotly/validators/scatter3d/marker/colorbar/_orientation.py plotly/validators/scatter3d/marker/colorbar/_outlinecolor.py plotly/validators/scatter3d/marker/colorbar/_outlinewidth.py plotly/validators/scatter3d/marker/colorbar/_separatethousands.py plotly/validators/scatter3d/marker/colorbar/_showexponent.py plotly/validators/scatter3d/marker/colorbar/_showticklabels.py plotly/validators/scatter3d/marker/colorbar/_showtickprefix.py plotly/validators/scatter3d/marker/colorbar/_showticksuffix.py plotly/validators/scatter3d/marker/colorbar/_thickness.py plotly/validators/scatter3d/marker/colorbar/_thicknessmode.py plotly/validators/scatter3d/marker/colorbar/_tick0.py plotly/validators/scatter3d/marker/colorbar/_tickangle.py plotly/validators/scatter3d/marker/colorbar/_tickcolor.py plotly/validators/scatter3d/marker/colorbar/_tickfont.py plotly/validators/scatter3d/marker/colorbar/_tickformat.py plotly/validators/scatter3d/marker/colorbar/_tickformatstopdefaults.py plotly/validators/scatter3d/marker/colorbar/_tickformatstops.py plotly/validators/scatter3d/marker/colorbar/_ticklabeloverflow.py plotly/validators/scatter3d/marker/colorbar/_ticklabelposition.py plotly/validators/scatter3d/marker/colorbar/_ticklabelstep.py plotly/validators/scatter3d/marker/colorbar/_ticklen.py plotly/validators/scatter3d/marker/colorbar/_tickmode.py plotly/validators/scatter3d/marker/colorbar/_tickprefix.py plotly/validators/scatter3d/marker/colorbar/_ticks.py plotly/validators/scatter3d/marker/colorbar/_ticksuffix.py plotly/validators/scatter3d/marker/colorbar/_ticktext.py plotly/validators/scatter3d/marker/colorbar/_ticktextsrc.py plotly/validators/scatter3d/marker/colorbar/_tickvals.py plotly/validators/scatter3d/marker/colorbar/_tickvalssrc.py plotly/validators/scatter3d/marker/colorbar/_tickwidth.py plotly/validators/scatter3d/marker/colorbar/_title.py plotly/validators/scatter3d/marker/colorbar/_x.py plotly/validators/scatter3d/marker/colorbar/_xanchor.py plotly/validators/scatter3d/marker/colorbar/_xpad.py plotly/validators/scatter3d/marker/colorbar/_xref.py plotly/validators/scatter3d/marker/colorbar/_y.py plotly/validators/scatter3d/marker/colorbar/_yanchor.py plotly/validators/scatter3d/marker/colorbar/_ypad.py plotly/validators/scatter3d/marker/colorbar/_yref.py plotly/validators/scatter3d/marker/colorbar/tickfont/__init__.py plotly/validators/scatter3d/marker/colorbar/tickfont/_color.py plotly/validators/scatter3d/marker/colorbar/tickfont/_family.py plotly/validators/scatter3d/marker/colorbar/tickfont/_size.py plotly/validators/scatter3d/marker/colorbar/tickformatstop/__init__.py plotly/validators/scatter3d/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/scatter3d/marker/colorbar/tickformatstop/_enabled.py plotly/validators/scatter3d/marker/colorbar/tickformatstop/_name.py plotly/validators/scatter3d/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/scatter3d/marker/colorbar/tickformatstop/_value.py plotly/validators/scatter3d/marker/colorbar/title/__init__.py plotly/validators/scatter3d/marker/colorbar/title/_font.py plotly/validators/scatter3d/marker/colorbar/title/_side.py plotly/validators/scatter3d/marker/colorbar/title/_text.py plotly/validators/scatter3d/marker/colorbar/title/font/__init__.py plotly/validators/scatter3d/marker/colorbar/title/font/_color.py plotly/validators/scatter3d/marker/colorbar/title/font/_family.py plotly/validators/scatter3d/marker/colorbar/title/font/_size.py plotly/validators/scatter3d/marker/line/__init__.py plotly/validators/scatter3d/marker/line/_autocolorscale.py plotly/validators/scatter3d/marker/line/_cauto.py plotly/validators/scatter3d/marker/line/_cmax.py plotly/validators/scatter3d/marker/line/_cmid.py plotly/validators/scatter3d/marker/line/_cmin.py plotly/validators/scatter3d/marker/line/_color.py plotly/validators/scatter3d/marker/line/_coloraxis.py plotly/validators/scatter3d/marker/line/_colorscale.py plotly/validators/scatter3d/marker/line/_colorsrc.py plotly/validators/scatter3d/marker/line/_reversescale.py plotly/validators/scatter3d/marker/line/_width.py plotly/validators/scatter3d/projection/__init__.py plotly/validators/scatter3d/projection/_x.py plotly/validators/scatter3d/projection/_y.py plotly/validators/scatter3d/projection/_z.py plotly/validators/scatter3d/projection/x/__init__.py plotly/validators/scatter3d/projection/x/_opacity.py plotly/validators/scatter3d/projection/x/_scale.py plotly/validators/scatter3d/projection/x/_show.py plotly/validators/scatter3d/projection/y/__init__.py plotly/validators/scatter3d/projection/y/_opacity.py plotly/validators/scatter3d/projection/y/_scale.py plotly/validators/scatter3d/projection/y/_show.py plotly/validators/scatter3d/projection/z/__init__.py plotly/validators/scatter3d/projection/z/_opacity.py plotly/validators/scatter3d/projection/z/_scale.py plotly/validators/scatter3d/projection/z/_show.py plotly/validators/scatter3d/stream/__init__.py plotly/validators/scatter3d/stream/_maxpoints.py plotly/validators/scatter3d/stream/_token.py plotly/validators/scatter3d/textfont/__init__.py plotly/validators/scatter3d/textfont/_color.py plotly/validators/scatter3d/textfont/_colorsrc.py plotly/validators/scatter3d/textfont/_family.py plotly/validators/scatter3d/textfont/_size.py plotly/validators/scatter3d/textfont/_sizesrc.py plotly/validators/scattercarpet/__init__.py plotly/validators/scattercarpet/_a.py plotly/validators/scattercarpet/_asrc.py plotly/validators/scattercarpet/_b.py plotly/validators/scattercarpet/_bsrc.py plotly/validators/scattercarpet/_carpet.py plotly/validators/scattercarpet/_connectgaps.py plotly/validators/scattercarpet/_customdata.py plotly/validators/scattercarpet/_customdatasrc.py plotly/validators/scattercarpet/_fill.py plotly/validators/scattercarpet/_fillcolor.py plotly/validators/scattercarpet/_hoverinfo.py plotly/validators/scattercarpet/_hoverinfosrc.py plotly/validators/scattercarpet/_hoverlabel.py plotly/validators/scattercarpet/_hoveron.py plotly/validators/scattercarpet/_hovertemplate.py plotly/validators/scattercarpet/_hovertemplatesrc.py plotly/validators/scattercarpet/_hovertext.py plotly/validators/scattercarpet/_hovertextsrc.py plotly/validators/scattercarpet/_ids.py plotly/validators/scattercarpet/_idssrc.py plotly/validators/scattercarpet/_legend.py plotly/validators/scattercarpet/_legendgroup.py plotly/validators/scattercarpet/_legendgrouptitle.py plotly/validators/scattercarpet/_legendrank.py plotly/validators/scattercarpet/_legendwidth.py plotly/validators/scattercarpet/_line.py plotly/validators/scattercarpet/_marker.py plotly/validators/scattercarpet/_meta.py plotly/validators/scattercarpet/_metasrc.py plotly/validators/scattercarpet/_mode.py plotly/validators/scattercarpet/_name.py plotly/validators/scattercarpet/_opacity.py plotly/validators/scattercarpet/_selected.py plotly/validators/scattercarpet/_selectedpoints.py plotly/validators/scattercarpet/_showlegend.py plotly/validators/scattercarpet/_stream.py plotly/validators/scattercarpet/_text.py plotly/validators/scattercarpet/_textfont.py plotly/validators/scattercarpet/_textposition.py plotly/validators/scattercarpet/_textpositionsrc.py plotly/validators/scattercarpet/_textsrc.py plotly/validators/scattercarpet/_texttemplate.py plotly/validators/scattercarpet/_texttemplatesrc.py plotly/validators/scattercarpet/_uid.py plotly/validators/scattercarpet/_uirevision.py plotly/validators/scattercarpet/_unselected.py plotly/validators/scattercarpet/_visible.py plotly/validators/scattercarpet/_xaxis.py plotly/validators/scattercarpet/_yaxis.py plotly/validators/scattercarpet/hoverlabel/__init__.py plotly/validators/scattercarpet/hoverlabel/_align.py plotly/validators/scattercarpet/hoverlabel/_alignsrc.py plotly/validators/scattercarpet/hoverlabel/_bgcolor.py plotly/validators/scattercarpet/hoverlabel/_bgcolorsrc.py plotly/validators/scattercarpet/hoverlabel/_bordercolor.py plotly/validators/scattercarpet/hoverlabel/_bordercolorsrc.py plotly/validators/scattercarpet/hoverlabel/_font.py plotly/validators/scattercarpet/hoverlabel/_namelength.py plotly/validators/scattercarpet/hoverlabel/_namelengthsrc.py plotly/validators/scattercarpet/hoverlabel/font/__init__.py plotly/validators/scattercarpet/hoverlabel/font/_color.py plotly/validators/scattercarpet/hoverlabel/font/_colorsrc.py plotly/validators/scattercarpet/hoverlabel/font/_family.py plotly/validators/scattercarpet/hoverlabel/font/_familysrc.py plotly/validators/scattercarpet/hoverlabel/font/_size.py plotly/validators/scattercarpet/hoverlabel/font/_sizesrc.py plotly/validators/scattercarpet/legendgrouptitle/__init__.py plotly/validators/scattercarpet/legendgrouptitle/_font.py plotly/validators/scattercarpet/legendgrouptitle/_text.py plotly/validators/scattercarpet/legendgrouptitle/font/__init__.py plotly/validators/scattercarpet/legendgrouptitle/font/_color.py plotly/validators/scattercarpet/legendgrouptitle/font/_family.py plotly/validators/scattercarpet/legendgrouptitle/font/_size.py plotly/validators/scattercarpet/line/__init__.py plotly/validators/scattercarpet/line/_backoff.py plotly/validators/scattercarpet/line/_backoffsrc.py plotly/validators/scattercarpet/line/_color.py plotly/validators/scattercarpet/line/_dash.py plotly/validators/scattercarpet/line/_shape.py plotly/validators/scattercarpet/line/_smoothing.py plotly/validators/scattercarpet/line/_width.py plotly/validators/scattercarpet/marker/__init__.py plotly/validators/scattercarpet/marker/_angle.py plotly/validators/scattercarpet/marker/_angleref.py plotly/validators/scattercarpet/marker/_anglesrc.py plotly/validators/scattercarpet/marker/_autocolorscale.py plotly/validators/scattercarpet/marker/_cauto.py plotly/validators/scattercarpet/marker/_cmax.py plotly/validators/scattercarpet/marker/_cmid.py plotly/validators/scattercarpet/marker/_cmin.py plotly/validators/scattercarpet/marker/_color.py plotly/validators/scattercarpet/marker/_coloraxis.py plotly/validators/scattercarpet/marker/_colorbar.py plotly/validators/scattercarpet/marker/_colorscale.py plotly/validators/scattercarpet/marker/_colorsrc.py plotly/validators/scattercarpet/marker/_gradient.py plotly/validators/scattercarpet/marker/_line.py plotly/validators/scattercarpet/marker/_maxdisplayed.py plotly/validators/scattercarpet/marker/_opacity.py plotly/validators/scattercarpet/marker/_opacitysrc.py plotly/validators/scattercarpet/marker/_reversescale.py plotly/validators/scattercarpet/marker/_showscale.py plotly/validators/scattercarpet/marker/_size.py plotly/validators/scattercarpet/marker/_sizemin.py plotly/validators/scattercarpet/marker/_sizemode.py plotly/validators/scattercarpet/marker/_sizeref.py plotly/validators/scattercarpet/marker/_sizesrc.py plotly/validators/scattercarpet/marker/_standoff.py plotly/validators/scattercarpet/marker/_standoffsrc.py plotly/validators/scattercarpet/marker/_symbol.py plotly/validators/scattercarpet/marker/_symbolsrc.py plotly/validators/scattercarpet/marker/colorbar/__init__.py plotly/validators/scattercarpet/marker/colorbar/_bgcolor.py plotly/validators/scattercarpet/marker/colorbar/_bordercolor.py plotly/validators/scattercarpet/marker/colorbar/_borderwidth.py plotly/validators/scattercarpet/marker/colorbar/_dtick.py plotly/validators/scattercarpet/marker/colorbar/_exponentformat.py plotly/validators/scattercarpet/marker/colorbar/_labelalias.py plotly/validators/scattercarpet/marker/colorbar/_len.py plotly/validators/scattercarpet/marker/colorbar/_lenmode.py plotly/validators/scattercarpet/marker/colorbar/_minexponent.py plotly/validators/scattercarpet/marker/colorbar/_nticks.py plotly/validators/scattercarpet/marker/colorbar/_orientation.py plotly/validators/scattercarpet/marker/colorbar/_outlinecolor.py plotly/validators/scattercarpet/marker/colorbar/_outlinewidth.py plotly/validators/scattercarpet/marker/colorbar/_separatethousands.py plotly/validators/scattercarpet/marker/colorbar/_showexponent.py plotly/validators/scattercarpet/marker/colorbar/_showticklabels.py plotly/validators/scattercarpet/marker/colorbar/_showtickprefix.py plotly/validators/scattercarpet/marker/colorbar/_showticksuffix.py plotly/validators/scattercarpet/marker/colorbar/_thickness.py plotly/validators/scattercarpet/marker/colorbar/_thicknessmode.py plotly/validators/scattercarpet/marker/colorbar/_tick0.py plotly/validators/scattercarpet/marker/colorbar/_tickangle.py plotly/validators/scattercarpet/marker/colorbar/_tickcolor.py plotly/validators/scattercarpet/marker/colorbar/_tickfont.py plotly/validators/scattercarpet/marker/colorbar/_tickformat.py plotly/validators/scattercarpet/marker/colorbar/_tickformatstopdefaults.py plotly/validators/scattercarpet/marker/colorbar/_tickformatstops.py plotly/validators/scattercarpet/marker/colorbar/_ticklabeloverflow.py plotly/validators/scattercarpet/marker/colorbar/_ticklabelposition.py plotly/validators/scattercarpet/marker/colorbar/_ticklabelstep.py plotly/validators/scattercarpet/marker/colorbar/_ticklen.py plotly/validators/scattercarpet/marker/colorbar/_tickmode.py plotly/validators/scattercarpet/marker/colorbar/_tickprefix.py plotly/validators/scattercarpet/marker/colorbar/_ticks.py plotly/validators/scattercarpet/marker/colorbar/_ticksuffix.py plotly/validators/scattercarpet/marker/colorbar/_ticktext.py plotly/validators/scattercarpet/marker/colorbar/_ticktextsrc.py plotly/validators/scattercarpet/marker/colorbar/_tickvals.py plotly/validators/scattercarpet/marker/colorbar/_tickvalssrc.py plotly/validators/scattercarpet/marker/colorbar/_tickwidth.py plotly/validators/scattercarpet/marker/colorbar/_title.py plotly/validators/scattercarpet/marker/colorbar/_x.py plotly/validators/scattercarpet/marker/colorbar/_xanchor.py plotly/validators/scattercarpet/marker/colorbar/_xpad.py plotly/validators/scattercarpet/marker/colorbar/_xref.py plotly/validators/scattercarpet/marker/colorbar/_y.py plotly/validators/scattercarpet/marker/colorbar/_yanchor.py plotly/validators/scattercarpet/marker/colorbar/_ypad.py plotly/validators/scattercarpet/marker/colorbar/_yref.py plotly/validators/scattercarpet/marker/colorbar/tickfont/__init__.py plotly/validators/scattercarpet/marker/colorbar/tickfont/_color.py plotly/validators/scattercarpet/marker/colorbar/tickfont/_family.py plotly/validators/scattercarpet/marker/colorbar/tickfont/_size.py plotly/validators/scattercarpet/marker/colorbar/tickformatstop/__init__.py plotly/validators/scattercarpet/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/scattercarpet/marker/colorbar/tickformatstop/_enabled.py plotly/validators/scattercarpet/marker/colorbar/tickformatstop/_name.py plotly/validators/scattercarpet/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/scattercarpet/marker/colorbar/tickformatstop/_value.py plotly/validators/scattercarpet/marker/colorbar/title/__init__.py plotly/validators/scattercarpet/marker/colorbar/title/_font.py plotly/validators/scattercarpet/marker/colorbar/title/_side.py plotly/validators/scattercarpet/marker/colorbar/title/_text.py plotly/validators/scattercarpet/marker/colorbar/title/font/__init__.py plotly/validators/scattercarpet/marker/colorbar/title/font/_color.py plotly/validators/scattercarpet/marker/colorbar/title/font/_family.py plotly/validators/scattercarpet/marker/colorbar/title/font/_size.py plotly/validators/scattercarpet/marker/gradient/__init__.py plotly/validators/scattercarpet/marker/gradient/_color.py plotly/validators/scattercarpet/marker/gradient/_colorsrc.py plotly/validators/scattercarpet/marker/gradient/_type.py plotly/validators/scattercarpet/marker/gradient/_typesrc.py plotly/validators/scattercarpet/marker/line/__init__.py plotly/validators/scattercarpet/marker/line/_autocolorscale.py plotly/validators/scattercarpet/marker/line/_cauto.py plotly/validators/scattercarpet/marker/line/_cmax.py plotly/validators/scattercarpet/marker/line/_cmid.py plotly/validators/scattercarpet/marker/line/_cmin.py plotly/validators/scattercarpet/marker/line/_color.py plotly/validators/scattercarpet/marker/line/_coloraxis.py plotly/validators/scattercarpet/marker/line/_colorscale.py plotly/validators/scattercarpet/marker/line/_colorsrc.py plotly/validators/scattercarpet/marker/line/_reversescale.py plotly/validators/scattercarpet/marker/line/_width.py plotly/validators/scattercarpet/marker/line/_widthsrc.py plotly/validators/scattercarpet/selected/__init__.py plotly/validators/scattercarpet/selected/_marker.py plotly/validators/scattercarpet/selected/_textfont.py plotly/validators/scattercarpet/selected/marker/__init__.py plotly/validators/scattercarpet/selected/marker/_color.py plotly/validators/scattercarpet/selected/marker/_opacity.py plotly/validators/scattercarpet/selected/marker/_size.py plotly/validators/scattercarpet/selected/textfont/__init__.py plotly/validators/scattercarpet/selected/textfont/_color.py plotly/validators/scattercarpet/stream/__init__.py plotly/validators/scattercarpet/stream/_maxpoints.py plotly/validators/scattercarpet/stream/_token.py plotly/validators/scattercarpet/textfont/__init__.py plotly/validators/scattercarpet/textfont/_color.py plotly/validators/scattercarpet/textfont/_colorsrc.py plotly/validators/scattercarpet/textfont/_family.py plotly/validators/scattercarpet/textfont/_familysrc.py plotly/validators/scattercarpet/textfont/_size.py plotly/validators/scattercarpet/textfont/_sizesrc.py plotly/validators/scattercarpet/unselected/__init__.py plotly/validators/scattercarpet/unselected/_marker.py plotly/validators/scattercarpet/unselected/_textfont.py plotly/validators/scattercarpet/unselected/marker/__init__.py plotly/validators/scattercarpet/unselected/marker/_color.py plotly/validators/scattercarpet/unselected/marker/_opacity.py plotly/validators/scattercarpet/unselected/marker/_size.py plotly/validators/scattercarpet/unselected/textfont/__init__.py plotly/validators/scattercarpet/unselected/textfont/_color.py plotly/validators/scattergeo/__init__.py plotly/validators/scattergeo/_connectgaps.py plotly/validators/scattergeo/_customdata.py plotly/validators/scattergeo/_customdatasrc.py plotly/validators/scattergeo/_featureidkey.py plotly/validators/scattergeo/_fill.py plotly/validators/scattergeo/_fillcolor.py plotly/validators/scattergeo/_geo.py plotly/validators/scattergeo/_geojson.py plotly/validators/scattergeo/_hoverinfo.py plotly/validators/scattergeo/_hoverinfosrc.py plotly/validators/scattergeo/_hoverlabel.py plotly/validators/scattergeo/_hovertemplate.py plotly/validators/scattergeo/_hovertemplatesrc.py plotly/validators/scattergeo/_hovertext.py plotly/validators/scattergeo/_hovertextsrc.py plotly/validators/scattergeo/_ids.py plotly/validators/scattergeo/_idssrc.py plotly/validators/scattergeo/_lat.py plotly/validators/scattergeo/_latsrc.py plotly/validators/scattergeo/_legend.py plotly/validators/scattergeo/_legendgroup.py plotly/validators/scattergeo/_legendgrouptitle.py plotly/validators/scattergeo/_legendrank.py plotly/validators/scattergeo/_legendwidth.py plotly/validators/scattergeo/_line.py plotly/validators/scattergeo/_locationmode.py plotly/validators/scattergeo/_locations.py plotly/validators/scattergeo/_locationssrc.py plotly/validators/scattergeo/_lon.py plotly/validators/scattergeo/_lonsrc.py plotly/validators/scattergeo/_marker.py plotly/validators/scattergeo/_meta.py plotly/validators/scattergeo/_metasrc.py plotly/validators/scattergeo/_mode.py plotly/validators/scattergeo/_name.py plotly/validators/scattergeo/_opacity.py plotly/validators/scattergeo/_selected.py plotly/validators/scattergeo/_selectedpoints.py plotly/validators/scattergeo/_showlegend.py plotly/validators/scattergeo/_stream.py plotly/validators/scattergeo/_text.py plotly/validators/scattergeo/_textfont.py plotly/validators/scattergeo/_textposition.py plotly/validators/scattergeo/_textpositionsrc.py plotly/validators/scattergeo/_textsrc.py plotly/validators/scattergeo/_texttemplate.py plotly/validators/scattergeo/_texttemplatesrc.py plotly/validators/scattergeo/_uid.py plotly/validators/scattergeo/_uirevision.py plotly/validators/scattergeo/_unselected.py plotly/validators/scattergeo/_visible.py plotly/validators/scattergeo/hoverlabel/__init__.py plotly/validators/scattergeo/hoverlabel/_align.py plotly/validators/scattergeo/hoverlabel/_alignsrc.py plotly/validators/scattergeo/hoverlabel/_bgcolor.py plotly/validators/scattergeo/hoverlabel/_bgcolorsrc.py plotly/validators/scattergeo/hoverlabel/_bordercolor.py plotly/validators/scattergeo/hoverlabel/_bordercolorsrc.py plotly/validators/scattergeo/hoverlabel/_font.py plotly/validators/scattergeo/hoverlabel/_namelength.py plotly/validators/scattergeo/hoverlabel/_namelengthsrc.py plotly/validators/scattergeo/hoverlabel/font/__init__.py plotly/validators/scattergeo/hoverlabel/font/_color.py plotly/validators/scattergeo/hoverlabel/font/_colorsrc.py plotly/validators/scattergeo/hoverlabel/font/_family.py plotly/validators/scattergeo/hoverlabel/font/_familysrc.py plotly/validators/scattergeo/hoverlabel/font/_size.py plotly/validators/scattergeo/hoverlabel/font/_sizesrc.py plotly/validators/scattergeo/legendgrouptitle/__init__.py plotly/validators/scattergeo/legendgrouptitle/_font.py plotly/validators/scattergeo/legendgrouptitle/_text.py plotly/validators/scattergeo/legendgrouptitle/font/__init__.py plotly/validators/scattergeo/legendgrouptitle/font/_color.py plotly/validators/scattergeo/legendgrouptitle/font/_family.py plotly/validators/scattergeo/legendgrouptitle/font/_size.py plotly/validators/scattergeo/line/__init__.py plotly/validators/scattergeo/line/_color.py plotly/validators/scattergeo/line/_dash.py plotly/validators/scattergeo/line/_width.py plotly/validators/scattergeo/marker/__init__.py plotly/validators/scattergeo/marker/_angle.py plotly/validators/scattergeo/marker/_angleref.py plotly/validators/scattergeo/marker/_anglesrc.py plotly/validators/scattergeo/marker/_autocolorscale.py plotly/validators/scattergeo/marker/_cauto.py plotly/validators/scattergeo/marker/_cmax.py plotly/validators/scattergeo/marker/_cmid.py plotly/validators/scattergeo/marker/_cmin.py plotly/validators/scattergeo/marker/_color.py plotly/validators/scattergeo/marker/_coloraxis.py plotly/validators/scattergeo/marker/_colorbar.py plotly/validators/scattergeo/marker/_colorscale.py plotly/validators/scattergeo/marker/_colorsrc.py plotly/validators/scattergeo/marker/_gradient.py plotly/validators/scattergeo/marker/_line.py plotly/validators/scattergeo/marker/_opacity.py plotly/validators/scattergeo/marker/_opacitysrc.py plotly/validators/scattergeo/marker/_reversescale.py plotly/validators/scattergeo/marker/_showscale.py plotly/validators/scattergeo/marker/_size.py plotly/validators/scattergeo/marker/_sizemin.py plotly/validators/scattergeo/marker/_sizemode.py plotly/validators/scattergeo/marker/_sizeref.py plotly/validators/scattergeo/marker/_sizesrc.py plotly/validators/scattergeo/marker/_standoff.py plotly/validators/scattergeo/marker/_standoffsrc.py plotly/validators/scattergeo/marker/_symbol.py plotly/validators/scattergeo/marker/_symbolsrc.py plotly/validators/scattergeo/marker/colorbar/__init__.py plotly/validators/scattergeo/marker/colorbar/_bgcolor.py plotly/validators/scattergeo/marker/colorbar/_bordercolor.py plotly/validators/scattergeo/marker/colorbar/_borderwidth.py plotly/validators/scattergeo/marker/colorbar/_dtick.py plotly/validators/scattergeo/marker/colorbar/_exponentformat.py plotly/validators/scattergeo/marker/colorbar/_labelalias.py plotly/validators/scattergeo/marker/colorbar/_len.py plotly/validators/scattergeo/marker/colorbar/_lenmode.py plotly/validators/scattergeo/marker/colorbar/_minexponent.py plotly/validators/scattergeo/marker/colorbar/_nticks.py plotly/validators/scattergeo/marker/colorbar/_orientation.py plotly/validators/scattergeo/marker/colorbar/_outlinecolor.py plotly/validators/scattergeo/marker/colorbar/_outlinewidth.py plotly/validators/scattergeo/marker/colorbar/_separatethousands.py plotly/validators/scattergeo/marker/colorbar/_showexponent.py plotly/validators/scattergeo/marker/colorbar/_showticklabels.py plotly/validators/scattergeo/marker/colorbar/_showtickprefix.py plotly/validators/scattergeo/marker/colorbar/_showticksuffix.py plotly/validators/scattergeo/marker/colorbar/_thickness.py plotly/validators/scattergeo/marker/colorbar/_thicknessmode.py plotly/validators/scattergeo/marker/colorbar/_tick0.py plotly/validators/scattergeo/marker/colorbar/_tickangle.py plotly/validators/scattergeo/marker/colorbar/_tickcolor.py plotly/validators/scattergeo/marker/colorbar/_tickfont.py plotly/validators/scattergeo/marker/colorbar/_tickformat.py plotly/validators/scattergeo/marker/colorbar/_tickformatstopdefaults.py plotly/validators/scattergeo/marker/colorbar/_tickformatstops.py plotly/validators/scattergeo/marker/colorbar/_ticklabeloverflow.py plotly/validators/scattergeo/marker/colorbar/_ticklabelposition.py plotly/validators/scattergeo/marker/colorbar/_ticklabelstep.py plotly/validators/scattergeo/marker/colorbar/_ticklen.py plotly/validators/scattergeo/marker/colorbar/_tickmode.py plotly/validators/scattergeo/marker/colorbar/_tickprefix.py plotly/validators/scattergeo/marker/colorbar/_ticks.py plotly/validators/scattergeo/marker/colorbar/_ticksuffix.py plotly/validators/scattergeo/marker/colorbar/_ticktext.py plotly/validators/scattergeo/marker/colorbar/_ticktextsrc.py plotly/validators/scattergeo/marker/colorbar/_tickvals.py plotly/validators/scattergeo/marker/colorbar/_tickvalssrc.py plotly/validators/scattergeo/marker/colorbar/_tickwidth.py plotly/validators/scattergeo/marker/colorbar/_title.py plotly/validators/scattergeo/marker/colorbar/_x.py plotly/validators/scattergeo/marker/colorbar/_xanchor.py plotly/validators/scattergeo/marker/colorbar/_xpad.py plotly/validators/scattergeo/marker/colorbar/_xref.py plotly/validators/scattergeo/marker/colorbar/_y.py plotly/validators/scattergeo/marker/colorbar/_yanchor.py plotly/validators/scattergeo/marker/colorbar/_ypad.py plotly/validators/scattergeo/marker/colorbar/_yref.py plotly/validators/scattergeo/marker/colorbar/tickfont/__init__.py plotly/validators/scattergeo/marker/colorbar/tickfont/_color.py plotly/validators/scattergeo/marker/colorbar/tickfont/_family.py plotly/validators/scattergeo/marker/colorbar/tickfont/_size.py plotly/validators/scattergeo/marker/colorbar/tickformatstop/__init__.py plotly/validators/scattergeo/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/scattergeo/marker/colorbar/tickformatstop/_enabled.py plotly/validators/scattergeo/marker/colorbar/tickformatstop/_name.py plotly/validators/scattergeo/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/scattergeo/marker/colorbar/tickformatstop/_value.py plotly/validators/scattergeo/marker/colorbar/title/__init__.py plotly/validators/scattergeo/marker/colorbar/title/_font.py plotly/validators/scattergeo/marker/colorbar/title/_side.py plotly/validators/scattergeo/marker/colorbar/title/_text.py plotly/validators/scattergeo/marker/colorbar/title/font/__init__.py plotly/validators/scattergeo/marker/colorbar/title/font/_color.py plotly/validators/scattergeo/marker/colorbar/title/font/_family.py plotly/validators/scattergeo/marker/colorbar/title/font/_size.py plotly/validators/scattergeo/marker/gradient/__init__.py plotly/validators/scattergeo/marker/gradient/_color.py plotly/validators/scattergeo/marker/gradient/_colorsrc.py plotly/validators/scattergeo/marker/gradient/_type.py plotly/validators/scattergeo/marker/gradient/_typesrc.py plotly/validators/scattergeo/marker/line/__init__.py plotly/validators/scattergeo/marker/line/_autocolorscale.py plotly/validators/scattergeo/marker/line/_cauto.py plotly/validators/scattergeo/marker/line/_cmax.py plotly/validators/scattergeo/marker/line/_cmid.py plotly/validators/scattergeo/marker/line/_cmin.py plotly/validators/scattergeo/marker/line/_color.py plotly/validators/scattergeo/marker/line/_coloraxis.py plotly/validators/scattergeo/marker/line/_colorscale.py plotly/validators/scattergeo/marker/line/_colorsrc.py plotly/validators/scattergeo/marker/line/_reversescale.py plotly/validators/scattergeo/marker/line/_width.py plotly/validators/scattergeo/marker/line/_widthsrc.py plotly/validators/scattergeo/selected/__init__.py plotly/validators/scattergeo/selected/_marker.py plotly/validators/scattergeo/selected/_textfont.py plotly/validators/scattergeo/selected/marker/__init__.py plotly/validators/scattergeo/selected/marker/_color.py plotly/validators/scattergeo/selected/marker/_opacity.py plotly/validators/scattergeo/selected/marker/_size.py plotly/validators/scattergeo/selected/textfont/__init__.py plotly/validators/scattergeo/selected/textfont/_color.py plotly/validators/scattergeo/stream/__init__.py plotly/validators/scattergeo/stream/_maxpoints.py plotly/validators/scattergeo/stream/_token.py plotly/validators/scattergeo/textfont/__init__.py plotly/validators/scattergeo/textfont/_color.py plotly/validators/scattergeo/textfont/_colorsrc.py plotly/validators/scattergeo/textfont/_family.py plotly/validators/scattergeo/textfont/_familysrc.py plotly/validators/scattergeo/textfont/_size.py plotly/validators/scattergeo/textfont/_sizesrc.py plotly/validators/scattergeo/unselected/__init__.py plotly/validators/scattergeo/unselected/_marker.py plotly/validators/scattergeo/unselected/_textfont.py plotly/validators/scattergeo/unselected/marker/__init__.py plotly/validators/scattergeo/unselected/marker/_color.py plotly/validators/scattergeo/unselected/marker/_opacity.py plotly/validators/scattergeo/unselected/marker/_size.py plotly/validators/scattergeo/unselected/textfont/__init__.py plotly/validators/scattergeo/unselected/textfont/_color.py plotly/validators/scattergl/__init__.py plotly/validators/scattergl/_connectgaps.py plotly/validators/scattergl/_customdata.py plotly/validators/scattergl/_customdatasrc.py plotly/validators/scattergl/_dx.py plotly/validators/scattergl/_dy.py plotly/validators/scattergl/_error_x.py plotly/validators/scattergl/_error_y.py plotly/validators/scattergl/_fill.py plotly/validators/scattergl/_fillcolor.py plotly/validators/scattergl/_hoverinfo.py plotly/validators/scattergl/_hoverinfosrc.py plotly/validators/scattergl/_hoverlabel.py plotly/validators/scattergl/_hovertemplate.py plotly/validators/scattergl/_hovertemplatesrc.py plotly/validators/scattergl/_hovertext.py plotly/validators/scattergl/_hovertextsrc.py plotly/validators/scattergl/_ids.py plotly/validators/scattergl/_idssrc.py plotly/validators/scattergl/_legend.py plotly/validators/scattergl/_legendgroup.py plotly/validators/scattergl/_legendgrouptitle.py plotly/validators/scattergl/_legendrank.py plotly/validators/scattergl/_legendwidth.py plotly/validators/scattergl/_line.py plotly/validators/scattergl/_marker.py plotly/validators/scattergl/_meta.py plotly/validators/scattergl/_metasrc.py plotly/validators/scattergl/_mode.py plotly/validators/scattergl/_name.py plotly/validators/scattergl/_opacity.py plotly/validators/scattergl/_selected.py plotly/validators/scattergl/_selectedpoints.py plotly/validators/scattergl/_showlegend.py plotly/validators/scattergl/_stream.py plotly/validators/scattergl/_text.py plotly/validators/scattergl/_textfont.py plotly/validators/scattergl/_textposition.py plotly/validators/scattergl/_textpositionsrc.py plotly/validators/scattergl/_textsrc.py plotly/validators/scattergl/_texttemplate.py plotly/validators/scattergl/_texttemplatesrc.py plotly/validators/scattergl/_uid.py plotly/validators/scattergl/_uirevision.py plotly/validators/scattergl/_unselected.py plotly/validators/scattergl/_visible.py plotly/validators/scattergl/_x.py plotly/validators/scattergl/_x0.py plotly/validators/scattergl/_xaxis.py plotly/validators/scattergl/_xcalendar.py plotly/validators/scattergl/_xhoverformat.py plotly/validators/scattergl/_xperiod.py plotly/validators/scattergl/_xperiod0.py plotly/validators/scattergl/_xperiodalignment.py plotly/validators/scattergl/_xsrc.py plotly/validators/scattergl/_y.py plotly/validators/scattergl/_y0.py plotly/validators/scattergl/_yaxis.py plotly/validators/scattergl/_ycalendar.py plotly/validators/scattergl/_yhoverformat.py plotly/validators/scattergl/_yperiod.py plotly/validators/scattergl/_yperiod0.py plotly/validators/scattergl/_yperiodalignment.py plotly/validators/scattergl/_ysrc.py plotly/validators/scattergl/error_x/__init__.py plotly/validators/scattergl/error_x/_array.py plotly/validators/scattergl/error_x/_arrayminus.py plotly/validators/scattergl/error_x/_arrayminussrc.py plotly/validators/scattergl/error_x/_arraysrc.py plotly/validators/scattergl/error_x/_color.py plotly/validators/scattergl/error_x/_copy_ystyle.py plotly/validators/scattergl/error_x/_symmetric.py plotly/validators/scattergl/error_x/_thickness.py plotly/validators/scattergl/error_x/_traceref.py plotly/validators/scattergl/error_x/_tracerefminus.py plotly/validators/scattergl/error_x/_type.py plotly/validators/scattergl/error_x/_value.py plotly/validators/scattergl/error_x/_valueminus.py plotly/validators/scattergl/error_x/_visible.py plotly/validators/scattergl/error_x/_width.py plotly/validators/scattergl/error_y/__init__.py plotly/validators/scattergl/error_y/_array.py plotly/validators/scattergl/error_y/_arrayminus.py plotly/validators/scattergl/error_y/_arrayminussrc.py plotly/validators/scattergl/error_y/_arraysrc.py plotly/validators/scattergl/error_y/_color.py plotly/validators/scattergl/error_y/_symmetric.py plotly/validators/scattergl/error_y/_thickness.py plotly/validators/scattergl/error_y/_traceref.py plotly/validators/scattergl/error_y/_tracerefminus.py plotly/validators/scattergl/error_y/_type.py plotly/validators/scattergl/error_y/_value.py plotly/validators/scattergl/error_y/_valueminus.py plotly/validators/scattergl/error_y/_visible.py plotly/validators/scattergl/error_y/_width.py plotly/validators/scattergl/hoverlabel/__init__.py plotly/validators/scattergl/hoverlabel/_align.py plotly/validators/scattergl/hoverlabel/_alignsrc.py plotly/validators/scattergl/hoverlabel/_bgcolor.py plotly/validators/scattergl/hoverlabel/_bgcolorsrc.py plotly/validators/scattergl/hoverlabel/_bordercolor.py plotly/validators/scattergl/hoverlabel/_bordercolorsrc.py plotly/validators/scattergl/hoverlabel/_font.py plotly/validators/scattergl/hoverlabel/_namelength.py plotly/validators/scattergl/hoverlabel/_namelengthsrc.py plotly/validators/scattergl/hoverlabel/font/__init__.py plotly/validators/scattergl/hoverlabel/font/_color.py plotly/validators/scattergl/hoverlabel/font/_colorsrc.py plotly/validators/scattergl/hoverlabel/font/_family.py plotly/validators/scattergl/hoverlabel/font/_familysrc.py plotly/validators/scattergl/hoverlabel/font/_size.py plotly/validators/scattergl/hoverlabel/font/_sizesrc.py plotly/validators/scattergl/legendgrouptitle/__init__.py plotly/validators/scattergl/legendgrouptitle/_font.py plotly/validators/scattergl/legendgrouptitle/_text.py plotly/validators/scattergl/legendgrouptitle/font/__init__.py plotly/validators/scattergl/legendgrouptitle/font/_color.py plotly/validators/scattergl/legendgrouptitle/font/_family.py plotly/validators/scattergl/legendgrouptitle/font/_size.py plotly/validators/scattergl/line/__init__.py plotly/validators/scattergl/line/_color.py plotly/validators/scattergl/line/_dash.py plotly/validators/scattergl/line/_shape.py plotly/validators/scattergl/line/_width.py plotly/validators/scattergl/marker/__init__.py plotly/validators/scattergl/marker/_angle.py plotly/validators/scattergl/marker/_anglesrc.py plotly/validators/scattergl/marker/_autocolorscale.py plotly/validators/scattergl/marker/_cauto.py plotly/validators/scattergl/marker/_cmax.py plotly/validators/scattergl/marker/_cmid.py plotly/validators/scattergl/marker/_cmin.py plotly/validators/scattergl/marker/_color.py plotly/validators/scattergl/marker/_coloraxis.py plotly/validators/scattergl/marker/_colorbar.py plotly/validators/scattergl/marker/_colorscale.py plotly/validators/scattergl/marker/_colorsrc.py plotly/validators/scattergl/marker/_line.py plotly/validators/scattergl/marker/_opacity.py plotly/validators/scattergl/marker/_opacitysrc.py plotly/validators/scattergl/marker/_reversescale.py plotly/validators/scattergl/marker/_showscale.py plotly/validators/scattergl/marker/_size.py plotly/validators/scattergl/marker/_sizemin.py plotly/validators/scattergl/marker/_sizemode.py plotly/validators/scattergl/marker/_sizeref.py plotly/validators/scattergl/marker/_sizesrc.py plotly/validators/scattergl/marker/_symbol.py plotly/validators/scattergl/marker/_symbolsrc.py plotly/validators/scattergl/marker/colorbar/__init__.py plotly/validators/scattergl/marker/colorbar/_bgcolor.py plotly/validators/scattergl/marker/colorbar/_bordercolor.py plotly/validators/scattergl/marker/colorbar/_borderwidth.py plotly/validators/scattergl/marker/colorbar/_dtick.py plotly/validators/scattergl/marker/colorbar/_exponentformat.py plotly/validators/scattergl/marker/colorbar/_labelalias.py plotly/validators/scattergl/marker/colorbar/_len.py plotly/validators/scattergl/marker/colorbar/_lenmode.py plotly/validators/scattergl/marker/colorbar/_minexponent.py plotly/validators/scattergl/marker/colorbar/_nticks.py plotly/validators/scattergl/marker/colorbar/_orientation.py plotly/validators/scattergl/marker/colorbar/_outlinecolor.py plotly/validators/scattergl/marker/colorbar/_outlinewidth.py plotly/validators/scattergl/marker/colorbar/_separatethousands.py plotly/validators/scattergl/marker/colorbar/_showexponent.py plotly/validators/scattergl/marker/colorbar/_showticklabels.py plotly/validators/scattergl/marker/colorbar/_showtickprefix.py plotly/validators/scattergl/marker/colorbar/_showticksuffix.py plotly/validators/scattergl/marker/colorbar/_thickness.py plotly/validators/scattergl/marker/colorbar/_thicknessmode.py plotly/validators/scattergl/marker/colorbar/_tick0.py plotly/validators/scattergl/marker/colorbar/_tickangle.py plotly/validators/scattergl/marker/colorbar/_tickcolor.py plotly/validators/scattergl/marker/colorbar/_tickfont.py plotly/validators/scattergl/marker/colorbar/_tickformat.py plotly/validators/scattergl/marker/colorbar/_tickformatstopdefaults.py plotly/validators/scattergl/marker/colorbar/_tickformatstops.py plotly/validators/scattergl/marker/colorbar/_ticklabeloverflow.py plotly/validators/scattergl/marker/colorbar/_ticklabelposition.py plotly/validators/scattergl/marker/colorbar/_ticklabelstep.py plotly/validators/scattergl/marker/colorbar/_ticklen.py plotly/validators/scattergl/marker/colorbar/_tickmode.py plotly/validators/scattergl/marker/colorbar/_tickprefix.py plotly/validators/scattergl/marker/colorbar/_ticks.py plotly/validators/scattergl/marker/colorbar/_ticksuffix.py plotly/validators/scattergl/marker/colorbar/_ticktext.py plotly/validators/scattergl/marker/colorbar/_ticktextsrc.py plotly/validators/scattergl/marker/colorbar/_tickvals.py plotly/validators/scattergl/marker/colorbar/_tickvalssrc.py plotly/validators/scattergl/marker/colorbar/_tickwidth.py plotly/validators/scattergl/marker/colorbar/_title.py plotly/validators/scattergl/marker/colorbar/_x.py plotly/validators/scattergl/marker/colorbar/_xanchor.py plotly/validators/scattergl/marker/colorbar/_xpad.py plotly/validators/scattergl/marker/colorbar/_xref.py plotly/validators/scattergl/marker/colorbar/_y.py plotly/validators/scattergl/marker/colorbar/_yanchor.py plotly/validators/scattergl/marker/colorbar/_ypad.py plotly/validators/scattergl/marker/colorbar/_yref.py plotly/validators/scattergl/marker/colorbar/tickfont/__init__.py plotly/validators/scattergl/marker/colorbar/tickfont/_color.py plotly/validators/scattergl/marker/colorbar/tickfont/_family.py plotly/validators/scattergl/marker/colorbar/tickfont/_size.py plotly/validators/scattergl/marker/colorbar/tickformatstop/__init__.py plotly/validators/scattergl/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/scattergl/marker/colorbar/tickformatstop/_enabled.py plotly/validators/scattergl/marker/colorbar/tickformatstop/_name.py plotly/validators/scattergl/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/scattergl/marker/colorbar/tickformatstop/_value.py plotly/validators/scattergl/marker/colorbar/title/__init__.py plotly/validators/scattergl/marker/colorbar/title/_font.py plotly/validators/scattergl/marker/colorbar/title/_side.py plotly/validators/scattergl/marker/colorbar/title/_text.py plotly/validators/scattergl/marker/colorbar/title/font/__init__.py plotly/validators/scattergl/marker/colorbar/title/font/_color.py plotly/validators/scattergl/marker/colorbar/title/font/_family.py plotly/validators/scattergl/marker/colorbar/title/font/_size.py plotly/validators/scattergl/marker/line/__init__.py plotly/validators/scattergl/marker/line/_autocolorscale.py plotly/validators/scattergl/marker/line/_cauto.py plotly/validators/scattergl/marker/line/_cmax.py plotly/validators/scattergl/marker/line/_cmid.py plotly/validators/scattergl/marker/line/_cmin.py plotly/validators/scattergl/marker/line/_color.py plotly/validators/scattergl/marker/line/_coloraxis.py plotly/validators/scattergl/marker/line/_colorscale.py plotly/validators/scattergl/marker/line/_colorsrc.py plotly/validators/scattergl/marker/line/_reversescale.py plotly/validators/scattergl/marker/line/_width.py plotly/validators/scattergl/marker/line/_widthsrc.py plotly/validators/scattergl/selected/__init__.py plotly/validators/scattergl/selected/_marker.py plotly/validators/scattergl/selected/_textfont.py plotly/validators/scattergl/selected/marker/__init__.py plotly/validators/scattergl/selected/marker/_color.py plotly/validators/scattergl/selected/marker/_opacity.py plotly/validators/scattergl/selected/marker/_size.py plotly/validators/scattergl/selected/textfont/__init__.py plotly/validators/scattergl/selected/textfont/_color.py plotly/validators/scattergl/stream/__init__.py plotly/validators/scattergl/stream/_maxpoints.py plotly/validators/scattergl/stream/_token.py plotly/validators/scattergl/textfont/__init__.py plotly/validators/scattergl/textfont/_color.py plotly/validators/scattergl/textfont/_colorsrc.py plotly/validators/scattergl/textfont/_family.py plotly/validators/scattergl/textfont/_familysrc.py plotly/validators/scattergl/textfont/_size.py plotly/validators/scattergl/textfont/_sizesrc.py plotly/validators/scattergl/unselected/__init__.py plotly/validators/scattergl/unselected/_marker.py plotly/validators/scattergl/unselected/_textfont.py plotly/validators/scattergl/unselected/marker/__init__.py plotly/validators/scattergl/unselected/marker/_color.py plotly/validators/scattergl/unselected/marker/_opacity.py plotly/validators/scattergl/unselected/marker/_size.py plotly/validators/scattergl/unselected/textfont/__init__.py plotly/validators/scattergl/unselected/textfont/_color.py plotly/validators/scattermapbox/__init__.py plotly/validators/scattermapbox/_below.py plotly/validators/scattermapbox/_cluster.py plotly/validators/scattermapbox/_connectgaps.py plotly/validators/scattermapbox/_customdata.py plotly/validators/scattermapbox/_customdatasrc.py plotly/validators/scattermapbox/_fill.py plotly/validators/scattermapbox/_fillcolor.py plotly/validators/scattermapbox/_hoverinfo.py plotly/validators/scattermapbox/_hoverinfosrc.py plotly/validators/scattermapbox/_hoverlabel.py plotly/validators/scattermapbox/_hovertemplate.py plotly/validators/scattermapbox/_hovertemplatesrc.py plotly/validators/scattermapbox/_hovertext.py plotly/validators/scattermapbox/_hovertextsrc.py plotly/validators/scattermapbox/_ids.py plotly/validators/scattermapbox/_idssrc.py plotly/validators/scattermapbox/_lat.py plotly/validators/scattermapbox/_latsrc.py plotly/validators/scattermapbox/_legend.py plotly/validators/scattermapbox/_legendgroup.py plotly/validators/scattermapbox/_legendgrouptitle.py plotly/validators/scattermapbox/_legendrank.py plotly/validators/scattermapbox/_legendwidth.py plotly/validators/scattermapbox/_line.py plotly/validators/scattermapbox/_lon.py plotly/validators/scattermapbox/_lonsrc.py plotly/validators/scattermapbox/_marker.py plotly/validators/scattermapbox/_meta.py plotly/validators/scattermapbox/_metasrc.py plotly/validators/scattermapbox/_mode.py plotly/validators/scattermapbox/_name.py plotly/validators/scattermapbox/_opacity.py plotly/validators/scattermapbox/_selected.py plotly/validators/scattermapbox/_selectedpoints.py plotly/validators/scattermapbox/_showlegend.py plotly/validators/scattermapbox/_stream.py plotly/validators/scattermapbox/_subplot.py plotly/validators/scattermapbox/_text.py plotly/validators/scattermapbox/_textfont.py plotly/validators/scattermapbox/_textposition.py plotly/validators/scattermapbox/_textsrc.py plotly/validators/scattermapbox/_texttemplate.py plotly/validators/scattermapbox/_texttemplatesrc.py plotly/validators/scattermapbox/_uid.py plotly/validators/scattermapbox/_uirevision.py plotly/validators/scattermapbox/_unselected.py plotly/validators/scattermapbox/_visible.py plotly/validators/scattermapbox/cluster/__init__.py plotly/validators/scattermapbox/cluster/_color.py plotly/validators/scattermapbox/cluster/_colorsrc.py plotly/validators/scattermapbox/cluster/_enabled.py plotly/validators/scattermapbox/cluster/_maxzoom.py plotly/validators/scattermapbox/cluster/_opacity.py plotly/validators/scattermapbox/cluster/_opacitysrc.py plotly/validators/scattermapbox/cluster/_size.py plotly/validators/scattermapbox/cluster/_sizesrc.py plotly/validators/scattermapbox/cluster/_step.py plotly/validators/scattermapbox/cluster/_stepsrc.py plotly/validators/scattermapbox/hoverlabel/__init__.py plotly/validators/scattermapbox/hoverlabel/_align.py plotly/validators/scattermapbox/hoverlabel/_alignsrc.py plotly/validators/scattermapbox/hoverlabel/_bgcolor.py plotly/validators/scattermapbox/hoverlabel/_bgcolorsrc.py plotly/validators/scattermapbox/hoverlabel/_bordercolor.py plotly/validators/scattermapbox/hoverlabel/_bordercolorsrc.py plotly/validators/scattermapbox/hoverlabel/_font.py plotly/validators/scattermapbox/hoverlabel/_namelength.py plotly/validators/scattermapbox/hoverlabel/_namelengthsrc.py plotly/validators/scattermapbox/hoverlabel/font/__init__.py plotly/validators/scattermapbox/hoverlabel/font/_color.py plotly/validators/scattermapbox/hoverlabel/font/_colorsrc.py plotly/validators/scattermapbox/hoverlabel/font/_family.py plotly/validators/scattermapbox/hoverlabel/font/_familysrc.py plotly/validators/scattermapbox/hoverlabel/font/_size.py plotly/validators/scattermapbox/hoverlabel/font/_sizesrc.py plotly/validators/scattermapbox/legendgrouptitle/__init__.py plotly/validators/scattermapbox/legendgrouptitle/_font.py plotly/validators/scattermapbox/legendgrouptitle/_text.py plotly/validators/scattermapbox/legendgrouptitle/font/__init__.py plotly/validators/scattermapbox/legendgrouptitle/font/_color.py plotly/validators/scattermapbox/legendgrouptitle/font/_family.py plotly/validators/scattermapbox/legendgrouptitle/font/_size.py plotly/validators/scattermapbox/line/__init__.py plotly/validators/scattermapbox/line/_color.py plotly/validators/scattermapbox/line/_width.py plotly/validators/scattermapbox/marker/__init__.py plotly/validators/scattermapbox/marker/_allowoverlap.py plotly/validators/scattermapbox/marker/_angle.py plotly/validators/scattermapbox/marker/_anglesrc.py plotly/validators/scattermapbox/marker/_autocolorscale.py plotly/validators/scattermapbox/marker/_cauto.py plotly/validators/scattermapbox/marker/_cmax.py plotly/validators/scattermapbox/marker/_cmid.py plotly/validators/scattermapbox/marker/_cmin.py plotly/validators/scattermapbox/marker/_color.py plotly/validators/scattermapbox/marker/_coloraxis.py plotly/validators/scattermapbox/marker/_colorbar.py plotly/validators/scattermapbox/marker/_colorscale.py plotly/validators/scattermapbox/marker/_colorsrc.py plotly/validators/scattermapbox/marker/_opacity.py plotly/validators/scattermapbox/marker/_opacitysrc.py plotly/validators/scattermapbox/marker/_reversescale.py plotly/validators/scattermapbox/marker/_showscale.py plotly/validators/scattermapbox/marker/_size.py plotly/validators/scattermapbox/marker/_sizemin.py plotly/validators/scattermapbox/marker/_sizemode.py plotly/validators/scattermapbox/marker/_sizeref.py plotly/validators/scattermapbox/marker/_sizesrc.py plotly/validators/scattermapbox/marker/_symbol.py plotly/validators/scattermapbox/marker/_symbolsrc.py plotly/validators/scattermapbox/marker/colorbar/__init__.py plotly/validators/scattermapbox/marker/colorbar/_bgcolor.py plotly/validators/scattermapbox/marker/colorbar/_bordercolor.py plotly/validators/scattermapbox/marker/colorbar/_borderwidth.py plotly/validators/scattermapbox/marker/colorbar/_dtick.py plotly/validators/scattermapbox/marker/colorbar/_exponentformat.py plotly/validators/scattermapbox/marker/colorbar/_labelalias.py plotly/validators/scattermapbox/marker/colorbar/_len.py plotly/validators/scattermapbox/marker/colorbar/_lenmode.py plotly/validators/scattermapbox/marker/colorbar/_minexponent.py plotly/validators/scattermapbox/marker/colorbar/_nticks.py plotly/validators/scattermapbox/marker/colorbar/_orientation.py plotly/validators/scattermapbox/marker/colorbar/_outlinecolor.py plotly/validators/scattermapbox/marker/colorbar/_outlinewidth.py plotly/validators/scattermapbox/marker/colorbar/_separatethousands.py plotly/validators/scattermapbox/marker/colorbar/_showexponent.py plotly/validators/scattermapbox/marker/colorbar/_showticklabels.py plotly/validators/scattermapbox/marker/colorbar/_showtickprefix.py plotly/validators/scattermapbox/marker/colorbar/_showticksuffix.py plotly/validators/scattermapbox/marker/colorbar/_thickness.py plotly/validators/scattermapbox/marker/colorbar/_thicknessmode.py plotly/validators/scattermapbox/marker/colorbar/_tick0.py plotly/validators/scattermapbox/marker/colorbar/_tickangle.py plotly/validators/scattermapbox/marker/colorbar/_tickcolor.py plotly/validators/scattermapbox/marker/colorbar/_tickfont.py plotly/validators/scattermapbox/marker/colorbar/_tickformat.py plotly/validators/scattermapbox/marker/colorbar/_tickformatstopdefaults.py plotly/validators/scattermapbox/marker/colorbar/_tickformatstops.py plotly/validators/scattermapbox/marker/colorbar/_ticklabeloverflow.py plotly/validators/scattermapbox/marker/colorbar/_ticklabelposition.py plotly/validators/scattermapbox/marker/colorbar/_ticklabelstep.py plotly/validators/scattermapbox/marker/colorbar/_ticklen.py plotly/validators/scattermapbox/marker/colorbar/_tickmode.py plotly/validators/scattermapbox/marker/colorbar/_tickprefix.py plotly/validators/scattermapbox/marker/colorbar/_ticks.py plotly/validators/scattermapbox/marker/colorbar/_ticksuffix.py plotly/validators/scattermapbox/marker/colorbar/_ticktext.py plotly/validators/scattermapbox/marker/colorbar/_ticktextsrc.py plotly/validators/scattermapbox/marker/colorbar/_tickvals.py plotly/validators/scattermapbox/marker/colorbar/_tickvalssrc.py plotly/validators/scattermapbox/marker/colorbar/_tickwidth.py plotly/validators/scattermapbox/marker/colorbar/_title.py plotly/validators/scattermapbox/marker/colorbar/_x.py plotly/validators/scattermapbox/marker/colorbar/_xanchor.py plotly/validators/scattermapbox/marker/colorbar/_xpad.py plotly/validators/scattermapbox/marker/colorbar/_xref.py plotly/validators/scattermapbox/marker/colorbar/_y.py plotly/validators/scattermapbox/marker/colorbar/_yanchor.py plotly/validators/scattermapbox/marker/colorbar/_ypad.py plotly/validators/scattermapbox/marker/colorbar/_yref.py plotly/validators/scattermapbox/marker/colorbar/tickfont/__init__.py plotly/validators/scattermapbox/marker/colorbar/tickfont/_color.py plotly/validators/scattermapbox/marker/colorbar/tickfont/_family.py plotly/validators/scattermapbox/marker/colorbar/tickfont/_size.py plotly/validators/scattermapbox/marker/colorbar/tickformatstop/__init__.py plotly/validators/scattermapbox/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/scattermapbox/marker/colorbar/tickformatstop/_enabled.py plotly/validators/scattermapbox/marker/colorbar/tickformatstop/_name.py plotly/validators/scattermapbox/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/scattermapbox/marker/colorbar/tickformatstop/_value.py plotly/validators/scattermapbox/marker/colorbar/title/__init__.py plotly/validators/scattermapbox/marker/colorbar/title/_font.py plotly/validators/scattermapbox/marker/colorbar/title/_side.py plotly/validators/scattermapbox/marker/colorbar/title/_text.py plotly/validators/scattermapbox/marker/colorbar/title/font/__init__.py plotly/validators/scattermapbox/marker/colorbar/title/font/_color.py plotly/validators/scattermapbox/marker/colorbar/title/font/_family.py plotly/validators/scattermapbox/marker/colorbar/title/font/_size.py plotly/validators/scattermapbox/selected/__init__.py plotly/validators/scattermapbox/selected/_marker.py plotly/validators/scattermapbox/selected/marker/__init__.py plotly/validators/scattermapbox/selected/marker/_color.py plotly/validators/scattermapbox/selected/marker/_opacity.py plotly/validators/scattermapbox/selected/marker/_size.py plotly/validators/scattermapbox/stream/__init__.py plotly/validators/scattermapbox/stream/_maxpoints.py plotly/validators/scattermapbox/stream/_token.py plotly/validators/scattermapbox/textfont/__init__.py plotly/validators/scattermapbox/textfont/_color.py plotly/validators/scattermapbox/textfont/_family.py plotly/validators/scattermapbox/textfont/_size.py plotly/validators/scattermapbox/unselected/__init__.py plotly/validators/scattermapbox/unselected/_marker.py plotly/validators/scattermapbox/unselected/marker/__init__.py plotly/validators/scattermapbox/unselected/marker/_color.py plotly/validators/scattermapbox/unselected/marker/_opacity.py plotly/validators/scattermapbox/unselected/marker/_size.py plotly/validators/scatterpolar/__init__.py plotly/validators/scatterpolar/_cliponaxis.py plotly/validators/scatterpolar/_connectgaps.py plotly/validators/scatterpolar/_customdata.py plotly/validators/scatterpolar/_customdatasrc.py plotly/validators/scatterpolar/_dr.py plotly/validators/scatterpolar/_dtheta.py plotly/validators/scatterpolar/_fill.py plotly/validators/scatterpolar/_fillcolor.py plotly/validators/scatterpolar/_hoverinfo.py plotly/validators/scatterpolar/_hoverinfosrc.py plotly/validators/scatterpolar/_hoverlabel.py plotly/validators/scatterpolar/_hoveron.py plotly/validators/scatterpolar/_hovertemplate.py plotly/validators/scatterpolar/_hovertemplatesrc.py plotly/validators/scatterpolar/_hovertext.py plotly/validators/scatterpolar/_hovertextsrc.py plotly/validators/scatterpolar/_ids.py plotly/validators/scatterpolar/_idssrc.py plotly/validators/scatterpolar/_legend.py plotly/validators/scatterpolar/_legendgroup.py plotly/validators/scatterpolar/_legendgrouptitle.py plotly/validators/scatterpolar/_legendrank.py plotly/validators/scatterpolar/_legendwidth.py plotly/validators/scatterpolar/_line.py plotly/validators/scatterpolar/_marker.py plotly/validators/scatterpolar/_meta.py plotly/validators/scatterpolar/_metasrc.py plotly/validators/scatterpolar/_mode.py plotly/validators/scatterpolar/_name.py plotly/validators/scatterpolar/_opacity.py plotly/validators/scatterpolar/_r.py plotly/validators/scatterpolar/_r0.py plotly/validators/scatterpolar/_rsrc.py plotly/validators/scatterpolar/_selected.py plotly/validators/scatterpolar/_selectedpoints.py plotly/validators/scatterpolar/_showlegend.py plotly/validators/scatterpolar/_stream.py plotly/validators/scatterpolar/_subplot.py plotly/validators/scatterpolar/_text.py plotly/validators/scatterpolar/_textfont.py plotly/validators/scatterpolar/_textposition.py plotly/validators/scatterpolar/_textpositionsrc.py plotly/validators/scatterpolar/_textsrc.py plotly/validators/scatterpolar/_texttemplate.py plotly/validators/scatterpolar/_texttemplatesrc.py plotly/validators/scatterpolar/_theta.py plotly/validators/scatterpolar/_theta0.py plotly/validators/scatterpolar/_thetasrc.py plotly/validators/scatterpolar/_thetaunit.py plotly/validators/scatterpolar/_uid.py plotly/validators/scatterpolar/_uirevision.py plotly/validators/scatterpolar/_unselected.py plotly/validators/scatterpolar/_visible.py plotly/validators/scatterpolar/hoverlabel/__init__.py plotly/validators/scatterpolar/hoverlabel/_align.py plotly/validators/scatterpolar/hoverlabel/_alignsrc.py plotly/validators/scatterpolar/hoverlabel/_bgcolor.py plotly/validators/scatterpolar/hoverlabel/_bgcolorsrc.py plotly/validators/scatterpolar/hoverlabel/_bordercolor.py plotly/validators/scatterpolar/hoverlabel/_bordercolorsrc.py plotly/validators/scatterpolar/hoverlabel/_font.py plotly/validators/scatterpolar/hoverlabel/_namelength.py plotly/validators/scatterpolar/hoverlabel/_namelengthsrc.py plotly/validators/scatterpolar/hoverlabel/font/__init__.py plotly/validators/scatterpolar/hoverlabel/font/_color.py plotly/validators/scatterpolar/hoverlabel/font/_colorsrc.py plotly/validators/scatterpolar/hoverlabel/font/_family.py plotly/validators/scatterpolar/hoverlabel/font/_familysrc.py plotly/validators/scatterpolar/hoverlabel/font/_size.py plotly/validators/scatterpolar/hoverlabel/font/_sizesrc.py plotly/validators/scatterpolar/legendgrouptitle/__init__.py plotly/validators/scatterpolar/legendgrouptitle/_font.py plotly/validators/scatterpolar/legendgrouptitle/_text.py plotly/validators/scatterpolar/legendgrouptitle/font/__init__.py plotly/validators/scatterpolar/legendgrouptitle/font/_color.py plotly/validators/scatterpolar/legendgrouptitle/font/_family.py plotly/validators/scatterpolar/legendgrouptitle/font/_size.py plotly/validators/scatterpolar/line/__init__.py plotly/validators/scatterpolar/line/_backoff.py plotly/validators/scatterpolar/line/_backoffsrc.py plotly/validators/scatterpolar/line/_color.py plotly/validators/scatterpolar/line/_dash.py plotly/validators/scatterpolar/line/_shape.py plotly/validators/scatterpolar/line/_smoothing.py plotly/validators/scatterpolar/line/_width.py plotly/validators/scatterpolar/marker/__init__.py plotly/validators/scatterpolar/marker/_angle.py plotly/validators/scatterpolar/marker/_angleref.py plotly/validators/scatterpolar/marker/_anglesrc.py plotly/validators/scatterpolar/marker/_autocolorscale.py plotly/validators/scatterpolar/marker/_cauto.py plotly/validators/scatterpolar/marker/_cmax.py plotly/validators/scatterpolar/marker/_cmid.py plotly/validators/scatterpolar/marker/_cmin.py plotly/validators/scatterpolar/marker/_color.py plotly/validators/scatterpolar/marker/_coloraxis.py plotly/validators/scatterpolar/marker/_colorbar.py plotly/validators/scatterpolar/marker/_colorscale.py plotly/validators/scatterpolar/marker/_colorsrc.py plotly/validators/scatterpolar/marker/_gradient.py plotly/validators/scatterpolar/marker/_line.py plotly/validators/scatterpolar/marker/_maxdisplayed.py plotly/validators/scatterpolar/marker/_opacity.py plotly/validators/scatterpolar/marker/_opacitysrc.py plotly/validators/scatterpolar/marker/_reversescale.py plotly/validators/scatterpolar/marker/_showscale.py plotly/validators/scatterpolar/marker/_size.py plotly/validators/scatterpolar/marker/_sizemin.py plotly/validators/scatterpolar/marker/_sizemode.py plotly/validators/scatterpolar/marker/_sizeref.py plotly/validators/scatterpolar/marker/_sizesrc.py plotly/validators/scatterpolar/marker/_standoff.py plotly/validators/scatterpolar/marker/_standoffsrc.py plotly/validators/scatterpolar/marker/_symbol.py plotly/validators/scatterpolar/marker/_symbolsrc.py plotly/validators/scatterpolar/marker/colorbar/__init__.py plotly/validators/scatterpolar/marker/colorbar/_bgcolor.py plotly/validators/scatterpolar/marker/colorbar/_bordercolor.py plotly/validators/scatterpolar/marker/colorbar/_borderwidth.py plotly/validators/scatterpolar/marker/colorbar/_dtick.py plotly/validators/scatterpolar/marker/colorbar/_exponentformat.py plotly/validators/scatterpolar/marker/colorbar/_labelalias.py plotly/validators/scatterpolar/marker/colorbar/_len.py plotly/validators/scatterpolar/marker/colorbar/_lenmode.py plotly/validators/scatterpolar/marker/colorbar/_minexponent.py plotly/validators/scatterpolar/marker/colorbar/_nticks.py plotly/validators/scatterpolar/marker/colorbar/_orientation.py plotly/validators/scatterpolar/marker/colorbar/_outlinecolor.py plotly/validators/scatterpolar/marker/colorbar/_outlinewidth.py plotly/validators/scatterpolar/marker/colorbar/_separatethousands.py plotly/validators/scatterpolar/marker/colorbar/_showexponent.py plotly/validators/scatterpolar/marker/colorbar/_showticklabels.py plotly/validators/scatterpolar/marker/colorbar/_showtickprefix.py plotly/validators/scatterpolar/marker/colorbar/_showticksuffix.py plotly/validators/scatterpolar/marker/colorbar/_thickness.py plotly/validators/scatterpolar/marker/colorbar/_thicknessmode.py plotly/validators/scatterpolar/marker/colorbar/_tick0.py plotly/validators/scatterpolar/marker/colorbar/_tickangle.py plotly/validators/scatterpolar/marker/colorbar/_tickcolor.py plotly/validators/scatterpolar/marker/colorbar/_tickfont.py plotly/validators/scatterpolar/marker/colorbar/_tickformat.py plotly/validators/scatterpolar/marker/colorbar/_tickformatstopdefaults.py plotly/validators/scatterpolar/marker/colorbar/_tickformatstops.py plotly/validators/scatterpolar/marker/colorbar/_ticklabeloverflow.py plotly/validators/scatterpolar/marker/colorbar/_ticklabelposition.py plotly/validators/scatterpolar/marker/colorbar/_ticklabelstep.py plotly/validators/scatterpolar/marker/colorbar/_ticklen.py plotly/validators/scatterpolar/marker/colorbar/_tickmode.py plotly/validators/scatterpolar/marker/colorbar/_tickprefix.py plotly/validators/scatterpolar/marker/colorbar/_ticks.py plotly/validators/scatterpolar/marker/colorbar/_ticksuffix.py plotly/validators/scatterpolar/marker/colorbar/_ticktext.py plotly/validators/scatterpolar/marker/colorbar/_ticktextsrc.py plotly/validators/scatterpolar/marker/colorbar/_tickvals.py plotly/validators/scatterpolar/marker/colorbar/_tickvalssrc.py plotly/validators/scatterpolar/marker/colorbar/_tickwidth.py plotly/validators/scatterpolar/marker/colorbar/_title.py plotly/validators/scatterpolar/marker/colorbar/_x.py plotly/validators/scatterpolar/marker/colorbar/_xanchor.py plotly/validators/scatterpolar/marker/colorbar/_xpad.py plotly/validators/scatterpolar/marker/colorbar/_xref.py plotly/validators/scatterpolar/marker/colorbar/_y.py plotly/validators/scatterpolar/marker/colorbar/_yanchor.py plotly/validators/scatterpolar/marker/colorbar/_ypad.py plotly/validators/scatterpolar/marker/colorbar/_yref.py plotly/validators/scatterpolar/marker/colorbar/tickfont/__init__.py plotly/validators/scatterpolar/marker/colorbar/tickfont/_color.py plotly/validators/scatterpolar/marker/colorbar/tickfont/_family.py plotly/validators/scatterpolar/marker/colorbar/tickfont/_size.py plotly/validators/scatterpolar/marker/colorbar/tickformatstop/__init__.py plotly/validators/scatterpolar/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/scatterpolar/marker/colorbar/tickformatstop/_enabled.py plotly/validators/scatterpolar/marker/colorbar/tickformatstop/_name.py plotly/validators/scatterpolar/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/scatterpolar/marker/colorbar/tickformatstop/_value.py plotly/validators/scatterpolar/marker/colorbar/title/__init__.py plotly/validators/scatterpolar/marker/colorbar/title/_font.py plotly/validators/scatterpolar/marker/colorbar/title/_side.py plotly/validators/scatterpolar/marker/colorbar/title/_text.py plotly/validators/scatterpolar/marker/colorbar/title/font/__init__.py plotly/validators/scatterpolar/marker/colorbar/title/font/_color.py plotly/validators/scatterpolar/marker/colorbar/title/font/_family.py plotly/validators/scatterpolar/marker/colorbar/title/font/_size.py plotly/validators/scatterpolar/marker/gradient/__init__.py plotly/validators/scatterpolar/marker/gradient/_color.py plotly/validators/scatterpolar/marker/gradient/_colorsrc.py plotly/validators/scatterpolar/marker/gradient/_type.py plotly/validators/scatterpolar/marker/gradient/_typesrc.py plotly/validators/scatterpolar/marker/line/__init__.py plotly/validators/scatterpolar/marker/line/_autocolorscale.py plotly/validators/scatterpolar/marker/line/_cauto.py plotly/validators/scatterpolar/marker/line/_cmax.py plotly/validators/scatterpolar/marker/line/_cmid.py plotly/validators/scatterpolar/marker/line/_cmin.py plotly/validators/scatterpolar/marker/line/_color.py plotly/validators/scatterpolar/marker/line/_coloraxis.py plotly/validators/scatterpolar/marker/line/_colorscale.py plotly/validators/scatterpolar/marker/line/_colorsrc.py plotly/validators/scatterpolar/marker/line/_reversescale.py plotly/validators/scatterpolar/marker/line/_width.py plotly/validators/scatterpolar/marker/line/_widthsrc.py plotly/validators/scatterpolar/selected/__init__.py plotly/validators/scatterpolar/selected/_marker.py plotly/validators/scatterpolar/selected/_textfont.py plotly/validators/scatterpolar/selected/marker/__init__.py plotly/validators/scatterpolar/selected/marker/_color.py plotly/validators/scatterpolar/selected/marker/_opacity.py plotly/validators/scatterpolar/selected/marker/_size.py plotly/validators/scatterpolar/selected/textfont/__init__.py plotly/validators/scatterpolar/selected/textfont/_color.py plotly/validators/scatterpolar/stream/__init__.py plotly/validators/scatterpolar/stream/_maxpoints.py plotly/validators/scatterpolar/stream/_token.py plotly/validators/scatterpolar/textfont/__init__.py plotly/validators/scatterpolar/textfont/_color.py plotly/validators/scatterpolar/textfont/_colorsrc.py plotly/validators/scatterpolar/textfont/_family.py plotly/validators/scatterpolar/textfont/_familysrc.py plotly/validators/scatterpolar/textfont/_size.py plotly/validators/scatterpolar/textfont/_sizesrc.py plotly/validators/scatterpolar/unselected/__init__.py plotly/validators/scatterpolar/unselected/_marker.py plotly/validators/scatterpolar/unselected/_textfont.py plotly/validators/scatterpolar/unselected/marker/__init__.py plotly/validators/scatterpolar/unselected/marker/_color.py plotly/validators/scatterpolar/unselected/marker/_opacity.py plotly/validators/scatterpolar/unselected/marker/_size.py plotly/validators/scatterpolar/unselected/textfont/__init__.py plotly/validators/scatterpolar/unselected/textfont/_color.py plotly/validators/scatterpolargl/__init__.py plotly/validators/scatterpolargl/_connectgaps.py plotly/validators/scatterpolargl/_customdata.py plotly/validators/scatterpolargl/_customdatasrc.py plotly/validators/scatterpolargl/_dr.py plotly/validators/scatterpolargl/_dtheta.py plotly/validators/scatterpolargl/_fill.py plotly/validators/scatterpolargl/_fillcolor.py plotly/validators/scatterpolargl/_hoverinfo.py plotly/validators/scatterpolargl/_hoverinfosrc.py plotly/validators/scatterpolargl/_hoverlabel.py plotly/validators/scatterpolargl/_hovertemplate.py plotly/validators/scatterpolargl/_hovertemplatesrc.py plotly/validators/scatterpolargl/_hovertext.py plotly/validators/scatterpolargl/_hovertextsrc.py plotly/validators/scatterpolargl/_ids.py plotly/validators/scatterpolargl/_idssrc.py plotly/validators/scatterpolargl/_legend.py plotly/validators/scatterpolargl/_legendgroup.py plotly/validators/scatterpolargl/_legendgrouptitle.py plotly/validators/scatterpolargl/_legendrank.py plotly/validators/scatterpolargl/_legendwidth.py plotly/validators/scatterpolargl/_line.py plotly/validators/scatterpolargl/_marker.py plotly/validators/scatterpolargl/_meta.py plotly/validators/scatterpolargl/_metasrc.py plotly/validators/scatterpolargl/_mode.py plotly/validators/scatterpolargl/_name.py plotly/validators/scatterpolargl/_opacity.py plotly/validators/scatterpolargl/_r.py plotly/validators/scatterpolargl/_r0.py plotly/validators/scatterpolargl/_rsrc.py plotly/validators/scatterpolargl/_selected.py plotly/validators/scatterpolargl/_selectedpoints.py plotly/validators/scatterpolargl/_showlegend.py plotly/validators/scatterpolargl/_stream.py plotly/validators/scatterpolargl/_subplot.py plotly/validators/scatterpolargl/_text.py plotly/validators/scatterpolargl/_textfont.py plotly/validators/scatterpolargl/_textposition.py plotly/validators/scatterpolargl/_textpositionsrc.py plotly/validators/scatterpolargl/_textsrc.py plotly/validators/scatterpolargl/_texttemplate.py plotly/validators/scatterpolargl/_texttemplatesrc.py plotly/validators/scatterpolargl/_theta.py plotly/validators/scatterpolargl/_theta0.py plotly/validators/scatterpolargl/_thetasrc.py plotly/validators/scatterpolargl/_thetaunit.py plotly/validators/scatterpolargl/_uid.py plotly/validators/scatterpolargl/_uirevision.py plotly/validators/scatterpolargl/_unselected.py plotly/validators/scatterpolargl/_visible.py plotly/validators/scatterpolargl/hoverlabel/__init__.py plotly/validators/scatterpolargl/hoverlabel/_align.py plotly/validators/scatterpolargl/hoverlabel/_alignsrc.py plotly/validators/scatterpolargl/hoverlabel/_bgcolor.py plotly/validators/scatterpolargl/hoverlabel/_bgcolorsrc.py plotly/validators/scatterpolargl/hoverlabel/_bordercolor.py plotly/validators/scatterpolargl/hoverlabel/_bordercolorsrc.py plotly/validators/scatterpolargl/hoverlabel/_font.py plotly/validators/scatterpolargl/hoverlabel/_namelength.py plotly/validators/scatterpolargl/hoverlabel/_namelengthsrc.py plotly/validators/scatterpolargl/hoverlabel/font/__init__.py plotly/validators/scatterpolargl/hoverlabel/font/_color.py plotly/validators/scatterpolargl/hoverlabel/font/_colorsrc.py plotly/validators/scatterpolargl/hoverlabel/font/_family.py plotly/validators/scatterpolargl/hoverlabel/font/_familysrc.py plotly/validators/scatterpolargl/hoverlabel/font/_size.py plotly/validators/scatterpolargl/hoverlabel/font/_sizesrc.py plotly/validators/scatterpolargl/legendgrouptitle/__init__.py plotly/validators/scatterpolargl/legendgrouptitle/_font.py plotly/validators/scatterpolargl/legendgrouptitle/_text.py plotly/validators/scatterpolargl/legendgrouptitle/font/__init__.py plotly/validators/scatterpolargl/legendgrouptitle/font/_color.py plotly/validators/scatterpolargl/legendgrouptitle/font/_family.py plotly/validators/scatterpolargl/legendgrouptitle/font/_size.py plotly/validators/scatterpolargl/line/__init__.py plotly/validators/scatterpolargl/line/_color.py plotly/validators/scatterpolargl/line/_dash.py plotly/validators/scatterpolargl/line/_shape.py plotly/validators/scatterpolargl/line/_width.py plotly/validators/scatterpolargl/marker/__init__.py plotly/validators/scatterpolargl/marker/_angle.py plotly/validators/scatterpolargl/marker/_anglesrc.py plotly/validators/scatterpolargl/marker/_autocolorscale.py plotly/validators/scatterpolargl/marker/_cauto.py plotly/validators/scatterpolargl/marker/_cmax.py plotly/validators/scatterpolargl/marker/_cmid.py plotly/validators/scatterpolargl/marker/_cmin.py plotly/validators/scatterpolargl/marker/_color.py plotly/validators/scatterpolargl/marker/_coloraxis.py plotly/validators/scatterpolargl/marker/_colorbar.py plotly/validators/scatterpolargl/marker/_colorscale.py plotly/validators/scatterpolargl/marker/_colorsrc.py plotly/validators/scatterpolargl/marker/_line.py plotly/validators/scatterpolargl/marker/_opacity.py plotly/validators/scatterpolargl/marker/_opacitysrc.py plotly/validators/scatterpolargl/marker/_reversescale.py plotly/validators/scatterpolargl/marker/_showscale.py plotly/validators/scatterpolargl/marker/_size.py plotly/validators/scatterpolargl/marker/_sizemin.py plotly/validators/scatterpolargl/marker/_sizemode.py plotly/validators/scatterpolargl/marker/_sizeref.py plotly/validators/scatterpolargl/marker/_sizesrc.py plotly/validators/scatterpolargl/marker/_symbol.py plotly/validators/scatterpolargl/marker/_symbolsrc.py plotly/validators/scatterpolargl/marker/colorbar/__init__.py plotly/validators/scatterpolargl/marker/colorbar/_bgcolor.py plotly/validators/scatterpolargl/marker/colorbar/_bordercolor.py plotly/validators/scatterpolargl/marker/colorbar/_borderwidth.py plotly/validators/scatterpolargl/marker/colorbar/_dtick.py plotly/validators/scatterpolargl/marker/colorbar/_exponentformat.py plotly/validators/scatterpolargl/marker/colorbar/_labelalias.py plotly/validators/scatterpolargl/marker/colorbar/_len.py plotly/validators/scatterpolargl/marker/colorbar/_lenmode.py plotly/validators/scatterpolargl/marker/colorbar/_minexponent.py plotly/validators/scatterpolargl/marker/colorbar/_nticks.py plotly/validators/scatterpolargl/marker/colorbar/_orientation.py plotly/validators/scatterpolargl/marker/colorbar/_outlinecolor.py plotly/validators/scatterpolargl/marker/colorbar/_outlinewidth.py plotly/validators/scatterpolargl/marker/colorbar/_separatethousands.py plotly/validators/scatterpolargl/marker/colorbar/_showexponent.py plotly/validators/scatterpolargl/marker/colorbar/_showticklabels.py plotly/validators/scatterpolargl/marker/colorbar/_showtickprefix.py plotly/validators/scatterpolargl/marker/colorbar/_showticksuffix.py plotly/validators/scatterpolargl/marker/colorbar/_thickness.py plotly/validators/scatterpolargl/marker/colorbar/_thicknessmode.py plotly/validators/scatterpolargl/marker/colorbar/_tick0.py plotly/validators/scatterpolargl/marker/colorbar/_tickangle.py plotly/validators/scatterpolargl/marker/colorbar/_tickcolor.py plotly/validators/scatterpolargl/marker/colorbar/_tickfont.py plotly/validators/scatterpolargl/marker/colorbar/_tickformat.py plotly/validators/scatterpolargl/marker/colorbar/_tickformatstopdefaults.py plotly/validators/scatterpolargl/marker/colorbar/_tickformatstops.py plotly/validators/scatterpolargl/marker/colorbar/_ticklabeloverflow.py plotly/validators/scatterpolargl/marker/colorbar/_ticklabelposition.py plotly/validators/scatterpolargl/marker/colorbar/_ticklabelstep.py plotly/validators/scatterpolargl/marker/colorbar/_ticklen.py plotly/validators/scatterpolargl/marker/colorbar/_tickmode.py plotly/validators/scatterpolargl/marker/colorbar/_tickprefix.py plotly/validators/scatterpolargl/marker/colorbar/_ticks.py plotly/validators/scatterpolargl/marker/colorbar/_ticksuffix.py plotly/validators/scatterpolargl/marker/colorbar/_ticktext.py plotly/validators/scatterpolargl/marker/colorbar/_ticktextsrc.py plotly/validators/scatterpolargl/marker/colorbar/_tickvals.py plotly/validators/scatterpolargl/marker/colorbar/_tickvalssrc.py plotly/validators/scatterpolargl/marker/colorbar/_tickwidth.py plotly/validators/scatterpolargl/marker/colorbar/_title.py plotly/validators/scatterpolargl/marker/colorbar/_x.py plotly/validators/scatterpolargl/marker/colorbar/_xanchor.py plotly/validators/scatterpolargl/marker/colorbar/_xpad.py plotly/validators/scatterpolargl/marker/colorbar/_xref.py plotly/validators/scatterpolargl/marker/colorbar/_y.py plotly/validators/scatterpolargl/marker/colorbar/_yanchor.py plotly/validators/scatterpolargl/marker/colorbar/_ypad.py plotly/validators/scatterpolargl/marker/colorbar/_yref.py plotly/validators/scatterpolargl/marker/colorbar/tickfont/__init__.py plotly/validators/scatterpolargl/marker/colorbar/tickfont/_color.py plotly/validators/scatterpolargl/marker/colorbar/tickfont/_family.py plotly/validators/scatterpolargl/marker/colorbar/tickfont/_size.py plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/__init__.py plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/_enabled.py plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/_name.py plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/_value.py plotly/validators/scatterpolargl/marker/colorbar/title/__init__.py plotly/validators/scatterpolargl/marker/colorbar/title/_font.py plotly/validators/scatterpolargl/marker/colorbar/title/_side.py plotly/validators/scatterpolargl/marker/colorbar/title/_text.py plotly/validators/scatterpolargl/marker/colorbar/title/font/__init__.py plotly/validators/scatterpolargl/marker/colorbar/title/font/_color.py plotly/validators/scatterpolargl/marker/colorbar/title/font/_family.py plotly/validators/scatterpolargl/marker/colorbar/title/font/_size.py plotly/validators/scatterpolargl/marker/line/__init__.py plotly/validators/scatterpolargl/marker/line/_autocolorscale.py plotly/validators/scatterpolargl/marker/line/_cauto.py plotly/validators/scatterpolargl/marker/line/_cmax.py plotly/validators/scatterpolargl/marker/line/_cmid.py plotly/validators/scatterpolargl/marker/line/_cmin.py plotly/validators/scatterpolargl/marker/line/_color.py plotly/validators/scatterpolargl/marker/line/_coloraxis.py plotly/validators/scatterpolargl/marker/line/_colorscale.py plotly/validators/scatterpolargl/marker/line/_colorsrc.py plotly/validators/scatterpolargl/marker/line/_reversescale.py plotly/validators/scatterpolargl/marker/line/_width.py plotly/validators/scatterpolargl/marker/line/_widthsrc.py plotly/validators/scatterpolargl/selected/__init__.py plotly/validators/scatterpolargl/selected/_marker.py plotly/validators/scatterpolargl/selected/_textfont.py plotly/validators/scatterpolargl/selected/marker/__init__.py plotly/validators/scatterpolargl/selected/marker/_color.py plotly/validators/scatterpolargl/selected/marker/_opacity.py plotly/validators/scatterpolargl/selected/marker/_size.py plotly/validators/scatterpolargl/selected/textfont/__init__.py plotly/validators/scatterpolargl/selected/textfont/_color.py plotly/validators/scatterpolargl/stream/__init__.py plotly/validators/scatterpolargl/stream/_maxpoints.py plotly/validators/scatterpolargl/stream/_token.py plotly/validators/scatterpolargl/textfont/__init__.py plotly/validators/scatterpolargl/textfont/_color.py plotly/validators/scatterpolargl/textfont/_colorsrc.py plotly/validators/scatterpolargl/textfont/_family.py plotly/validators/scatterpolargl/textfont/_familysrc.py plotly/validators/scatterpolargl/textfont/_size.py plotly/validators/scatterpolargl/textfont/_sizesrc.py plotly/validators/scatterpolargl/unselected/__init__.py plotly/validators/scatterpolargl/unselected/_marker.py plotly/validators/scatterpolargl/unselected/_textfont.py plotly/validators/scatterpolargl/unselected/marker/__init__.py plotly/validators/scatterpolargl/unselected/marker/_color.py plotly/validators/scatterpolargl/unselected/marker/_opacity.py plotly/validators/scatterpolargl/unselected/marker/_size.py plotly/validators/scatterpolargl/unselected/textfont/__init__.py plotly/validators/scatterpolargl/unselected/textfont/_color.py plotly/validators/scattersmith/__init__.py plotly/validators/scattersmith/_cliponaxis.py plotly/validators/scattersmith/_connectgaps.py plotly/validators/scattersmith/_customdata.py plotly/validators/scattersmith/_customdatasrc.py plotly/validators/scattersmith/_fill.py plotly/validators/scattersmith/_fillcolor.py plotly/validators/scattersmith/_hoverinfo.py plotly/validators/scattersmith/_hoverinfosrc.py plotly/validators/scattersmith/_hoverlabel.py plotly/validators/scattersmith/_hoveron.py plotly/validators/scattersmith/_hovertemplate.py plotly/validators/scattersmith/_hovertemplatesrc.py plotly/validators/scattersmith/_hovertext.py plotly/validators/scattersmith/_hovertextsrc.py plotly/validators/scattersmith/_ids.py plotly/validators/scattersmith/_idssrc.py plotly/validators/scattersmith/_imag.py plotly/validators/scattersmith/_imagsrc.py plotly/validators/scattersmith/_legend.py plotly/validators/scattersmith/_legendgroup.py plotly/validators/scattersmith/_legendgrouptitle.py plotly/validators/scattersmith/_legendrank.py plotly/validators/scattersmith/_legendwidth.py plotly/validators/scattersmith/_line.py plotly/validators/scattersmith/_marker.py plotly/validators/scattersmith/_meta.py plotly/validators/scattersmith/_metasrc.py plotly/validators/scattersmith/_mode.py plotly/validators/scattersmith/_name.py plotly/validators/scattersmith/_opacity.py plotly/validators/scattersmith/_real.py plotly/validators/scattersmith/_realsrc.py plotly/validators/scattersmith/_selected.py plotly/validators/scattersmith/_selectedpoints.py plotly/validators/scattersmith/_showlegend.py plotly/validators/scattersmith/_stream.py plotly/validators/scattersmith/_subplot.py plotly/validators/scattersmith/_text.py plotly/validators/scattersmith/_textfont.py plotly/validators/scattersmith/_textposition.py plotly/validators/scattersmith/_textpositionsrc.py plotly/validators/scattersmith/_textsrc.py plotly/validators/scattersmith/_texttemplate.py plotly/validators/scattersmith/_texttemplatesrc.py plotly/validators/scattersmith/_uid.py plotly/validators/scattersmith/_uirevision.py plotly/validators/scattersmith/_unselected.py plotly/validators/scattersmith/_visible.py plotly/validators/scattersmith/hoverlabel/__init__.py plotly/validators/scattersmith/hoverlabel/_align.py plotly/validators/scattersmith/hoverlabel/_alignsrc.py plotly/validators/scattersmith/hoverlabel/_bgcolor.py plotly/validators/scattersmith/hoverlabel/_bgcolorsrc.py plotly/validators/scattersmith/hoverlabel/_bordercolor.py plotly/validators/scattersmith/hoverlabel/_bordercolorsrc.py plotly/validators/scattersmith/hoverlabel/_font.py plotly/validators/scattersmith/hoverlabel/_namelength.py plotly/validators/scattersmith/hoverlabel/_namelengthsrc.py plotly/validators/scattersmith/hoverlabel/font/__init__.py plotly/validators/scattersmith/hoverlabel/font/_color.py plotly/validators/scattersmith/hoverlabel/font/_colorsrc.py plotly/validators/scattersmith/hoverlabel/font/_family.py plotly/validators/scattersmith/hoverlabel/font/_familysrc.py plotly/validators/scattersmith/hoverlabel/font/_size.py plotly/validators/scattersmith/hoverlabel/font/_sizesrc.py plotly/validators/scattersmith/legendgrouptitle/__init__.py plotly/validators/scattersmith/legendgrouptitle/_font.py plotly/validators/scattersmith/legendgrouptitle/_text.py plotly/validators/scattersmith/legendgrouptitle/font/__init__.py plotly/validators/scattersmith/legendgrouptitle/font/_color.py plotly/validators/scattersmith/legendgrouptitle/font/_family.py plotly/validators/scattersmith/legendgrouptitle/font/_size.py plotly/validators/scattersmith/line/__init__.py plotly/validators/scattersmith/line/_backoff.py plotly/validators/scattersmith/line/_backoffsrc.py plotly/validators/scattersmith/line/_color.py plotly/validators/scattersmith/line/_dash.py plotly/validators/scattersmith/line/_shape.py plotly/validators/scattersmith/line/_smoothing.py plotly/validators/scattersmith/line/_width.py plotly/validators/scattersmith/marker/__init__.py plotly/validators/scattersmith/marker/_angle.py plotly/validators/scattersmith/marker/_angleref.py plotly/validators/scattersmith/marker/_anglesrc.py plotly/validators/scattersmith/marker/_autocolorscale.py plotly/validators/scattersmith/marker/_cauto.py plotly/validators/scattersmith/marker/_cmax.py plotly/validators/scattersmith/marker/_cmid.py plotly/validators/scattersmith/marker/_cmin.py plotly/validators/scattersmith/marker/_color.py plotly/validators/scattersmith/marker/_coloraxis.py plotly/validators/scattersmith/marker/_colorbar.py plotly/validators/scattersmith/marker/_colorscale.py plotly/validators/scattersmith/marker/_colorsrc.py plotly/validators/scattersmith/marker/_gradient.py plotly/validators/scattersmith/marker/_line.py plotly/validators/scattersmith/marker/_maxdisplayed.py plotly/validators/scattersmith/marker/_opacity.py plotly/validators/scattersmith/marker/_opacitysrc.py plotly/validators/scattersmith/marker/_reversescale.py plotly/validators/scattersmith/marker/_showscale.py plotly/validators/scattersmith/marker/_size.py plotly/validators/scattersmith/marker/_sizemin.py plotly/validators/scattersmith/marker/_sizemode.py plotly/validators/scattersmith/marker/_sizeref.py plotly/validators/scattersmith/marker/_sizesrc.py plotly/validators/scattersmith/marker/_standoff.py plotly/validators/scattersmith/marker/_standoffsrc.py plotly/validators/scattersmith/marker/_symbol.py plotly/validators/scattersmith/marker/_symbolsrc.py plotly/validators/scattersmith/marker/colorbar/__init__.py plotly/validators/scattersmith/marker/colorbar/_bgcolor.py plotly/validators/scattersmith/marker/colorbar/_bordercolor.py plotly/validators/scattersmith/marker/colorbar/_borderwidth.py plotly/validators/scattersmith/marker/colorbar/_dtick.py plotly/validators/scattersmith/marker/colorbar/_exponentformat.py plotly/validators/scattersmith/marker/colorbar/_labelalias.py plotly/validators/scattersmith/marker/colorbar/_len.py plotly/validators/scattersmith/marker/colorbar/_lenmode.py plotly/validators/scattersmith/marker/colorbar/_minexponent.py plotly/validators/scattersmith/marker/colorbar/_nticks.py plotly/validators/scattersmith/marker/colorbar/_orientation.py plotly/validators/scattersmith/marker/colorbar/_outlinecolor.py plotly/validators/scattersmith/marker/colorbar/_outlinewidth.py plotly/validators/scattersmith/marker/colorbar/_separatethousands.py plotly/validators/scattersmith/marker/colorbar/_showexponent.py plotly/validators/scattersmith/marker/colorbar/_showticklabels.py plotly/validators/scattersmith/marker/colorbar/_showtickprefix.py plotly/validators/scattersmith/marker/colorbar/_showticksuffix.py plotly/validators/scattersmith/marker/colorbar/_thickness.py plotly/validators/scattersmith/marker/colorbar/_thicknessmode.py plotly/validators/scattersmith/marker/colorbar/_tick0.py plotly/validators/scattersmith/marker/colorbar/_tickangle.py plotly/validators/scattersmith/marker/colorbar/_tickcolor.py plotly/validators/scattersmith/marker/colorbar/_tickfont.py plotly/validators/scattersmith/marker/colorbar/_tickformat.py plotly/validators/scattersmith/marker/colorbar/_tickformatstopdefaults.py plotly/validators/scattersmith/marker/colorbar/_tickformatstops.py plotly/validators/scattersmith/marker/colorbar/_ticklabeloverflow.py plotly/validators/scattersmith/marker/colorbar/_ticklabelposition.py plotly/validators/scattersmith/marker/colorbar/_ticklabelstep.py plotly/validators/scattersmith/marker/colorbar/_ticklen.py plotly/validators/scattersmith/marker/colorbar/_tickmode.py plotly/validators/scattersmith/marker/colorbar/_tickprefix.py plotly/validators/scattersmith/marker/colorbar/_ticks.py plotly/validators/scattersmith/marker/colorbar/_ticksuffix.py plotly/validators/scattersmith/marker/colorbar/_ticktext.py plotly/validators/scattersmith/marker/colorbar/_ticktextsrc.py plotly/validators/scattersmith/marker/colorbar/_tickvals.py plotly/validators/scattersmith/marker/colorbar/_tickvalssrc.py plotly/validators/scattersmith/marker/colorbar/_tickwidth.py plotly/validators/scattersmith/marker/colorbar/_title.py plotly/validators/scattersmith/marker/colorbar/_x.py plotly/validators/scattersmith/marker/colorbar/_xanchor.py plotly/validators/scattersmith/marker/colorbar/_xpad.py plotly/validators/scattersmith/marker/colorbar/_xref.py plotly/validators/scattersmith/marker/colorbar/_y.py plotly/validators/scattersmith/marker/colorbar/_yanchor.py plotly/validators/scattersmith/marker/colorbar/_ypad.py plotly/validators/scattersmith/marker/colorbar/_yref.py plotly/validators/scattersmith/marker/colorbar/tickfont/__init__.py plotly/validators/scattersmith/marker/colorbar/tickfont/_color.py plotly/validators/scattersmith/marker/colorbar/tickfont/_family.py plotly/validators/scattersmith/marker/colorbar/tickfont/_size.py plotly/validators/scattersmith/marker/colorbar/tickformatstop/__init__.py plotly/validators/scattersmith/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/scattersmith/marker/colorbar/tickformatstop/_enabled.py plotly/validators/scattersmith/marker/colorbar/tickformatstop/_name.py plotly/validators/scattersmith/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/scattersmith/marker/colorbar/tickformatstop/_value.py plotly/validators/scattersmith/marker/colorbar/title/__init__.py plotly/validators/scattersmith/marker/colorbar/title/_font.py plotly/validators/scattersmith/marker/colorbar/title/_side.py plotly/validators/scattersmith/marker/colorbar/title/_text.py plotly/validators/scattersmith/marker/colorbar/title/font/__init__.py plotly/validators/scattersmith/marker/colorbar/title/font/_color.py plotly/validators/scattersmith/marker/colorbar/title/font/_family.py plotly/validators/scattersmith/marker/colorbar/title/font/_size.py plotly/validators/scattersmith/marker/gradient/__init__.py plotly/validators/scattersmith/marker/gradient/_color.py plotly/validators/scattersmith/marker/gradient/_colorsrc.py plotly/validators/scattersmith/marker/gradient/_type.py plotly/validators/scattersmith/marker/gradient/_typesrc.py plotly/validators/scattersmith/marker/line/__init__.py plotly/validators/scattersmith/marker/line/_autocolorscale.py plotly/validators/scattersmith/marker/line/_cauto.py plotly/validators/scattersmith/marker/line/_cmax.py plotly/validators/scattersmith/marker/line/_cmid.py plotly/validators/scattersmith/marker/line/_cmin.py plotly/validators/scattersmith/marker/line/_color.py plotly/validators/scattersmith/marker/line/_coloraxis.py plotly/validators/scattersmith/marker/line/_colorscale.py plotly/validators/scattersmith/marker/line/_colorsrc.py plotly/validators/scattersmith/marker/line/_reversescale.py plotly/validators/scattersmith/marker/line/_width.py plotly/validators/scattersmith/marker/line/_widthsrc.py plotly/validators/scattersmith/selected/__init__.py plotly/validators/scattersmith/selected/_marker.py plotly/validators/scattersmith/selected/_textfont.py plotly/validators/scattersmith/selected/marker/__init__.py plotly/validators/scattersmith/selected/marker/_color.py plotly/validators/scattersmith/selected/marker/_opacity.py plotly/validators/scattersmith/selected/marker/_size.py plotly/validators/scattersmith/selected/textfont/__init__.py plotly/validators/scattersmith/selected/textfont/_color.py plotly/validators/scattersmith/stream/__init__.py plotly/validators/scattersmith/stream/_maxpoints.py plotly/validators/scattersmith/stream/_token.py plotly/validators/scattersmith/textfont/__init__.py plotly/validators/scattersmith/textfont/_color.py plotly/validators/scattersmith/textfont/_colorsrc.py plotly/validators/scattersmith/textfont/_family.py plotly/validators/scattersmith/textfont/_familysrc.py plotly/validators/scattersmith/textfont/_size.py plotly/validators/scattersmith/textfont/_sizesrc.py plotly/validators/scattersmith/unselected/__init__.py plotly/validators/scattersmith/unselected/_marker.py plotly/validators/scattersmith/unselected/_textfont.py plotly/validators/scattersmith/unselected/marker/__init__.py plotly/validators/scattersmith/unselected/marker/_color.py plotly/validators/scattersmith/unselected/marker/_opacity.py plotly/validators/scattersmith/unselected/marker/_size.py plotly/validators/scattersmith/unselected/textfont/__init__.py plotly/validators/scattersmith/unselected/textfont/_color.py plotly/validators/scatterternary/__init__.py plotly/validators/scatterternary/_a.py plotly/validators/scatterternary/_asrc.py plotly/validators/scatterternary/_b.py plotly/validators/scatterternary/_bsrc.py plotly/validators/scatterternary/_c.py plotly/validators/scatterternary/_cliponaxis.py plotly/validators/scatterternary/_connectgaps.py plotly/validators/scatterternary/_csrc.py plotly/validators/scatterternary/_customdata.py plotly/validators/scatterternary/_customdatasrc.py plotly/validators/scatterternary/_fill.py plotly/validators/scatterternary/_fillcolor.py plotly/validators/scatterternary/_hoverinfo.py plotly/validators/scatterternary/_hoverinfosrc.py plotly/validators/scatterternary/_hoverlabel.py plotly/validators/scatterternary/_hoveron.py plotly/validators/scatterternary/_hovertemplate.py plotly/validators/scatterternary/_hovertemplatesrc.py plotly/validators/scatterternary/_hovertext.py plotly/validators/scatterternary/_hovertextsrc.py plotly/validators/scatterternary/_ids.py plotly/validators/scatterternary/_idssrc.py plotly/validators/scatterternary/_legend.py plotly/validators/scatterternary/_legendgroup.py plotly/validators/scatterternary/_legendgrouptitle.py plotly/validators/scatterternary/_legendrank.py plotly/validators/scatterternary/_legendwidth.py plotly/validators/scatterternary/_line.py plotly/validators/scatterternary/_marker.py plotly/validators/scatterternary/_meta.py plotly/validators/scatterternary/_metasrc.py plotly/validators/scatterternary/_mode.py plotly/validators/scatterternary/_name.py plotly/validators/scatterternary/_opacity.py plotly/validators/scatterternary/_selected.py plotly/validators/scatterternary/_selectedpoints.py plotly/validators/scatterternary/_showlegend.py plotly/validators/scatterternary/_stream.py plotly/validators/scatterternary/_subplot.py plotly/validators/scatterternary/_sum.py plotly/validators/scatterternary/_text.py plotly/validators/scatterternary/_textfont.py plotly/validators/scatterternary/_textposition.py plotly/validators/scatterternary/_textpositionsrc.py plotly/validators/scatterternary/_textsrc.py plotly/validators/scatterternary/_texttemplate.py plotly/validators/scatterternary/_texttemplatesrc.py plotly/validators/scatterternary/_uid.py plotly/validators/scatterternary/_uirevision.py plotly/validators/scatterternary/_unselected.py plotly/validators/scatterternary/_visible.py plotly/validators/scatterternary/hoverlabel/__init__.py plotly/validators/scatterternary/hoverlabel/_align.py plotly/validators/scatterternary/hoverlabel/_alignsrc.py plotly/validators/scatterternary/hoverlabel/_bgcolor.py plotly/validators/scatterternary/hoverlabel/_bgcolorsrc.py plotly/validators/scatterternary/hoverlabel/_bordercolor.py plotly/validators/scatterternary/hoverlabel/_bordercolorsrc.py plotly/validators/scatterternary/hoverlabel/_font.py plotly/validators/scatterternary/hoverlabel/_namelength.py plotly/validators/scatterternary/hoverlabel/_namelengthsrc.py plotly/validators/scatterternary/hoverlabel/font/__init__.py plotly/validators/scatterternary/hoverlabel/font/_color.py plotly/validators/scatterternary/hoverlabel/font/_colorsrc.py plotly/validators/scatterternary/hoverlabel/font/_family.py plotly/validators/scatterternary/hoverlabel/font/_familysrc.py plotly/validators/scatterternary/hoverlabel/font/_size.py plotly/validators/scatterternary/hoverlabel/font/_sizesrc.py plotly/validators/scatterternary/legendgrouptitle/__init__.py plotly/validators/scatterternary/legendgrouptitle/_font.py plotly/validators/scatterternary/legendgrouptitle/_text.py plotly/validators/scatterternary/legendgrouptitle/font/__init__.py plotly/validators/scatterternary/legendgrouptitle/font/_color.py plotly/validators/scatterternary/legendgrouptitle/font/_family.py plotly/validators/scatterternary/legendgrouptitle/font/_size.py plotly/validators/scatterternary/line/__init__.py plotly/validators/scatterternary/line/_backoff.py plotly/validators/scatterternary/line/_backoffsrc.py plotly/validators/scatterternary/line/_color.py plotly/validators/scatterternary/line/_dash.py plotly/validators/scatterternary/line/_shape.py plotly/validators/scatterternary/line/_smoothing.py plotly/validators/scatterternary/line/_width.py plotly/validators/scatterternary/marker/__init__.py plotly/validators/scatterternary/marker/_angle.py plotly/validators/scatterternary/marker/_angleref.py plotly/validators/scatterternary/marker/_anglesrc.py plotly/validators/scatterternary/marker/_autocolorscale.py plotly/validators/scatterternary/marker/_cauto.py plotly/validators/scatterternary/marker/_cmax.py plotly/validators/scatterternary/marker/_cmid.py plotly/validators/scatterternary/marker/_cmin.py plotly/validators/scatterternary/marker/_color.py plotly/validators/scatterternary/marker/_coloraxis.py plotly/validators/scatterternary/marker/_colorbar.py plotly/validators/scatterternary/marker/_colorscale.py plotly/validators/scatterternary/marker/_colorsrc.py plotly/validators/scatterternary/marker/_gradient.py plotly/validators/scatterternary/marker/_line.py plotly/validators/scatterternary/marker/_maxdisplayed.py plotly/validators/scatterternary/marker/_opacity.py plotly/validators/scatterternary/marker/_opacitysrc.py plotly/validators/scatterternary/marker/_reversescale.py plotly/validators/scatterternary/marker/_showscale.py plotly/validators/scatterternary/marker/_size.py plotly/validators/scatterternary/marker/_sizemin.py plotly/validators/scatterternary/marker/_sizemode.py plotly/validators/scatterternary/marker/_sizeref.py plotly/validators/scatterternary/marker/_sizesrc.py plotly/validators/scatterternary/marker/_standoff.py plotly/validators/scatterternary/marker/_standoffsrc.py plotly/validators/scatterternary/marker/_symbol.py plotly/validators/scatterternary/marker/_symbolsrc.py plotly/validators/scatterternary/marker/colorbar/__init__.py plotly/validators/scatterternary/marker/colorbar/_bgcolor.py plotly/validators/scatterternary/marker/colorbar/_bordercolor.py plotly/validators/scatterternary/marker/colorbar/_borderwidth.py plotly/validators/scatterternary/marker/colorbar/_dtick.py plotly/validators/scatterternary/marker/colorbar/_exponentformat.py plotly/validators/scatterternary/marker/colorbar/_labelalias.py plotly/validators/scatterternary/marker/colorbar/_len.py plotly/validators/scatterternary/marker/colorbar/_lenmode.py plotly/validators/scatterternary/marker/colorbar/_minexponent.py plotly/validators/scatterternary/marker/colorbar/_nticks.py plotly/validators/scatterternary/marker/colorbar/_orientation.py plotly/validators/scatterternary/marker/colorbar/_outlinecolor.py plotly/validators/scatterternary/marker/colorbar/_outlinewidth.py plotly/validators/scatterternary/marker/colorbar/_separatethousands.py plotly/validators/scatterternary/marker/colorbar/_showexponent.py plotly/validators/scatterternary/marker/colorbar/_showticklabels.py plotly/validators/scatterternary/marker/colorbar/_showtickprefix.py plotly/validators/scatterternary/marker/colorbar/_showticksuffix.py plotly/validators/scatterternary/marker/colorbar/_thickness.py plotly/validators/scatterternary/marker/colorbar/_thicknessmode.py plotly/validators/scatterternary/marker/colorbar/_tick0.py plotly/validators/scatterternary/marker/colorbar/_tickangle.py plotly/validators/scatterternary/marker/colorbar/_tickcolor.py plotly/validators/scatterternary/marker/colorbar/_tickfont.py plotly/validators/scatterternary/marker/colorbar/_tickformat.py plotly/validators/scatterternary/marker/colorbar/_tickformatstopdefaults.py plotly/validators/scatterternary/marker/colorbar/_tickformatstops.py plotly/validators/scatterternary/marker/colorbar/_ticklabeloverflow.py plotly/validators/scatterternary/marker/colorbar/_ticklabelposition.py plotly/validators/scatterternary/marker/colorbar/_ticklabelstep.py plotly/validators/scatterternary/marker/colorbar/_ticklen.py plotly/validators/scatterternary/marker/colorbar/_tickmode.py plotly/validators/scatterternary/marker/colorbar/_tickprefix.py plotly/validators/scatterternary/marker/colorbar/_ticks.py plotly/validators/scatterternary/marker/colorbar/_ticksuffix.py plotly/validators/scatterternary/marker/colorbar/_ticktext.py plotly/validators/scatterternary/marker/colorbar/_ticktextsrc.py plotly/validators/scatterternary/marker/colorbar/_tickvals.py plotly/validators/scatterternary/marker/colorbar/_tickvalssrc.py plotly/validators/scatterternary/marker/colorbar/_tickwidth.py plotly/validators/scatterternary/marker/colorbar/_title.py plotly/validators/scatterternary/marker/colorbar/_x.py plotly/validators/scatterternary/marker/colorbar/_xanchor.py plotly/validators/scatterternary/marker/colorbar/_xpad.py plotly/validators/scatterternary/marker/colorbar/_xref.py plotly/validators/scatterternary/marker/colorbar/_y.py plotly/validators/scatterternary/marker/colorbar/_yanchor.py plotly/validators/scatterternary/marker/colorbar/_ypad.py plotly/validators/scatterternary/marker/colorbar/_yref.py plotly/validators/scatterternary/marker/colorbar/tickfont/__init__.py plotly/validators/scatterternary/marker/colorbar/tickfont/_color.py plotly/validators/scatterternary/marker/colorbar/tickfont/_family.py plotly/validators/scatterternary/marker/colorbar/tickfont/_size.py plotly/validators/scatterternary/marker/colorbar/tickformatstop/__init__.py plotly/validators/scatterternary/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/scatterternary/marker/colorbar/tickformatstop/_enabled.py plotly/validators/scatterternary/marker/colorbar/tickformatstop/_name.py plotly/validators/scatterternary/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/scatterternary/marker/colorbar/tickformatstop/_value.py plotly/validators/scatterternary/marker/colorbar/title/__init__.py plotly/validators/scatterternary/marker/colorbar/title/_font.py plotly/validators/scatterternary/marker/colorbar/title/_side.py plotly/validators/scatterternary/marker/colorbar/title/_text.py plotly/validators/scatterternary/marker/colorbar/title/font/__init__.py plotly/validators/scatterternary/marker/colorbar/title/font/_color.py plotly/validators/scatterternary/marker/colorbar/title/font/_family.py plotly/validators/scatterternary/marker/colorbar/title/font/_size.py plotly/validators/scatterternary/marker/gradient/__init__.py plotly/validators/scatterternary/marker/gradient/_color.py plotly/validators/scatterternary/marker/gradient/_colorsrc.py plotly/validators/scatterternary/marker/gradient/_type.py plotly/validators/scatterternary/marker/gradient/_typesrc.py plotly/validators/scatterternary/marker/line/__init__.py plotly/validators/scatterternary/marker/line/_autocolorscale.py plotly/validators/scatterternary/marker/line/_cauto.py plotly/validators/scatterternary/marker/line/_cmax.py plotly/validators/scatterternary/marker/line/_cmid.py plotly/validators/scatterternary/marker/line/_cmin.py plotly/validators/scatterternary/marker/line/_color.py plotly/validators/scatterternary/marker/line/_coloraxis.py plotly/validators/scatterternary/marker/line/_colorscale.py plotly/validators/scatterternary/marker/line/_colorsrc.py plotly/validators/scatterternary/marker/line/_reversescale.py plotly/validators/scatterternary/marker/line/_width.py plotly/validators/scatterternary/marker/line/_widthsrc.py plotly/validators/scatterternary/selected/__init__.py plotly/validators/scatterternary/selected/_marker.py plotly/validators/scatterternary/selected/_textfont.py plotly/validators/scatterternary/selected/marker/__init__.py plotly/validators/scatterternary/selected/marker/_color.py plotly/validators/scatterternary/selected/marker/_opacity.py plotly/validators/scatterternary/selected/marker/_size.py plotly/validators/scatterternary/selected/textfont/__init__.py plotly/validators/scatterternary/selected/textfont/_color.py plotly/validators/scatterternary/stream/__init__.py plotly/validators/scatterternary/stream/_maxpoints.py plotly/validators/scatterternary/stream/_token.py plotly/validators/scatterternary/textfont/__init__.py plotly/validators/scatterternary/textfont/_color.py plotly/validators/scatterternary/textfont/_colorsrc.py plotly/validators/scatterternary/textfont/_family.py plotly/validators/scatterternary/textfont/_familysrc.py plotly/validators/scatterternary/textfont/_size.py plotly/validators/scatterternary/textfont/_sizesrc.py plotly/validators/scatterternary/unselected/__init__.py plotly/validators/scatterternary/unselected/_marker.py plotly/validators/scatterternary/unselected/_textfont.py plotly/validators/scatterternary/unselected/marker/__init__.py plotly/validators/scatterternary/unselected/marker/_color.py plotly/validators/scatterternary/unselected/marker/_opacity.py plotly/validators/scatterternary/unselected/marker/_size.py plotly/validators/scatterternary/unselected/textfont/__init__.py plotly/validators/scatterternary/unselected/textfont/_color.py plotly/validators/splom/__init__.py plotly/validators/splom/_customdata.py plotly/validators/splom/_customdatasrc.py plotly/validators/splom/_diagonal.py plotly/validators/splom/_dimensiondefaults.py plotly/validators/splom/_dimensions.py plotly/validators/splom/_hoverinfo.py plotly/validators/splom/_hoverinfosrc.py plotly/validators/splom/_hoverlabel.py plotly/validators/splom/_hovertemplate.py plotly/validators/splom/_hovertemplatesrc.py plotly/validators/splom/_hovertext.py plotly/validators/splom/_hovertextsrc.py plotly/validators/splom/_ids.py plotly/validators/splom/_idssrc.py plotly/validators/splom/_legend.py plotly/validators/splom/_legendgroup.py plotly/validators/splom/_legendgrouptitle.py plotly/validators/splom/_legendrank.py plotly/validators/splom/_legendwidth.py plotly/validators/splom/_marker.py plotly/validators/splom/_meta.py plotly/validators/splom/_metasrc.py plotly/validators/splom/_name.py plotly/validators/splom/_opacity.py plotly/validators/splom/_selected.py plotly/validators/splom/_selectedpoints.py plotly/validators/splom/_showlegend.py plotly/validators/splom/_showlowerhalf.py plotly/validators/splom/_showupperhalf.py plotly/validators/splom/_stream.py plotly/validators/splom/_text.py plotly/validators/splom/_textsrc.py plotly/validators/splom/_uid.py plotly/validators/splom/_uirevision.py plotly/validators/splom/_unselected.py plotly/validators/splom/_visible.py plotly/validators/splom/_xaxes.py plotly/validators/splom/_xhoverformat.py plotly/validators/splom/_yaxes.py plotly/validators/splom/_yhoverformat.py plotly/validators/splom/diagonal/__init__.py plotly/validators/splom/diagonal/_visible.py plotly/validators/splom/dimension/__init__.py plotly/validators/splom/dimension/_axis.py plotly/validators/splom/dimension/_label.py plotly/validators/splom/dimension/_name.py plotly/validators/splom/dimension/_templateitemname.py plotly/validators/splom/dimension/_values.py plotly/validators/splom/dimension/_valuessrc.py plotly/validators/splom/dimension/_visible.py plotly/validators/splom/dimension/axis/__init__.py plotly/validators/splom/dimension/axis/_matches.py plotly/validators/splom/dimension/axis/_type.py plotly/validators/splom/hoverlabel/__init__.py plotly/validators/splom/hoverlabel/_align.py plotly/validators/splom/hoverlabel/_alignsrc.py plotly/validators/splom/hoverlabel/_bgcolor.py plotly/validators/splom/hoverlabel/_bgcolorsrc.py plotly/validators/splom/hoverlabel/_bordercolor.py plotly/validators/splom/hoverlabel/_bordercolorsrc.py plotly/validators/splom/hoverlabel/_font.py plotly/validators/splom/hoverlabel/_namelength.py plotly/validators/splom/hoverlabel/_namelengthsrc.py plotly/validators/splom/hoverlabel/font/__init__.py plotly/validators/splom/hoverlabel/font/_color.py plotly/validators/splom/hoverlabel/font/_colorsrc.py plotly/validators/splom/hoverlabel/font/_family.py plotly/validators/splom/hoverlabel/font/_familysrc.py plotly/validators/splom/hoverlabel/font/_size.py plotly/validators/splom/hoverlabel/font/_sizesrc.py plotly/validators/splom/legendgrouptitle/__init__.py plotly/validators/splom/legendgrouptitle/_font.py plotly/validators/splom/legendgrouptitle/_text.py plotly/validators/splom/legendgrouptitle/font/__init__.py plotly/validators/splom/legendgrouptitle/font/_color.py plotly/validators/splom/legendgrouptitle/font/_family.py plotly/validators/splom/legendgrouptitle/font/_size.py plotly/validators/splom/marker/__init__.py plotly/validators/splom/marker/_angle.py plotly/validators/splom/marker/_anglesrc.py plotly/validators/splom/marker/_autocolorscale.py plotly/validators/splom/marker/_cauto.py plotly/validators/splom/marker/_cmax.py plotly/validators/splom/marker/_cmid.py plotly/validators/splom/marker/_cmin.py plotly/validators/splom/marker/_color.py plotly/validators/splom/marker/_coloraxis.py plotly/validators/splom/marker/_colorbar.py plotly/validators/splom/marker/_colorscale.py plotly/validators/splom/marker/_colorsrc.py plotly/validators/splom/marker/_line.py plotly/validators/splom/marker/_opacity.py plotly/validators/splom/marker/_opacitysrc.py plotly/validators/splom/marker/_reversescale.py plotly/validators/splom/marker/_showscale.py plotly/validators/splom/marker/_size.py plotly/validators/splom/marker/_sizemin.py plotly/validators/splom/marker/_sizemode.py plotly/validators/splom/marker/_sizeref.py plotly/validators/splom/marker/_sizesrc.py plotly/validators/splom/marker/_symbol.py plotly/validators/splom/marker/_symbolsrc.py plotly/validators/splom/marker/colorbar/__init__.py plotly/validators/splom/marker/colorbar/_bgcolor.py plotly/validators/splom/marker/colorbar/_bordercolor.py plotly/validators/splom/marker/colorbar/_borderwidth.py plotly/validators/splom/marker/colorbar/_dtick.py plotly/validators/splom/marker/colorbar/_exponentformat.py plotly/validators/splom/marker/colorbar/_labelalias.py plotly/validators/splom/marker/colorbar/_len.py plotly/validators/splom/marker/colorbar/_lenmode.py plotly/validators/splom/marker/colorbar/_minexponent.py plotly/validators/splom/marker/colorbar/_nticks.py plotly/validators/splom/marker/colorbar/_orientation.py plotly/validators/splom/marker/colorbar/_outlinecolor.py plotly/validators/splom/marker/colorbar/_outlinewidth.py plotly/validators/splom/marker/colorbar/_separatethousands.py plotly/validators/splom/marker/colorbar/_showexponent.py plotly/validators/splom/marker/colorbar/_showticklabels.py plotly/validators/splom/marker/colorbar/_showtickprefix.py plotly/validators/splom/marker/colorbar/_showticksuffix.py plotly/validators/splom/marker/colorbar/_thickness.py plotly/validators/splom/marker/colorbar/_thicknessmode.py plotly/validators/splom/marker/colorbar/_tick0.py plotly/validators/splom/marker/colorbar/_tickangle.py plotly/validators/splom/marker/colorbar/_tickcolor.py plotly/validators/splom/marker/colorbar/_tickfont.py plotly/validators/splom/marker/colorbar/_tickformat.py plotly/validators/splom/marker/colorbar/_tickformatstopdefaults.py plotly/validators/splom/marker/colorbar/_tickformatstops.py plotly/validators/splom/marker/colorbar/_ticklabeloverflow.py plotly/validators/splom/marker/colorbar/_ticklabelposition.py plotly/validators/splom/marker/colorbar/_ticklabelstep.py plotly/validators/splom/marker/colorbar/_ticklen.py plotly/validators/splom/marker/colorbar/_tickmode.py plotly/validators/splom/marker/colorbar/_tickprefix.py plotly/validators/splom/marker/colorbar/_ticks.py plotly/validators/splom/marker/colorbar/_ticksuffix.py plotly/validators/splom/marker/colorbar/_ticktext.py plotly/validators/splom/marker/colorbar/_ticktextsrc.py plotly/validators/splom/marker/colorbar/_tickvals.py plotly/validators/splom/marker/colorbar/_tickvalssrc.py plotly/validators/splom/marker/colorbar/_tickwidth.py plotly/validators/splom/marker/colorbar/_title.py plotly/validators/splom/marker/colorbar/_x.py plotly/validators/splom/marker/colorbar/_xanchor.py plotly/validators/splom/marker/colorbar/_xpad.py plotly/validators/splom/marker/colorbar/_xref.py plotly/validators/splom/marker/colorbar/_y.py plotly/validators/splom/marker/colorbar/_yanchor.py plotly/validators/splom/marker/colorbar/_ypad.py plotly/validators/splom/marker/colorbar/_yref.py plotly/validators/splom/marker/colorbar/tickfont/__init__.py plotly/validators/splom/marker/colorbar/tickfont/_color.py plotly/validators/splom/marker/colorbar/tickfont/_family.py plotly/validators/splom/marker/colorbar/tickfont/_size.py plotly/validators/splom/marker/colorbar/tickformatstop/__init__.py plotly/validators/splom/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/splom/marker/colorbar/tickformatstop/_enabled.py plotly/validators/splom/marker/colorbar/tickformatstop/_name.py plotly/validators/splom/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/splom/marker/colorbar/tickformatstop/_value.py plotly/validators/splom/marker/colorbar/title/__init__.py plotly/validators/splom/marker/colorbar/title/_font.py plotly/validators/splom/marker/colorbar/title/_side.py plotly/validators/splom/marker/colorbar/title/_text.py plotly/validators/splom/marker/colorbar/title/font/__init__.py plotly/validators/splom/marker/colorbar/title/font/_color.py plotly/validators/splom/marker/colorbar/title/font/_family.py plotly/validators/splom/marker/colorbar/title/font/_size.py plotly/validators/splom/marker/line/__init__.py plotly/validators/splom/marker/line/_autocolorscale.py plotly/validators/splom/marker/line/_cauto.py plotly/validators/splom/marker/line/_cmax.py plotly/validators/splom/marker/line/_cmid.py plotly/validators/splom/marker/line/_cmin.py plotly/validators/splom/marker/line/_color.py plotly/validators/splom/marker/line/_coloraxis.py plotly/validators/splom/marker/line/_colorscale.py plotly/validators/splom/marker/line/_colorsrc.py plotly/validators/splom/marker/line/_reversescale.py plotly/validators/splom/marker/line/_width.py plotly/validators/splom/marker/line/_widthsrc.py plotly/validators/splom/selected/__init__.py plotly/validators/splom/selected/_marker.py plotly/validators/splom/selected/marker/__init__.py plotly/validators/splom/selected/marker/_color.py plotly/validators/splom/selected/marker/_opacity.py plotly/validators/splom/selected/marker/_size.py plotly/validators/splom/stream/__init__.py plotly/validators/splom/stream/_maxpoints.py plotly/validators/splom/stream/_token.py plotly/validators/splom/unselected/__init__.py plotly/validators/splom/unselected/_marker.py plotly/validators/splom/unselected/marker/__init__.py plotly/validators/splom/unselected/marker/_color.py plotly/validators/splom/unselected/marker/_opacity.py plotly/validators/splom/unselected/marker/_size.py plotly/validators/streamtube/__init__.py plotly/validators/streamtube/_autocolorscale.py plotly/validators/streamtube/_cauto.py plotly/validators/streamtube/_cmax.py plotly/validators/streamtube/_cmid.py plotly/validators/streamtube/_cmin.py plotly/validators/streamtube/_coloraxis.py plotly/validators/streamtube/_colorbar.py plotly/validators/streamtube/_colorscale.py plotly/validators/streamtube/_customdata.py plotly/validators/streamtube/_customdatasrc.py plotly/validators/streamtube/_hoverinfo.py plotly/validators/streamtube/_hoverinfosrc.py plotly/validators/streamtube/_hoverlabel.py plotly/validators/streamtube/_hovertemplate.py plotly/validators/streamtube/_hovertemplatesrc.py plotly/validators/streamtube/_hovertext.py plotly/validators/streamtube/_ids.py plotly/validators/streamtube/_idssrc.py plotly/validators/streamtube/_legend.py plotly/validators/streamtube/_legendgroup.py plotly/validators/streamtube/_legendgrouptitle.py plotly/validators/streamtube/_legendrank.py plotly/validators/streamtube/_legendwidth.py plotly/validators/streamtube/_lighting.py plotly/validators/streamtube/_lightposition.py plotly/validators/streamtube/_maxdisplayed.py plotly/validators/streamtube/_meta.py plotly/validators/streamtube/_metasrc.py plotly/validators/streamtube/_name.py plotly/validators/streamtube/_opacity.py plotly/validators/streamtube/_reversescale.py plotly/validators/streamtube/_scene.py plotly/validators/streamtube/_showlegend.py plotly/validators/streamtube/_showscale.py plotly/validators/streamtube/_sizeref.py plotly/validators/streamtube/_starts.py plotly/validators/streamtube/_stream.py plotly/validators/streamtube/_text.py plotly/validators/streamtube/_u.py plotly/validators/streamtube/_uhoverformat.py plotly/validators/streamtube/_uid.py plotly/validators/streamtube/_uirevision.py plotly/validators/streamtube/_usrc.py plotly/validators/streamtube/_v.py plotly/validators/streamtube/_vhoverformat.py plotly/validators/streamtube/_visible.py plotly/validators/streamtube/_vsrc.py plotly/validators/streamtube/_w.py plotly/validators/streamtube/_whoverformat.py plotly/validators/streamtube/_wsrc.py plotly/validators/streamtube/_x.py plotly/validators/streamtube/_xhoverformat.py plotly/validators/streamtube/_xsrc.py plotly/validators/streamtube/_y.py plotly/validators/streamtube/_yhoverformat.py plotly/validators/streamtube/_ysrc.py plotly/validators/streamtube/_z.py plotly/validators/streamtube/_zhoverformat.py plotly/validators/streamtube/_zsrc.py plotly/validators/streamtube/colorbar/__init__.py plotly/validators/streamtube/colorbar/_bgcolor.py plotly/validators/streamtube/colorbar/_bordercolor.py plotly/validators/streamtube/colorbar/_borderwidth.py plotly/validators/streamtube/colorbar/_dtick.py plotly/validators/streamtube/colorbar/_exponentformat.py plotly/validators/streamtube/colorbar/_labelalias.py plotly/validators/streamtube/colorbar/_len.py plotly/validators/streamtube/colorbar/_lenmode.py plotly/validators/streamtube/colorbar/_minexponent.py plotly/validators/streamtube/colorbar/_nticks.py plotly/validators/streamtube/colorbar/_orientation.py plotly/validators/streamtube/colorbar/_outlinecolor.py plotly/validators/streamtube/colorbar/_outlinewidth.py plotly/validators/streamtube/colorbar/_separatethousands.py plotly/validators/streamtube/colorbar/_showexponent.py plotly/validators/streamtube/colorbar/_showticklabels.py plotly/validators/streamtube/colorbar/_showtickprefix.py plotly/validators/streamtube/colorbar/_showticksuffix.py plotly/validators/streamtube/colorbar/_thickness.py plotly/validators/streamtube/colorbar/_thicknessmode.py plotly/validators/streamtube/colorbar/_tick0.py plotly/validators/streamtube/colorbar/_tickangle.py plotly/validators/streamtube/colorbar/_tickcolor.py plotly/validators/streamtube/colorbar/_tickfont.py plotly/validators/streamtube/colorbar/_tickformat.py plotly/validators/streamtube/colorbar/_tickformatstopdefaults.py plotly/validators/streamtube/colorbar/_tickformatstops.py plotly/validators/streamtube/colorbar/_ticklabeloverflow.py plotly/validators/streamtube/colorbar/_ticklabelposition.py plotly/validators/streamtube/colorbar/_ticklabelstep.py plotly/validators/streamtube/colorbar/_ticklen.py plotly/validators/streamtube/colorbar/_tickmode.py plotly/validators/streamtube/colorbar/_tickprefix.py plotly/validators/streamtube/colorbar/_ticks.py plotly/validators/streamtube/colorbar/_ticksuffix.py plotly/validators/streamtube/colorbar/_ticktext.py plotly/validators/streamtube/colorbar/_ticktextsrc.py plotly/validators/streamtube/colorbar/_tickvals.py plotly/validators/streamtube/colorbar/_tickvalssrc.py plotly/validators/streamtube/colorbar/_tickwidth.py plotly/validators/streamtube/colorbar/_title.py plotly/validators/streamtube/colorbar/_x.py plotly/validators/streamtube/colorbar/_xanchor.py plotly/validators/streamtube/colorbar/_xpad.py plotly/validators/streamtube/colorbar/_xref.py plotly/validators/streamtube/colorbar/_y.py plotly/validators/streamtube/colorbar/_yanchor.py plotly/validators/streamtube/colorbar/_ypad.py plotly/validators/streamtube/colorbar/_yref.py plotly/validators/streamtube/colorbar/tickfont/__init__.py plotly/validators/streamtube/colorbar/tickfont/_color.py plotly/validators/streamtube/colorbar/tickfont/_family.py plotly/validators/streamtube/colorbar/tickfont/_size.py plotly/validators/streamtube/colorbar/tickformatstop/__init__.py plotly/validators/streamtube/colorbar/tickformatstop/_dtickrange.py plotly/validators/streamtube/colorbar/tickformatstop/_enabled.py plotly/validators/streamtube/colorbar/tickformatstop/_name.py plotly/validators/streamtube/colorbar/tickformatstop/_templateitemname.py plotly/validators/streamtube/colorbar/tickformatstop/_value.py plotly/validators/streamtube/colorbar/title/__init__.py plotly/validators/streamtube/colorbar/title/_font.py plotly/validators/streamtube/colorbar/title/_side.py plotly/validators/streamtube/colorbar/title/_text.py plotly/validators/streamtube/colorbar/title/font/__init__.py plotly/validators/streamtube/colorbar/title/font/_color.py plotly/validators/streamtube/colorbar/title/font/_family.py plotly/validators/streamtube/colorbar/title/font/_size.py plotly/validators/streamtube/hoverlabel/__init__.py plotly/validators/streamtube/hoverlabel/_align.py plotly/validators/streamtube/hoverlabel/_alignsrc.py plotly/validators/streamtube/hoverlabel/_bgcolor.py plotly/validators/streamtube/hoverlabel/_bgcolorsrc.py plotly/validators/streamtube/hoverlabel/_bordercolor.py plotly/validators/streamtube/hoverlabel/_bordercolorsrc.py plotly/validators/streamtube/hoverlabel/_font.py plotly/validators/streamtube/hoverlabel/_namelength.py plotly/validators/streamtube/hoverlabel/_namelengthsrc.py plotly/validators/streamtube/hoverlabel/font/__init__.py plotly/validators/streamtube/hoverlabel/font/_color.py plotly/validators/streamtube/hoverlabel/font/_colorsrc.py plotly/validators/streamtube/hoverlabel/font/_family.py plotly/validators/streamtube/hoverlabel/font/_familysrc.py plotly/validators/streamtube/hoverlabel/font/_size.py plotly/validators/streamtube/hoverlabel/font/_sizesrc.py plotly/validators/streamtube/legendgrouptitle/__init__.py plotly/validators/streamtube/legendgrouptitle/_font.py plotly/validators/streamtube/legendgrouptitle/_text.py plotly/validators/streamtube/legendgrouptitle/font/__init__.py plotly/validators/streamtube/legendgrouptitle/font/_color.py plotly/validators/streamtube/legendgrouptitle/font/_family.py plotly/validators/streamtube/legendgrouptitle/font/_size.py plotly/validators/streamtube/lighting/__init__.py plotly/validators/streamtube/lighting/_ambient.py plotly/validators/streamtube/lighting/_diffuse.py plotly/validators/streamtube/lighting/_facenormalsepsilon.py plotly/validators/streamtube/lighting/_fresnel.py plotly/validators/streamtube/lighting/_roughness.py plotly/validators/streamtube/lighting/_specular.py plotly/validators/streamtube/lighting/_vertexnormalsepsilon.py plotly/validators/streamtube/lightposition/__init__.py plotly/validators/streamtube/lightposition/_x.py plotly/validators/streamtube/lightposition/_y.py plotly/validators/streamtube/lightposition/_z.py plotly/validators/streamtube/starts/__init__.py plotly/validators/streamtube/starts/_x.py plotly/validators/streamtube/starts/_xsrc.py plotly/validators/streamtube/starts/_y.py plotly/validators/streamtube/starts/_ysrc.py plotly/validators/streamtube/starts/_z.py plotly/validators/streamtube/starts/_zsrc.py plotly/validators/streamtube/stream/__init__.py plotly/validators/streamtube/stream/_maxpoints.py plotly/validators/streamtube/stream/_token.py plotly/validators/sunburst/__init__.py plotly/validators/sunburst/_branchvalues.py plotly/validators/sunburst/_count.py plotly/validators/sunburst/_customdata.py plotly/validators/sunburst/_customdatasrc.py plotly/validators/sunburst/_domain.py plotly/validators/sunburst/_hoverinfo.py plotly/validators/sunburst/_hoverinfosrc.py plotly/validators/sunburst/_hoverlabel.py plotly/validators/sunburst/_hovertemplate.py plotly/validators/sunburst/_hovertemplatesrc.py plotly/validators/sunburst/_hovertext.py plotly/validators/sunburst/_hovertextsrc.py plotly/validators/sunburst/_ids.py plotly/validators/sunburst/_idssrc.py plotly/validators/sunburst/_insidetextfont.py plotly/validators/sunburst/_insidetextorientation.py plotly/validators/sunburst/_labels.py plotly/validators/sunburst/_labelssrc.py plotly/validators/sunburst/_leaf.py plotly/validators/sunburst/_legend.py plotly/validators/sunburst/_legendgrouptitle.py plotly/validators/sunburst/_legendrank.py plotly/validators/sunburst/_legendwidth.py plotly/validators/sunburst/_level.py plotly/validators/sunburst/_marker.py plotly/validators/sunburst/_maxdepth.py plotly/validators/sunburst/_meta.py plotly/validators/sunburst/_metasrc.py plotly/validators/sunburst/_name.py plotly/validators/sunburst/_opacity.py plotly/validators/sunburst/_outsidetextfont.py plotly/validators/sunburst/_parents.py plotly/validators/sunburst/_parentssrc.py plotly/validators/sunburst/_root.py plotly/validators/sunburst/_rotation.py plotly/validators/sunburst/_sort.py plotly/validators/sunburst/_stream.py plotly/validators/sunburst/_text.py plotly/validators/sunburst/_textfont.py plotly/validators/sunburst/_textinfo.py plotly/validators/sunburst/_textsrc.py plotly/validators/sunburst/_texttemplate.py plotly/validators/sunburst/_texttemplatesrc.py plotly/validators/sunburst/_uid.py plotly/validators/sunburst/_uirevision.py plotly/validators/sunburst/_values.py plotly/validators/sunburst/_valuessrc.py plotly/validators/sunburst/_visible.py plotly/validators/sunburst/domain/__init__.py plotly/validators/sunburst/domain/_column.py plotly/validators/sunburst/domain/_row.py plotly/validators/sunburst/domain/_x.py plotly/validators/sunburst/domain/_y.py plotly/validators/sunburst/hoverlabel/__init__.py plotly/validators/sunburst/hoverlabel/_align.py plotly/validators/sunburst/hoverlabel/_alignsrc.py plotly/validators/sunburst/hoverlabel/_bgcolor.py plotly/validators/sunburst/hoverlabel/_bgcolorsrc.py plotly/validators/sunburst/hoverlabel/_bordercolor.py plotly/validators/sunburst/hoverlabel/_bordercolorsrc.py plotly/validators/sunburst/hoverlabel/_font.py plotly/validators/sunburst/hoverlabel/_namelength.py plotly/validators/sunburst/hoverlabel/_namelengthsrc.py plotly/validators/sunburst/hoverlabel/font/__init__.py plotly/validators/sunburst/hoverlabel/font/_color.py plotly/validators/sunburst/hoverlabel/font/_colorsrc.py plotly/validators/sunburst/hoverlabel/font/_family.py plotly/validators/sunburst/hoverlabel/font/_familysrc.py plotly/validators/sunburst/hoverlabel/font/_size.py plotly/validators/sunburst/hoverlabel/font/_sizesrc.py plotly/validators/sunburst/insidetextfont/__init__.py plotly/validators/sunburst/insidetextfont/_color.py plotly/validators/sunburst/insidetextfont/_colorsrc.py plotly/validators/sunburst/insidetextfont/_family.py plotly/validators/sunburst/insidetextfont/_familysrc.py plotly/validators/sunburst/insidetextfont/_size.py plotly/validators/sunburst/insidetextfont/_sizesrc.py plotly/validators/sunburst/leaf/__init__.py plotly/validators/sunburst/leaf/_opacity.py plotly/validators/sunburst/legendgrouptitle/__init__.py plotly/validators/sunburst/legendgrouptitle/_font.py plotly/validators/sunburst/legendgrouptitle/_text.py plotly/validators/sunburst/legendgrouptitle/font/__init__.py plotly/validators/sunburst/legendgrouptitle/font/_color.py plotly/validators/sunburst/legendgrouptitle/font/_family.py plotly/validators/sunburst/legendgrouptitle/font/_size.py plotly/validators/sunburst/marker/__init__.py plotly/validators/sunburst/marker/_autocolorscale.py plotly/validators/sunburst/marker/_cauto.py plotly/validators/sunburst/marker/_cmax.py plotly/validators/sunburst/marker/_cmid.py plotly/validators/sunburst/marker/_cmin.py plotly/validators/sunburst/marker/_coloraxis.py plotly/validators/sunburst/marker/_colorbar.py plotly/validators/sunburst/marker/_colors.py plotly/validators/sunburst/marker/_colorscale.py plotly/validators/sunburst/marker/_colorssrc.py plotly/validators/sunburst/marker/_line.py plotly/validators/sunburst/marker/_pattern.py plotly/validators/sunburst/marker/_reversescale.py plotly/validators/sunburst/marker/_showscale.py plotly/validators/sunburst/marker/colorbar/__init__.py plotly/validators/sunburst/marker/colorbar/_bgcolor.py plotly/validators/sunburst/marker/colorbar/_bordercolor.py plotly/validators/sunburst/marker/colorbar/_borderwidth.py plotly/validators/sunburst/marker/colorbar/_dtick.py plotly/validators/sunburst/marker/colorbar/_exponentformat.py plotly/validators/sunburst/marker/colorbar/_labelalias.py plotly/validators/sunburst/marker/colorbar/_len.py plotly/validators/sunburst/marker/colorbar/_lenmode.py plotly/validators/sunburst/marker/colorbar/_minexponent.py plotly/validators/sunburst/marker/colorbar/_nticks.py plotly/validators/sunburst/marker/colorbar/_orientation.py plotly/validators/sunburst/marker/colorbar/_outlinecolor.py plotly/validators/sunburst/marker/colorbar/_outlinewidth.py plotly/validators/sunburst/marker/colorbar/_separatethousands.py plotly/validators/sunburst/marker/colorbar/_showexponent.py plotly/validators/sunburst/marker/colorbar/_showticklabels.py plotly/validators/sunburst/marker/colorbar/_showtickprefix.py plotly/validators/sunburst/marker/colorbar/_showticksuffix.py plotly/validators/sunburst/marker/colorbar/_thickness.py plotly/validators/sunburst/marker/colorbar/_thicknessmode.py plotly/validators/sunburst/marker/colorbar/_tick0.py plotly/validators/sunburst/marker/colorbar/_tickangle.py plotly/validators/sunburst/marker/colorbar/_tickcolor.py plotly/validators/sunburst/marker/colorbar/_tickfont.py plotly/validators/sunburst/marker/colorbar/_tickformat.py plotly/validators/sunburst/marker/colorbar/_tickformatstopdefaults.py plotly/validators/sunburst/marker/colorbar/_tickformatstops.py plotly/validators/sunburst/marker/colorbar/_ticklabeloverflow.py plotly/validators/sunburst/marker/colorbar/_ticklabelposition.py plotly/validators/sunburst/marker/colorbar/_ticklabelstep.py plotly/validators/sunburst/marker/colorbar/_ticklen.py plotly/validators/sunburst/marker/colorbar/_tickmode.py plotly/validators/sunburst/marker/colorbar/_tickprefix.py plotly/validators/sunburst/marker/colorbar/_ticks.py plotly/validators/sunburst/marker/colorbar/_ticksuffix.py plotly/validators/sunburst/marker/colorbar/_ticktext.py plotly/validators/sunburst/marker/colorbar/_ticktextsrc.py plotly/validators/sunburst/marker/colorbar/_tickvals.py plotly/validators/sunburst/marker/colorbar/_tickvalssrc.py plotly/validators/sunburst/marker/colorbar/_tickwidth.py plotly/validators/sunburst/marker/colorbar/_title.py plotly/validators/sunburst/marker/colorbar/_x.py plotly/validators/sunburst/marker/colorbar/_xanchor.py plotly/validators/sunburst/marker/colorbar/_xpad.py plotly/validators/sunburst/marker/colorbar/_xref.py plotly/validators/sunburst/marker/colorbar/_y.py plotly/validators/sunburst/marker/colorbar/_yanchor.py plotly/validators/sunburst/marker/colorbar/_ypad.py plotly/validators/sunburst/marker/colorbar/_yref.py plotly/validators/sunburst/marker/colorbar/tickfont/__init__.py plotly/validators/sunburst/marker/colorbar/tickfont/_color.py plotly/validators/sunburst/marker/colorbar/tickfont/_family.py plotly/validators/sunburst/marker/colorbar/tickfont/_size.py plotly/validators/sunburst/marker/colorbar/tickformatstop/__init__.py plotly/validators/sunburst/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/sunburst/marker/colorbar/tickformatstop/_enabled.py plotly/validators/sunburst/marker/colorbar/tickformatstop/_name.py plotly/validators/sunburst/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/sunburst/marker/colorbar/tickformatstop/_value.py plotly/validators/sunburst/marker/colorbar/title/__init__.py plotly/validators/sunburst/marker/colorbar/title/_font.py plotly/validators/sunburst/marker/colorbar/title/_side.py plotly/validators/sunburst/marker/colorbar/title/_text.py plotly/validators/sunburst/marker/colorbar/title/font/__init__.py plotly/validators/sunburst/marker/colorbar/title/font/_color.py plotly/validators/sunburst/marker/colorbar/title/font/_family.py plotly/validators/sunburst/marker/colorbar/title/font/_size.py plotly/validators/sunburst/marker/line/__init__.py plotly/validators/sunburst/marker/line/_color.py plotly/validators/sunburst/marker/line/_colorsrc.py plotly/validators/sunburst/marker/line/_width.py plotly/validators/sunburst/marker/line/_widthsrc.py plotly/validators/sunburst/marker/pattern/__init__.py plotly/validators/sunburst/marker/pattern/_bgcolor.py plotly/validators/sunburst/marker/pattern/_bgcolorsrc.py plotly/validators/sunburst/marker/pattern/_fgcolor.py plotly/validators/sunburst/marker/pattern/_fgcolorsrc.py plotly/validators/sunburst/marker/pattern/_fgopacity.py plotly/validators/sunburst/marker/pattern/_fillmode.py plotly/validators/sunburst/marker/pattern/_shape.py plotly/validators/sunburst/marker/pattern/_shapesrc.py plotly/validators/sunburst/marker/pattern/_size.py plotly/validators/sunburst/marker/pattern/_sizesrc.py plotly/validators/sunburst/marker/pattern/_solidity.py plotly/validators/sunburst/marker/pattern/_soliditysrc.py plotly/validators/sunburst/outsidetextfont/__init__.py plotly/validators/sunburst/outsidetextfont/_color.py plotly/validators/sunburst/outsidetextfont/_colorsrc.py plotly/validators/sunburst/outsidetextfont/_family.py plotly/validators/sunburst/outsidetextfont/_familysrc.py plotly/validators/sunburst/outsidetextfont/_size.py plotly/validators/sunburst/outsidetextfont/_sizesrc.py plotly/validators/sunburst/root/__init__.py plotly/validators/sunburst/root/_color.py plotly/validators/sunburst/stream/__init__.py plotly/validators/sunburst/stream/_maxpoints.py plotly/validators/sunburst/stream/_token.py plotly/validators/sunburst/textfont/__init__.py plotly/validators/sunburst/textfont/_color.py plotly/validators/sunburst/textfont/_colorsrc.py plotly/validators/sunburst/textfont/_family.py plotly/validators/sunburst/textfont/_familysrc.py plotly/validators/sunburst/textfont/_size.py plotly/validators/sunburst/textfont/_sizesrc.py plotly/validators/surface/__init__.py plotly/validators/surface/_autocolorscale.py plotly/validators/surface/_cauto.py plotly/validators/surface/_cmax.py plotly/validators/surface/_cmid.py plotly/validators/surface/_cmin.py plotly/validators/surface/_coloraxis.py plotly/validators/surface/_colorbar.py plotly/validators/surface/_colorscale.py plotly/validators/surface/_connectgaps.py plotly/validators/surface/_contours.py plotly/validators/surface/_customdata.py plotly/validators/surface/_customdatasrc.py plotly/validators/surface/_hidesurface.py plotly/validators/surface/_hoverinfo.py plotly/validators/surface/_hoverinfosrc.py plotly/validators/surface/_hoverlabel.py plotly/validators/surface/_hovertemplate.py plotly/validators/surface/_hovertemplatesrc.py plotly/validators/surface/_hovertext.py plotly/validators/surface/_hovertextsrc.py plotly/validators/surface/_ids.py plotly/validators/surface/_idssrc.py plotly/validators/surface/_legend.py plotly/validators/surface/_legendgroup.py plotly/validators/surface/_legendgrouptitle.py plotly/validators/surface/_legendrank.py plotly/validators/surface/_legendwidth.py plotly/validators/surface/_lighting.py plotly/validators/surface/_lightposition.py plotly/validators/surface/_meta.py plotly/validators/surface/_metasrc.py plotly/validators/surface/_name.py plotly/validators/surface/_opacity.py plotly/validators/surface/_opacityscale.py plotly/validators/surface/_reversescale.py plotly/validators/surface/_scene.py plotly/validators/surface/_showlegend.py plotly/validators/surface/_showscale.py plotly/validators/surface/_stream.py plotly/validators/surface/_surfacecolor.py plotly/validators/surface/_surfacecolorsrc.py plotly/validators/surface/_text.py plotly/validators/surface/_textsrc.py plotly/validators/surface/_uid.py plotly/validators/surface/_uirevision.py plotly/validators/surface/_visible.py plotly/validators/surface/_x.py plotly/validators/surface/_xcalendar.py plotly/validators/surface/_xhoverformat.py plotly/validators/surface/_xsrc.py plotly/validators/surface/_y.py plotly/validators/surface/_ycalendar.py plotly/validators/surface/_yhoverformat.py plotly/validators/surface/_ysrc.py plotly/validators/surface/_z.py plotly/validators/surface/_zcalendar.py plotly/validators/surface/_zhoverformat.py plotly/validators/surface/_zsrc.py plotly/validators/surface/colorbar/__init__.py plotly/validators/surface/colorbar/_bgcolor.py plotly/validators/surface/colorbar/_bordercolor.py plotly/validators/surface/colorbar/_borderwidth.py plotly/validators/surface/colorbar/_dtick.py plotly/validators/surface/colorbar/_exponentformat.py plotly/validators/surface/colorbar/_labelalias.py plotly/validators/surface/colorbar/_len.py plotly/validators/surface/colorbar/_lenmode.py plotly/validators/surface/colorbar/_minexponent.py plotly/validators/surface/colorbar/_nticks.py plotly/validators/surface/colorbar/_orientation.py plotly/validators/surface/colorbar/_outlinecolor.py plotly/validators/surface/colorbar/_outlinewidth.py plotly/validators/surface/colorbar/_separatethousands.py plotly/validators/surface/colorbar/_showexponent.py plotly/validators/surface/colorbar/_showticklabels.py plotly/validators/surface/colorbar/_showtickprefix.py plotly/validators/surface/colorbar/_showticksuffix.py plotly/validators/surface/colorbar/_thickness.py plotly/validators/surface/colorbar/_thicknessmode.py plotly/validators/surface/colorbar/_tick0.py plotly/validators/surface/colorbar/_tickangle.py plotly/validators/surface/colorbar/_tickcolor.py plotly/validators/surface/colorbar/_tickfont.py plotly/validators/surface/colorbar/_tickformat.py plotly/validators/surface/colorbar/_tickformatstopdefaults.py plotly/validators/surface/colorbar/_tickformatstops.py plotly/validators/surface/colorbar/_ticklabeloverflow.py plotly/validators/surface/colorbar/_ticklabelposition.py plotly/validators/surface/colorbar/_ticklabelstep.py plotly/validators/surface/colorbar/_ticklen.py plotly/validators/surface/colorbar/_tickmode.py plotly/validators/surface/colorbar/_tickprefix.py plotly/validators/surface/colorbar/_ticks.py plotly/validators/surface/colorbar/_ticksuffix.py plotly/validators/surface/colorbar/_ticktext.py plotly/validators/surface/colorbar/_ticktextsrc.py plotly/validators/surface/colorbar/_tickvals.py plotly/validators/surface/colorbar/_tickvalssrc.py plotly/validators/surface/colorbar/_tickwidth.py plotly/validators/surface/colorbar/_title.py plotly/validators/surface/colorbar/_x.py plotly/validators/surface/colorbar/_xanchor.py plotly/validators/surface/colorbar/_xpad.py plotly/validators/surface/colorbar/_xref.py plotly/validators/surface/colorbar/_y.py plotly/validators/surface/colorbar/_yanchor.py plotly/validators/surface/colorbar/_ypad.py plotly/validators/surface/colorbar/_yref.py plotly/validators/surface/colorbar/tickfont/__init__.py plotly/validators/surface/colorbar/tickfont/_color.py plotly/validators/surface/colorbar/tickfont/_family.py plotly/validators/surface/colorbar/tickfont/_size.py plotly/validators/surface/colorbar/tickformatstop/__init__.py plotly/validators/surface/colorbar/tickformatstop/_dtickrange.py plotly/validators/surface/colorbar/tickformatstop/_enabled.py plotly/validators/surface/colorbar/tickformatstop/_name.py plotly/validators/surface/colorbar/tickformatstop/_templateitemname.py plotly/validators/surface/colorbar/tickformatstop/_value.py plotly/validators/surface/colorbar/title/__init__.py plotly/validators/surface/colorbar/title/_font.py plotly/validators/surface/colorbar/title/_side.py plotly/validators/surface/colorbar/title/_text.py plotly/validators/surface/colorbar/title/font/__init__.py plotly/validators/surface/colorbar/title/font/_color.py plotly/validators/surface/colorbar/title/font/_family.py plotly/validators/surface/colorbar/title/font/_size.py plotly/validators/surface/contours/__init__.py plotly/validators/surface/contours/_x.py plotly/validators/surface/contours/_y.py plotly/validators/surface/contours/_z.py plotly/validators/surface/contours/x/__init__.py plotly/validators/surface/contours/x/_color.py plotly/validators/surface/contours/x/_end.py plotly/validators/surface/contours/x/_highlight.py plotly/validators/surface/contours/x/_highlightcolor.py plotly/validators/surface/contours/x/_highlightwidth.py plotly/validators/surface/contours/x/_project.py plotly/validators/surface/contours/x/_show.py plotly/validators/surface/contours/x/_size.py plotly/validators/surface/contours/x/_start.py plotly/validators/surface/contours/x/_usecolormap.py plotly/validators/surface/contours/x/_width.py plotly/validators/surface/contours/x/project/__init__.py plotly/validators/surface/contours/x/project/_x.py plotly/validators/surface/contours/x/project/_y.py plotly/validators/surface/contours/x/project/_z.py plotly/validators/surface/contours/y/__init__.py plotly/validators/surface/contours/y/_color.py plotly/validators/surface/contours/y/_end.py plotly/validators/surface/contours/y/_highlight.py plotly/validators/surface/contours/y/_highlightcolor.py plotly/validators/surface/contours/y/_highlightwidth.py plotly/validators/surface/contours/y/_project.py plotly/validators/surface/contours/y/_show.py plotly/validators/surface/contours/y/_size.py plotly/validators/surface/contours/y/_start.py plotly/validators/surface/contours/y/_usecolormap.py plotly/validators/surface/contours/y/_width.py plotly/validators/surface/contours/y/project/__init__.py plotly/validators/surface/contours/y/project/_x.py plotly/validators/surface/contours/y/project/_y.py plotly/validators/surface/contours/y/project/_z.py plotly/validators/surface/contours/z/__init__.py plotly/validators/surface/contours/z/_color.py plotly/validators/surface/contours/z/_end.py plotly/validators/surface/contours/z/_highlight.py plotly/validators/surface/contours/z/_highlightcolor.py plotly/validators/surface/contours/z/_highlightwidth.py plotly/validators/surface/contours/z/_project.py plotly/validators/surface/contours/z/_show.py plotly/validators/surface/contours/z/_size.py plotly/validators/surface/contours/z/_start.py plotly/validators/surface/contours/z/_usecolormap.py plotly/validators/surface/contours/z/_width.py plotly/validators/surface/contours/z/project/__init__.py plotly/validators/surface/contours/z/project/_x.py plotly/validators/surface/contours/z/project/_y.py plotly/validators/surface/contours/z/project/_z.py plotly/validators/surface/hoverlabel/__init__.py plotly/validators/surface/hoverlabel/_align.py plotly/validators/surface/hoverlabel/_alignsrc.py plotly/validators/surface/hoverlabel/_bgcolor.py plotly/validators/surface/hoverlabel/_bgcolorsrc.py plotly/validators/surface/hoverlabel/_bordercolor.py plotly/validators/surface/hoverlabel/_bordercolorsrc.py plotly/validators/surface/hoverlabel/_font.py plotly/validators/surface/hoverlabel/_namelength.py plotly/validators/surface/hoverlabel/_namelengthsrc.py plotly/validators/surface/hoverlabel/font/__init__.py plotly/validators/surface/hoverlabel/font/_color.py plotly/validators/surface/hoverlabel/font/_colorsrc.py plotly/validators/surface/hoverlabel/font/_family.py plotly/validators/surface/hoverlabel/font/_familysrc.py plotly/validators/surface/hoverlabel/font/_size.py plotly/validators/surface/hoverlabel/font/_sizesrc.py plotly/validators/surface/legendgrouptitle/__init__.py plotly/validators/surface/legendgrouptitle/_font.py plotly/validators/surface/legendgrouptitle/_text.py plotly/validators/surface/legendgrouptitle/font/__init__.py plotly/validators/surface/legendgrouptitle/font/_color.py plotly/validators/surface/legendgrouptitle/font/_family.py plotly/validators/surface/legendgrouptitle/font/_size.py plotly/validators/surface/lighting/__init__.py plotly/validators/surface/lighting/_ambient.py plotly/validators/surface/lighting/_diffuse.py plotly/validators/surface/lighting/_fresnel.py plotly/validators/surface/lighting/_roughness.py plotly/validators/surface/lighting/_specular.py plotly/validators/surface/lightposition/__init__.py plotly/validators/surface/lightposition/_x.py plotly/validators/surface/lightposition/_y.py plotly/validators/surface/lightposition/_z.py plotly/validators/surface/stream/__init__.py plotly/validators/surface/stream/_maxpoints.py plotly/validators/surface/stream/_token.py plotly/validators/table/__init__.py plotly/validators/table/_cells.py plotly/validators/table/_columnorder.py plotly/validators/table/_columnordersrc.py plotly/validators/table/_columnwidth.py plotly/validators/table/_columnwidthsrc.py plotly/validators/table/_customdata.py plotly/validators/table/_customdatasrc.py plotly/validators/table/_domain.py plotly/validators/table/_header.py plotly/validators/table/_hoverinfo.py plotly/validators/table/_hoverinfosrc.py plotly/validators/table/_hoverlabel.py plotly/validators/table/_ids.py plotly/validators/table/_idssrc.py plotly/validators/table/_legend.py plotly/validators/table/_legendgrouptitle.py plotly/validators/table/_legendrank.py plotly/validators/table/_legendwidth.py plotly/validators/table/_meta.py plotly/validators/table/_metasrc.py plotly/validators/table/_name.py plotly/validators/table/_stream.py plotly/validators/table/_uid.py plotly/validators/table/_uirevision.py plotly/validators/table/_visible.py plotly/validators/table/cells/__init__.py plotly/validators/table/cells/_align.py plotly/validators/table/cells/_alignsrc.py plotly/validators/table/cells/_fill.py plotly/validators/table/cells/_font.py plotly/validators/table/cells/_format.py plotly/validators/table/cells/_formatsrc.py plotly/validators/table/cells/_height.py plotly/validators/table/cells/_line.py plotly/validators/table/cells/_prefix.py plotly/validators/table/cells/_prefixsrc.py plotly/validators/table/cells/_suffix.py plotly/validators/table/cells/_suffixsrc.py plotly/validators/table/cells/_values.py plotly/validators/table/cells/_valuessrc.py plotly/validators/table/cells/fill/__init__.py plotly/validators/table/cells/fill/_color.py plotly/validators/table/cells/fill/_colorsrc.py plotly/validators/table/cells/font/__init__.py plotly/validators/table/cells/font/_color.py plotly/validators/table/cells/font/_colorsrc.py plotly/validators/table/cells/font/_family.py plotly/validators/table/cells/font/_familysrc.py plotly/validators/table/cells/font/_size.py plotly/validators/table/cells/font/_sizesrc.py plotly/validators/table/cells/line/__init__.py plotly/validators/table/cells/line/_color.py plotly/validators/table/cells/line/_colorsrc.py plotly/validators/table/cells/line/_width.py plotly/validators/table/cells/line/_widthsrc.py plotly/validators/table/domain/__init__.py plotly/validators/table/domain/_column.py plotly/validators/table/domain/_row.py plotly/validators/table/domain/_x.py plotly/validators/table/domain/_y.py plotly/validators/table/header/__init__.py plotly/validators/table/header/_align.py plotly/validators/table/header/_alignsrc.py plotly/validators/table/header/_fill.py plotly/validators/table/header/_font.py plotly/validators/table/header/_format.py plotly/validators/table/header/_formatsrc.py plotly/validators/table/header/_height.py plotly/validators/table/header/_line.py plotly/validators/table/header/_prefix.py plotly/validators/table/header/_prefixsrc.py plotly/validators/table/header/_suffix.py plotly/validators/table/header/_suffixsrc.py plotly/validators/table/header/_values.py plotly/validators/table/header/_valuessrc.py plotly/validators/table/header/fill/__init__.py plotly/validators/table/header/fill/_color.py plotly/validators/table/header/fill/_colorsrc.py plotly/validators/table/header/font/__init__.py plotly/validators/table/header/font/_color.py plotly/validators/table/header/font/_colorsrc.py plotly/validators/table/header/font/_family.py plotly/validators/table/header/font/_familysrc.py plotly/validators/table/header/font/_size.py plotly/validators/table/header/font/_sizesrc.py plotly/validators/table/header/line/__init__.py plotly/validators/table/header/line/_color.py plotly/validators/table/header/line/_colorsrc.py plotly/validators/table/header/line/_width.py plotly/validators/table/header/line/_widthsrc.py plotly/validators/table/hoverlabel/__init__.py plotly/validators/table/hoverlabel/_align.py plotly/validators/table/hoverlabel/_alignsrc.py plotly/validators/table/hoverlabel/_bgcolor.py plotly/validators/table/hoverlabel/_bgcolorsrc.py plotly/validators/table/hoverlabel/_bordercolor.py plotly/validators/table/hoverlabel/_bordercolorsrc.py plotly/validators/table/hoverlabel/_font.py plotly/validators/table/hoverlabel/_namelength.py plotly/validators/table/hoverlabel/_namelengthsrc.py plotly/validators/table/hoverlabel/font/__init__.py plotly/validators/table/hoverlabel/font/_color.py plotly/validators/table/hoverlabel/font/_colorsrc.py plotly/validators/table/hoverlabel/font/_family.py plotly/validators/table/hoverlabel/font/_familysrc.py plotly/validators/table/hoverlabel/font/_size.py plotly/validators/table/hoverlabel/font/_sizesrc.py plotly/validators/table/legendgrouptitle/__init__.py plotly/validators/table/legendgrouptitle/_font.py plotly/validators/table/legendgrouptitle/_text.py plotly/validators/table/legendgrouptitle/font/__init__.py plotly/validators/table/legendgrouptitle/font/_color.py plotly/validators/table/legendgrouptitle/font/_family.py plotly/validators/table/legendgrouptitle/font/_size.py plotly/validators/table/stream/__init__.py plotly/validators/table/stream/_maxpoints.py plotly/validators/table/stream/_token.py plotly/validators/treemap/__init__.py plotly/validators/treemap/_branchvalues.py plotly/validators/treemap/_count.py plotly/validators/treemap/_customdata.py plotly/validators/treemap/_customdatasrc.py plotly/validators/treemap/_domain.py plotly/validators/treemap/_hoverinfo.py plotly/validators/treemap/_hoverinfosrc.py plotly/validators/treemap/_hoverlabel.py plotly/validators/treemap/_hovertemplate.py plotly/validators/treemap/_hovertemplatesrc.py plotly/validators/treemap/_hovertext.py plotly/validators/treemap/_hovertextsrc.py plotly/validators/treemap/_ids.py plotly/validators/treemap/_idssrc.py plotly/validators/treemap/_insidetextfont.py plotly/validators/treemap/_labels.py plotly/validators/treemap/_labelssrc.py plotly/validators/treemap/_legend.py plotly/validators/treemap/_legendgrouptitle.py plotly/validators/treemap/_legendrank.py plotly/validators/treemap/_legendwidth.py plotly/validators/treemap/_level.py plotly/validators/treemap/_marker.py plotly/validators/treemap/_maxdepth.py plotly/validators/treemap/_meta.py plotly/validators/treemap/_metasrc.py plotly/validators/treemap/_name.py plotly/validators/treemap/_opacity.py plotly/validators/treemap/_outsidetextfont.py plotly/validators/treemap/_parents.py plotly/validators/treemap/_parentssrc.py plotly/validators/treemap/_pathbar.py plotly/validators/treemap/_root.py plotly/validators/treemap/_sort.py plotly/validators/treemap/_stream.py plotly/validators/treemap/_text.py plotly/validators/treemap/_textfont.py plotly/validators/treemap/_textinfo.py plotly/validators/treemap/_textposition.py plotly/validators/treemap/_textsrc.py plotly/validators/treemap/_texttemplate.py plotly/validators/treemap/_texttemplatesrc.py plotly/validators/treemap/_tiling.py plotly/validators/treemap/_uid.py plotly/validators/treemap/_uirevision.py plotly/validators/treemap/_values.py plotly/validators/treemap/_valuessrc.py plotly/validators/treemap/_visible.py plotly/validators/treemap/domain/__init__.py plotly/validators/treemap/domain/_column.py plotly/validators/treemap/domain/_row.py plotly/validators/treemap/domain/_x.py plotly/validators/treemap/domain/_y.py plotly/validators/treemap/hoverlabel/__init__.py plotly/validators/treemap/hoverlabel/_align.py plotly/validators/treemap/hoverlabel/_alignsrc.py plotly/validators/treemap/hoverlabel/_bgcolor.py plotly/validators/treemap/hoverlabel/_bgcolorsrc.py plotly/validators/treemap/hoverlabel/_bordercolor.py plotly/validators/treemap/hoverlabel/_bordercolorsrc.py plotly/validators/treemap/hoverlabel/_font.py plotly/validators/treemap/hoverlabel/_namelength.py plotly/validators/treemap/hoverlabel/_namelengthsrc.py plotly/validators/treemap/hoverlabel/font/__init__.py plotly/validators/treemap/hoverlabel/font/_color.py plotly/validators/treemap/hoverlabel/font/_colorsrc.py plotly/validators/treemap/hoverlabel/font/_family.py plotly/validators/treemap/hoverlabel/font/_familysrc.py plotly/validators/treemap/hoverlabel/font/_size.py plotly/validators/treemap/hoverlabel/font/_sizesrc.py plotly/validators/treemap/insidetextfont/__init__.py plotly/validators/treemap/insidetextfont/_color.py plotly/validators/treemap/insidetextfont/_colorsrc.py plotly/validators/treemap/insidetextfont/_family.py plotly/validators/treemap/insidetextfont/_familysrc.py plotly/validators/treemap/insidetextfont/_size.py plotly/validators/treemap/insidetextfont/_sizesrc.py plotly/validators/treemap/legendgrouptitle/__init__.py plotly/validators/treemap/legendgrouptitle/_font.py plotly/validators/treemap/legendgrouptitle/_text.py plotly/validators/treemap/legendgrouptitle/font/__init__.py plotly/validators/treemap/legendgrouptitle/font/_color.py plotly/validators/treemap/legendgrouptitle/font/_family.py plotly/validators/treemap/legendgrouptitle/font/_size.py plotly/validators/treemap/marker/__init__.py plotly/validators/treemap/marker/_autocolorscale.py plotly/validators/treemap/marker/_cauto.py plotly/validators/treemap/marker/_cmax.py plotly/validators/treemap/marker/_cmid.py plotly/validators/treemap/marker/_cmin.py plotly/validators/treemap/marker/_coloraxis.py plotly/validators/treemap/marker/_colorbar.py plotly/validators/treemap/marker/_colors.py plotly/validators/treemap/marker/_colorscale.py plotly/validators/treemap/marker/_colorssrc.py plotly/validators/treemap/marker/_cornerradius.py plotly/validators/treemap/marker/_depthfade.py plotly/validators/treemap/marker/_line.py plotly/validators/treemap/marker/_pad.py plotly/validators/treemap/marker/_pattern.py plotly/validators/treemap/marker/_reversescale.py plotly/validators/treemap/marker/_showscale.py plotly/validators/treemap/marker/colorbar/__init__.py plotly/validators/treemap/marker/colorbar/_bgcolor.py plotly/validators/treemap/marker/colorbar/_bordercolor.py plotly/validators/treemap/marker/colorbar/_borderwidth.py plotly/validators/treemap/marker/colorbar/_dtick.py plotly/validators/treemap/marker/colorbar/_exponentformat.py plotly/validators/treemap/marker/colorbar/_labelalias.py plotly/validators/treemap/marker/colorbar/_len.py plotly/validators/treemap/marker/colorbar/_lenmode.py plotly/validators/treemap/marker/colorbar/_minexponent.py plotly/validators/treemap/marker/colorbar/_nticks.py plotly/validators/treemap/marker/colorbar/_orientation.py plotly/validators/treemap/marker/colorbar/_outlinecolor.py plotly/validators/treemap/marker/colorbar/_outlinewidth.py plotly/validators/treemap/marker/colorbar/_separatethousands.py plotly/validators/treemap/marker/colorbar/_showexponent.py plotly/validators/treemap/marker/colorbar/_showticklabels.py plotly/validators/treemap/marker/colorbar/_showtickprefix.py plotly/validators/treemap/marker/colorbar/_showticksuffix.py plotly/validators/treemap/marker/colorbar/_thickness.py plotly/validators/treemap/marker/colorbar/_thicknessmode.py plotly/validators/treemap/marker/colorbar/_tick0.py plotly/validators/treemap/marker/colorbar/_tickangle.py plotly/validators/treemap/marker/colorbar/_tickcolor.py plotly/validators/treemap/marker/colorbar/_tickfont.py plotly/validators/treemap/marker/colorbar/_tickformat.py plotly/validators/treemap/marker/colorbar/_tickformatstopdefaults.py plotly/validators/treemap/marker/colorbar/_tickformatstops.py plotly/validators/treemap/marker/colorbar/_ticklabeloverflow.py plotly/validators/treemap/marker/colorbar/_ticklabelposition.py plotly/validators/treemap/marker/colorbar/_ticklabelstep.py plotly/validators/treemap/marker/colorbar/_ticklen.py plotly/validators/treemap/marker/colorbar/_tickmode.py plotly/validators/treemap/marker/colorbar/_tickprefix.py plotly/validators/treemap/marker/colorbar/_ticks.py plotly/validators/treemap/marker/colorbar/_ticksuffix.py plotly/validators/treemap/marker/colorbar/_ticktext.py plotly/validators/treemap/marker/colorbar/_ticktextsrc.py plotly/validators/treemap/marker/colorbar/_tickvals.py plotly/validators/treemap/marker/colorbar/_tickvalssrc.py plotly/validators/treemap/marker/colorbar/_tickwidth.py plotly/validators/treemap/marker/colorbar/_title.py plotly/validators/treemap/marker/colorbar/_x.py plotly/validators/treemap/marker/colorbar/_xanchor.py plotly/validators/treemap/marker/colorbar/_xpad.py plotly/validators/treemap/marker/colorbar/_xref.py plotly/validators/treemap/marker/colorbar/_y.py plotly/validators/treemap/marker/colorbar/_yanchor.py plotly/validators/treemap/marker/colorbar/_ypad.py plotly/validators/treemap/marker/colorbar/_yref.py plotly/validators/treemap/marker/colorbar/tickfont/__init__.py plotly/validators/treemap/marker/colorbar/tickfont/_color.py plotly/validators/treemap/marker/colorbar/tickfont/_family.py plotly/validators/treemap/marker/colorbar/tickfont/_size.py plotly/validators/treemap/marker/colorbar/tickformatstop/__init__.py plotly/validators/treemap/marker/colorbar/tickformatstop/_dtickrange.py plotly/validators/treemap/marker/colorbar/tickformatstop/_enabled.py plotly/validators/treemap/marker/colorbar/tickformatstop/_name.py plotly/validators/treemap/marker/colorbar/tickformatstop/_templateitemname.py plotly/validators/treemap/marker/colorbar/tickformatstop/_value.py plotly/validators/treemap/marker/colorbar/title/__init__.py plotly/validators/treemap/marker/colorbar/title/_font.py plotly/validators/treemap/marker/colorbar/title/_side.py plotly/validators/treemap/marker/colorbar/title/_text.py plotly/validators/treemap/marker/colorbar/title/font/__init__.py plotly/validators/treemap/marker/colorbar/title/font/_color.py plotly/validators/treemap/marker/colorbar/title/font/_family.py plotly/validators/treemap/marker/colorbar/title/font/_size.py plotly/validators/treemap/marker/line/__init__.py plotly/validators/treemap/marker/line/_color.py plotly/validators/treemap/marker/line/_colorsrc.py plotly/validators/treemap/marker/line/_width.py plotly/validators/treemap/marker/line/_widthsrc.py plotly/validators/treemap/marker/pad/__init__.py plotly/validators/treemap/marker/pad/_b.py plotly/validators/treemap/marker/pad/_l.py plotly/validators/treemap/marker/pad/_r.py plotly/validators/treemap/marker/pad/_t.py plotly/validators/treemap/marker/pattern/__init__.py plotly/validators/treemap/marker/pattern/_bgcolor.py plotly/validators/treemap/marker/pattern/_bgcolorsrc.py plotly/validators/treemap/marker/pattern/_fgcolor.py plotly/validators/treemap/marker/pattern/_fgcolorsrc.py plotly/validators/treemap/marker/pattern/_fgopacity.py plotly/validators/treemap/marker/pattern/_fillmode.py plotly/validators/treemap/marker/pattern/_shape.py plotly/validators/treemap/marker/pattern/_shapesrc.py plotly/validators/treemap/marker/pattern/_size.py plotly/validators/treemap/marker/pattern/_sizesrc.py plotly/validators/treemap/marker/pattern/_solidity.py plotly/validators/treemap/marker/pattern/_soliditysrc.py plotly/validators/treemap/outsidetextfont/__init__.py plotly/validators/treemap/outsidetextfont/_color.py plotly/validators/treemap/outsidetextfont/_colorsrc.py plotly/validators/treemap/outsidetextfont/_family.py plotly/validators/treemap/outsidetextfont/_familysrc.py plotly/validators/treemap/outsidetextfont/_size.py plotly/validators/treemap/outsidetextfont/_sizesrc.py plotly/validators/treemap/pathbar/__init__.py plotly/validators/treemap/pathbar/_edgeshape.py plotly/validators/treemap/pathbar/_side.py plotly/validators/treemap/pathbar/_textfont.py plotly/validators/treemap/pathbar/_thickness.py plotly/validators/treemap/pathbar/_visible.py plotly/validators/treemap/pathbar/textfont/__init__.py plotly/validators/treemap/pathbar/textfont/_color.py plotly/validators/treemap/pathbar/textfont/_colorsrc.py plotly/validators/treemap/pathbar/textfont/_family.py plotly/validators/treemap/pathbar/textfont/_familysrc.py plotly/validators/treemap/pathbar/textfont/_size.py plotly/validators/treemap/pathbar/textfont/_sizesrc.py plotly/validators/treemap/root/__init__.py plotly/validators/treemap/root/_color.py plotly/validators/treemap/stream/__init__.py plotly/validators/treemap/stream/_maxpoints.py plotly/validators/treemap/stream/_token.py plotly/validators/treemap/textfont/__init__.py plotly/validators/treemap/textfont/_color.py plotly/validators/treemap/textfont/_colorsrc.py plotly/validators/treemap/textfont/_family.py plotly/validators/treemap/textfont/_familysrc.py plotly/validators/treemap/textfont/_size.py plotly/validators/treemap/textfont/_sizesrc.py plotly/validators/treemap/tiling/__init__.py plotly/validators/treemap/tiling/_flip.py plotly/validators/treemap/tiling/_packing.py plotly/validators/treemap/tiling/_pad.py plotly/validators/treemap/tiling/_squarifyratio.py plotly/validators/violin/__init__.py plotly/validators/violin/_alignmentgroup.py plotly/validators/violin/_bandwidth.py plotly/validators/violin/_box.py plotly/validators/violin/_customdata.py plotly/validators/violin/_customdatasrc.py plotly/validators/violin/_fillcolor.py plotly/validators/violin/_hoverinfo.py plotly/validators/violin/_hoverinfosrc.py plotly/validators/violin/_hoverlabel.py plotly/validators/violin/_hoveron.py plotly/validators/violin/_hovertemplate.py plotly/validators/violin/_hovertemplatesrc.py plotly/validators/violin/_hovertext.py plotly/validators/violin/_hovertextsrc.py plotly/validators/violin/_ids.py plotly/validators/violin/_idssrc.py plotly/validators/violin/_jitter.py plotly/validators/violin/_legend.py plotly/validators/violin/_legendgroup.py plotly/validators/violin/_legendgrouptitle.py plotly/validators/violin/_legendrank.py plotly/validators/violin/_legendwidth.py plotly/validators/violin/_line.py plotly/validators/violin/_marker.py plotly/validators/violin/_meanline.py plotly/validators/violin/_meta.py plotly/validators/violin/_metasrc.py plotly/validators/violin/_name.py plotly/validators/violin/_offsetgroup.py plotly/validators/violin/_opacity.py plotly/validators/violin/_orientation.py plotly/validators/violin/_pointpos.py plotly/validators/violin/_points.py plotly/validators/violin/_quartilemethod.py plotly/validators/violin/_scalegroup.py plotly/validators/violin/_scalemode.py plotly/validators/violin/_selected.py plotly/validators/violin/_selectedpoints.py plotly/validators/violin/_showlegend.py plotly/validators/violin/_side.py plotly/validators/violin/_span.py plotly/validators/violin/_spanmode.py plotly/validators/violin/_stream.py plotly/validators/violin/_text.py plotly/validators/violin/_textsrc.py plotly/validators/violin/_uid.py plotly/validators/violin/_uirevision.py plotly/validators/violin/_unselected.py plotly/validators/violin/_visible.py plotly/validators/violin/_width.py plotly/validators/violin/_x.py plotly/validators/violin/_x0.py plotly/validators/violin/_xaxis.py plotly/validators/violin/_xhoverformat.py plotly/validators/violin/_xsrc.py plotly/validators/violin/_y.py plotly/validators/violin/_y0.py plotly/validators/violin/_yaxis.py plotly/validators/violin/_yhoverformat.py plotly/validators/violin/_ysrc.py plotly/validators/violin/box/__init__.py plotly/validators/violin/box/_fillcolor.py plotly/validators/violin/box/_line.py plotly/validators/violin/box/_visible.py plotly/validators/violin/box/_width.py plotly/validators/violin/box/line/__init__.py plotly/validators/violin/box/line/_color.py plotly/validators/violin/box/line/_width.py plotly/validators/violin/hoverlabel/__init__.py plotly/validators/violin/hoverlabel/_align.py plotly/validators/violin/hoverlabel/_alignsrc.py plotly/validators/violin/hoverlabel/_bgcolor.py plotly/validators/violin/hoverlabel/_bgcolorsrc.py plotly/validators/violin/hoverlabel/_bordercolor.py plotly/validators/violin/hoverlabel/_bordercolorsrc.py plotly/validators/violin/hoverlabel/_font.py plotly/validators/violin/hoverlabel/_namelength.py plotly/validators/violin/hoverlabel/_namelengthsrc.py plotly/validators/violin/hoverlabel/font/__init__.py plotly/validators/violin/hoverlabel/font/_color.py plotly/validators/violin/hoverlabel/font/_colorsrc.py plotly/validators/violin/hoverlabel/font/_family.py plotly/validators/violin/hoverlabel/font/_familysrc.py plotly/validators/violin/hoverlabel/font/_size.py plotly/validators/violin/hoverlabel/font/_sizesrc.py plotly/validators/violin/legendgrouptitle/__init__.py plotly/validators/violin/legendgrouptitle/_font.py plotly/validators/violin/legendgrouptitle/_text.py plotly/validators/violin/legendgrouptitle/font/__init__.py plotly/validators/violin/legendgrouptitle/font/_color.py plotly/validators/violin/legendgrouptitle/font/_family.py plotly/validators/violin/legendgrouptitle/font/_size.py plotly/validators/violin/line/__init__.py plotly/validators/violin/line/_color.py plotly/validators/violin/line/_width.py plotly/validators/violin/marker/__init__.py plotly/validators/violin/marker/_angle.py plotly/validators/violin/marker/_color.py plotly/validators/violin/marker/_line.py plotly/validators/violin/marker/_opacity.py plotly/validators/violin/marker/_outliercolor.py plotly/validators/violin/marker/_size.py plotly/validators/violin/marker/_symbol.py plotly/validators/violin/marker/line/__init__.py plotly/validators/violin/marker/line/_color.py plotly/validators/violin/marker/line/_outliercolor.py plotly/validators/violin/marker/line/_outlierwidth.py plotly/validators/violin/marker/line/_width.py plotly/validators/violin/meanline/__init__.py plotly/validators/violin/meanline/_color.py plotly/validators/violin/meanline/_visible.py plotly/validators/violin/meanline/_width.py plotly/validators/violin/selected/__init__.py plotly/validators/violin/selected/_marker.py plotly/validators/violin/selected/marker/__init__.py plotly/validators/violin/selected/marker/_color.py plotly/validators/violin/selected/marker/_opacity.py plotly/validators/violin/selected/marker/_size.py plotly/validators/violin/stream/__init__.py plotly/validators/violin/stream/_maxpoints.py plotly/validators/violin/stream/_token.py plotly/validators/violin/unselected/__init__.py plotly/validators/violin/unselected/_marker.py plotly/validators/violin/unselected/marker/__init__.py plotly/validators/violin/unselected/marker/_color.py plotly/validators/violin/unselected/marker/_opacity.py plotly/validators/violin/unselected/marker/_size.py plotly/validators/volume/__init__.py plotly/validators/volume/_autocolorscale.py plotly/validators/volume/_caps.py plotly/validators/volume/_cauto.py plotly/validators/volume/_cmax.py plotly/validators/volume/_cmid.py plotly/validators/volume/_cmin.py plotly/validators/volume/_coloraxis.py plotly/validators/volume/_colorbar.py plotly/validators/volume/_colorscale.py plotly/validators/volume/_contour.py plotly/validators/volume/_customdata.py plotly/validators/volume/_customdatasrc.py plotly/validators/volume/_flatshading.py plotly/validators/volume/_hoverinfo.py plotly/validators/volume/_hoverinfosrc.py plotly/validators/volume/_hoverlabel.py plotly/validators/volume/_hovertemplate.py plotly/validators/volume/_hovertemplatesrc.py plotly/validators/volume/_hovertext.py plotly/validators/volume/_hovertextsrc.py plotly/validators/volume/_ids.py plotly/validators/volume/_idssrc.py plotly/validators/volume/_isomax.py plotly/validators/volume/_isomin.py plotly/validators/volume/_legend.py plotly/validators/volume/_legendgroup.py plotly/validators/volume/_legendgrouptitle.py plotly/validators/volume/_legendrank.py plotly/validators/volume/_legendwidth.py plotly/validators/volume/_lighting.py plotly/validators/volume/_lightposition.py plotly/validators/volume/_meta.py plotly/validators/volume/_metasrc.py plotly/validators/volume/_name.py plotly/validators/volume/_opacity.py plotly/validators/volume/_opacityscale.py plotly/validators/volume/_reversescale.py plotly/validators/volume/_scene.py plotly/validators/volume/_showlegend.py plotly/validators/volume/_showscale.py plotly/validators/volume/_slices.py plotly/validators/volume/_spaceframe.py plotly/validators/volume/_stream.py plotly/validators/volume/_surface.py plotly/validators/volume/_text.py plotly/validators/volume/_textsrc.py plotly/validators/volume/_uid.py plotly/validators/volume/_uirevision.py plotly/validators/volume/_value.py plotly/validators/volume/_valuehoverformat.py plotly/validators/volume/_valuesrc.py plotly/validators/volume/_visible.py plotly/validators/volume/_x.py plotly/validators/volume/_xhoverformat.py plotly/validators/volume/_xsrc.py plotly/validators/volume/_y.py plotly/validators/volume/_yhoverformat.py plotly/validators/volume/_ysrc.py plotly/validators/volume/_z.py plotly/validators/volume/_zhoverformat.py plotly/validators/volume/_zsrc.py plotly/validators/volume/caps/__init__.py plotly/validators/volume/caps/_x.py plotly/validators/volume/caps/_y.py plotly/validators/volume/caps/_z.py plotly/validators/volume/caps/x/__init__.py plotly/validators/volume/caps/x/_fill.py plotly/validators/volume/caps/x/_show.py plotly/validators/volume/caps/y/__init__.py plotly/validators/volume/caps/y/_fill.py plotly/validators/volume/caps/y/_show.py plotly/validators/volume/caps/z/__init__.py plotly/validators/volume/caps/z/_fill.py plotly/validators/volume/caps/z/_show.py plotly/validators/volume/colorbar/__init__.py plotly/validators/volume/colorbar/_bgcolor.py plotly/validators/volume/colorbar/_bordercolor.py plotly/validators/volume/colorbar/_borderwidth.py plotly/validators/volume/colorbar/_dtick.py plotly/validators/volume/colorbar/_exponentformat.py plotly/validators/volume/colorbar/_labelalias.py plotly/validators/volume/colorbar/_len.py plotly/validators/volume/colorbar/_lenmode.py plotly/validators/volume/colorbar/_minexponent.py plotly/validators/volume/colorbar/_nticks.py plotly/validators/volume/colorbar/_orientation.py plotly/validators/volume/colorbar/_outlinecolor.py plotly/validators/volume/colorbar/_outlinewidth.py plotly/validators/volume/colorbar/_separatethousands.py plotly/validators/volume/colorbar/_showexponent.py plotly/validators/volume/colorbar/_showticklabels.py plotly/validators/volume/colorbar/_showtickprefix.py plotly/validators/volume/colorbar/_showticksuffix.py plotly/validators/volume/colorbar/_thickness.py plotly/validators/volume/colorbar/_thicknessmode.py plotly/validators/volume/colorbar/_tick0.py plotly/validators/volume/colorbar/_tickangle.py plotly/validators/volume/colorbar/_tickcolor.py plotly/validators/volume/colorbar/_tickfont.py plotly/validators/volume/colorbar/_tickformat.py plotly/validators/volume/colorbar/_tickformatstopdefaults.py plotly/validators/volume/colorbar/_tickformatstops.py plotly/validators/volume/colorbar/_ticklabeloverflow.py plotly/validators/volume/colorbar/_ticklabelposition.py plotly/validators/volume/colorbar/_ticklabelstep.py plotly/validators/volume/colorbar/_ticklen.py plotly/validators/volume/colorbar/_tickmode.py plotly/validators/volume/colorbar/_tickprefix.py plotly/validators/volume/colorbar/_ticks.py plotly/validators/volume/colorbar/_ticksuffix.py plotly/validators/volume/colorbar/_ticktext.py plotly/validators/volume/colorbar/_ticktextsrc.py plotly/validators/volume/colorbar/_tickvals.py plotly/validators/volume/colorbar/_tickvalssrc.py plotly/validators/volume/colorbar/_tickwidth.py plotly/validators/volume/colorbar/_title.py plotly/validators/volume/colorbar/_x.py plotly/validators/volume/colorbar/_xanchor.py plotly/validators/volume/colorbar/_xpad.py plotly/validators/volume/colorbar/_xref.py plotly/validators/volume/colorbar/_y.py plotly/validators/volume/colorbar/_yanchor.py plotly/validators/volume/colorbar/_ypad.py plotly/validators/volume/colorbar/_yref.py plotly/validators/volume/colorbar/tickfont/__init__.py plotly/validators/volume/colorbar/tickfont/_color.py plotly/validators/volume/colorbar/tickfont/_family.py plotly/validators/volume/colorbar/tickfont/_size.py plotly/validators/volume/colorbar/tickformatstop/__init__.py plotly/validators/volume/colorbar/tickformatstop/_dtickrange.py plotly/validators/volume/colorbar/tickformatstop/_enabled.py plotly/validators/volume/colorbar/tickformatstop/_name.py plotly/validators/volume/colorbar/tickformatstop/_templateitemname.py plotly/validators/volume/colorbar/tickformatstop/_value.py plotly/validators/volume/colorbar/title/__init__.py plotly/validators/volume/colorbar/title/_font.py plotly/validators/volume/colorbar/title/_side.py plotly/validators/volume/colorbar/title/_text.py plotly/validators/volume/colorbar/title/font/__init__.py plotly/validators/volume/colorbar/title/font/_color.py plotly/validators/volume/colorbar/title/font/_family.py plotly/validators/volume/colorbar/title/font/_size.py plotly/validators/volume/contour/__init__.py plotly/validators/volume/contour/_color.py plotly/validators/volume/contour/_show.py plotly/validators/volume/contour/_width.py plotly/validators/volume/hoverlabel/__init__.py plotly/validators/volume/hoverlabel/_align.py plotly/validators/volume/hoverlabel/_alignsrc.py plotly/validators/volume/hoverlabel/_bgcolor.py plotly/validators/volume/hoverlabel/_bgcolorsrc.py plotly/validators/volume/hoverlabel/_bordercolor.py plotly/validators/volume/hoverlabel/_bordercolorsrc.py plotly/validators/volume/hoverlabel/_font.py plotly/validators/volume/hoverlabel/_namelength.py plotly/validators/volume/hoverlabel/_namelengthsrc.py plotly/validators/volume/hoverlabel/font/__init__.py plotly/validators/volume/hoverlabel/font/_color.py plotly/validators/volume/hoverlabel/font/_colorsrc.py plotly/validators/volume/hoverlabel/font/_family.py plotly/validators/volume/hoverlabel/font/_familysrc.py plotly/validators/volume/hoverlabel/font/_size.py plotly/validators/volume/hoverlabel/font/_sizesrc.py plotly/validators/volume/legendgrouptitle/__init__.py plotly/validators/volume/legendgrouptitle/_font.py plotly/validators/volume/legendgrouptitle/_text.py plotly/validators/volume/legendgrouptitle/font/__init__.py plotly/validators/volume/legendgrouptitle/font/_color.py plotly/validators/volume/legendgrouptitle/font/_family.py plotly/validators/volume/legendgrouptitle/font/_size.py plotly/validators/volume/lighting/__init__.py plotly/validators/volume/lighting/_ambient.py plotly/validators/volume/lighting/_diffuse.py plotly/validators/volume/lighting/_facenormalsepsilon.py plotly/validators/volume/lighting/_fresnel.py plotly/validators/volume/lighting/_roughness.py plotly/validators/volume/lighting/_specular.py plotly/validators/volume/lighting/_vertexnormalsepsilon.py plotly/validators/volume/lightposition/__init__.py plotly/validators/volume/lightposition/_x.py plotly/validators/volume/lightposition/_y.py plotly/validators/volume/lightposition/_z.py plotly/validators/volume/slices/__init__.py plotly/validators/volume/slices/_x.py plotly/validators/volume/slices/_y.py plotly/validators/volume/slices/_z.py plotly/validators/volume/slices/x/__init__.py plotly/validators/volume/slices/x/_fill.py plotly/validators/volume/slices/x/_locations.py plotly/validators/volume/slices/x/_locationssrc.py plotly/validators/volume/slices/x/_show.py plotly/validators/volume/slices/y/__init__.py plotly/validators/volume/slices/y/_fill.py plotly/validators/volume/slices/y/_locations.py plotly/validators/volume/slices/y/_locationssrc.py plotly/validators/volume/slices/y/_show.py plotly/validators/volume/slices/z/__init__.py plotly/validators/volume/slices/z/_fill.py plotly/validators/volume/slices/z/_locations.py plotly/validators/volume/slices/z/_locationssrc.py plotly/validators/volume/slices/z/_show.py plotly/validators/volume/spaceframe/__init__.py plotly/validators/volume/spaceframe/_fill.py plotly/validators/volume/spaceframe/_show.py plotly/validators/volume/stream/__init__.py plotly/validators/volume/stream/_maxpoints.py plotly/validators/volume/stream/_token.py plotly/validators/volume/surface/__init__.py plotly/validators/volume/surface/_count.py plotly/validators/volume/surface/_fill.py plotly/validators/volume/surface/_pattern.py plotly/validators/volume/surface/_show.py plotly/validators/waterfall/__init__.py plotly/validators/waterfall/_alignmentgroup.py plotly/validators/waterfall/_base.py plotly/validators/waterfall/_cliponaxis.py plotly/validators/waterfall/_connector.py plotly/validators/waterfall/_constraintext.py plotly/validators/waterfall/_customdata.py plotly/validators/waterfall/_customdatasrc.py plotly/validators/waterfall/_decreasing.py plotly/validators/waterfall/_dx.py plotly/validators/waterfall/_dy.py plotly/validators/waterfall/_hoverinfo.py plotly/validators/waterfall/_hoverinfosrc.py plotly/validators/waterfall/_hoverlabel.py plotly/validators/waterfall/_hovertemplate.py plotly/validators/waterfall/_hovertemplatesrc.py plotly/validators/waterfall/_hovertext.py plotly/validators/waterfall/_hovertextsrc.py plotly/validators/waterfall/_ids.py plotly/validators/waterfall/_idssrc.py plotly/validators/waterfall/_increasing.py plotly/validators/waterfall/_insidetextanchor.py plotly/validators/waterfall/_insidetextfont.py plotly/validators/waterfall/_legend.py plotly/validators/waterfall/_legendgroup.py plotly/validators/waterfall/_legendgrouptitle.py plotly/validators/waterfall/_legendrank.py plotly/validators/waterfall/_legendwidth.py plotly/validators/waterfall/_measure.py plotly/validators/waterfall/_measuresrc.py plotly/validators/waterfall/_meta.py plotly/validators/waterfall/_metasrc.py plotly/validators/waterfall/_name.py plotly/validators/waterfall/_offset.py plotly/validators/waterfall/_offsetgroup.py plotly/validators/waterfall/_offsetsrc.py plotly/validators/waterfall/_opacity.py plotly/validators/waterfall/_orientation.py plotly/validators/waterfall/_outsidetextfont.py plotly/validators/waterfall/_selectedpoints.py plotly/validators/waterfall/_showlegend.py plotly/validators/waterfall/_stream.py plotly/validators/waterfall/_text.py plotly/validators/waterfall/_textangle.py plotly/validators/waterfall/_textfont.py plotly/validators/waterfall/_textinfo.py plotly/validators/waterfall/_textposition.py plotly/validators/waterfall/_textpositionsrc.py plotly/validators/waterfall/_textsrc.py plotly/validators/waterfall/_texttemplate.py plotly/validators/waterfall/_texttemplatesrc.py plotly/validators/waterfall/_totals.py plotly/validators/waterfall/_uid.py plotly/validators/waterfall/_uirevision.py plotly/validators/waterfall/_visible.py plotly/validators/waterfall/_width.py plotly/validators/waterfall/_widthsrc.py plotly/validators/waterfall/_x.py plotly/validators/waterfall/_x0.py plotly/validators/waterfall/_xaxis.py plotly/validators/waterfall/_xhoverformat.py plotly/validators/waterfall/_xperiod.py plotly/validators/waterfall/_xperiod0.py plotly/validators/waterfall/_xperiodalignment.py plotly/validators/waterfall/_xsrc.py plotly/validators/waterfall/_y.py plotly/validators/waterfall/_y0.py plotly/validators/waterfall/_yaxis.py plotly/validators/waterfall/_yhoverformat.py plotly/validators/waterfall/_yperiod.py plotly/validators/waterfall/_yperiod0.py plotly/validators/waterfall/_yperiodalignment.py plotly/validators/waterfall/_ysrc.py plotly/validators/waterfall/connector/__init__.py plotly/validators/waterfall/connector/_line.py plotly/validators/waterfall/connector/_mode.py plotly/validators/waterfall/connector/_visible.py plotly/validators/waterfall/connector/line/__init__.py plotly/validators/waterfall/connector/line/_color.py plotly/validators/waterfall/connector/line/_dash.py plotly/validators/waterfall/connector/line/_width.py plotly/validators/waterfall/decreasing/__init__.py plotly/validators/waterfall/decreasing/_marker.py plotly/validators/waterfall/decreasing/marker/__init__.py plotly/validators/waterfall/decreasing/marker/_color.py plotly/validators/waterfall/decreasing/marker/_line.py plotly/validators/waterfall/decreasing/marker/line/__init__.py plotly/validators/waterfall/decreasing/marker/line/_color.py plotly/validators/waterfall/decreasing/marker/line/_width.py plotly/validators/waterfall/hoverlabel/__init__.py plotly/validators/waterfall/hoverlabel/_align.py plotly/validators/waterfall/hoverlabel/_alignsrc.py plotly/validators/waterfall/hoverlabel/_bgcolor.py plotly/validators/waterfall/hoverlabel/_bgcolorsrc.py plotly/validators/waterfall/hoverlabel/_bordercolor.py plotly/validators/waterfall/hoverlabel/_bordercolorsrc.py plotly/validators/waterfall/hoverlabel/_font.py plotly/validators/waterfall/hoverlabel/_namelength.py plotly/validators/waterfall/hoverlabel/_namelengthsrc.py plotly/validators/waterfall/hoverlabel/font/__init__.py plotly/validators/waterfall/hoverlabel/font/_color.py plotly/validators/waterfall/hoverlabel/font/_colorsrc.py plotly/validators/waterfall/hoverlabel/font/_family.py plotly/validators/waterfall/hoverlabel/font/_familysrc.py plotly/validators/waterfall/hoverlabel/font/_size.py plotly/validators/waterfall/hoverlabel/font/_sizesrc.py plotly/validators/waterfall/increasing/__init__.py plotly/validators/waterfall/increasing/_marker.py plotly/validators/waterfall/increasing/marker/__init__.py plotly/validators/waterfall/increasing/marker/_color.py plotly/validators/waterfall/increasing/marker/_line.py plotly/validators/waterfall/increasing/marker/line/__init__.py plotly/validators/waterfall/increasing/marker/line/_color.py plotly/validators/waterfall/increasing/marker/line/_width.py plotly/validators/waterfall/insidetextfont/__init__.py plotly/validators/waterfall/insidetextfont/_color.py plotly/validators/waterfall/insidetextfont/_colorsrc.py plotly/validators/waterfall/insidetextfont/_family.py plotly/validators/waterfall/insidetextfont/_familysrc.py plotly/validators/waterfall/insidetextfont/_size.py plotly/validators/waterfall/insidetextfont/_sizesrc.py plotly/validators/waterfall/legendgrouptitle/__init__.py plotly/validators/waterfall/legendgrouptitle/_font.py plotly/validators/waterfall/legendgrouptitle/_text.py plotly/validators/waterfall/legendgrouptitle/font/__init__.py plotly/validators/waterfall/legendgrouptitle/font/_color.py plotly/validators/waterfall/legendgrouptitle/font/_family.py plotly/validators/waterfall/legendgrouptitle/font/_size.py plotly/validators/waterfall/outsidetextfont/__init__.py plotly/validators/waterfall/outsidetextfont/_color.py plotly/validators/waterfall/outsidetextfont/_colorsrc.py plotly/validators/waterfall/outsidetextfont/_family.py plotly/validators/waterfall/outsidetextfont/_familysrc.py plotly/validators/waterfall/outsidetextfont/_size.py plotly/validators/waterfall/outsidetextfont/_sizesrc.py plotly/validators/waterfall/stream/__init__.py plotly/validators/waterfall/stream/_maxpoints.py plotly/validators/waterfall/stream/_token.py plotly/validators/waterfall/textfont/__init__.py plotly/validators/waterfall/textfont/_color.py plotly/validators/waterfall/textfont/_colorsrc.py plotly/validators/waterfall/textfont/_family.py plotly/validators/waterfall/textfont/_familysrc.py plotly/validators/waterfall/textfont/_size.py plotly/validators/waterfall/textfont/_sizesrc.py plotly/validators/waterfall/totals/__init__.py plotly/validators/waterfall/totals/_marker.py plotly/validators/waterfall/totals/marker/__init__.py plotly/validators/waterfall/totals/marker/_color.py plotly/validators/waterfall/totals/marker/_line.py plotly/validators/waterfall/totals/marker/line/__init__.py plotly/validators/waterfall/totals/marker/line/_color.py plotly/validators/waterfall/totals/marker/line/_width.pyplotly-5.15.0+dfsg1.orig/plotly.egg-info/top_level.txt0000644000175000017500000000006714440366050022170 0ustar noahfxnoahfx_plotly_future_ _plotly_utils jupyterlab_plotly plotly plotly-5.15.0+dfsg1.orig/plotly.egg-info/not-zip-safe0000644000175000017500000000000114440366050021661 0ustar noahfxnoahfx plotly-5.15.0+dfsg1.orig/plotly.egg-info/PKG-INFO0000644000175000017500000001550014440366050020531 0ustar noahfxnoahfxMetadata-Version: 2.1 Name: plotly Version: 5.15.0 Summary: An open-source, interactive data visualization library for Python Home-page: https://plotly.com/python/ Author: Chris P Author-email: chris@plot.ly Maintainer: Nicolas Kruchten Maintainer-email: nicolas@plot.ly License: MIT Project-URL: Github, https://github.com/plotly/plotly.py Classifier: Development Status :: 5 - Production/Stable Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Topic :: Scientific/Engineering :: Visualization Classifier: License :: OSI Approved :: MIT License Requires-Python: >=3.6 Description-Content-Type: text/markdown License-File: LICENSE.txt # plotly.py
Latest Release
User forum
PyPI Downloads
License
## Quickstart `pip install plotly==5.15.0` Inside [Jupyter](https://jupyter.org/install) (installable with `pip install "jupyterlab>=3" "ipywidgets>=7.6"`): ```python import plotly.express as px fig = px.bar(x=["a", "b", "c"], y=[1, 3, 2]) fig.show() ``` See the [Python documentation](https://plotly.com/python/) for more examples. ## Overview [plotly.py](https://plotly.com/python/) is an interactive, open-source, and browser-based graphing library for Python :sparkles: Built on top of [plotly.js](https://github.com/plotly/plotly.js), `plotly.py` is a high-level, declarative charting library. plotly.js ships with over 30 chart types, including scientific charts, 3D graphs, statistical charts, SVG maps, financial charts, and more. `plotly.py` is [MIT Licensed](https://github.com/plotly/plotly.py/blob/master/LICENSE.txt). Plotly graphs can be viewed in Jupyter notebooks, standalone HTML files, or integrated into [Dash applications](https://dash.plotly.com/). [Contact us](https://plotly.com/consulting-and-oem/) for consulting, dashboard development, application integration, and feature additions.

--- - [Online Documentation](https://plotly.com/python/) - [Contributing to plotly](https://github.com/plotly/plotly.py/blob/master/contributing.md) - [Changelog](https://github.com/plotly/plotly.py/blob/master/CHANGELOG.md) - [Code of Conduct](https://github.com/plotly/plotly.py/blob/master/CODE_OF_CONDUCT.md) - [Version 4 Migration Guide](https://plotly.com/python/v4-migration/) - [New! Announcing Dash 1.0](https://medium.com/plotly/welcoming-dash-1-0-0-f3af4b84bae) - [Community forum](https://community.plotly.com) --- ## Installation plotly.py may be installed using pip... ``` pip install plotly==5.15.0 ``` or conda. ``` conda install -c plotly plotly=5.15.0 ``` ### JupyterLab Support For use in [JupyterLab](https://jupyterlab.readthedocs.io/en/stable/), install the `jupyterlab` and `ipywidgets` packages using `pip`: ``` pip install "jupyterlab>=3" "ipywidgets>=7.6" ``` or `conda`: ``` conda install "jupyterlab>=3" "ipywidgets>=7.6" ``` The instructions above apply to JupyterLab 3.x. **For JupyterLab 2 or earlier**, run the following commands to install the required JupyterLab extensions (note that this will require [`node`](https://nodejs.org/) to be installed): ``` # JupyterLab 2.x renderer support jupyter labextension install jupyterlab-plotly@5.15.0 @jupyter-widgets/jupyterlab-manager ``` Please check out our [Troubleshooting guide](https://plotly.com/python/troubleshooting/) if you run into any problems with JupyterLab. ### Jupyter Notebook Support For use in the Jupyter Notebook, install the `notebook` and `ipywidgets` packages using `pip`: ``` pip install "notebook>=5.3" "ipywidgets>=7.5" ``` or `conda`: ``` conda install "notebook>=5.3" "ipywidgets>=7.5" ``` ### Static Image Export plotly.py supports [static image export](https://plotly.com/python/static-image-export/), using either the [`kaleido`](https://github.com/plotly/Kaleido) package (recommended, supported as of `plotly` version 4.9) or the [orca](https://github.com/plotly/orca) command line utility (legacy as of `plotly` version 4.9). #### Kaleido The [`kaleido`](https://github.com/plotly/Kaleido) package has no dependencies and can be installed using pip... ``` pip install -U kaleido ``` or conda. ``` conda install -c conda-forge python-kaleido ``` #### Orca While Kaleido is now the recommended image export approach because it is easier to install and more widely compatible, [static image export](https://plotly.com/python/static-image-export/) can also be supported by the legacy [orca](https://github.com/plotly/orca) command line utility and the [`psutil`](https://github.com/giampaolo/psutil) Python package. These dependencies can both be installed using conda: ``` conda install -c plotly plotly-orca==1.3.1 psutil ``` Or, `psutil` can be installed using pip... ``` pip install psutil ``` and orca can be installed according to the instructions in the [orca README](https://github.com/plotly/orca). ### Extended Geo Support Some plotly.py features rely on fairly large geographic shape files. The county choropleth figure factory is one such example. These shape files are distributed as a separate `plotly-geo` package. This package can be installed using pip... ``` pip install plotly-geo==1.0.0 ``` or conda ``` conda install -c plotly plotly-geo=1.0.0 ``` ## Migration If you're migrating from plotly.py v3 to v4, please check out the [Version 4 migration guide](https://plotly.com/python/v4-migration/) If you're migrating from plotly.py v2 to v3, please check out the [Version 3 migration guide](https://github.com/plotly/plotly.py/blob/master/migration-guide.md) ## Copyright and Licenses Code and documentation copyright 2019 Plotly, Inc. Code released under the [MIT license](https://github.com/plotly/plotly.py/blob/master/LICENSE.txt). Docs released under the [Creative Commons license](https://github.com/plotly/documentation/blob/source/LICENSE). plotly-5.15.0+dfsg1.orig/plotly.egg-info/requires.txt0000644000175000017500000000003214440366050022026 0ustar noahfxnoahfxtenacity>=6.2.0 packaging plotly-5.15.0+dfsg1.orig/jupyterlab-plotly.json0000644000175000017500000000010714440365260021013 0ustar noahfxnoahfx{ "load_extensions": { "jupyterlab-plotly/extension": true } } plotly-5.15.0+dfsg1.orig/setup.cfg0000644000175000017500000000045014440366053016241 0ustar noahfxnoahfx[metadata] description_file = README.md license_files = LICENSE.txt [bdist_wheel] universal = 1 [versioneer] VCS = git style = pep440 versionfile_source = plotly/_version.py versionfile_build = plotly/_version.py tag_prefix = v parentdir_prefix = plotly- [egg_info] tag_build = tag_date = 0 plotly-5.15.0+dfsg1.orig/MANIFEST.in0000644000175000017500000000016614440365260016161 0ustar noahfxnoahfxinclude LICENSE.txt include README.md include jupyterlab-plotly.json include versioneer.py include plotly/_version.py plotly-5.15.0+dfsg1.orig/plotly/0000755000175000017500000000000014440366053015744 5ustar noahfxnoahfxplotly-5.15.0+dfsg1.orig/plotly/subplots.py0000644000175000017500000002751414440365261020202 0ustar noahfxnoahfx# -*- coding: utf-8 -*- import plotly.graph_objects as go from . import _subplots as _sub from ._subplots import SubplotXY, SubplotDomain, SubplotRef # noqa: F401 def make_subplots( rows=1, cols=1, shared_xaxes=False, shared_yaxes=False, start_cell="top-left", print_grid=False, horizontal_spacing=None, vertical_spacing=None, subplot_titles=None, column_widths=None, row_heights=None, specs=None, insets=None, column_titles=None, row_titles=None, x_title=None, y_title=None, figure=None, **kwargs, ) -> go.Figure: """ Return an instance of plotly.graph_objs.Figure with predefined subplots configured in 'layout'. Parameters ---------- rows: int (default 1) Number of rows in the subplot grid. Must be greater than zero. cols: int (default 1) Number of columns in the subplot grid. Must be greater than zero. shared_xaxes: boolean or str (default False) Assign shared (linked) x-axes for 2D cartesian subplots - True or 'columns': Share axes among subplots in the same column - 'rows': Share axes among subplots in the same row - 'all': Share axes across all subplots in the grid. shared_yaxes: boolean or str (default False) Assign shared (linked) y-axes for 2D cartesian subplots - 'columns': Share axes among subplots in the same column - True or 'rows': Share axes among subplots in the same row - 'all': Share axes across all subplots in the grid. start_cell: 'bottom-left' or 'top-left' (default 'top-left') Choose the starting cell in the subplot grid used to set the domains_grid of the subplots. - 'top-left': Subplots are numbered with (1, 1) in the top left corner - 'bottom-left': Subplots are numbererd with (1, 1) in the bottom left corner print_grid: boolean (default True): If True, prints a string representation of the plot grid. Grid may also be printed using the `Figure.print_grid()` method on the resulting figure. horizontal_spacing: float (default 0.2 / cols) Space between subplot columns in normalized plot coordinates. Must be a float between 0 and 1. Applies to all columns (use 'specs' subplot-dependents spacing) vertical_spacing: float (default 0.3 / rows) Space between subplot rows in normalized plot coordinates. Must be a float between 0 and 1. Applies to all rows (use 'specs' subplot-dependents spacing) subplot_titles: list of str or None (default None) Title of each subplot as a list in row-major ordering. Empty strings ("") can be included in the list if no subplot title is desired in that space so that the titles are properly indexed. specs: list of lists of dict or None (default None) Per subplot specifications of subplot type, row/column spanning, and spacing. ex1: specs=[[{}, {}], [{'colspan': 2}, None]] ex2: specs=[[{'rowspan': 2}, {}], [None, {}]] - Indices of the outer list correspond to subplot grid rows starting from the top, if start_cell='top-left', or bottom, if start_cell='bottom-left'. The number of rows in 'specs' must be equal to 'rows'. - Indices of the inner lists correspond to subplot grid columns starting from the left. The number of columns in 'specs' must be equal to 'cols'. - Each item in the 'specs' list corresponds to one subplot in a subplot grid. (N.B. The subplot grid has exactly 'rows' times 'cols' cells.) - Use None for a blank a subplot cell (or to move past a col/row span). - Note that specs[0][0] has the specs of the 'start_cell' subplot. - Each item in 'specs' is a dictionary. The available keys are: * type (string, default 'xy'): Subplot type. One of - 'xy': 2D Cartesian subplot type for scatter, bar, etc. - 'scene': 3D Cartesian subplot for scatter3d, cone, etc. - 'polar': Polar subplot for scatterpolar, barpolar, etc. - 'ternary': Ternary subplot for scatterternary - 'mapbox': Mapbox subplot for scattermapbox - 'domain': Subplot type for traces that are individually positioned. pie, parcoords, parcats, etc. - trace type: A trace type which will be used to determine the appropriate subplot type for that trace * secondary_y (bool, default False): If True, create a secondary y-axis positioned on the right side of the subplot. Only valid if type='xy'. * colspan (int, default 1): number of subplot columns for this subplot to span. * rowspan (int, default 1): number of subplot rows for this subplot to span. * l (float, default 0.0): padding left of cell * r (float, default 0.0): padding right of cell * t (float, default 0.0): padding right of cell * b (float, default 0.0): padding bottom of cell - Note: Use 'horizontal_spacing' and 'vertical_spacing' to adjust the spacing in between the subplots. insets: list of dict or None (default None): Inset specifications. Insets are subplots that overlay grid subplots - Each item in 'insets' is a dictionary. The available keys are: * cell (tuple, default=(1,1)): (row, col) index of the subplot cell to overlay inset axes onto. * type (string, default 'xy'): Subplot type * l (float, default=0.0): padding left of inset in fraction of cell width * w (float or 'to_end', default='to_end') inset width in fraction of cell width ('to_end': to cell right edge) * b (float, default=0.0): padding bottom of inset in fraction of cell height * h (float or 'to_end', default='to_end') inset height in fraction of cell height ('to_end': to cell top edge) column_widths: list of numbers or None (default None) list of length `cols` of the relative widths of each column of suplots. Values are normalized internally and used to distribute overall width of the figure (excluding padding) among the columns. For backward compatibility, may also be specified using the `column_width` keyword argument. row_heights: list of numbers or None (default None) list of length `rows` of the relative heights of each row of subplots. If start_cell='top-left' then row heights are applied top to bottom. Otherwise, if start_cell='bottom-left' then row heights are applied bottom to top. For backward compatibility, may also be specified using the `row_width` kwarg. If specified as `row_width`, then the width values are applied from bottom to top regardless of the value of start_cell. This matches the legacy behavior of the `row_width` argument. column_titles: list of str or None (default None) list of length `cols` of titles to place above the top subplot in each column. row_titles: list of str or None (default None) list of length `rows` of titles to place on the right side of each row of subplots. If start_cell='top-left' then row titles are applied top to bottom. Otherwise, if start_cell='bottom-left' then row titles are applied bottom to top. x_title: str or None (default None) Title to place below the bottom row of subplots, centered horizontally y_title: str or None (default None) Title to place to the left of the left column of subplots, centered vertically figure: go.Figure or None (default None) If None, a new go.Figure instance will be created and its axes will be populated with those corresponding to the requested subplot geometry and this new figure will be returned. If a go.Figure instance, the axes will be added to the layout of this figure and this figure will be returned. If the figure already contains axes, they will be overwritten. Examples -------- Example 1: >>> # Stack two subplots vertically, and add a scatter trace to each >>> from plotly.subplots import make_subplots >>> import plotly.graph_objects as go >>> fig = make_subplots(rows=2) This is the format of your plot grid: [ (1,1) xaxis1,yaxis1 ] [ (2,1) xaxis2,yaxis2 ] >>> fig.add_scatter(y=[2, 1, 3], row=1, col=1) # doctest: +ELLIPSIS Figure(...) >>> fig.add_scatter(y=[1, 3, 2], row=2, col=1) # doctest: +ELLIPSIS Figure(...) or see Figure.append_trace Example 2: >>> # Stack a scatter plot >>> fig = make_subplots(rows=2, shared_xaxes=True) This is the format of your plot grid: [ (1,1) xaxis1,yaxis1 ] [ (2,1) xaxis2,yaxis2 ] >>> fig.add_scatter(y=[2, 1, 3], row=1, col=1) # doctest: +ELLIPSIS Figure(...) >>> fig.add_scatter(y=[1, 3, 2], row=2, col=1) # doctest: +ELLIPSIS Figure(...) Example 3: >>> # irregular subplot layout (more examples below under 'specs') >>> fig = make_subplots(rows=2, cols=2, ... specs=[[{}, {}], ... [{'colspan': 2}, None]]) This is the format of your plot grid: [ (1,1) xaxis1,yaxis1 ] [ (1,2) xaxis2,yaxis2 ] [ (2,1) xaxis3,yaxis3 - ] >>> fig.add_trace(go.Scatter(x=[1,2,3], y=[2,1,2]), row=1, col=1) # doctest: +ELLIPSIS Figure(...) >>> fig.add_trace(go.Scatter(x=[1,2,3], y=[2,1,2]), row=1, col=2) # doctest: +ELLIPSIS Figure(...) >>> fig.add_trace(go.Scatter(x=[1,2,3], y=[2,1,2]), row=2, col=1) # doctest: +ELLIPSIS Figure(...) Example 4: >>> # insets >>> fig = make_subplots(insets=[{'cell': (1,1), 'l': 0.7, 'b': 0.3}]) This is the format of your plot grid: [ (1,1) xaxis1,yaxis1 ] With insets: [ xaxis2,yaxis2 ] over [ (1,1) xaxis1,yaxis1 ] >>> fig.add_scatter(x=[1,2,3], y=[2,1,1]) # doctest: +ELLIPSIS Figure(...) >>> fig.add_scatter(x=[1,2,3], y=[2,1,2], xaxis='x2', yaxis='y2') # doctest: +ELLIPSIS Figure(...) Example 5: >>> # include subplot titles >>> fig = make_subplots(rows=2, subplot_titles=('Plot 1','Plot 2')) This is the format of your plot grid: [ (1,1) x1,y1 ] [ (2,1) x2,y2 ] >>> fig.add_scatter(x=[1,2,3], y=[2,1,2], row=1, col=1) # doctest: +ELLIPSIS Figure(...) >>> fig.add_bar(x=[1,2,3], y=[2,1,2], row=2, col=1) # doctest: +ELLIPSIS Figure(...) Example 6: Subplot with mixed subplot types >>> fig = make_subplots(rows=2, cols=2, ... specs=[[{'type': 'xy'}, {'type': 'polar'}], ... [{'type': 'scene'}, {'type': 'ternary'}]]) >>> fig.add_traces( ... [go.Scatter(y=[2, 3, 1]), ... go.Scatterpolar(r=[1, 3, 2], theta=[0, 45, 90]), ... go.Scatter3d(x=[1, 2, 1], y=[2, 3, 1], z=[0, 3, 5]), ... go.Scatterternary(a=[0.1, 0.2, 0.1], ... b=[0.2, 0.3, 0.1], ... c=[0.7, 0.5, 0.8])], ... rows=[1, 1, 2, 2], ... cols=[1, 2, 1, 2]) # doctest: +ELLIPSIS Figure(...) """ return _sub.make_subplots( rows, cols, shared_xaxes, shared_yaxes, start_cell, print_grid, horizontal_spacing, vertical_spacing, subplot_titles, column_widths, row_heights, specs, insets, column_titles, row_titles, x_title, y_title, figure, **kwargs, ) plotly-5.15.0+dfsg1.orig/plotly/utils.py0000644000175000017500000001405614440365261017464 0ustar noahfxnoahfxfrom __future__ import absolute_import, division import textwrap from pprint import PrettyPrinter from _plotly_utils.utils import * from _plotly_utils.data_utils import * # Pretty printing def _list_repr_elided(v, threshold=200, edgeitems=3, indent=0, width=80): """ Return a string representation for of a list where list is elided if it has more than n elements Parameters ---------- v : list Input list threshold : Maximum number of elements to display Returns ------- str """ if isinstance(v, list): open_char, close_char = "[", "]" elif isinstance(v, tuple): open_char, close_char = "(", ")" else: raise ValueError("Invalid value of type: %s" % type(v)) if len(v) <= threshold: disp_v = v else: disp_v = list(v[:edgeitems]) + ["..."] + list(v[-edgeitems:]) v_str = open_char + ", ".join([str(e) for e in disp_v]) + close_char v_wrapped = "\n".join( textwrap.wrap( v_str, width=width, initial_indent=" " * (indent + 1), subsequent_indent=" " * (indent + 1), ) ).strip() return v_wrapped class ElidedWrapper(object): """ Helper class that wraps values of certain types and produces a custom __repr__() that may be elided and is suitable for use during pretty printing """ def __init__(self, v, threshold, indent): self.v = v self.indent = indent self.threshold = threshold @staticmethod def is_wrappable(v): numpy = get_module("numpy") if isinstance(v, (list, tuple)) and len(v) > 0 and not isinstance(v[0], dict): return True elif numpy and isinstance(v, numpy.ndarray): return True elif isinstance(v, str): return True else: return False def __repr__(self): numpy = get_module("numpy") if isinstance(self.v, (list, tuple)): # Handle lists/tuples res = _list_repr_elided( self.v, threshold=self.threshold, indent=self.indent ) return res elif numpy and isinstance(self.v, numpy.ndarray): # Handle numpy arrays # Get original print opts orig_opts = numpy.get_printoptions() # Set threshold to self.max_list_elements numpy.set_printoptions( **dict(orig_opts, threshold=self.threshold, edgeitems=3, linewidth=80) ) res = self.v.__repr__() # Add indent to all but the first line res_lines = res.split("\n") res = ("\n" + " " * self.indent).join(res_lines) # Restore print opts numpy.set_printoptions(**orig_opts) return res elif isinstance(self.v, str): # Handle strings if len(self.v) > 80: return "(" + repr(self.v[:30]) + " ... " + repr(self.v[-30:]) + ")" else: return self.v.__repr__() else: return self.v.__repr__() class ElidedPrettyPrinter(PrettyPrinter): """ PrettyPrinter subclass that elides long lists/arrays/strings """ def __init__(self, *args, **kwargs): self.threshold = kwargs.pop("threshold", 200) PrettyPrinter.__init__(self, *args, **kwargs) def _format(self, val, stream, indent, allowance, context, level): if ElidedWrapper.is_wrappable(val): elided_val = ElidedWrapper(val, self.threshold, indent) return self._format(elided_val, stream, indent, allowance, context, level) else: return PrettyPrinter._format( self, val, stream, indent, allowance, context, level ) def node_generator(node, path=()): """ General, node-yielding generator. Yields (node, path) tuples when it finds values that are dict instances. A path is a sequence of hashable values that can be used as either keys to a mapping (dict) or indices to a sequence (list). A path is always wrt to some object. Given an object, a path explains how to get from the top level of that object to a nested value in the object. :param (dict) node: Part of a dict to be traversed. :param (tuple[str]) path: Defines the path of the current node. :return: (Generator) Example: >>> for node, path in node_generator({'a': {'b': 5}}): ... print(node, path) {'a': {'b': 5}} () {'b': 5} ('a',) """ if not isinstance(node, dict): return # in case it's called with a non-dict node at top level yield node, path for key, val in node.items(): if isinstance(val, dict): for item in node_generator(val, path + (key,)): yield item def get_by_path(obj, path): """ Iteratively get on obj for each key in path. :param (list|dict) obj: The top-level object. :param (tuple[str]|tuple[int]) path: Keys to access parts of obj. :return: (*) Example: >>> figure = {'data': [{'x': [5]}]} >>> path = ('data', 0, 'x') >>> get_by_path(figure, path) [5] """ for key in path: obj = obj[key] return obj def decode_unicode(coll): if isinstance(coll, list): for no, entry in enumerate(coll): if isinstance(entry, (dict, list)): coll[no] = decode_unicode(entry) else: if isinstance(entry, str): try: coll[no] = str(entry) except UnicodeEncodeError: pass elif isinstance(coll, dict): keys, vals = list(coll.keys()), list(coll.values()) for key, val in zip(keys, vals): if isinstance(val, (dict, list)): coll[key] = decode_unicode(val) elif isinstance(val, str): try: coll[key] = str(val) except UnicodeEncodeError: pass coll[str(key)] = coll.pop(key) return coll plotly-5.15.0+dfsg1.orig/plotly/config.py0000644000175000017500000000016614440365260017565 0ustar noahfxnoahfxfrom __future__ import absolute_import from _plotly_future_ import _chart_studio_error _chart_studio_error("config") plotly-5.15.0+dfsg1.orig/plotly/validator_cache.py0000644000175000017500000000224314440365261021427 0ustar noahfxnoahfximport importlib from _plotly_utils.basevalidators import LiteralValidator class ValidatorCache(object): _cache = {} @staticmethod def get_validator(parent_path, prop_name): key = (parent_path, prop_name) if key not in ValidatorCache._cache: if "." not in parent_path and prop_name == "type": # Special case for .type property of traces validator = LiteralValidator("type", parent_path, parent_path) else: lookup_name = None if parent_path == "layout": from .graph_objects import Layout match = Layout._subplotid_prop_re.match(prop_name) if match: lookup_name = match.group(1) lookup_name = lookup_name or prop_name class_name = lookup_name.title() + "Validator" validator = getattr( importlib.import_module("plotly.validators." + parent_path), class_name, )(plotly_name=prop_name) ValidatorCache._cache[key] = validator return ValidatorCache._cache[key] plotly-5.15.0+dfsg1.orig/plotly/conftest.py0000644000175000017500000000116214440365260020142 0ustar noahfxnoahfximport pytest import os def pytest_ignore_collect(path): # Ignored files, most of them are raising a chart studio error ignored_paths = [ "exploding_module.py", "chunked_requests.py", "v2.py", "v1.py", "presentation_objs.py", "widgets.py", "dashboard_objs.py", "grid_objs.py", "config.py", "presentation_objs.py", "session.py", ] if ( os.path.basename(str(path)) in ignored_paths or "plotly/plotly/plotly/__init__.py" in str(path) or "plotly/api/utils.py" in str(path) ): return True plotly-5.15.0+dfsg1.orig/plotly/files.py0000644000175000017500000000011114440365260017410 0ustar noahfxnoahfxfrom __future__ import absolute_import from _plotly_utils.files import * plotly-5.15.0+dfsg1.orig/plotly/basewidget.py0000644000175000017500000010404114440365260020433 0ustar noahfxnoahfximport uuid from importlib import import_module import os import numbers try: from urllib import parse except ImportError: from urlparse import urlparse as parse import ipywidgets as widgets from traitlets import List, Unicode, Dict, observe, Integer from .basedatatypes import BaseFigure, BasePlotlyType from .callbacks import BoxSelector, LassoSelector, InputDeviceState, Points from .serializers import custom_serializers from .version import __frontend_version__ @widgets.register class BaseFigureWidget(BaseFigure, widgets.DOMWidget): """ Base class for FigureWidget. The FigureWidget class is code-generated as a subclass """ # Widget Traits # ------------- # Widget traitlets are automatically synchronized with the FigureModel # JavaScript object _view_name = Unicode("FigureView").tag(sync=True) _view_module = Unicode("jupyterlab-plotly").tag(sync=True) _view_module_version = Unicode(__frontend_version__).tag(sync=True) _model_name = Unicode("FigureModel").tag(sync=True) _model_module = Unicode("jupyterlab-plotly").tag(sync=True) _model_module_version = Unicode(__frontend_version__).tag(sync=True) # ### _data and _layout ### # These properties store the current state of the traces and # layout as JSON-style dicts. These dicts do not store any subclasses of # `BasePlotlyType` # # Note: These are only automatically synced with the frontend on full # assignment, not on mutation. We use this fact to only directly sync # them to the front-end on FigureWidget construction. All other updates # are made using mutation, and they are manually synced to the frontend # using the relayout/restyle/update/etc. messages. _layout = Dict().tag(sync=True, **custom_serializers) _data = List().tag(sync=True, **custom_serializers) _config = Dict().tag(sync=True, **custom_serializers) # ### Python -> JS message properties ### # These properties are used to send messages from Python to the # frontend. Messages are sent by assigning the message contents to the # appropriate _py2js_* property and then immediatly assigning None to the # property. # # See JSDoc comments in the FigureModel class in js/src/Figure.js for # detailed descriptions of the messages. _py2js_addTraces = Dict(allow_none=True).tag(sync=True, **custom_serializers) _py2js_restyle = Dict(allow_none=True).tag(sync=True, **custom_serializers) _py2js_relayout = Dict(allow_none=True).tag(sync=True, **custom_serializers) _py2js_update = Dict(allow_none=True).tag(sync=True, **custom_serializers) _py2js_animate = Dict(allow_none=True).tag(sync=True, **custom_serializers) _py2js_deleteTraces = Dict(allow_none=True).tag(sync=True, **custom_serializers) _py2js_moveTraces = Dict(allow_none=True).tag(sync=True, **custom_serializers) _py2js_removeLayoutProps = Dict(allow_none=True).tag( sync=True, **custom_serializers ) _py2js_removeTraceProps = Dict(allow_none=True).tag(sync=True, **custom_serializers) # ### JS -> Python message properties ### # These properties are used to receive messages from the frontend. # Messages are received by defining methods that observe changes to these # properties. Receive methods are named `_handler_js2py_*` where '*' is # the name of the corresponding message property. Receive methods are # responsible for setting the message property to None after retreiving # the message data. # # See JSDoc comments in the FigureModel class in js/src/Figure.js for # detailed descriptions of the messages. _js2py_traceDeltas = Dict(allow_none=True).tag(sync=True, **custom_serializers) _js2py_layoutDelta = Dict(allow_none=True).tag(sync=True, **custom_serializers) _js2py_restyle = Dict(allow_none=True).tag(sync=True, **custom_serializers) _js2py_relayout = Dict(allow_none=True).tag(sync=True, **custom_serializers) _js2py_update = Dict(allow_none=True).tag(sync=True, **custom_serializers) _js2py_pointsCallback = Dict(allow_none=True).tag(sync=True, **custom_serializers) # ### Message tracking properties ### # The _last_layout_edit_id and _last_trace_edit_id properties are used # to keep track of the edit id of the message that most recently # requested an update to the Figures layout or traces respectively. # # We track this information because we don't want to update the Figure's # default layout/trace properties (_layout_defaults, _data_defaults) # while edits are in process. This can lead to inconsistent property # states. _last_layout_edit_id = Integer(0).tag(sync=True) _last_trace_edit_id = Integer(0).tag(sync=True) _set_trace_uid = True _allow_disable_validation = False # Constructor # ----------- def __init__( self, data=None, layout=None, frames=None, skip_invalid=False, **kwargs ): # Call superclass constructors # ---------------------------- # Note: We rename layout to layout_plotly because to deconflict it # with the `layout` constructor parameter of the `widgets.DOMWidget` # ipywidgets class super(BaseFigureWidget, self).__init__( data=data, layout_plotly=layout, frames=frames, skip_invalid=skip_invalid, **kwargs, ) # Validate Frames # --------------- # Frames are not supported by figure widget if self._frame_objs: BaseFigureWidget._display_frames_error() # Message States # -------------- # ### Layout ### # _last_layout_edit_id is described above self._last_layout_edit_id = 0 # _layout_edit_in_process is set to True if there are layout edit # operations that have been sent to the frontend that haven't # completed yet. self._layout_edit_in_process = False # _waiting_edit_callbacks is a list of callback functions that # should be executed as soon as all pending edit operations are # completed self._waiting_edit_callbacks = [] # ### Trace ### # _last_trace_edit_id: described above self._last_trace_edit_id = 0 # _trace_edit_in_process is set to True if there are trace edit # operations that have been sent to the frontend that haven't # completed yet. self._trace_edit_in_process = False # View count # ---------- # ipywidget property that stores the number of active frontend # views of this widget self._view_count = 0 # Python -> JavaScript Messages # ----------------------------- def _send_relayout_msg(self, layout_data, source_view_id=None): """ Send Plotly.relayout message to the frontend Parameters ---------- layout_data : dict Plotly.relayout layout data source_view_id : str UID of view that triggered this relayout operation (e.g. By the user clicking 'zoom' in the toolbar). None if the operation was not triggered by a frontend view """ # Increment layout edit messages IDs # ---------------------------------- layout_edit_id = self._last_layout_edit_id + 1 self._last_layout_edit_id = layout_edit_id self._layout_edit_in_process = True # Build message # ------------- msg_data = { "relayout_data": layout_data, "layout_edit_id": layout_edit_id, "source_view_id": source_view_id, } # Send message # ------------ self._py2js_relayout = msg_data self._py2js_relayout = None def _send_restyle_msg(self, restyle_data, trace_indexes=None, source_view_id=None): """ Send Plotly.restyle message to the frontend Parameters ---------- restyle_data : dict Plotly.restyle restyle data trace_indexes : list[int] List of trace indexes that the restyle operation applies to source_view_id : str UID of view that triggered this restyle operation (e.g. By the user clicking the legend to hide a trace). None if the operation was not triggered by a frontend view """ # Validate / normalize inputs # --------------------------- trace_indexes = self._normalize_trace_indexes(trace_indexes) # Increment layout/trace edit message IDs # --------------------------------------- layout_edit_id = self._last_layout_edit_id + 1 self._last_layout_edit_id = layout_edit_id self._layout_edit_in_process = True trace_edit_id = self._last_trace_edit_id + 1 self._last_trace_edit_id = trace_edit_id self._trace_edit_in_process = True # Build message # ------------- restyle_msg = { "restyle_data": restyle_data, "restyle_traces": trace_indexes, "trace_edit_id": trace_edit_id, "layout_edit_id": layout_edit_id, "source_view_id": source_view_id, } # Send message # ------------ self._py2js_restyle = restyle_msg self._py2js_restyle = None def _send_addTraces_msg(self, new_traces_data): """ Send Plotly.addTraces message to the frontend Parameters ---------- new_traces_data : list[dict] List of trace data for new traces as accepted by Plotly.addTraces """ # Increment layout/trace edit message IDs # --------------------------------------- layout_edit_id = self._last_layout_edit_id + 1 self._last_layout_edit_id = layout_edit_id self._layout_edit_in_process = True trace_edit_id = self._last_trace_edit_id + 1 self._last_trace_edit_id = trace_edit_id self._trace_edit_in_process = True # Build message # ------------- add_traces_msg = { "trace_data": new_traces_data, "trace_edit_id": trace_edit_id, "layout_edit_id": layout_edit_id, } # Send message # ------------ self._py2js_addTraces = add_traces_msg self._py2js_addTraces = None def _send_moveTraces_msg(self, current_inds, new_inds): """ Send Plotly.moveTraces message to the frontend Parameters ---------- current_inds : list[int] List of current trace indexes new_inds : list[int] List of new trace indexes """ # Build message # ------------- move_msg = {"current_trace_inds": current_inds, "new_trace_inds": new_inds} # Send message # ------------ self._py2js_moveTraces = move_msg self._py2js_moveTraces = None def _send_update_msg( self, restyle_data, relayout_data, trace_indexes=None, source_view_id=None ): """ Send Plotly.update message to the frontend Parameters ---------- restyle_data : dict Plotly.update restyle data relayout_data : dict Plotly.update relayout data trace_indexes : list[int] List of trace indexes that the update operation applies to source_view_id : str UID of view that triggered this update operation (e.g. By the user clicking a button). None if the operation was not triggered by a frontend view """ # Validate / normalize inputs # --------------------------- trace_indexes = self._normalize_trace_indexes(trace_indexes) # Increment layout/trace edit message IDs # --------------------------------------- trace_edit_id = self._last_trace_edit_id + 1 self._last_trace_edit_id = trace_edit_id self._trace_edit_in_process = True layout_edit_id = self._last_layout_edit_id + 1 self._last_layout_edit_id = layout_edit_id self._layout_edit_in_process = True # Build message # ------------- update_msg = { "style_data": restyle_data, "layout_data": relayout_data, "style_traces": trace_indexes, "trace_edit_id": trace_edit_id, "layout_edit_id": layout_edit_id, "source_view_id": source_view_id, } # Send message # ------------ self._py2js_update = update_msg self._py2js_update = None def _send_animate_msg( self, styles_data, relayout_data, trace_indexes, animation_opts ): """ Send Plotly.update message to the frontend Note: there is no source_view_id parameter because animations triggered by the fontend are not currently supported Parameters ---------- styles_data : list[dict] Plotly.animate styles data relayout_data : dict Plotly.animate relayout data trace_indexes : list[int] List of trace indexes that the animate operation applies to """ # Validate / normalize inputs # --------------------------- trace_indexes = self._normalize_trace_indexes(trace_indexes) # Increment layout/trace edit message IDs # --------------------------------------- trace_edit_id = self._last_trace_edit_id + 1 self._last_trace_edit_id = trace_edit_id self._trace_edit_in_process = True layout_edit_id = self._last_layout_edit_id + 1 self._last_layout_edit_id = layout_edit_id self._layout_edit_in_process = True # Build message # ------------- animate_msg = { "style_data": styles_data, "layout_data": relayout_data, "style_traces": trace_indexes, "animation_opts": animation_opts, "trace_edit_id": trace_edit_id, "layout_edit_id": layout_edit_id, "source_view_id": None, } # Send message # ------------ self._py2js_animate = animate_msg self._py2js_animate = None def _send_deleteTraces_msg(self, delete_inds): """ Send Plotly.deleteTraces message to the frontend Parameters ---------- delete_inds : list[int] List of trace indexes of traces to delete """ # Increment layout/trace edit message IDs # --------------------------------------- trace_edit_id = self._last_trace_edit_id + 1 self._last_trace_edit_id = trace_edit_id self._trace_edit_in_process = True layout_edit_id = self._last_layout_edit_id + 1 self._last_layout_edit_id = layout_edit_id self._layout_edit_in_process = True # Build message # ------------- delete_msg = { "delete_inds": delete_inds, "layout_edit_id": layout_edit_id, "trace_edit_id": trace_edit_id, } # Send message # ------------ self._py2js_deleteTraces = delete_msg self._py2js_deleteTraces = None # JavaScript -> Python Messages # ----------------------------- @observe("_js2py_traceDeltas") def _handler_js2py_traceDeltas(self, change): """ Process trace deltas message from the frontend """ # Receive message # --------------- msg_data = change["new"] if not msg_data: self._js2py_traceDeltas = None return trace_deltas = msg_data["trace_deltas"] trace_edit_id = msg_data["trace_edit_id"] # Apply deltas # ------------ # We only apply the deltas if this message corresponds to the most # recent trace edit operation if trace_edit_id == self._last_trace_edit_id: # ### Loop over deltas ### for delta in trace_deltas: # #### Find existing trace for uid ### trace_uid = delta["uid"] trace_uids = [trace.uid for trace in self.data] trace_index = trace_uids.index(trace_uid) uid_trace = self.data[trace_index] # #### Transform defaults to delta #### delta_transform = BaseFigureWidget._transform_data( uid_trace._prop_defaults, delta ) # #### Remove overlapping properties #### # If a property is present in both _props and _prop_defaults # then we remove the copy from _props remove_props = self._remove_overlapping_props( uid_trace._props, uid_trace._prop_defaults ) # #### Notify frontend model of property removal #### if remove_props: remove_trace_props_msg = { "remove_trace": trace_index, "remove_props": remove_props, } self._py2js_removeTraceProps = remove_trace_props_msg self._py2js_removeTraceProps = None # #### Dispatch change callbacks #### self._dispatch_trace_change_callbacks(delta_transform, [trace_index]) # ### Trace edits no longer in process ### self._trace_edit_in_process = False # ### Call any waiting trace edit callbacks ### if not self._layout_edit_in_process: while self._waiting_edit_callbacks: self._waiting_edit_callbacks.pop()() self._js2py_traceDeltas = None @observe("_js2py_layoutDelta") def _handler_js2py_layoutDelta(self, change): """ Process layout delta message from the frontend """ # Receive message # --------------- msg_data = change["new"] if not msg_data: self._js2py_layoutDelta = None return layout_delta = msg_data["layout_delta"] layout_edit_id = msg_data["layout_edit_id"] # Apply delta # ----------- # We only apply the delta if this message corresponds to the most # recent layout edit operation if layout_edit_id == self._last_layout_edit_id: # ### Transform defaults to delta ### delta_transform = BaseFigureWidget._transform_data( self._layout_defaults, layout_delta ) # ### Remove overlapping properties ### # If a property is present in both _layout and _layout_defaults # then we remove the copy from _layout removed_props = self._remove_overlapping_props( self._layout, self._layout_defaults ) # ### Notify frontend model of property removal ### if removed_props: remove_props_msg = {"remove_props": removed_props} self._py2js_removeLayoutProps = remove_props_msg self._py2js_removeLayoutProps = None # ### Create axis objects ### # For example, when a SPLOM trace is created the layout defaults # may include axes that weren't explicitly defined by the user. for proppath in delta_transform: prop = proppath[0] match = self.layout._subplot_re_match(prop) if match and prop not in self.layout: # We need to create a subplotid object self.layout[prop] = {} # ### Dispatch change callbacks ### self._dispatch_layout_change_callbacks(delta_transform) # ### Layout edits no longer in process ### self._layout_edit_in_process = False # ### Call any waiting layout edit callbacks ### if not self._trace_edit_in_process: while self._waiting_edit_callbacks: self._waiting_edit_callbacks.pop()() self._js2py_layoutDelta = None @observe("_js2py_restyle") def _handler_js2py_restyle(self, change): """ Process Plotly.restyle message from the frontend """ # Receive message # --------------- restyle_msg = change["new"] if not restyle_msg: self._js2py_restyle = None return style_data = restyle_msg["style_data"] style_traces = restyle_msg["style_traces"] source_view_id = restyle_msg["source_view_id"] # Perform restyle # --------------- self.plotly_restyle( restyle_data=style_data, trace_indexes=style_traces, source_view_id=source_view_id, ) self._js2py_restyle = None @observe("_js2py_update") def _handler_js2py_update(self, change): """ Process Plotly.update message from the frontend """ # Receive message # --------------- update_msg = change["new"] if not update_msg: self._js2py_update = None return style = update_msg["style_data"] trace_indexes = update_msg["style_traces"] layout = update_msg["layout_data"] source_view_id = update_msg["source_view_id"] # Perform update # -------------- self.plotly_update( restyle_data=style, relayout_data=layout, trace_indexes=trace_indexes, source_view_id=source_view_id, ) self._js2py_update = None @observe("_js2py_relayout") def _handler_js2py_relayout(self, change): """ Process Plotly.relayout message from the frontend """ # Receive message # --------------- relayout_msg = change["new"] if not relayout_msg: self._js2py_relayout = None return relayout_data = relayout_msg["relayout_data"] source_view_id = relayout_msg["source_view_id"] if "lastInputTime" in relayout_data: # Remove 'lastInputTime'. Seems to be an internal plotly # property that is introduced for some plot types, but it is not # actually a property in the schema relayout_data.pop("lastInputTime") # Perform relayout # ---------------- self.plotly_relayout(relayout_data=relayout_data, source_view_id=source_view_id) self._js2py_relayout = None @observe("_js2py_pointsCallback") def _handler_js2py_pointsCallback(self, change): """ Process points callback message from the frontend """ # Receive message # --------------- callback_data = change["new"] if not callback_data: self._js2py_pointsCallback = None return # Get event type # -------------- event_type = callback_data["event_type"] # Build Selector Object # --------------------- if callback_data.get("selector", None): selector_data = callback_data["selector"] selector_type = selector_data["type"] selector_state = selector_data["selector_state"] if selector_type == "box": selector = BoxSelector(**selector_state) elif selector_type == "lasso": selector = LassoSelector(**selector_state) else: raise ValueError("Unsupported selector type: %s" % selector_type) else: selector = None # Build Input Device State Object # ------------------------------- if callback_data.get("device_state", None): device_state_data = callback_data["device_state"] state = InputDeviceState(**device_state_data) else: state = None # Build Trace Points Dictionary # ----------------------------- points_data = callback_data["points"] trace_points = { trace_ind: { "point_inds": [], "xs": [], "ys": [], "trace_name": self._data_objs[trace_ind].name, "trace_index": trace_ind, } for trace_ind in range(len(self._data_objs)) } for x, y, point_ind, trace_ind in zip( points_data["xs"], points_data["ys"], points_data["point_indexes"], points_data["trace_indexes"], ): trace_dict = trace_points[trace_ind] trace_dict["xs"].append(x) trace_dict["ys"].append(y) trace_dict["point_inds"].append(point_ind) # Dispatch callbacks # ------------------ for trace_ind, trace_points_data in trace_points.items(): points = Points(**trace_points_data) trace = self.data[trace_ind] if event_type == "plotly_click": trace._dispatch_on_click(points, state) elif event_type == "plotly_hover": trace._dispatch_on_hover(points, state) elif event_type == "plotly_unhover": trace._dispatch_on_unhover(points, state) elif event_type == "plotly_selected": trace._dispatch_on_selection(points, selector) elif event_type == "plotly_deselect": trace._dispatch_on_deselect(points) self._js2py_pointsCallback = None # Display # ------- def _repr_html_(self): """ Customize html representation """ raise NotImplementedError # Prefer _repr_mimebundle_ def _repr_mimebundle_(self, include=None, exclude=None, validate=True, **kwargs): """ Return mimebundle corresponding to default renderer. """ return { "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, "model_id": self._model_id, }, } def _ipython_display_(self): """ Handle rich display of figures in ipython contexts """ raise NotImplementedError # Prefer _repr_mimebundle_ # Callbacks # --------- def on_edits_completed(self, fn): """ Register a function to be called after all pending trace and layout edit operations have completed If there are no pending edit operations then function is called immediately Parameters ---------- fn : callable Function of zero arguments to be called when all pending edit operations have completed """ if self._layout_edit_in_process or self._trace_edit_in_process: self._waiting_edit_callbacks.append(fn) else: fn() # Validate No Frames # ------------------ @property def frames(self): # Note: This property getter is identical to that of the superclass, # but it must be included here because we're overriding the setter # below. return self._frame_objs @frames.setter def frames(self, new_frames): if new_frames: BaseFigureWidget._display_frames_error() @staticmethod def _display_frames_error(): """ Display an informative error when user attempts to set frames on a FigureWidget Raises ------ ValueError always """ msg = """ Frames are not supported by the plotly.graph_objs.FigureWidget class. Note: Frames are supported by the plotly.graph_objs.Figure class""" raise ValueError(msg) # Static Helpers # -------------- @staticmethod def _remove_overlapping_props(input_data, delta_data, prop_path=()): """ Remove properties in input_data that are also in delta_data, and do so recursively. Exception: Never remove 'uid' from input_data, this property is used to align traces Parameters ---------- input_data : dict|list delta_data : dict|list Returns ------- list[tuple[str|int]] List of removed property path tuples """ # Initialize removed # ------------------ # This is the list of path tuples to the properties that were # removed from input_data removed = [] # Handle dict # ----------- if isinstance(input_data, dict): assert isinstance(delta_data, dict) for p, delta_val in delta_data.items(): if isinstance(delta_val, dict) or BaseFigure._is_dict_list(delta_val): if p in input_data: # ### Recurse ### input_val = input_data[p] recur_prop_path = prop_path + (p,) recur_removed = BaseFigureWidget._remove_overlapping_props( input_val, delta_val, recur_prop_path ) removed.extend(recur_removed) # Check whether the last property in input_val # has been removed. If so, remove it entirely if not input_val: input_data.pop(p) removed.append(recur_prop_path) elif p in input_data and p != "uid": # ### Remove property ### input_data.pop(p) removed.append(prop_path + (p,)) # Handle list # ----------- elif isinstance(input_data, list): assert isinstance(delta_data, list) for i, delta_val in enumerate(delta_data): if i >= len(input_data): break input_val = input_data[i] if ( input_val is not None and isinstance(delta_val, dict) or BaseFigure._is_dict_list(delta_val) ): # ### Recurse ### recur_prop_path = prop_path + (i,) recur_removed = BaseFigureWidget._remove_overlapping_props( input_val, delta_val, recur_prop_path ) removed.extend(recur_removed) return removed @staticmethod def _transform_data(to_data, from_data, should_remove=True, relayout_path=()): """ Transform to_data into from_data and return relayout-style description of the transformation Parameters ---------- to_data : dict|list from_data : dict|list Returns ------- dict relayout-style description of the transformation """ # Initialize relayout data # ------------------------ relayout_data = {} # Handle dict # ----------- if isinstance(to_data, dict): # ### Validate from_data ### if not isinstance(from_data, dict): raise ValueError( "Mismatched data types: {to_dict} {from_data}".format( to_dict=to_data, from_data=from_data ) ) # ### Add/modify properties ### # Loop over props/vals for from_prop, from_val in from_data.items(): # #### Handle compound vals recursively #### if isinstance(from_val, dict) or BaseFigure._is_dict_list(from_val): # ##### Init property value if needed ##### if from_prop not in to_data: to_data[from_prop] = {} if isinstance(from_val, dict) else [] # ##### Transform property val recursively ##### input_val = to_data[from_prop] relayout_data.update( BaseFigureWidget._transform_data( input_val, from_val, should_remove=should_remove, relayout_path=relayout_path + (from_prop,), ) ) # #### Handle simple vals directly #### else: if from_prop not in to_data or not BasePlotlyType._vals_equal( to_data[from_prop], from_val ): to_data[from_prop] = from_val relayout_path_prop = relayout_path + (from_prop,) relayout_data[relayout_path_prop] = from_val # ### Remove properties ### if should_remove: for remove_prop in set(to_data.keys()).difference( set(from_data.keys()) ): to_data.pop(remove_prop) # Handle list # ----------- elif isinstance(to_data, list): # ### Validate from_data ### if not isinstance(from_data, list): raise ValueError( "Mismatched data types: to_data: {to_data} {from_data}".format( to_data=to_data, from_data=from_data ) ) # ### Add/modify properties ### # Loop over indexes / elements for i, from_val in enumerate(from_data): # #### Initialize element if needed #### if i >= len(to_data): to_data.append(None) input_val = to_data[i] # #### Handle compound element recursively #### if input_val is not None and ( isinstance(from_val, dict) or BaseFigure._is_dict_list(from_val) ): relayout_data.update( BaseFigureWidget._transform_data( input_val, from_val, should_remove=should_remove, relayout_path=relayout_path + (i,), ) ) # #### Handle simple elements directly #### else: if not BasePlotlyType._vals_equal(to_data[i], from_val): to_data[i] = from_val relayout_data[relayout_path + (i,)] = from_val return relayout_data plotly-5.15.0+dfsg1.orig/plotly/tools.py0000644000175000017500000006103314440365261017461 0ustar noahfxnoahfx# -*- coding: utf-8 -*- """ tools ===== Functions that USERS will possibly want access to. """ from __future__ import absolute_import import json import warnings import re import os from plotly import exceptions, optional_imports from plotly.files import PLOTLY_DIR DEFAULT_PLOTLY_COLORS = [ "rgb(31, 119, 180)", "rgb(255, 127, 14)", "rgb(44, 160, 44)", "rgb(214, 39, 40)", "rgb(148, 103, 189)", "rgb(140, 86, 75)", "rgb(227, 119, 194)", "rgb(127, 127, 127)", "rgb(188, 189, 34)", "rgb(23, 190, 207)", ] REQUIRED_GANTT_KEYS = ["Task", "Start", "Finish"] PLOTLY_SCALES = { "Greys": ["rgb(0,0,0)", "rgb(255,255,255)"], "YlGnBu": ["rgb(8,29,88)", "rgb(255,255,217)"], "Greens": ["rgb(0,68,27)", "rgb(247,252,245)"], "YlOrRd": ["rgb(128,0,38)", "rgb(255,255,204)"], "Bluered": ["rgb(0,0,255)", "rgb(255,0,0)"], "RdBu": ["rgb(5,10,172)", "rgb(178,10,28)"], "Reds": ["rgb(220,220,220)", "rgb(178,10,28)"], "Blues": ["rgb(5,10,172)", "rgb(220,220,220)"], "Picnic": ["rgb(0,0,255)", "rgb(255,0,0)"], "Rainbow": ["rgb(150,0,90)", "rgb(255,0,0)"], "Portland": ["rgb(12,51,131)", "rgb(217,30,30)"], "Jet": ["rgb(0,0,131)", "rgb(128,0,0)"], "Hot": ["rgb(0,0,0)", "rgb(255,255,255)"], "Blackbody": ["rgb(0,0,0)", "rgb(160,200,255)"], "Earth": ["rgb(0,0,130)", "rgb(255,255,255)"], "Electric": ["rgb(0,0,0)", "rgb(255,250,220)"], "Viridis": ["rgb(68,1,84)", "rgb(253,231,37)"], } # color constants for violin plot DEFAULT_FILLCOLOR = "#1f77b4" DEFAULT_HISTNORM = "probability density" ALTERNATIVE_HISTNORM = "probability" # Warning format def warning_on_one_line(message, category, filename, lineno, file=None, line=None): return "%s:%s: %s:\n\n%s\n\n" % (filename, lineno, category.__name__, message) warnings.formatwarning = warning_on_one_line ipython_core_display = optional_imports.get_module("IPython.core.display") sage_salvus = optional_imports.get_module("sage_salvus") ### mpl-related tools ### def mpl_to_plotly(fig, resize=False, strip_style=False, verbose=False): """Convert a matplotlib figure to plotly dictionary and send. All available information about matplotlib visualizations are stored within a matplotlib.figure.Figure object. You can create a plot in python using matplotlib, store the figure object, and then pass this object to the fig_to_plotly function. In the background, mplexporter is used to crawl through the mpl figure object for appropriate information. This information is then systematically sent to the PlotlyRenderer which creates the JSON structure used to make plotly visualizations. Finally, these dictionaries are sent to plotly and your browser should open up a new tab for viewing! Optionally, if you're working in IPython, you can set notebook=True and the PlotlyRenderer will call plotly.iplot instead of plotly.plot to have the graph appear directly in the IPython notebook. Note, this function gives the user access to a simple, one-line way to render an mpl figure in plotly. If you need to trouble shoot, you can do this step manually by NOT running this fuction and entereing the following: =========================================================================== from plotly.matplotlylib import mplexporter, PlotlyRenderer # create an mpl figure and store it under a varialble 'fig' renderer = PlotlyRenderer() exporter = mplexporter.Exporter(renderer) exporter.run(fig) =========================================================================== You can then inspect the JSON structures by accessing these: renderer.layout -- a plotly layout dictionary renderer.data -- a list of plotly data dictionaries """ matplotlylib = optional_imports.get_module("plotly.matplotlylib") if matplotlylib: renderer = matplotlylib.PlotlyRenderer() matplotlylib.Exporter(renderer).run(fig) if resize: renderer.resize() if strip_style: renderer.strip_style() if verbose: print(renderer.msg) return renderer.plotly_fig else: warnings.warn( "To use Plotly's matplotlylib functionality, you'll need to have " "matplotlib successfully installed with all of its dependencies. " "You're getting this error because matplotlib or one of its " "dependencies doesn't seem to be installed correctly." ) ### graph_objs related tools ### def get_subplots(rows=1, columns=1, print_grid=False, **kwargs): """Return a dictionary instance with the subplots set in 'layout'. Example 1: # stack two subplots vertically fig = tools.get_subplots(rows=2) fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2], xaxis='x1', yaxis='y1')] fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2], xaxis='x2', yaxis='y2')] Example 2: # print out string showing the subplot grid you've put in the layout fig = tools.get_subplots(rows=3, columns=2, print_grid=True) Keywords arguments with constant defaults: rows (kwarg, int greater than 0, default=1): Number of rows, evenly spaced vertically on the figure. columns (kwarg, int greater than 0, default=1): Number of columns, evenly spaced horizontally on the figure. horizontal_spacing (kwarg, float in [0,1], default=0.1): Space between subplot columns. Applied to all columns. vertical_spacing (kwarg, float in [0,1], default=0.05): Space between subplot rows. Applied to all rows. print_grid (kwarg, True | False, default=False): If True, prints a tab-delimited string representation of your plot grid. Keyword arguments with variable defaults: horizontal_spacing (kwarg, float in [0,1], default=0.2 / columns): Space between subplot columns. vertical_spacing (kwarg, float in [0,1], default=0.3 / rows): Space between subplot rows. """ # TODO: protected until #282 from plotly.graph_objs import graph_objs warnings.warn( "tools.get_subplots is depreciated. " "Please use tools.make_subplots instead." ) # Throw exception for non-integer rows and columns if not isinstance(rows, int) or rows <= 0: raise Exception("Keyword argument 'rows' " "must be an int greater than 0") if not isinstance(columns, int) or columns <= 0: raise Exception("Keyword argument 'columns' " "must be an int greater than 0") # Throw exception if non-valid kwarg is sent VALID_KWARGS = ["horizontal_spacing", "vertical_spacing"] for key in kwargs.keys(): if key not in VALID_KWARGS: raise Exception("Invalid keyword argument: '{0}'".format(key)) # Set 'horizontal_spacing' / 'vertical_spacing' w.r.t. rows / columns try: horizontal_spacing = float(kwargs["horizontal_spacing"]) except KeyError: horizontal_spacing = 0.2 / columns try: vertical_spacing = float(kwargs["vertical_spacing"]) except KeyError: vertical_spacing = 0.3 / rows fig = dict(layout=graph_objs.Layout()) # will return this at the end plot_width = (1 - horizontal_spacing * (columns - 1)) / columns plot_height = (1 - vertical_spacing * (rows - 1)) / rows plot_num = 0 for rrr in range(rows): for ccc in range(columns): xaxis_name = "xaxis{0}".format(plot_num + 1) x_anchor = "y{0}".format(plot_num + 1) x_start = (plot_width + horizontal_spacing) * ccc x_end = x_start + plot_width yaxis_name = "yaxis{0}".format(plot_num + 1) y_anchor = "x{0}".format(plot_num + 1) y_start = (plot_height + vertical_spacing) * rrr y_end = y_start + plot_height xaxis = dict(domain=[x_start, x_end], anchor=x_anchor) fig["layout"][xaxis_name] = xaxis yaxis = dict(domain=[y_start, y_end], anchor=y_anchor) fig["layout"][yaxis_name] = yaxis plot_num += 1 if print_grid: print("This is the format of your plot grid!") grid_string = "" plot = 1 for rrr in range(rows): grid_line = "" for ccc in range(columns): grid_line += "[{0}]\t".format(plot) plot += 1 grid_string = grid_line + "\n" + grid_string print(grid_string) return graph_objs.Figure(fig) # forces us to validate what we just did... def make_subplots( rows=1, cols=1, shared_xaxes=False, shared_yaxes=False, start_cell="top-left", print_grid=None, **kwargs, ): """Return an instance of plotly.graph_objs.Figure with the subplots domain set in 'layout'. Example 1: # stack two subplots vertically fig = tools.make_subplots(rows=2) This is the format of your plot grid: [ (1,1) x1,y1 ] [ (2,1) x2,y2 ] fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2])] fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2], xaxis='x2', yaxis='y2')] # or see Figure.append_trace Example 2: # subplots with shared x axes fig = tools.make_subplots(rows=2, shared_xaxes=True) This is the format of your plot grid: [ (1,1) x1,y1 ] [ (2,1) x1,y2 ] fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2])] fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2], yaxis='y2')] Example 3: # irregular subplot layout (more examples below under 'specs') fig = tools.make_subplots(rows=2, cols=2, specs=[[{}, {}], [{'colspan': 2}, None]]) This is the format of your plot grid! [ (1,1) x1,y1 ] [ (1,2) x2,y2 ] [ (2,1) x3,y3 - ] fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2])] fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2], xaxis='x2', yaxis='y2')] fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2], xaxis='x3', yaxis='y3')] Example 4: # insets fig = tools.make_subplots(insets=[{'cell': (1,1), 'l': 0.7, 'b': 0.3}]) This is the format of your plot grid! [ (1,1) x1,y1 ] With insets: [ x2,y2 ] over [ (1,1) x1,y1 ] fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2])] fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2], xaxis='x2', yaxis='y2')] Example 5: # include subplot titles fig = tools.make_subplots(rows=2, subplot_titles=('Plot 1','Plot 2')) This is the format of your plot grid: [ (1,1) x1,y1 ] [ (2,1) x2,y2 ] fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2])] fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2], xaxis='x2', yaxis='y2')] Example 6: # Include subplot title on one plot (but not all) fig = tools.make_subplots(insets=[{'cell': (1,1), 'l': 0.7, 'b': 0.3}], subplot_titles=('','Inset')) This is the format of your plot grid! [ (1,1) x1,y1 ] With insets: [ x2,y2 ] over [ (1,1) x1,y1 ] fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2])] fig['data'] += [Scatter(x=[1,2,3], y=[2,1,2], xaxis='x2', yaxis='y2')] Keywords arguments with constant defaults: rows (kwarg, int greater than 0, default=1): Number of rows in the subplot grid. cols (kwarg, int greater than 0, default=1): Number of columns in the subplot grid. shared_xaxes (kwarg, boolean or list, default=False) Assign shared x axes. If True, subplots in the same grid column have one common shared x-axis at the bottom of the gird. To assign shared x axes per subplot grid cell (see 'specs'), send list (or list of lists, one list per shared x axis) of cell index tuples. shared_yaxes (kwarg, boolean or list, default=False) Assign shared y axes. If True, subplots in the same grid row have one common shared y-axis on the left-hand side of the gird. To assign shared y axes per subplot grid cell (see 'specs'), send list (or list of lists, one list per shared y axis) of cell index tuples. start_cell (kwarg, 'bottom-left' or 'top-left', default='top-left') Choose the starting cell in the subplot grid used to set the domains of the subplots. print_grid (kwarg, boolean, default=True): If True, prints a tab-delimited string representation of your plot grid. Keyword arguments with variable defaults: horizontal_spacing (kwarg, float in [0,1], default=0.2 / cols): Space between subplot columns. Applies to all columns (use 'specs' subplot-dependents spacing) vertical_spacing (kwarg, float in [0,1], default=0.3 / rows): Space between subplot rows. Applies to all rows (use 'specs' subplot-dependents spacing) subplot_titles (kwarg, list of strings, default=empty list): Title of each subplot. "" can be included in the list if no subplot title is desired in that space so that the titles are properly indexed. specs (kwarg, list of lists of dictionaries): Subplot specifications. ex1: specs=[[{}, {}], [{'colspan': 2}, None]] ex2: specs=[[{'rowspan': 2}, {}], [None, {}]] - Indices of the outer list correspond to subplot grid rows starting from the bottom. The number of rows in 'specs' must be equal to 'rows'. - Indices of the inner lists correspond to subplot grid columns starting from the left. The number of columns in 'specs' must be equal to 'cols'. - Each item in the 'specs' list corresponds to one subplot in a subplot grid. (N.B. The subplot grid has exactly 'rows' times 'cols' cells.) - Use None for blank a subplot cell (or to move pass a col/row span). - Note that specs[0][0] has the specs of the 'start_cell' subplot. - Each item in 'specs' is a dictionary. The available keys are: * is_3d (boolean, default=False): flag for 3d scenes * colspan (int, default=1): number of subplot columns for this subplot to span. * rowspan (int, default=1): number of subplot rows for this subplot to span. * l (float, default=0.0): padding left of cell * r (float, default=0.0): padding right of cell * t (float, default=0.0): padding right of cell * b (float, default=0.0): padding bottom of cell - Use 'horizontal_spacing' and 'vertical_spacing' to adjust the spacing in between the subplots. insets (kwarg, list of dictionaries): Inset specifications. - Each item in 'insets' is a dictionary. The available keys are: * cell (tuple, default=(1,1)): (row, col) index of the subplot cell to overlay inset axes onto. * is_3d (boolean, default=False): flag for 3d scenes * l (float, default=0.0): padding left of inset in fraction of cell width * w (float or 'to_end', default='to_end') inset width in fraction of cell width ('to_end': to cell right edge) * b (float, default=0.0): padding bottom of inset in fraction of cell height * h (float or 'to_end', default='to_end') inset height in fraction of cell height ('to_end': to cell top edge) column_width (kwarg, list of numbers) Column_width specifications - Functions similarly to `column_width` of `plotly.graph_objs.Table`. Specify a list that contains numbers where the amount of numbers in the list is equal to `cols`. - The numbers in the list indicate the proportions that each column domains take across the full horizontal domain excluding padding. - For example, if columns_width=[3, 1], horizontal_spacing=0, and cols=2, the domains for each column would be [0. 0.75] and [0.75, 1] row_width (kwargs, list of numbers) Row_width specifications - Functions similarly to `column_width`. Specify a list that contains numbers where the amount of numbers in the list is equal to `rows`. - The numbers in the list indicate the proportions that each row domains take along the full vertical domain excluding padding. - For example, if row_width=[3, 1], vertical_spacing=0, and cols=2, the domains for each row from top to botton would be [0. 0.75] and [0.75, 1] """ import plotly.subplots warnings.warn( "plotly.tools.make_subplots is deprecated, " "please use plotly.subplots.make_subplots instead", DeprecationWarning, stacklevel=1, ) return plotly.subplots.make_subplots( rows=rows, cols=cols, shared_xaxes=shared_xaxes, shared_yaxes=shared_yaxes, start_cell=start_cell, print_grid=print_grid, **kwargs, ) warnings.filterwarnings( "default", r"plotly\.tools\.make_subplots is deprecated", DeprecationWarning ) def get_graph_obj(obj, obj_type=None): """Returns a new graph object. OLD FUNCTION: this will *silently* strip out invalid pieces of the object. NEW FUNCTION: no striping of invalid pieces anymore - only raises error on unrecognized graph_objs """ # TODO: Deprecate or move. #283 from plotly.graph_objs import graph_objs try: cls = getattr(graph_objs, obj_type) except (AttributeError, KeyError): raise exceptions.PlotlyError( "'{}' is not a recognized graph_obj.".format(obj_type) ) return cls(obj) def _replace_newline(obj): """Replaces '\n' with '
' for all strings in a collection.""" if isinstance(obj, dict): d = dict() for key, val in list(obj.items()): d[key] = _replace_newline(val) return d elif isinstance(obj, list): l = list() for index, entry in enumerate(obj): l += [_replace_newline(entry)] return l elif isinstance(obj, str): s = obj.replace("\n", "
") if s != obj: warnings.warn( "Looks like you used a newline character: '\\n'.\n\n" "Plotly uses a subset of HTML escape characters\n" "to do things like newline (
), bold (),\n" "italics (), etc. Your newline characters \n" "have been converted to '
' so they will show \n" "up right on your Plotly figure!" ) return s else: return obj # we return the actual reference... but DON'T mutate. def return_figure_from_figure_or_data(figure_or_data, validate_figure): from plotly.graph_objs import Figure from plotly.basedatatypes import BaseFigure validated = False if isinstance(figure_or_data, dict): figure = figure_or_data elif isinstance(figure_or_data, list): figure = {"data": figure_or_data} elif isinstance(figure_or_data, BaseFigure): figure = figure_or_data.to_dict() validated = True else: raise exceptions.PlotlyError( "The `figure_or_data` positional " "argument must be " "`dict`-like, `list`-like, or an instance of plotly.graph_objs.Figure" ) if validate_figure and not validated: try: figure = Figure(**figure).to_dict() except exceptions.PlotlyError as err: raise exceptions.PlotlyError( "Invalid 'figure_or_data' argument. " "Plotly will not be able to properly " "parse the resulting JSON. If you " "want to send this 'figure_or_data' " "to Plotly anyway (not recommended), " "you can set 'validate=False' as a " "plot option.\nHere's why you're " "seeing this error:\n\n{0}" "".format(err) ) if not figure["data"]: raise exceptions.PlotlyEmptyDataError( "Empty data list found. Make sure that you populated the " "list of data objects you're sending and try again.\n" "Questions? Visit support.plot.ly" ) return figure # Default colours for finance charts _DEFAULT_INCREASING_COLOR = "#3D9970" # http://clrs.cc _DEFAULT_DECREASING_COLOR = "#FF4136" DIAG_CHOICES = ["scatter", "histogram", "box"] VALID_COLORMAP_TYPES = ["cat", "seq"] # Deprecations class FigureFactory(object): @staticmethod def _deprecated(old_method, new_method=None): if new_method is None: # The method name stayed the same. new_method = old_method warnings.warn( "plotly.tools.FigureFactory.{} is deprecated. " "Use plotly.figure_factory.{}".format(old_method, new_method) ) @staticmethod def create_2D_density(*args, **kwargs): FigureFactory._deprecated("create_2D_density", "create_2d_density") from plotly.figure_factory import create_2d_density return create_2d_density(*args, **kwargs) @staticmethod def create_annotated_heatmap(*args, **kwargs): FigureFactory._deprecated("create_annotated_heatmap") from plotly.figure_factory import create_annotated_heatmap return create_annotated_heatmap(*args, **kwargs) @staticmethod def create_candlestick(*args, **kwargs): FigureFactory._deprecated("create_candlestick") from plotly.figure_factory import create_candlestick return create_candlestick(*args, **kwargs) @staticmethod def create_dendrogram(*args, **kwargs): FigureFactory._deprecated("create_dendrogram") from plotly.figure_factory import create_dendrogram return create_dendrogram(*args, **kwargs) @staticmethod def create_distplot(*args, **kwargs): FigureFactory._deprecated("create_distplot") from plotly.figure_factory import create_distplot return create_distplot(*args, **kwargs) @staticmethod def create_facet_grid(*args, **kwargs): FigureFactory._deprecated("create_facet_grid") from plotly.figure_factory import create_facet_grid return create_facet_grid(*args, **kwargs) @staticmethod def create_gantt(*args, **kwargs): FigureFactory._deprecated("create_gantt") from plotly.figure_factory import create_gantt return create_gantt(*args, **kwargs) @staticmethod def create_ohlc(*args, **kwargs): FigureFactory._deprecated("create_ohlc") from plotly.figure_factory import create_ohlc return create_ohlc(*args, **kwargs) @staticmethod def create_quiver(*args, **kwargs): FigureFactory._deprecated("create_quiver") from plotly.figure_factory import create_quiver return create_quiver(*args, **kwargs) @staticmethod def create_scatterplotmatrix(*args, **kwargs): FigureFactory._deprecated("create_scatterplotmatrix") from plotly.figure_factory import create_scatterplotmatrix return create_scatterplotmatrix(*args, **kwargs) @staticmethod def create_streamline(*args, **kwargs): FigureFactory._deprecated("create_streamline") from plotly.figure_factory import create_streamline return create_streamline(*args, **kwargs) @staticmethod def create_table(*args, **kwargs): FigureFactory._deprecated("create_table") from plotly.figure_factory import create_table return create_table(*args, **kwargs) @staticmethod def create_trisurf(*args, **kwargs): FigureFactory._deprecated("create_trisurf") from plotly.figure_factory import create_trisurf return create_trisurf(*args, **kwargs) @staticmethod def create_violin(*args, **kwargs): FigureFactory._deprecated("create_violin") from plotly.figure_factory import create_violin return create_violin(*args, **kwargs) def get_config_plotly_server_url(): """ Function to get the .config file's 'plotly_domain' without importing the chart_studio package. This property is needed to compute the default value of the plotly.js config plotlyServerURL, so it is independent of the chart_studio integration and still needs to live in Returns ------- str """ config_file = os.path.join(PLOTLY_DIR, ".config") default_server_url = "https://plot.ly" if not os.path.exists(config_file): return default_server_url with open(config_file, "rt") as f: try: config_dict = json.load(f) if not isinstance(config_dict, dict): config_dict = {} except: # TODO: issue a warning and bubble it up config_dict = {} return config_dict.get("plotly_domain", default_server_url) plotly-5.15.0+dfsg1.orig/plotly/version.py0000644000175000017500000000064714440365261020012 0ustar noahfxnoahfxfrom ._version import get_versions __version__ = get_versions()["version"] del get_versions from ._widget_version import __frontend_version__ def stable_semver(): """ Get the stable portion of the semantic version string (the first three numbers), without any of the trailing labels '3.0.0rc11' -> '3.0.0' """ from packaging.version import Version return Version(__version__).base_version plotly-5.15.0+dfsg1.orig/plotly/callbacks.py0000644000175000017500000001461014440365260020236 0ustar noahfxnoahfxfrom __future__ import absolute_import from plotly.utils import _list_repr_elided class InputDeviceState: def __init__( self, ctrl=None, alt=None, shift=None, meta=None, button=None, buttons=None, **_ ): self._ctrl = ctrl self._alt = alt self._meta = meta self._shift = shift self._button = button self._buttons = buttons def __repr__(self): return """\ InputDeviceState( ctrl={ctrl}, alt={alt}, shift={shift}, meta={meta}, button={button}, buttons={buttons})""".format( ctrl=repr(self.ctrl), alt=repr(self.alt), meta=repr(self.meta), shift=repr(self.shift), button=repr(self.button), buttons=repr(self.buttons), ) @property def alt(self): """ Whether alt key pressed Returns ------- bool """ return self._alt @property def ctrl(self): """ Whether ctrl key pressed Returns ------- bool """ return self._ctrl @property def shift(self): """ Whether shift key pressed Returns ------- bool """ return self._shift @property def meta(self): """ Whether meta key pressed Returns ------- bool """ return self._meta @property def button(self): """ Integer code for the button that was pressed on the mouse to trigger the event - 0: Main button pressed, usually the left button or the un-initialized state - 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) - 2: Secondary button pressed, usually the right button - 3: Fourth button, typically the Browser Back button - 4: Fifth button, typically the Browser Forward button Returns ------- int """ return self._button @property def buttons(self): """ Integer code for which combination of buttons are pressed on the mouse when the event is triggered. - 0: No button or un-initialized - 1: Primary button (usually left) - 2: Secondary button (usually right) - 4: Auxilary button (usually middle or mouse wheel button) - 8: 4th button (typically the "Browser Back" button) - 16: 5th button (typically the "Browser Forward" button) Combinations of buttons are represented as the decimal form of the bitmask of the values above. For example, pressing both the primary (1) and auxilary (4) buttons will result in a code of 5 Returns ------- int """ return self._buttons class Points: def __init__(self, point_inds=[], xs=[], ys=[], trace_name=None, trace_index=None): self._point_inds = point_inds self._xs = xs self._ys = ys self._trace_name = trace_name self._trace_index = trace_index def __repr__(self): return """\ Points(point_inds={point_inds}, xs={xs}, ys={ys}, trace_name={trace_name}, trace_index={trace_index})""".format( point_inds=_list_repr_elided( self.point_inds, indent=len("Points(point_inds=") ), xs=_list_repr_elided(self.xs, indent=len(" xs=")), ys=_list_repr_elided(self.ys, indent=len(" ys=")), trace_name=repr(self.trace_name), trace_index=repr(self.trace_index), ) @property def point_inds(self): """ List of selected indexes into the trace's points Returns ------- list[int] """ return self._point_inds @property def xs(self): """ List of x-coordinates of selected points Returns ------- list[float] """ return self._xs @property def ys(self): """ List of y-coordinates of selected points Returns ------- list[float] """ return self._ys @property def trace_name(self): """ Name of the trace Returns ------- str """ return self._trace_name @property def trace_index(self): """ Index of the trace in the figure Returns ------- int """ return self._trace_index class BoxSelector: def __init__(self, xrange=None, yrange=None, **_): self._type = "box" self._xrange = xrange self._yrange = yrange def __repr__(self): return """\ BoxSelector(xrange={xrange}, yrange={yrange})""".format( xrange=self.xrange, yrange=self.yrange ) @property def type(self): """ The selector's type Returns ------- str """ return self._type @property def xrange(self): """ x-axis range extents of the box selection Returns ------- (float, float) """ return self._xrange @property def yrange(self): """ y-axis range extents of the box selection Returns ------- (float, float) """ return self._yrange class LassoSelector: def __init__(self, xs=None, ys=None, **_): self._type = "lasso" self._xs = xs self._ys = ys def __repr__(self): return """\ LassoSelector(xs={xs}, ys={ys})""".format( xs=_list_repr_elided(self.xs, indent=len("LassoSelector(xs=")), ys=_list_repr_elided(self.ys, indent=len(" ys=")), ) @property def type(self): """ The selector's type Returns ------- str """ return self._type @property def xs(self): """ list of x-axis coordinates of each point in the lasso selection boundary Returns ------- list[float] """ return self._xs @property def ys(self): """ list of y-axis coordinates of each point in the lasso selection boundary Returns ------- list[float] """ return self._ys plotly-5.15.0+dfsg1.orig/plotly/colors/0000755000175000017500000000000014440366051017243 5ustar noahfxnoahfxplotly-5.15.0+dfsg1.orig/plotly/colors/__init__.py0000644000175000017500000000245714440365260021365 0ustar noahfxnoahfx"""For a list of colors available in `plotly.colors`, please see * the `tutorial on discrete color sequences `_ * the `list of built-in continuous color scales `_ * the `tutorial on continuous colors `_ Color scales and sequences are available within the following namespaces * cyclical * diverging * qualitative * sequential """ from __future__ import absolute_import from _plotly_utils.colors import * # noqa: F401 __all__ = [ "named_colorscales", "cyclical", "diverging", "sequential", "qualitative", "colorbrewer", "carto", "cmocean", "color_parser", "colorscale_to_colors", "colorscale_to_scale", "convert_colors_to_same_type", "convert_colorscale_to_rgb", "convert_dict_colors_to_same_type", "convert_to_RGB_255", "find_intermediate_color", "hex_to_rgb", "label_rgb", "make_colorscale", "n_colors", "sample_colorscale", "unconvert_from_RGB_255", "unlabel_rgb", "validate_colors", "validate_colors_dict", "validate_colorscale", "validate_scale_values", "plotlyjs", "DEFAULT_PLOTLY_COLORS", "PLOTLY_SCALES", "get_colorscale", ] plotly-5.15.0+dfsg1.orig/plotly/graph_objects/0000755000175000017500000000000014440366051020554 5ustar noahfxnoahfxplotly-5.15.0+dfsg1.orig/plotly/graph_objects/__init__.py0000644000175000017500000002503514440365260022673 0ustar noahfxnoahfximport sys from typing import TYPE_CHECKING if sys.version_info < (3, 7) or TYPE_CHECKING: from ..graph_objs import Waterfall from ..graph_objs import Volume from ..graph_objs import Violin from ..graph_objs import Treemap from ..graph_objs import Table from ..graph_objs import Surface from ..graph_objs import Sunburst from ..graph_objs import Streamtube from ..graph_objs import Splom from ..graph_objs import Scatterternary from ..graph_objs import Scattersmith from ..graph_objs import Scatterpolargl from ..graph_objs import Scatterpolar from ..graph_objs import Scattermapbox from ..graph_objs import Scattergl from ..graph_objs import Scattergeo from ..graph_objs import Scattercarpet from ..graph_objs import Scatter3d from ..graph_objs import Scatter from ..graph_objs import Sankey from ..graph_objs import Pointcloud from ..graph_objs import Pie from ..graph_objs import Parcoords from ..graph_objs import Parcats from ..graph_objs import Ohlc from ..graph_objs import Mesh3d from ..graph_objs import Isosurface from ..graph_objs import Indicator from ..graph_objs import Image from ..graph_objs import Icicle from ..graph_objs import Histogram2dContour from ..graph_objs import Histogram2d from ..graph_objs import Histogram from ..graph_objs import Heatmapgl from ..graph_objs import Heatmap from ..graph_objs import Funnelarea from ..graph_objs import Funnel from ..graph_objs import Densitymapbox from ..graph_objs import Contourcarpet from ..graph_objs import Contour from ..graph_objs import Cone from ..graph_objs import Choroplethmapbox from ..graph_objs import Choropleth from ..graph_objs import Carpet from ..graph_objs import Candlestick from ..graph_objs import Box from ..graph_objs import Barpolar from ..graph_objs import Bar from ..graph_objs import Layout from ..graph_objs import Frame from ..graph_objs import Figure from ..graph_objs import Data from ..graph_objs import Annotations from ..graph_objs import Frames from ..graph_objs import AngularAxis from ..graph_objs import Annotation from ..graph_objs import ColorBar from ..graph_objs import Contours from ..graph_objs import ErrorX from ..graph_objs import ErrorY from ..graph_objs import ErrorZ from ..graph_objs import Font from ..graph_objs import Legend from ..graph_objs import Line from ..graph_objs import Margin from ..graph_objs import Marker from ..graph_objs import RadialAxis from ..graph_objs import Scene from ..graph_objs import Stream from ..graph_objs import XAxis from ..graph_objs import YAxis from ..graph_objs import ZAxis from ..graph_objs import XBins from ..graph_objs import YBins from ..graph_objs import Trace from ..graph_objs import Histogram2dcontour from ..graph_objs import waterfall from ..graph_objs import volume from ..graph_objs import violin from ..graph_objs import treemap from ..graph_objs import table from ..graph_objs import surface from ..graph_objs import sunburst from ..graph_objs import streamtube from ..graph_objs import splom from ..graph_objs import scatterternary from ..graph_objs import scattersmith from ..graph_objs import scatterpolargl from ..graph_objs import scatterpolar from ..graph_objs import scattermapbox from ..graph_objs import scattergl from ..graph_objs import scattergeo from ..graph_objs import scattercarpet from ..graph_objs import scatter3d from ..graph_objs import scatter from ..graph_objs import sankey from ..graph_objs import pointcloud from ..graph_objs import pie from ..graph_objs import parcoords from ..graph_objs import parcats from ..graph_objs import ohlc from ..graph_objs import mesh3d from ..graph_objs import isosurface from ..graph_objs import indicator from ..graph_objs import image from ..graph_objs import icicle from ..graph_objs import histogram2dcontour from ..graph_objs import histogram2d from ..graph_objs import histogram from ..graph_objs import heatmapgl from ..graph_objs import heatmap from ..graph_objs import funnelarea from ..graph_objs import funnel from ..graph_objs import densitymapbox from ..graph_objs import contourcarpet from ..graph_objs import contour from ..graph_objs import cone from ..graph_objs import choroplethmapbox from ..graph_objs import choropleth from ..graph_objs import carpet from ..graph_objs import candlestick from ..graph_objs import box from ..graph_objs import barpolar from ..graph_objs import bar from ..graph_objs import layout else: from _plotly_utils.importers import relative_import __all__, __getattr__, __dir__ = relative_import( __name__, [ "..graph_objs.waterfall", "..graph_objs.volume", "..graph_objs.violin", "..graph_objs.treemap", "..graph_objs.table", "..graph_objs.surface", "..graph_objs.sunburst", "..graph_objs.streamtube", "..graph_objs.splom", "..graph_objs.scatterternary", "..graph_objs.scattersmith", "..graph_objs.scatterpolargl", "..graph_objs.scatterpolar", "..graph_objs.scattermapbox", "..graph_objs.scattergl", "..graph_objs.scattergeo", "..graph_objs.scattercarpet", "..graph_objs.scatter3d", "..graph_objs.scatter", "..graph_objs.sankey", "..graph_objs.pointcloud", "..graph_objs.pie", "..graph_objs.parcoords", "..graph_objs.parcats", "..graph_objs.ohlc", "..graph_objs.mesh3d", "..graph_objs.isosurface", "..graph_objs.indicator", "..graph_objs.image", "..graph_objs.icicle", "..graph_objs.histogram2dcontour", "..graph_objs.histogram2d", "..graph_objs.histogram", "..graph_objs.heatmapgl", "..graph_objs.heatmap", "..graph_objs.funnelarea", "..graph_objs.funnel", "..graph_objs.densitymapbox", "..graph_objs.contourcarpet", "..graph_objs.contour", "..graph_objs.cone", "..graph_objs.choroplethmapbox", "..graph_objs.choropleth", "..graph_objs.carpet", "..graph_objs.candlestick", "..graph_objs.box", "..graph_objs.barpolar", "..graph_objs.bar", "..graph_objs.layout", ], [ "..graph_objs.Waterfall", "..graph_objs.Volume", "..graph_objs.Violin", "..graph_objs.Treemap", "..graph_objs.Table", "..graph_objs.Surface", "..graph_objs.Sunburst", "..graph_objs.Streamtube", "..graph_objs.Splom", "..graph_objs.Scatterternary", "..graph_objs.Scattersmith", "..graph_objs.Scatterpolargl", "..graph_objs.Scatterpolar", "..graph_objs.Scattermapbox", "..graph_objs.Scattergl", "..graph_objs.Scattergeo", "..graph_objs.Scattercarpet", "..graph_objs.Scatter3d", "..graph_objs.Scatter", "..graph_objs.Sankey", "..graph_objs.Pointcloud", "..graph_objs.Pie", "..graph_objs.Parcoords", "..graph_objs.Parcats", "..graph_objs.Ohlc", "..graph_objs.Mesh3d", "..graph_objs.Isosurface", "..graph_objs.Indicator", "..graph_objs.Image", "..graph_objs.Icicle", "..graph_objs.Histogram2dContour", "..graph_objs.Histogram2d", "..graph_objs.Histogram", "..graph_objs.Heatmapgl", "..graph_objs.Heatmap", "..graph_objs.Funnelarea", "..graph_objs.Funnel", "..graph_objs.Densitymapbox", "..graph_objs.Contourcarpet", "..graph_objs.Contour", "..graph_objs.Cone", "..graph_objs.Choroplethmapbox", "..graph_objs.Choropleth", "..graph_objs.Carpet", "..graph_objs.Candlestick", "..graph_objs.Box", "..graph_objs.Barpolar", "..graph_objs.Bar", "..graph_objs.Layout", "..graph_objs.Frame", "..graph_objs.Figure", "..graph_objs.Data", "..graph_objs.Annotations", "..graph_objs.Frames", "..graph_objs.AngularAxis", "..graph_objs.Annotation", "..graph_objs.ColorBar", "..graph_objs.Contours", "..graph_objs.ErrorX", "..graph_objs.ErrorY", "..graph_objs.ErrorZ", "..graph_objs.Font", "..graph_objs.Legend", "..graph_objs.Line", "..graph_objs.Margin", "..graph_objs.Marker", "..graph_objs.RadialAxis", "..graph_objs.Scene", "..graph_objs.Stream", "..graph_objs.XAxis", "..graph_objs.YAxis", "..graph_objs.ZAxis", "..graph_objs.XBins", "..graph_objs.YBins", "..graph_objs.Trace", "..graph_objs.Histogram2dcontour", ], ) if sys.version_info < (3, 7) or TYPE_CHECKING: try: import ipywidgets as _ipywidgets from packaging.version import Version as _Version if _Version(_ipywidgets.__version__) >= _Version("7.0.0"): from ..graph_objs._figurewidget import FigureWidget else: raise ImportError() except Exception: from ..missing_ipywidgets import FigureWidget else: __all__.append("FigureWidget") orig_getattr = __getattr__ def __getattr__(import_name): if import_name == "FigureWidget": try: import ipywidgets from packaging.version import Version if Version(ipywidgets.__version__) >= Version("7.0.0"): from ..graph_objs._figurewidget import FigureWidget return FigureWidget else: raise ImportError() except Exception: from ..missing_ipywidgets import FigureWidget return FigureWidget return orig_getattr(import_name) plotly-5.15.0+dfsg1.orig/plotly/matplotlylib/0000755000175000017500000000000014440366051020456 5ustar noahfxnoahfxplotly-5.15.0+dfsg1.orig/plotly/matplotlylib/renderer.py0000644000175000017500000010517014440365261022644 0ustar noahfxnoahfx""" Renderer Module This module defines the PlotlyRenderer class and a single function, fig_to_plotly, which is intended to be the main way that user's will interact with the matplotlylib package. """ from __future__ import absolute_import import warnings import plotly.graph_objs as go from plotly.matplotlylib.mplexporter import Renderer from plotly.matplotlylib import mpltools # Warning format def warning_on_one_line(msg, category, filename, lineno, file=None, line=None): return "%s:%s: %s:\n\n%s\n\n" % (filename, lineno, category.__name__, msg) warnings.formatwarning = warning_on_one_line class PlotlyRenderer(Renderer): """A renderer class inheriting from base for rendering mpl plots in plotly. A renderer class to be used with an exporter for rendering matplotlib plots in Plotly. This module defines the PlotlyRenderer class which handles the creation of the JSON structures that get sent to plotly. All class attributes available are defined in __init__(). Basic Usage: # (mpl code) # fig = gcf() renderer = PlotlyRenderer(fig) exporter = Exporter(renderer) exporter.run(fig) # ... et voila """ def __init__(self): """Initialize PlotlyRenderer obj. PlotlyRenderer obj is called on by an Exporter object to draw matplotlib objects like figures, axes, text, etc. All class attributes are listed here in the __init__ method. """ self.plotly_fig = go.Figure() self.mpl_fig = None self.current_mpl_ax = None self.bar_containers = None self.current_bars = [] self.axis_ct = 0 self.x_is_mpl_date = False self.mpl_x_bounds = (0, 1) self.mpl_y_bounds = (0, 1) self.msg = "Initialized PlotlyRenderer\n" def open_figure(self, fig, props): """Creates a new figure by beginning to fill out layout dict. The 'autosize' key is set to false so that the figure will mirror sizes set by mpl. The 'hovermode' key controls what shows up when you mouse around a figure in plotly, it's set to show the 'closest' point. Positional agurments: fig -- a matplotlib.figure.Figure object. props.keys(): [ 'figwidth', 'figheight', 'dpi' ] """ self.msg += "Opening figure\n" self.mpl_fig = fig self.plotly_fig["layout"] = go.Layout( width=int(props["figwidth"] * props["dpi"]), height=int(props["figheight"] * props["dpi"]), autosize=False, hovermode="closest", ) self.mpl_x_bounds, self.mpl_y_bounds = mpltools.get_axes_bounds(fig) margin = go.layout.Margin( l=int(self.mpl_x_bounds[0] * self.plotly_fig["layout"]["width"]), r=int((1 - self.mpl_x_bounds[1]) * self.plotly_fig["layout"]["width"]), t=int((1 - self.mpl_y_bounds[1]) * self.plotly_fig["layout"]["height"]), b=int(self.mpl_y_bounds[0] * self.plotly_fig["layout"]["height"]), pad=0, ) self.plotly_fig["layout"]["margin"] = margin def close_figure(self, fig): """Closes figure by cleaning up data and layout dictionaries. The PlotlyRenderer's job is to create an appropriate set of data and layout dictionaries. When the figure is closed, some cleanup and repair is necessary. This method removes inappropriate dictionary entries, freeing up Plotly to use defaults and best judgements to complete the entries. This method is called by an Exporter object. Positional arguments: fig -- a matplotlib.figure.Figure object. """ self.plotly_fig["layout"]["showlegend"] = False self.msg += "Closing figure\n" def open_axes(self, ax, props): """Setup a new axes object (subplot in plotly). Plotly stores information about subplots in different 'xaxis' and 'yaxis' objects which are numbered. These are just dictionaries included in the layout dictionary. This function takes information from the Exporter, fills in appropriate dictionary entries, and updates the layout dictionary. PlotlyRenderer keeps track of the number of plots by incrementing the axis_ct attribute. Setting the proper plot domain in plotly is a bit tricky. Refer to the documentation for mpltools.convert_x_domain and mpltools.convert_y_domain. Positional arguments: ax -- an mpl axes object. This will become a subplot in plotly. props.keys() -- [ 'axesbg', (background color for axes obj) 'axesbgalpha', (alpha, or opacity for background) 'bounds', ((x0, y0, width, height) for axes) 'dynamic', (zoom/pan-able?) 'axes', (list: [xaxis, yaxis]) 'xscale', (log, linear, or date) 'yscale', 'xlim', (range limits for x) 'ylim', 'xdomain' (xdomain=xlim, unless it's a date) 'ydomain' ] """ self.msg += " Opening axes\n" self.current_mpl_ax = ax self.bar_containers = [ c for c in ax.containers # empty is OK if c.__class__.__name__ == "BarContainer" ] self.current_bars = [] self.axis_ct += 1 # set defaults in axes xaxis = go.layout.XAxis( anchor="y{0}".format(self.axis_ct), zeroline=False, ticks="inside" ) yaxis = go.layout.YAxis( anchor="x{0}".format(self.axis_ct), zeroline=False, ticks="inside" ) # update defaults with things set in mpl mpl_xaxis, mpl_yaxis = mpltools.prep_xy_axis( ax=ax, props=props, x_bounds=self.mpl_x_bounds, y_bounds=self.mpl_y_bounds ) xaxis.update(mpl_xaxis) yaxis.update(mpl_yaxis) bottom_spine = mpltools.get_spine_visible(ax, "bottom") top_spine = mpltools.get_spine_visible(ax, "top") left_spine = mpltools.get_spine_visible(ax, "left") right_spine = mpltools.get_spine_visible(ax, "right") xaxis["mirror"] = mpltools.get_axis_mirror(bottom_spine, top_spine) yaxis["mirror"] = mpltools.get_axis_mirror(left_spine, right_spine) xaxis["showline"] = bottom_spine yaxis["showline"] = top_spine # put axes in our figure self.plotly_fig["layout"]["xaxis{0}".format(self.axis_ct)] = xaxis self.plotly_fig["layout"]["yaxis{0}".format(self.axis_ct)] = yaxis # let all subsequent dates be handled properly if required if "type" in dir(xaxis) and xaxis["type"] == "date": self.x_is_mpl_date = True def close_axes(self, ax): """Close the axes object and clean up. Bars from bar charts are given to PlotlyRenderer one-by-one, thus they need to be taken care of at the close of each axes object. The self.current_bars variable should be empty unless a bar chart has been created. Positional arguments: ax -- an mpl axes object, not required at this time. """ self.draw_bars(self.current_bars) self.msg += " Closing axes\n" self.x_is_mpl_date = False def draw_bars(self, bars): # sort bars according to bar containers mpl_traces = [] for container in self.bar_containers: mpl_traces.append( [ bar_props for bar_props in self.current_bars if bar_props["mplobj"] in container ] ) for trace in mpl_traces: self.draw_bar(trace) def draw_bar(self, coll): """Draw a collection of similar patches as a bar chart. After bars are sorted, an appropriate data dictionary must be created to tell plotly about this data. Just like draw_line or draw_markers, draw_bar translates patch/path information into something plotly understands. Positional arguments: patch_coll -- a collection of patches to be drawn as a bar chart. """ tol = 1e-10 trace = [mpltools.make_bar(**bar_props) for bar_props in coll] widths = [bar_props["x1"] - bar_props["x0"] for bar_props in trace] heights = [bar_props["y1"] - bar_props["y0"] for bar_props in trace] vertical = abs(sum(widths[0] - widths[iii] for iii in range(len(widths)))) < tol horizontal = ( abs(sum(heights[0] - heights[iii] for iii in range(len(heights)))) < tol ) if vertical and horizontal: # Check for monotonic x. Can't both be true! x_zeros = [bar_props["x0"] for bar_props in trace] if all( (x_zeros[iii + 1] > x_zeros[iii] for iii in range(len(x_zeros[:-1]))) ): orientation = "v" else: orientation = "h" elif vertical: orientation = "v" else: orientation = "h" if orientation == "v": self.msg += " Attempting to draw a vertical bar chart\n" old_heights = [bar_props["y1"] for bar_props in trace] for bar in trace: bar["y0"], bar["y1"] = 0, bar["y1"] - bar["y0"] new_heights = [bar_props["y1"] for bar_props in trace] # check if we're stacked or not... for old, new in zip(old_heights, new_heights): if abs(old - new) > tol: self.plotly_fig["layout"]["barmode"] = "stack" self.plotly_fig["layout"]["hovermode"] = "x" x = [bar["x0"] + (bar["x1"] - bar["x0"]) / 2 for bar in trace] y = [bar["y1"] for bar in trace] bar_gap = mpltools.get_bar_gap( [bar["x0"] for bar in trace], [bar["x1"] for bar in trace] ) if self.x_is_mpl_date: x = [bar["x0"] for bar in trace] formatter = ( self.current_mpl_ax.get_xaxis() .get_major_formatter() .__class__.__name__ ) x = mpltools.mpl_dates_to_datestrings(x, formatter) else: self.msg += " Attempting to draw a horizontal bar chart\n" old_rights = [bar_props["x1"] for bar_props in trace] for bar in trace: bar["x0"], bar["x1"] = 0, bar["x1"] - bar["x0"] new_rights = [bar_props["x1"] for bar_props in trace] # check if we're stacked or not... for old, new in zip(old_rights, new_rights): if abs(old - new) > tol: self.plotly_fig["layout"]["barmode"] = "stack" self.plotly_fig["layout"]["hovermode"] = "y" x = [bar["x1"] for bar in trace] y = [bar["y0"] + (bar["y1"] - bar["y0"]) / 2 for bar in trace] bar_gap = mpltools.get_bar_gap( [bar["y0"] for bar in trace], [bar["y1"] for bar in trace] ) bar = go.Bar( orientation=orientation, x=x, y=y, xaxis="x{0}".format(self.axis_ct), yaxis="y{0}".format(self.axis_ct), opacity=trace[0]["alpha"], # TODO: get all alphas if array? marker=go.bar.Marker( color=trace[0]["facecolor"], # TODO: get all line=dict(width=trace[0]["edgewidth"]), ), ) # TODO ditto if len(bar["x"]) > 1: self.msg += " Heck yeah, I drew that bar chart\n" self.plotly_fig.add_trace(bar), if bar_gap is not None: self.plotly_fig["layout"]["bargap"] = bar_gap else: self.msg += " Bar chart not drawn\n" warnings.warn( "found box chart data with length <= 1, " "assuming data redundancy, not plotting." ) def draw_legend_shapes(self, mode, shape, **props): """Create a shape that matches lines or markers in legends. Main issue is that path for circles do not render, so we have to use 'circle' instead of 'path'. """ for single_mode in mode.split("+"): x = props["data"][0][0] y = props["data"][0][1] if single_mode == "markers" and props.get("markerstyle"): size = shape.pop("size", 6) symbol = shape.pop("symbol") # aligning to "center" x0 = 0 y0 = 0 x1 = size y1 = size markerpath = props["markerstyle"].get("markerpath") if markerpath is None and symbol != "circle": self.msg += ( "not sure how to handle this marker without a valid path\n" ) return # marker path to SVG path conversion path = " ".join( [f"{a} {t[0]},{t[1]}" for a, t in zip(markerpath[1], markerpath[0])] ) if symbol == "circle": # symbols like . and o in matplotlib, use circle # plotly also maps many other markers to circle, such as 1,8 and p path = None shape_type = "circle" x0 = -size / 2 y0 = size / 2 x1 = size / 2 y1 = size + size / 2 else: # triangles, star etc shape_type = "path" legend_shape = go.layout.Shape( type=shape_type, xref="paper", yref="paper", x0=x0, y0=y0, x1=x1, y1=y1, xsizemode="pixel", ysizemode="pixel", xanchor=x, yanchor=y, path=path, **shape, ) elif single_mode == "lines": mode = "line" x1 = props["data"][1][0] y1 = props["data"][1][1] legend_shape = go.layout.Shape( type=mode, xref="paper", yref="paper", x0=x, y0=y + 0.02, x1=x1, y1=y1 + 0.02, **shape, ) else: self.msg += "not sure how to handle this element\n" return self.plotly_fig.add_shape(legend_shape) self.msg += " Heck yeah, I drew that shape\n" def draw_marked_line(self, **props): """Create a data dict for a line obj. This will draw 'lines', 'markers', or 'lines+markers'. For legend elements, this will use layout.shapes, so they can be positioned with paper refs. props.keys() -- [ 'coordinates', ('data', 'axes', 'figure', or 'display') 'data', (a list of xy pairs) 'mplobj', (the matplotlib.lines.Line2D obj being rendered) 'label', (the name of the Line2D obj being rendered) 'linestyle', (linestyle dict, can be None, see below) 'markerstyle', (markerstyle dict, can be None, see below) ] props['linestyle'].keys() -- [ 'alpha', (opacity of Line2D obj) 'color', (color of the line if it exists, not the marker) 'linewidth', 'dasharray', (code for linestyle, see DASH_MAP in mpltools.py) 'zorder', (viewing precedence when stacked with other objects) ] props['markerstyle'].keys() -- [ 'alpha', (opacity of Line2D obj) 'marker', (the mpl marker symbol, see SYMBOL_MAP in mpltools.py) 'facecolor', (color of the marker face) 'edgecolor', (color of the marker edge) 'edgewidth', (width of marker edge) 'markerpath', (an SVG path for drawing the specified marker) 'zorder', (viewing precedence when stacked with other objects) ] """ self.msg += " Attempting to draw a line " line, marker, shape = {}, {}, {} if props["linestyle"] and props["markerstyle"]: self.msg += "... with both lines+markers\n" mode = "lines+markers" elif props["linestyle"]: self.msg += "... with just lines\n" mode = "lines" elif props["markerstyle"]: self.msg += "... with just markers\n" mode = "markers" if props["linestyle"]: color = mpltools.merge_color_and_opacity( props["linestyle"]["color"], props["linestyle"]["alpha"] ) if props["coordinates"] == "data": line = go.scatter.Line( color=color, width=props["linestyle"]["linewidth"], dash=mpltools.convert_dash(props["linestyle"]["dasharray"]), ) else: shape = dict( line=dict( color=color, width=props["linestyle"]["linewidth"], dash=mpltools.convert_dash(props["linestyle"]["dasharray"]), ) ) if props["markerstyle"]: if props["coordinates"] == "data": marker = go.scatter.Marker( opacity=props["markerstyle"]["alpha"], color=props["markerstyle"]["facecolor"], symbol=mpltools.convert_symbol(props["markerstyle"]["marker"]), size=props["markerstyle"]["markersize"], line=dict( color=props["markerstyle"]["edgecolor"], width=props["markerstyle"]["edgewidth"], ), ) else: shape = dict( opacity=props["markerstyle"]["alpha"], fillcolor=props["markerstyle"]["facecolor"], symbol=mpltools.convert_symbol(props["markerstyle"]["marker"]), size=props["markerstyle"]["markersize"], line=dict( color=props["markerstyle"]["edgecolor"], width=props["markerstyle"]["edgewidth"], ), ) if props["coordinates"] == "data": marked_line = go.Scatter( mode=mode, name=( str(props["label"]) if isinstance(props["label"], str) else props["label"] ), x=[xy_pair[0] for xy_pair in props["data"]], y=[xy_pair[1] for xy_pair in props["data"]], xaxis="x{0}".format(self.axis_ct), yaxis="y{0}".format(self.axis_ct), line=line, marker=marker, ) if self.x_is_mpl_date: formatter = ( self.current_mpl_ax.get_xaxis() .get_major_formatter() .__class__.__name__ ) marked_line["x"] = mpltools.mpl_dates_to_datestrings( marked_line["x"], formatter ) self.plotly_fig.add_trace(marked_line), self.msg += " Heck yeah, I drew that line\n" elif props["coordinates"] == "axes": # dealing with legend graphical elements self.draw_legend_shapes(mode=mode, shape=shape, **props) else: self.msg += " Line didn't have 'data' coordinates, " "not drawing\n" warnings.warn( "Bummer! Plotly can currently only draw Line2D " "objects from matplotlib that are in 'data' " "coordinates!" ) def draw_image(self, **props): """Draw image. Not implemented yet! """ self.msg += " Attempting to draw image\n" self.msg += " Not drawing image\n" warnings.warn( "Aw. Snap! You're gonna have to hold off on " "the selfies for now. Plotly can't import " "images from matplotlib yet!" ) def draw_path_collection(self, **props): """Add a path collection to data list as a scatter plot. Current implementation defaults such collections as scatter plots. Matplotlib supports collections that have many of the same parameters in common like color, size, path, etc. However, they needn't all be the same. Plotly does not currently support such functionality and therefore, the style for the first object is taken and used to define the remaining paths in the collection. props.keys() -- [ 'paths', (structure: [vertices, path_code]) 'path_coordinates', ('data', 'axes', 'figure', or 'display') 'path_transforms', (mpl transform, including Affine2D matrix) 'offsets', (offset from axes, helpful if in 'data') 'offset_coordinates', ('data', 'axes', 'figure', or 'display') 'offset_order', 'styles', (style dict, see below) 'mplobj' (the collection obj being drawn) ] props['styles'].keys() -- [ 'linewidth', (one or more linewidths) 'facecolor', (one or more facecolors for path) 'edgecolor', (one or more edgecolors for path) 'alpha', (one or more opacites for path) 'zorder', (precedence when stacked) ] """ self.msg += " Attempting to draw a path collection\n" if props["offset_coordinates"] == "data": markerstyle = mpltools.get_markerstyle_from_collection(props) scatter_props = { "coordinates": "data", "data": props["offsets"], "label": None, "markerstyle": markerstyle, "linestyle": None, } self.msg += " Drawing path collection as markers\n" self.draw_marked_line(**scatter_props) else: self.msg += " Path collection not linked to 'data', " "not drawing\n" warnings.warn( "Dang! That path collection is out of this " "world. I totally don't know what to do with " "it yet! Plotly can only import path " "collections linked to 'data' coordinates" ) def draw_path(self, **props): """Draw path, currently only attempts to draw bar charts. This function attempts to sort a given path into a collection of horizontal or vertical bar charts. Most of the actual code takes place in functions from mpltools.py. props.keys() -- [ 'data', (a list of verticies for the path) 'coordinates', ('data', 'axes', 'figure', or 'display') 'pathcodes', (code for the path, structure: ['M', 'L', 'Z', etc.]) 'style', (style dict, see below) 'mplobj' (the mpl path object) ] props['style'].keys() -- [ 'alpha', (opacity of path obj) 'edgecolor', 'facecolor', 'edgewidth', 'dasharray', (style for path's enclosing line) 'zorder' (precedence of obj when stacked) ] """ self.msg += " Attempting to draw a path\n" is_bar = mpltools.is_bar(self.current_mpl_ax.containers, **props) if is_bar: self.current_bars += [props] else: self.msg += " This path isn't a bar, not drawing\n" warnings.warn( "I found a path object that I don't think is part " "of a bar chart. Ignoring." ) def draw_text(self, **props): """Create an annotation dict for a text obj. Currently, plotly uses either 'page' or 'data' to reference annotation locations. These refer to 'display' and 'data', respectively for the 'coordinates' key used in the Exporter. Appropriate measures are taken to transform text locations to reference one of these two options. props.keys() -- [ 'text', (actual content string, not the text obj) 'position', (an x, y pair, not an mpl Bbox) 'coordinates', ('data', 'axes', 'figure', 'display') 'text_type', ('title', 'xlabel', or 'ylabel') 'style', (style dict, see below) 'mplobj' (actual mpl text object) ] props['style'].keys() -- [ 'alpha', (opacity of text) 'fontsize', (size in points of text) 'color', (hex color) 'halign', (horizontal alignment, 'left', 'center', or 'right') 'valign', (vertical alignment, 'baseline', 'center', or 'top') 'rotation', 'zorder', (precedence of text when stacked with other objs) ] """ self.msg += " Attempting to draw an mpl text object\n" if not mpltools.check_corners(props["mplobj"], self.mpl_fig): warnings.warn( "Looks like the annotation(s) you are trying \n" "to draw lies/lay outside the given figure size.\n\n" "Therefore, the resulting Plotly figure may not be \n" "large enough to view the full text. To adjust \n" "the size of the figure, use the 'width' and \n" "'height' keys in the Layout object. Alternatively,\n" "use the Margin object to adjust the figure's margins." ) align = props["mplobj"]._multialignment if not align: align = props["style"]["halign"] # mpl default if "annotations" not in self.plotly_fig["layout"]: self.plotly_fig["layout"]["annotations"] = [] if props["text_type"] == "xlabel": self.msg += " Text object is an xlabel\n" self.draw_xlabel(**props) elif props["text_type"] == "ylabel": self.msg += " Text object is a ylabel\n" self.draw_ylabel(**props) elif props["text_type"] == "title": self.msg += " Text object is a title\n" self.draw_title(**props) else: # just a regular text annotation... self.msg += " Text object is a normal annotation\n" if props["coordinates"] != "data": self.msg += ( " Text object isn't linked to 'data' " "coordinates\n" ) x_px, y_px = ( props["mplobj"].get_transform().transform(props["position"]) ) x, y = mpltools.display_to_paper(x_px, y_px, self.plotly_fig["layout"]) xref = "paper" yref = "paper" xanchor = props["style"]["halign"] # no difference here! yanchor = mpltools.convert_va(props["style"]["valign"]) else: self.msg += " Text object is linked to 'data' " "coordinates\n" x, y = props["position"] axis_ct = self.axis_ct xaxis = self.plotly_fig["layout"]["xaxis{0}".format(axis_ct)] yaxis = self.plotly_fig["layout"]["yaxis{0}".format(axis_ct)] if ( xaxis["range"][0] < x < xaxis["range"][1] and yaxis["range"][0] < y < yaxis["range"][1] ): xref = "x{0}".format(self.axis_ct) yref = "y{0}".format(self.axis_ct) else: self.msg += ( " Text object is outside " "plotting area, making 'paper' reference.\n" ) x_px, y_px = ( props["mplobj"].get_transform().transform(props["position"]) ) x, y = mpltools.display_to_paper( x_px, y_px, self.plotly_fig["layout"] ) xref = "paper" yref = "paper" xanchor = props["style"]["halign"] # no difference here! yanchor = mpltools.convert_va(props["style"]["valign"]) annotation = go.layout.Annotation( text=( str(props["text"]) if isinstance(props["text"], str) else props["text"] ), opacity=props["style"]["alpha"], x=x, y=y, xref=xref, yref=yref, align=align, xanchor=xanchor, yanchor=yanchor, showarrow=False, # change this later? font=go.layout.annotation.Font( color=props["style"]["color"], size=props["style"]["fontsize"] ), ) self.plotly_fig["layout"]["annotations"] += (annotation,) self.msg += " Heck, yeah I drew that annotation\n" def draw_title(self, **props): """Add a title to the current subplot in layout dictionary. If there exists more than a single plot in the figure, titles revert to 'page'-referenced annotations. props.keys() -- [ 'text', (actual content string, not the text obj) 'position', (an x, y pair, not an mpl Bbox) 'coordinates', ('data', 'axes', 'figure', 'display') 'text_type', ('title', 'xlabel', or 'ylabel') 'style', (style dict, see below) 'mplobj' (actual mpl text object) ] props['style'].keys() -- [ 'alpha', (opacity of text) 'fontsize', (size in points of text) 'color', (hex color) 'halign', (horizontal alignment, 'left', 'center', or 'right') 'valign', (vertical alignment, 'baseline', 'center', or 'top') 'rotation', 'zorder', (precedence of text when stacked with other objs) ] """ self.msg += " Attempting to draw a title\n" if len(self.mpl_fig.axes) > 1: self.msg += ( " More than one subplot, adding title as " "annotation\n" ) x_px, y_px = props["mplobj"].get_transform().transform(props["position"]) x, y = mpltools.display_to_paper(x_px, y_px, self.plotly_fig["layout"]) annotation = go.layout.Annotation( text=props["text"], font=go.layout.annotation.Font( color=props["style"]["color"], size=props["style"]["fontsize"] ), xref="paper", yref="paper", x=x, y=y, xanchor="center", yanchor="bottom", showarrow=False, # no arrow for a title! ) self.plotly_fig["layout"]["annotations"] += (annotation,) else: self.msg += ( " Only one subplot found, adding as a " "plotly title\n" ) self.plotly_fig["layout"]["title"] = props["text"] titlefont = dict( size=props["style"]["fontsize"], color=props["style"]["color"] ) self.plotly_fig["layout"]["titlefont"] = titlefont def draw_xlabel(self, **props): """Add an xaxis label to the current subplot in layout dictionary. props.keys() -- [ 'text', (actual content string, not the text obj) 'position', (an x, y pair, not an mpl Bbox) 'coordinates', ('data', 'axes', 'figure', 'display') 'text_type', ('title', 'xlabel', or 'ylabel') 'style', (style dict, see below) 'mplobj' (actual mpl text object) ] props['style'].keys() -- [ 'alpha', (opacity of text) 'fontsize', (size in points of text) 'color', (hex color) 'halign', (horizontal alignment, 'left', 'center', or 'right') 'valign', (vertical alignment, 'baseline', 'center', or 'top') 'rotation', 'zorder', (precedence of text when stacked with other objs) ] """ self.msg += " Adding xlabel\n" axis_key = "xaxis{0}".format(self.axis_ct) self.plotly_fig["layout"][axis_key]["title"] = str(props["text"]) titlefont = dict(size=props["style"]["fontsize"], color=props["style"]["color"]) self.plotly_fig["layout"][axis_key]["titlefont"] = titlefont def draw_ylabel(self, **props): """Add a yaxis label to the current subplot in layout dictionary. props.keys() -- [ 'text', (actual content string, not the text obj) 'position', (an x, y pair, not an mpl Bbox) 'coordinates', ('data', 'axes', 'figure', 'display') 'text_type', ('title', 'xlabel', or 'ylabel') 'style', (style dict, see below) 'mplobj' (actual mpl text object) ] props['style'].keys() -- [ 'alpha', (opacity of text) 'fontsize', (size in points of text) 'color', (hex color) 'halign', (horizontal alignment, 'left', 'center', or 'right') 'valign', (vertical alignment, 'baseline', 'center', or 'top') 'rotation', 'zorder', (precedence of text when stacked with other objs) ] """ self.msg += " Adding ylabel\n" axis_key = "yaxis{0}".format(self.axis_ct) self.plotly_fig["layout"][axis_key]["title"] = props["text"] titlefont = dict(size=props["style"]["fontsize"], color=props["style"]["color"]) self.plotly_fig["layout"][axis_key]["titlefont"] = titlefont def resize(self): """Revert figure layout to allow plotly to resize. By default, PlotlyRenderer tries its hardest to precisely mimic an mpl figure. However, plotly is pretty good with aesthetics. By running PlotlyRenderer.resize(), layout parameters are deleted. This lets plotly choose them instead of mpl. """ self.msg += "Resizing figure, deleting keys from layout\n" for key in ["width", "height", "autosize", "margin"]: try: del self.plotly_fig["layout"][key] except (KeyError, AttributeError): pass def strip_style(self): self.msg += "Stripping mpl style is no longer supported\n" plotly-5.15.0+dfsg1.orig/plotly/matplotlylib/__init__.py0000644000175000017500000000064014440365261022571 0ustar noahfxnoahfx""" matplotlylib ============ This module converts matplotlib figure objects into JSON structures which can be understood and visualized by Plotly. Most of the functionality should be accessed through the parent directory's 'tools' module or 'plotly' package. """ from __future__ import absolute_import from plotly.matplotlylib.renderer import PlotlyRenderer from plotly.matplotlylib.mplexporter import Exporter plotly-5.15.0+dfsg1.orig/plotly/matplotlylib/mplexporter/0000755000175000017500000000000014440366051023037 5ustar noahfxnoahfxplotly-5.15.0+dfsg1.orig/plotly/matplotlylib/mplexporter/utils.py0000644000175000017500000002715614440365261024566 0ustar noahfxnoahfx""" Utility Routines for Working with Matplotlib Objects ==================================================== """ import itertools import io import base64 import numpy as np import warnings import matplotlib from matplotlib.colors import colorConverter from matplotlib.path import Path from matplotlib.markers import MarkerStyle from matplotlib.transforms import Affine2D from matplotlib import ticker def export_color(color): """Convert matplotlib color code to hex color or RGBA color""" if color is None or colorConverter.to_rgba(color)[3] == 0: return "none" elif colorConverter.to_rgba(color)[3] == 1: rgb = colorConverter.to_rgb(color) return "#{0:02X}{1:02X}{2:02X}".format(*(int(255 * c) for c in rgb)) else: c = colorConverter.to_rgba(color) return ( "rgba(" + ", ".join(str(int(np.round(val * 255))) for val in c[:3]) + ", " + str(c[3]) + ")" ) def _many_to_one(input_dict): """Convert a many-to-one mapping to a one-to-one mapping""" return dict((key, val) for keys, val in input_dict.items() for key in keys) LINESTYLES = _many_to_one( { ("solid", "-", (None, None)): "none", ("dashed", "--"): "6,6", ("dotted", ":"): "2,2", ("dashdot", "-."): "4,4,2,4", ("", " ", "None", "none"): None, } ) def get_dasharray(obj): """Get an SVG dash array for the given matplotlib linestyle Parameters ---------- obj : matplotlib object The matplotlib line or path object, which must have a get_linestyle() method which returns a valid matplotlib line code Returns ------- dasharray : string The HTML/SVG dasharray code associated with the object. """ if obj.__dict__.get("_dashSeq", None) is not None: return ",".join(map(str, obj._dashSeq)) else: ls = obj.get_linestyle() dasharray = LINESTYLES.get(ls, "not found") if dasharray == "not found": warnings.warn( "line style '{0}' not understood: " "defaulting to solid line.".format(ls) ) dasharray = LINESTYLES["solid"] return dasharray PATH_DICT = { Path.LINETO: "L", Path.MOVETO: "M", Path.CURVE3: "S", Path.CURVE4: "C", Path.CLOSEPOLY: "Z", } def SVG_path(path, transform=None, simplify=False): """Construct the vertices and SVG codes for the path Parameters ---------- path : matplotlib.Path object transform : matplotlib transform (optional) if specified, the path will be transformed before computing the output. Returns ------- vertices : array The shape (M, 2) array of vertices of the Path. Note that some Path codes require multiple vertices, so the length of these vertices may be longer than the list of path codes. path_codes : list A length N list of single-character path codes, N <= M. Each code is a single character, in ['L','M','S','C','Z']. See the standard SVG path specification for a description of these. """ if transform is not None: path = path.transformed(transform) vc_tuples = [ (vertices if path_code != Path.CLOSEPOLY else [], PATH_DICT[path_code]) for (vertices, path_code) in path.iter_segments(simplify=simplify) ] if not vc_tuples: # empty path is a special case return np.zeros((0, 2)), [] else: vertices, codes = zip(*vc_tuples) vertices = np.array(list(itertools.chain(*vertices))).reshape(-1, 2) return vertices, list(codes) def get_path_style(path, fill=True): """Get the style dictionary for matplotlib path objects""" style = {} style["alpha"] = path.get_alpha() if style["alpha"] is None: style["alpha"] = 1 style["edgecolor"] = export_color(path.get_edgecolor()) if fill: style["facecolor"] = export_color(path.get_facecolor()) else: style["facecolor"] = "none" style["edgewidth"] = path.get_linewidth() style["dasharray"] = get_dasharray(path) style["zorder"] = path.get_zorder() return style def get_line_style(line): """Get the style dictionary for matplotlib line objects""" style = {} style["alpha"] = line.get_alpha() if style["alpha"] is None: style["alpha"] = 1 style["color"] = export_color(line.get_color()) style["linewidth"] = line.get_linewidth() style["dasharray"] = get_dasharray(line) style["zorder"] = line.get_zorder() style["drawstyle"] = line.get_drawstyle() return style def get_marker_style(line): """Get the style dictionary for matplotlib marker objects""" style = {} style["alpha"] = line.get_alpha() if style["alpha"] is None: style["alpha"] = 1 style["facecolor"] = export_color(line.get_markerfacecolor()) style["edgecolor"] = export_color(line.get_markeredgecolor()) style["edgewidth"] = line.get_markeredgewidth() style["marker"] = line.get_marker() markerstyle = MarkerStyle(line.get_marker()) markersize = line.get_markersize() markertransform = markerstyle.get_transform() + Affine2D().scale( markersize, -markersize ) style["markerpath"] = SVG_path(markerstyle.get_path(), markertransform) style["markersize"] = markersize style["zorder"] = line.get_zorder() return style def get_text_style(text): """Return the text style dict for a text instance""" style = {} style["alpha"] = text.get_alpha() if style["alpha"] is None: style["alpha"] = 1 style["fontsize"] = text.get_size() style["color"] = export_color(text.get_color()) style["halign"] = text.get_horizontalalignment() # left, center, right style["valign"] = text.get_verticalalignment() # baseline, center, top style["malign"] = text._multialignment # text alignment when '\n' in text style["rotation"] = text.get_rotation() style["zorder"] = text.get_zorder() return style def get_axis_properties(axis): """Return the property dictionary for a matplotlib.Axis instance""" props = {} label1On = axis._major_tick_kw.get("label1On", True) if isinstance(axis, matplotlib.axis.XAxis): if label1On: props["position"] = "bottom" else: props["position"] = "top" elif isinstance(axis, matplotlib.axis.YAxis): if label1On: props["position"] = "left" else: props["position"] = "right" else: raise ValueError("{0} should be an Axis instance".format(axis)) # Use tick values if appropriate locator = axis.get_major_locator() props["nticks"] = len(locator()) if isinstance(locator, ticker.FixedLocator): props["tickvalues"] = list(locator()) else: props["tickvalues"] = None # Find tick formats formatter = axis.get_major_formatter() if isinstance(formatter, ticker.NullFormatter): props["tickformat"] = "" elif isinstance(formatter, ticker.FixedFormatter): props["tickformat"] = list(formatter.seq) elif isinstance(formatter, ticker.FuncFormatter): props["tickformat"] = list(formatter.func.args[0].values()) elif not any(label.get_visible() for label in axis.get_ticklabels()): props["tickformat"] = "" else: props["tickformat"] = None # Get axis scale props["scale"] = axis.get_scale() # Get major tick label size (assumes that's all we really care about!) labels = axis.get_ticklabels() if labels: props["fontsize"] = labels[0].get_fontsize() else: props["fontsize"] = None # Get associated grid props["grid"] = get_grid_style(axis) # get axis visibility props["visible"] = axis.get_visible() return props def get_grid_style(axis): gridlines = axis.get_gridlines() if axis._major_tick_kw["gridOn"] and len(gridlines) > 0: color = export_color(gridlines[0].get_color()) alpha = gridlines[0].get_alpha() dasharray = get_dasharray(gridlines[0]) return dict(gridOn=True, color=color, dasharray=dasharray, alpha=alpha) else: return {"gridOn": False} def get_figure_properties(fig): return { "figwidth": fig.get_figwidth(), "figheight": fig.get_figheight(), "dpi": fig.dpi, } def get_axes_properties(ax): props = { "axesbg": export_color(ax.patch.get_facecolor()), "axesbgalpha": ax.patch.get_alpha(), "bounds": ax.get_position().bounds, "dynamic": ax.get_navigate(), "axison": ax.axison, "frame_on": ax.get_frame_on(), "patch_visible": ax.patch.get_visible(), "axes": [get_axis_properties(ax.xaxis), get_axis_properties(ax.yaxis)], } for axname in ["x", "y"]: axis = getattr(ax, axname + "axis") domain = getattr(ax, "get_{0}lim".format(axname))() lim = domain if isinstance(axis.converter, matplotlib.dates.DateConverter): scale = "date" try: import pandas as pd from pandas.tseries.converter import PeriodConverter except ImportError: pd = None if pd is not None and isinstance(axis.converter, PeriodConverter): _dates = [pd.Period(ordinal=int(d), freq=axis.freq) for d in domain] domain = [ (d.year, d.month - 1, d.day, d.hour, d.minute, d.second, 0) for d in _dates ] else: domain = [ ( d.year, d.month - 1, d.day, d.hour, d.minute, d.second, d.microsecond * 1e-3, ) for d in matplotlib.dates.num2date(domain) ] else: scale = axis.get_scale() if scale not in ["date", "linear", "log"]: raise ValueError("Unknown axis scale: " "{0}".format(axis.get_scale())) props[axname + "scale"] = scale props[axname + "lim"] = lim props[axname + "domain"] = domain return props def iter_all_children(obj, skipContainers=False): """ Returns an iterator over all childen and nested children using obj's get_children() method if skipContainers is true, only childless objects are returned. """ if hasattr(obj, "get_children") and len(obj.get_children()) > 0: for child in obj.get_children(): if not skipContainers: yield child # could use `yield from` in python 3... for grandchild in iter_all_children(child, skipContainers): yield grandchild else: yield obj def get_legend_properties(ax, legend): handles, labels = ax.get_legend_handles_labels() visible = legend.get_visible() return {"handles": handles, "labels": labels, "visible": visible} def image_to_base64(image): """ Convert a matplotlib image to a base64 png representation Parameters ---------- image : matplotlib image object The image to be converted. Returns ------- image_base64 : string The UTF8-encoded base64 string representation of the png image. """ ax = image.axes binary_buffer = io.BytesIO() # image is saved in axes coordinates: we need to temporarily # set the correct limits to get the correct image lim = ax.axis() ax.axis(image.get_extent()) image.write_png(binary_buffer) ax.axis(lim) binary_buffer.seek(0) return base64.b64encode(binary_buffer.read()).decode("utf-8") plotly-5.15.0+dfsg1.orig/plotly/matplotlylib/mplexporter/tools.py0000644000175000017500000000330114440365261024550 0ustar noahfxnoahfx""" Tools for matplotlib plot exporting """ def ipynb_vega_init(): """Initialize the IPython notebook display elements This function borrows heavily from the excellent vincent package: http://github.com/wrobstory/vincent """ try: from IPython.core.display import display, HTML except ImportError: print("IPython Notebook could not be loaded.") require_js = """ if (window['d3'] === undefined) {{ require.config({{ paths: {{d3: "http://d3js.org/d3.v3.min"}} }}); require(["d3"], function(d3) {{ window.d3 = d3; {0} }}); }}; if (window['topojson'] === undefined) {{ require.config( {{ paths: {{topojson: "http://d3js.org/topojson.v1.min"}} }} ); require(["topojson"], function(topojson) {{ window.topojson = topojson; }}); }}; """ d3_geo_projection_js_url = "http://d3js.org/d3.geo.projection.v0.min.js" d3_layout_cloud_js_url = "http://wrobstory.github.io/d3-cloud/" "d3.layout.cloud.js" topojson_js_url = "http://d3js.org/topojson.v1.min.js" vega_js_url = "http://trifacta.github.com/vega/vega.js" dep_libs = """$.getScript("%s", function() { $.getScript("%s", function() { $.getScript("%s", function() { $.getScript("%s", function() { $([IPython.events]).trigger("vega_loaded.vincent"); }) }) }) });""" % ( d3_geo_projection_js_url, d3_layout_cloud_js_url, topojson_js_url, vega_js_url, ) load_js = require_js.format(dep_libs) html = "" display(HTML(html)) plotly-5.15.0+dfsg1.orig/plotly/matplotlylib/mplexporter/__init__.py0000644000175000017500000000007714440365261025156 0ustar noahfxnoahfxfrom .renderers import Renderer from .exporter import Exporter plotly-5.15.0+dfsg1.orig/plotly/matplotlylib/mplexporter/renderers/0000755000175000017500000000000014440366051025030 5ustar noahfxnoahfxplotly-5.15.0+dfsg1.orig/plotly/matplotlylib/mplexporter/renderers/vega_renderer.py0000644000175000017500000001150014440365261030211 0ustar noahfxnoahfximport warnings import json import random from .base import Renderer from ..exporter import Exporter class VegaRenderer(Renderer): def open_figure(self, fig, props): self.props = props self.figwidth = int(props["figwidth"] * props["dpi"]) self.figheight = int(props["figheight"] * props["dpi"]) self.data = [] self.scales = [] self.axes = [] self.marks = [] def open_axes(self, ax, props): if len(self.axes) > 0: warnings.warn("multiple axes not yet supported") self.axes = [ dict(type="x", scale="x", ticks=10), dict(type="y", scale="y", ticks=10), ] self.scales = [ dict( name="x", domain=props["xlim"], type="linear", range="width", ), dict( name="y", domain=props["ylim"], type="linear", range="height", ), ] def draw_line(self, data, coordinates, style, label, mplobj=None): if coordinates != "data": warnings.warn("Only data coordinates supported. Skipping this") dataname = "table{0:03d}".format(len(self.data) + 1) # TODO: respect the other style settings self.data.append( {"name": dataname, "values": [dict(x=d[0], y=d[1]) for d in data]} ) self.marks.append( { "type": "line", "from": {"data": dataname}, "properties": { "enter": { "interpolate": {"value": "monotone"}, "x": {"scale": "x", "field": "data.x"}, "y": {"scale": "y", "field": "data.y"}, "stroke": {"value": style["color"]}, "strokeOpacity": {"value": style["alpha"]}, "strokeWidth": {"value": style["linewidth"]}, } }, } ) def draw_markers(self, data, coordinates, style, label, mplobj=None): if coordinates != "data": warnings.warn("Only data coordinates supported. Skipping this") dataname = "table{0:03d}".format(len(self.data) + 1) # TODO: respect the other style settings self.data.append( {"name": dataname, "values": [dict(x=d[0], y=d[1]) for d in data]} ) self.marks.append( { "type": "symbol", "from": {"data": dataname}, "properties": { "enter": { "interpolate": {"value": "monotone"}, "x": {"scale": "x", "field": "data.x"}, "y": {"scale": "y", "field": "data.y"}, "fill": {"value": style["facecolor"]}, "fillOpacity": {"value": style["alpha"]}, "stroke": {"value": style["edgecolor"]}, "strokeOpacity": {"value": style["alpha"]}, "strokeWidth": {"value": style["edgewidth"]}, } }, } ) def draw_text( self, text, position, coordinates, style, text_type=None, mplobj=None ): if text_type == "xlabel": self.axes[0]["title"] = text elif text_type == "ylabel": self.axes[1]["title"] = text class VegaHTML(object): def __init__(self, renderer): self.specification = dict( width=renderer.figwidth, height=renderer.figheight, data=renderer.data, scales=renderer.scales, axes=renderer.axes, marks=renderer.marks, ) def html(self): """Build the HTML representation for IPython.""" id = random.randint(0, 2**16) html = '
' % id html += "\n" return html def _repr_html_(self): return self.html() def fig_to_vega(fig, notebook=False): """Convert a matplotlib figure to vega dictionary if notebook=True, then return an object which will display in a notebook otherwise, return an HTML string. """ renderer = VegaRenderer() Exporter(renderer).run(fig) vega_html = VegaHTML(renderer) if notebook: return vega_html else: return vega_html.html() VEGA_TEMPLATE = """ ( function() { var _do_plot = function() { if ( (typeof vg == 'undefined') && (typeof IPython != 'undefined')) { $([IPython.events]).on("vega_loaded.vincent", _do_plot); return; } vg.parse.spec(%s, function(chart) { chart({el: "#vis%d"}).update(); }); }; _do_plot(); })(); """ plotly-5.15.0+dfsg1.orig/plotly/matplotlylib/mplexporter/renderers/__init__.py0000644000175000017500000000065114440365261027145 0ustar noahfxnoahfx""" Matplotlib Renderers ==================== This submodule contains renderer objects which define renderer behavior used within the Exporter class. The base renderer class is :class:`Renderer`, an abstract base class """ from .base import Renderer from .vega_renderer import VegaRenderer, fig_to_vega from .vincent_renderer import VincentRenderer, fig_to_vincent from .fake_renderer import FakeRenderer, FullFakeRenderer plotly-5.15.0+dfsg1.orig/plotly/matplotlylib/mplexporter/renderers/base.py0000644000175000017500000003463014440365261026324 0ustar noahfxnoahfximport warnings import itertools from contextlib import contextmanager from packaging.version import Version import numpy as np import matplotlib as mpl from matplotlib import transforms from .. import utils from .. import _py3k_compat as py3k class Renderer(object): @staticmethod def ax_zoomable(ax): return bool(ax and ax.get_navigate()) @staticmethod def ax_has_xgrid(ax): return bool(ax and ax.xaxis._gridOnMajor and ax.yaxis.get_gridlines()) @staticmethod def ax_has_ygrid(ax): return bool(ax and ax.yaxis._gridOnMajor and ax.yaxis.get_gridlines()) @property def current_ax_zoomable(self): return self.ax_zoomable(self._current_ax) @property def current_ax_has_xgrid(self): return self.ax_has_xgrid(self._current_ax) @property def current_ax_has_ygrid(self): return self.ax_has_ygrid(self._current_ax) @contextmanager def draw_figure(self, fig, props): if hasattr(self, "_current_fig") and self._current_fig is not None: warnings.warn("figure embedded in figure: something is wrong") self._current_fig = fig self._fig_props = props self.open_figure(fig=fig, props=props) yield self.close_figure(fig=fig) self._current_fig = None self._fig_props = {} @contextmanager def draw_axes(self, ax, props): if hasattr(self, "_current_ax") and self._current_ax is not None: warnings.warn("axes embedded in axes: something is wrong") self._current_ax = ax self._ax_props = props self.open_axes(ax=ax, props=props) yield self.close_axes(ax=ax) self._current_ax = None self._ax_props = {} @contextmanager def draw_legend(self, legend, props): self._current_legend = legend self._legend_props = props self.open_legend(legend=legend, props=props) yield self.close_legend(legend=legend) self._current_legend = None self._legend_props = {} # Following are the functions which should be overloaded in subclasses def open_figure(self, fig, props): """ Begin commands for a particular figure. Parameters ---------- fig : matplotlib.Figure The Figure which will contain the ensuing axes and elements props : dictionary The dictionary of figure properties """ pass def close_figure(self, fig): """ Finish commands for a particular figure. Parameters ---------- fig : matplotlib.Figure The figure which is finished being drawn. """ pass def open_axes(self, ax, props): """ Begin commands for a particular axes. Parameters ---------- ax : matplotlib.Axes The Axes which will contain the ensuing axes and elements props : dictionary The dictionary of axes properties """ pass def close_axes(self, ax): """ Finish commands for a particular axes. Parameters ---------- ax : matplotlib.Axes The Axes which is finished being drawn. """ pass def open_legend(self, legend, props): """ Beging commands for a particular legend. Parameters ---------- legend : matplotlib.legend.Legend The Legend that will contain the ensuing elements props : dictionary The dictionary of legend properties """ pass def close_legend(self, legend): """ Finish commands for a particular legend. Parameters ---------- legend : matplotlib.legend.Legend The Legend which is finished being drawn """ pass def draw_marked_line( self, data, coordinates, linestyle, markerstyle, label, mplobj=None ): """Draw a line that also has markers. If this isn't reimplemented by a renderer object, by default, it will make a call to BOTH draw_line and draw_markers when both markerstyle and linestyle are not None in the same Line2D object. """ if linestyle is not None: self.draw_line(data, coordinates, linestyle, label, mplobj) if markerstyle is not None: self.draw_markers(data, coordinates, markerstyle, label, mplobj) def draw_line(self, data, coordinates, style, label, mplobj=None): """ Draw a line. By default, draw the line via the draw_path() command. Some renderers might wish to override this and provide more fine-grained behavior. In matplotlib, lines are generally created via the plt.plot() command, though this command also can create marker collections. Parameters ---------- data : array_like A shape (N, 2) array of datapoints. coordinates : string A string code, which should be either 'data' for data coordinates, or 'figure' for figure (pixel) coordinates. style : dictionary a dictionary specifying the appearance of the line. mplobj : matplotlib object the matplotlib plot element which generated this line """ pathcodes = ["M"] + (data.shape[0] - 1) * ["L"] pathstyle = dict(facecolor="none", **style) pathstyle["edgecolor"] = pathstyle.pop("color") pathstyle["edgewidth"] = pathstyle.pop("linewidth") self.draw_path( data=data, coordinates=coordinates, pathcodes=pathcodes, style=pathstyle, mplobj=mplobj, ) @staticmethod def _iter_path_collection(paths, path_transforms, offsets, styles): """Build an iterator over the elements of the path collection""" N = max(len(paths), len(offsets)) # Before mpl 1.4.0, path_transform can be a false-y value, not a valid # transformation matrix. if Version(mpl.__version__) < Version("1.4.0"): if path_transforms is None: path_transforms = [np.eye(3)] edgecolor = styles["edgecolor"] if np.size(edgecolor) == 0: edgecolor = ["none"] facecolor = styles["facecolor"] if np.size(facecolor) == 0: facecolor = ["none"] elements = [ paths, path_transforms, offsets, edgecolor, styles["linewidth"], facecolor, ] it = itertools return it.islice(py3k.zip(*py3k.map(it.cycle, elements)), N) def draw_path_collection( self, paths, path_coordinates, path_transforms, offsets, offset_coordinates, offset_order, styles, mplobj=None, ): """ Draw a collection of paths. The paths, offsets, and styles are all iterables, and the number of paths is max(len(paths), len(offsets)). By default, this is implemented via multiple calls to the draw_path() function. For efficiency, Renderers may choose to customize this implementation. Examples of path collections created by matplotlib are scatter plots, histograms, contour plots, and many others. Parameters ---------- paths : list list of tuples, where each tuple has two elements: (data, pathcodes). See draw_path() for a description of these. path_coordinates: string the coordinates code for the paths, which should be either 'data' for data coordinates, or 'figure' for figure (pixel) coordinates. path_transforms: array_like an array of shape (*, 3, 3), giving a series of 2D Affine transforms for the paths. These encode translations, rotations, and scalings in the standard way. offsets: array_like An array of offsets of shape (N, 2) offset_coordinates : string the coordinates code for the offsets, which should be either 'data' for data coordinates, or 'figure' for figure (pixel) coordinates. offset_order : string either "before" or "after". This specifies whether the offset is applied before the path transform, or after. The matplotlib backend equivalent is "before"->"data", "after"->"screen". styles: dictionary A dictionary in which each value is a list of length N, containing the style(s) for the paths. mplobj : matplotlib object the matplotlib plot element which generated this collection """ if offset_order == "before": raise NotImplementedError("offset before transform") for tup in self._iter_path_collection(paths, path_transforms, offsets, styles): (path, path_transform, offset, ec, lw, fc) = tup vertices, pathcodes = path path_transform = transforms.Affine2D(path_transform) vertices = path_transform.transform(vertices) # This is a hack: if path_coordinates == "figure": path_coordinates = "points" style = { "edgecolor": utils.export_color(ec), "facecolor": utils.export_color(fc), "edgewidth": lw, "dasharray": "10,0", "alpha": styles["alpha"], "zorder": styles["zorder"], } self.draw_path( data=vertices, coordinates=path_coordinates, pathcodes=pathcodes, style=style, offset=offset, offset_coordinates=offset_coordinates, mplobj=mplobj, ) def draw_markers(self, data, coordinates, style, label, mplobj=None): """ Draw a set of markers. By default, this is done by repeatedly calling draw_path(), but renderers should generally overload this method to provide a more efficient implementation. In matplotlib, markers are created using the plt.plot() command. Parameters ---------- data : array_like A shape (N, 2) array of datapoints. coordinates : string A string code, which should be either 'data' for data coordinates, or 'figure' for figure (pixel) coordinates. style : dictionary a dictionary specifying the appearance of the markers. mplobj : matplotlib object the matplotlib plot element which generated this marker collection """ vertices, pathcodes = style["markerpath"] pathstyle = dict( (key, style[key]) for key in ["alpha", "edgecolor", "facecolor", "zorder", "edgewidth"] ) pathstyle["dasharray"] = "10,0" for vertex in data: self.draw_path( data=vertices, coordinates="points", pathcodes=pathcodes, style=pathstyle, offset=vertex, offset_coordinates=coordinates, mplobj=mplobj, ) def draw_text( self, text, position, coordinates, style, text_type=None, mplobj=None ): """ Draw text on the image. Parameters ---------- text : string The text to draw position : tuple The (x, y) position of the text coordinates : string A string code, which should be either 'data' for data coordinates, or 'figure' for figure (pixel) coordinates. style : dictionary a dictionary specifying the appearance of the text. text_type : string or None if specified, a type of text such as "xlabel", "ylabel", "title" mplobj : matplotlib object the matplotlib plot element which generated this text """ raise NotImplementedError() def draw_path( self, data, coordinates, pathcodes, style, offset=None, offset_coordinates="data", mplobj=None, ): """ Draw a path. In matplotlib, paths are created by filled regions, histograms, contour plots, patches, etc. Parameters ---------- data : array_like A shape (N, 2) array of datapoints. coordinates : string A string code, which should be either 'data' for data coordinates, 'figure' for figure (pixel) coordinates, or "points" for raw point coordinates (useful in conjunction with offsets, below). pathcodes : list A list of single-character SVG pathcodes associated with the data. Path codes are one of ['M', 'm', 'L', 'l', 'Q', 'q', 'T', 't', 'S', 's', 'C', 'c', 'Z', 'z'] See the SVG specification for details. Note that some path codes consume more than one datapoint (while 'Z' consumes none), so in general, the length of the pathcodes list will not be the same as that of the data array. style : dictionary a dictionary specifying the appearance of the line. offset : list (optional) the (x, y) offset of the path. If not given, no offset will be used. offset_coordinates : string (optional) A string code, which should be either 'data' for data coordinates, or 'figure' for figure (pixel) coordinates. mplobj : matplotlib object the matplotlib plot element which generated this path """ raise NotImplementedError() def draw_image(self, imdata, extent, coordinates, style, mplobj=None): """ Draw an image. Parameters ---------- imdata : string base64 encoded png representation of the image extent : list the axes extent of the image: [xmin, xmax, ymin, ymax] coordinates: string A string code, which should be either 'data' for data coordinates, or 'figure' for figure (pixel) coordinates. style : dictionary a dictionary specifying the appearance of the image mplobj : matplotlib object the matplotlib plot object which generated this image """ raise NotImplementedError() plotly-5.15.0+dfsg1.orig/plotly/matplotlylib/mplexporter/renderers/fake_renderer.py0000644000175000017500000000510514440365261030201 0ustar noahfxnoahfxfrom .base import Renderer class FakeRenderer(Renderer): """ Fake Renderer This is a fake renderer which simply outputs a text tree representing the elements found in the plot(s). This is used in the unit tests for the package. Below are the methods your renderer must implement. You are free to do anything you wish within the renderer (i.e. build an XML or JSON representation, call an external API, etc.) Here the renderer just builds a simple string representation for testing purposes. """ def __init__(self): self.output = "" def open_figure(self, fig, props): self.output += "opening figure\n" def close_figure(self, fig): self.output += "closing figure\n" def open_axes(self, ax, props): self.output += " opening axes\n" def close_axes(self, ax): self.output += " closing axes\n" def open_legend(self, legend, props): self.output += " opening legend\n" def close_legend(self, legend): self.output += " closing legend\n" def draw_text( self, text, position, coordinates, style, text_type=None, mplobj=None ): self.output += " draw text '{0}' {1}\n".format(text, text_type) def draw_path( self, data, coordinates, pathcodes, style, offset=None, offset_coordinates="data", mplobj=None, ): self.output += " draw path with {0} vertices\n".format(data.shape[0]) def draw_image(self, imdata, extent, coordinates, style, mplobj=None): self.output += " draw image of size {0}\n".format(len(imdata)) class FullFakeRenderer(FakeRenderer): """ Renderer with the full complement of methods. When the following are left undefined, they will be implemented via other methods in the class. They can be defined explicitly for more efficient or specialized use within the renderer implementation. """ def draw_line(self, data, coordinates, style, label, mplobj=None): self.output += " draw line with {0} points\n".format(data.shape[0]) def draw_markers(self, data, coordinates, style, label, mplobj=None): self.output += " draw {0} markers\n".format(data.shape[0]) def draw_path_collection( self, paths, path_coordinates, path_transforms, offsets, offset_coordinates, offset_order, styles, mplobj=None, ): self.output += " draw path collection " "with {0} offsets\n".format( offsets.shape[0] ) plotly-5.15.0+dfsg1.orig/plotly/matplotlylib/mplexporter/renderers/vincent_renderer.py0000644000175000017500000000351014440365261030737 0ustar noahfxnoahfximport warnings from .base import Renderer from ..exporter import Exporter class VincentRenderer(Renderer): def open_figure(self, fig, props): self.chart = None self.figwidth = int(props["figwidth"] * props["dpi"]) self.figheight = int(props["figheight"] * props["dpi"]) def draw_line(self, data, coordinates, style, label, mplobj=None): import vincent # only import if VincentRenderer is used if coordinates != "data": warnings.warn("Only data coordinates supported. Skipping this") linedata = {"x": data[:, 0], "y": data[:, 1]} line = vincent.Line( linedata, iter_idx="x", width=self.figwidth, height=self.figheight ) # TODO: respect the other style settings line.scales["color"].range = [style["color"]] if self.chart is None: self.chart = line else: warnings.warn("Multiple plot elements not yet supported") def draw_markers(self, data, coordinates, style, label, mplobj=None): import vincent # only import if VincentRenderer is used if coordinates != "data": warnings.warn("Only data coordinates supported. Skipping this") markerdata = {"x": data[:, 0], "y": data[:, 1]} markers = vincent.Scatter( markerdata, iter_idx="x", width=self.figwidth, height=self.figheight ) # TODO: respect the other style settings markers.scales["color"].range = [style["facecolor"]] if self.chart is None: self.chart = markers else: warnings.warn("Multiple plot elements not yet supported") def fig_to_vincent(fig): """Convert a matplotlib figure to a vincent object""" renderer = VincentRenderer() exporter = Exporter(renderer) exporter.run(fig) return renderer.chart plotly-5.15.0+dfsg1.orig/plotly/matplotlylib/mplexporter/exporter.py0000644000175000017500000002676314440365261025301 0ustar noahfxnoahfx""" Matplotlib Exporter =================== This submodule contains tools for crawling a matplotlib figure and exporting relevant pieces to a renderer. """ import warnings import io from . import utils import matplotlib from matplotlib import transforms, collections from matplotlib.backends.backend_agg import FigureCanvasAgg class Exporter(object): """Matplotlib Exporter Parameters ---------- renderer : Renderer object The renderer object called by the exporter to create a figure visualization. See mplexporter.Renderer for information on the methods which should be defined within the renderer. close_mpl : bool If True (default), close the matplotlib figure as it is rendered. This is useful for when the exporter is used within the notebook, or with an interactive matplotlib backend. """ def __init__(self, renderer, close_mpl=True): self.close_mpl = close_mpl self.renderer = renderer def run(self, fig): """ Run the exporter on the given figure Parmeters --------- fig : matplotlib.Figure instance The figure to export """ # Calling savefig executes the draw() command, putting elements # in the correct place. if fig.canvas is None: canvas = FigureCanvasAgg(fig) fig.savefig(io.BytesIO(), format="png", dpi=fig.dpi) if self.close_mpl: import matplotlib.pyplot as plt plt.close(fig) self.crawl_fig(fig) @staticmethod def process_transform( transform, ax=None, data=None, return_trans=False, force_trans=None ): """Process the transform and convert data to figure or data coordinates Parameters ---------- transform : matplotlib Transform object The transform applied to the data ax : matplotlib Axes object (optional) The axes the data is associated with data : ndarray (optional) The array of data to be transformed. return_trans : bool (optional) If true, return the final transform of the data force_trans : matplotlib.transform instance (optional) If supplied, first force the data to this transform Returns ------- code : string Code is either "data", "axes", "figure", or "display", indicating the type of coordinates output. transform : matplotlib transform the transform used to map input data to output data. Returned only if return_trans is True new_data : ndarray Data transformed to match the given coordinate code. Returned only if data is specified """ if isinstance(transform, transforms.BlendedGenericTransform): warnings.warn( "Blended transforms not yet supported. " "Zoom behavior may not work as expected." ) if force_trans is not None: if data is not None: data = (transform - force_trans).transform(data) transform = force_trans code = "display" if ax is not None: for (c, trans) in [ ("data", ax.transData), ("axes", ax.transAxes), ("figure", ax.figure.transFigure), ("display", transforms.IdentityTransform()), ]: if transform.contains_branch(trans): code, transform = (c, transform - trans) break if data is not None: if return_trans: return code, transform.transform(data), transform else: return code, transform.transform(data) else: if return_trans: return code, transform else: return code def crawl_fig(self, fig): """Crawl the figure and process all axes""" with self.renderer.draw_figure(fig=fig, props=utils.get_figure_properties(fig)): for ax in fig.axes: self.crawl_ax(ax) def crawl_ax(self, ax): """Crawl the axes and process all elements within""" with self.renderer.draw_axes(ax=ax, props=utils.get_axes_properties(ax)): for line in ax.lines: self.draw_line(ax, line) for text in ax.texts: self.draw_text(ax, text) for (text, ttp) in zip( [ax.xaxis.label, ax.yaxis.label, ax.title], ["xlabel", "ylabel", "title"], ): if hasattr(text, "get_text") and text.get_text(): self.draw_text(ax, text, force_trans=ax.transAxes, text_type=ttp) for artist in ax.artists: # TODO: process other artists if isinstance(artist, matplotlib.text.Text): self.draw_text(ax, artist) for patch in ax.patches: self.draw_patch(ax, patch) for collection in ax.collections: self.draw_collection(ax, collection) for image in ax.images: self.draw_image(ax, image) legend = ax.get_legend() if legend is not None: props = utils.get_legend_properties(ax, legend) with self.renderer.draw_legend(legend=legend, props=props): if props["visible"]: self.crawl_legend(ax, legend) def crawl_legend(self, ax, legend): """ Recursively look through objects in legend children """ legendElements = list( utils.iter_all_children(legend._legend_box, skipContainers=True) ) legendElements.append(legend.legendPatch) for child in legendElements: # force a large zorder so it appears on top child.set_zorder(1e6 + child.get_zorder()) # reorder border box to make sure marks are visible if isinstance(child, matplotlib.patches.FancyBboxPatch): child.set_zorder(child.get_zorder() - 1) try: # What kind of object... if isinstance(child, matplotlib.patches.Patch): self.draw_patch(ax, child, force_trans=ax.transAxes) elif isinstance(child, matplotlib.text.Text): if child.get_text() != "None": self.draw_text(ax, child, force_trans=ax.transAxes) elif isinstance(child, matplotlib.lines.Line2D): self.draw_line(ax, child, force_trans=ax.transAxes) elif isinstance(child, matplotlib.collections.Collection): self.draw_collection(ax, child, force_pathtrans=ax.transAxes) else: warnings.warn("Legend element %s not impemented" % child) except NotImplementedError: warnings.warn("Legend element %s not impemented" % child) def draw_line(self, ax, line, force_trans=None): """Process a matplotlib line and call renderer.draw_line""" coordinates, data = self.process_transform( line.get_transform(), ax, line.get_xydata(), force_trans=force_trans ) linestyle = utils.get_line_style(line) if linestyle["dasharray"] is None and linestyle["drawstyle"] == "default": linestyle = None markerstyle = utils.get_marker_style(line) if ( markerstyle["marker"] in ["None", "none", None] or markerstyle["markerpath"][0].size == 0 ): markerstyle = None label = line.get_label() if markerstyle or linestyle: self.renderer.draw_marked_line( data=data, coordinates=coordinates, linestyle=linestyle, markerstyle=markerstyle, label=label, mplobj=line, ) def draw_text(self, ax, text, force_trans=None, text_type=None): """Process a matplotlib text object and call renderer.draw_text""" content = text.get_text() if content: transform = text.get_transform() position = text.get_position() coords, position = self.process_transform( transform, ax, position, force_trans=force_trans ) style = utils.get_text_style(text) self.renderer.draw_text( text=content, position=position, coordinates=coords, text_type=text_type, style=style, mplobj=text, ) def draw_patch(self, ax, patch, force_trans=None): """Process a matplotlib patch object and call renderer.draw_path""" vertices, pathcodes = utils.SVG_path(patch.get_path()) transform = patch.get_transform() coordinates, vertices = self.process_transform( transform, ax, vertices, force_trans=force_trans ) linestyle = utils.get_path_style(patch, fill=patch.get_fill()) self.renderer.draw_path( data=vertices, coordinates=coordinates, pathcodes=pathcodes, style=linestyle, mplobj=patch, ) def draw_collection( self, ax, collection, force_pathtrans=None, force_offsettrans=None ): """Process a matplotlib collection and call renderer.draw_collection""" (transform, transOffset, offsets, paths) = collection._prepare_points() offset_coords, offsets = self.process_transform( transOffset, ax, offsets, force_trans=force_offsettrans ) path_coords = self.process_transform(transform, ax, force_trans=force_pathtrans) processed_paths = [utils.SVG_path(path) for path in paths] processed_paths = [ ( self.process_transform( transform, ax, path[0], force_trans=force_pathtrans )[1], path[1], ) for path in processed_paths ] path_transforms = collection.get_transforms() try: # matplotlib 1.3: path_transforms are transform objects. # Convert them to numpy arrays. path_transforms = [t.get_matrix() for t in path_transforms] except AttributeError: # matplotlib 1.4: path transforms are already numpy arrays. pass styles = { "linewidth": collection.get_linewidths(), "facecolor": collection.get_facecolors(), "edgecolor": collection.get_edgecolors(), "alpha": collection._alpha, "zorder": collection.get_zorder(), } offset_dict = {"data": "before", "screen": "after"} offset_order = offset_dict[collection.get_offset_position()] self.renderer.draw_path_collection( paths=processed_paths, path_coordinates=path_coords, path_transforms=path_transforms, offsets=offsets, offset_coordinates=offset_coords, offset_order=offset_order, styles=styles, mplobj=collection, ) def draw_image(self, ax, image): """Process a matplotlib image object and call renderer.draw_image""" self.renderer.draw_image( imdata=utils.image_to_base64(image), extent=image.get_extent(), coordinates="data", style={"alpha": image.get_alpha(), "zorder": image.get_zorder()}, mplobj=image, ) plotly-5.15.0+dfsg1.orig/plotly/matplotlylib/mplexporter/_py3k_compat.py0000644000175000017500000000067314440365261026011 0ustar noahfxnoahfx""" Simple fixes for Python 2/3 compatibility """ import sys PY3K = sys.version_info[0] >= 3 if PY3K: import builtins import functools reduce = functools.reduce zip = builtins.zip xrange = builtins.range map = builtins.map else: import __builtin__ import itertools builtins = __builtin__ reduce = __builtin__.reduce zip = itertools.izip xrange = __builtin__.xrange map = itertools.imap plotly-5.15.0+dfsg1.orig/plotly/matplotlylib/mpltools.py0000644000175000017500000005034014440365261022705 0ustar noahfxnoahfx""" Tools A module for converting from mpl language to plotly language. """ import math import datetime import warnings import matplotlib.dates def check_bar_match(old_bar, new_bar): """Check if two bars belong in the same collection (bar chart). Positional arguments: old_bar -- a previously sorted bar dictionary. new_bar -- a new bar dictionary that needs to be sorted. """ tests = [] tests += (new_bar["orientation"] == old_bar["orientation"],) tests += (new_bar["facecolor"] == old_bar["facecolor"],) if new_bar["orientation"] == "v": new_width = new_bar["x1"] - new_bar["x0"] old_width = old_bar["x1"] - old_bar["x0"] tests += (new_width - old_width < 0.000001,) tests += (new_bar["y0"] == old_bar["y0"],) elif new_bar["orientation"] == "h": new_height = new_bar["y1"] - new_bar["y0"] old_height = old_bar["y1"] - old_bar["y0"] tests += (new_height - old_height < 0.000001,) tests += (new_bar["x0"] == old_bar["x0"],) if all(tests): return True else: return False def check_corners(inner_obj, outer_obj): inner_corners = inner_obj.get_window_extent().corners() outer_corners = outer_obj.get_window_extent().corners() if inner_corners[0][0] < outer_corners[0][0]: return False elif inner_corners[0][1] < outer_corners[0][1]: return False elif inner_corners[3][0] > outer_corners[3][0]: return False elif inner_corners[3][1] > outer_corners[3][1]: return False else: return True def convert_dash(mpl_dash): """Convert mpl line symbol to plotly line symbol and return symbol.""" if mpl_dash in DASH_MAP: return DASH_MAP[mpl_dash] else: dash_array = mpl_dash.split(",") if len(dash_array) < 2: return "solid" # Catch the exception where the off length is zero, in case # matplotlib 'solid' changes from '10,0' to 'N,0' if math.isclose(float(dash_array[1]), 0.0): return "solid" # If we can't find the dash pattern in the map, convert it # into custom values in px, e.g. '7,5' -> '7px,5px' dashpx = ",".join([x + "px" for x in dash_array]) # TODO: rewrite the convert_dash code # only strings 'solid', 'dashed', etc allowed if dashpx == "7.4px,3.2px": dashpx = "dashed" elif dashpx == "12.8px,3.2px,2.0px,3.2px": dashpx = "dashdot" elif dashpx == "2.0px,3.3px": dashpx = "dotted" return dashpx def convert_path(path): verts = path[0] # may use this later code = tuple(path[1]) if code in PATH_MAP: return PATH_MAP[code] else: return None def convert_symbol(mpl_symbol): """Convert mpl marker symbol to plotly symbol and return symbol.""" if isinstance(mpl_symbol, list): symbol = list() for s in mpl_symbol: symbol += [convert_symbol(s)] return symbol elif mpl_symbol in SYMBOL_MAP: return SYMBOL_MAP[mpl_symbol] else: return "circle" # default def hex_to_rgb(value): """ Change a hex color to an rgb tuple :param (str|unicode) value: The hex string we want to convert. :return: (int, int, int) The red, green, blue int-tuple. Example: '#FFFFFF' --> (255, 255, 255) """ value = value.lstrip("#") lv = len(value) return tuple(int(value[i : i + lv // 3], 16) for i in range(0, lv, lv // 3)) def merge_color_and_opacity(color, opacity): """ Merge hex color with an alpha (opacity) to get an rgba tuple. :param (str|unicode) color: A hex color string. :param (float|int) opacity: A value [0, 1] for the 'a' in 'rgba'. :return: (int, int, int, float) The rgba color and alpha tuple. """ if color is None: # None can be used as a placeholder, just bail. return None rgb_tup = hex_to_rgb(color) if opacity is None: return "rgb {}".format(rgb_tup) rgba_tup = rgb_tup + (opacity,) return "rgba {}".format(rgba_tup) def convert_va(mpl_va): """Convert mpl vertical alignment word to equivalent HTML word. Text alignment specifiers from mpl differ very slightly from those used in HTML. See the VA_MAP for more details. Positional arguments: mpl_va -- vertical mpl text alignment spec. """ if mpl_va in VA_MAP: return VA_MAP[mpl_va] else: return None # let plotly figure it out! def convert_x_domain(mpl_plot_bounds, mpl_max_x_bounds): """Map x dimension of current plot to plotly's domain space. The bbox used to locate an axes object in mpl differs from the method used to locate axes in plotly. The mpl version locates each axes in the figure so that axes in a single-plot figure might have the bounds, [0.125, 0.125, 0.775, 0.775] (x0, y0, width, height), in mpl's figure coordinates. However, the axes all share one space in plotly such that the domain will always be [0, 0, 1, 1] (x0, y0, x1, y1). To convert between the two, the mpl figure bounds need to be mapped to a [0, 1] domain for x and y. The margins set upon opening a new figure will appropriately match the mpl margins. Optionally, setting margins=0 and simply copying the domains from mpl to plotly would place axes appropriately. However, this would throw off axis and title labeling. Positional arguments: mpl_plot_bounds -- the (x0, y0, width, height) params for current ax ** mpl_max_x_bounds -- overall (x0, x1) bounds for all axes ** ** these are all specified in mpl figure coordinates """ mpl_x_dom = [mpl_plot_bounds[0], mpl_plot_bounds[0] + mpl_plot_bounds[2]] plotting_width = mpl_max_x_bounds[1] - mpl_max_x_bounds[0] x0 = (mpl_x_dom[0] - mpl_max_x_bounds[0]) / plotting_width x1 = (mpl_x_dom[1] - mpl_max_x_bounds[0]) / plotting_width return [x0, x1] def convert_y_domain(mpl_plot_bounds, mpl_max_y_bounds): """Map y dimension of current plot to plotly's domain space. The bbox used to locate an axes object in mpl differs from the method used to locate axes in plotly. The mpl version locates each axes in the figure so that axes in a single-plot figure might have the bounds, [0.125, 0.125, 0.775, 0.775] (x0, y0, width, height), in mpl's figure coordinates. However, the axes all share one space in plotly such that the domain will always be [0, 0, 1, 1] (x0, y0, x1, y1). To convert between the two, the mpl figure bounds need to be mapped to a [0, 1] domain for x and y. The margins set upon opening a new figure will appropriately match the mpl margins. Optionally, setting margins=0 and simply copying the domains from mpl to plotly would place axes appropriately. However, this would throw off axis and title labeling. Positional arguments: mpl_plot_bounds -- the (x0, y0, width, height) params for current ax ** mpl_max_y_bounds -- overall (y0, y1) bounds for all axes ** ** these are all specified in mpl figure coordinates """ mpl_y_dom = [mpl_plot_bounds[1], mpl_plot_bounds[1] + mpl_plot_bounds[3]] plotting_height = mpl_max_y_bounds[1] - mpl_max_y_bounds[0] y0 = (mpl_y_dom[0] - mpl_max_y_bounds[0]) / plotting_height y1 = (mpl_y_dom[1] - mpl_max_y_bounds[0]) / plotting_height return [y0, y1] def display_to_paper(x, y, layout): """Convert mpl display coordinates to plotly paper coordinates. Plotly references object positions with an (x, y) coordinate pair in either 'data' or 'paper' coordinates which reference actual data in a plot or the entire plotly axes space where the bottom-left of the bottom-left plot has the location (x, y) = (0, 0) and the top-right of the top-right plot has the location (x, y) = (1, 1). Display coordinates in mpl reference objects with an (x, y) pair in pixel coordinates, where the bottom-left corner is at the location (x, y) = (0, 0) and the top-right corner is at the location (x, y) = (figwidth*dpi, figheight*dpi). Here, figwidth and figheight are in inches and dpi are the dots per inch resolution. """ num_x = x - layout["margin"]["l"] den_x = layout["width"] - (layout["margin"]["l"] + layout["margin"]["r"]) num_y = y - layout["margin"]["b"] den_y = layout["height"] - (layout["margin"]["b"] + layout["margin"]["t"]) return num_x / den_x, num_y / den_y def get_axes_bounds(fig): """Return the entire axes space for figure. An axes object in mpl is specified by its relation to the figure where (0,0) corresponds to the bottom-left part of the figure and (1,1) corresponds to the top-right. Margins exist in matplotlib because axes objects normally don't go to the edges of the figure. In plotly, the axes area (where all subplots go) is always specified with the domain [0,1] for both x and y. This function finds the smallest box, specified by two points, that all of the mpl axes objects fit into. This box is then used to map mpl axes domains to plotly axes domains. """ x_min, x_max, y_min, y_max = [], [], [], [] for axes_obj in fig.get_axes(): bounds = axes_obj.get_position().bounds x_min.append(bounds[0]) x_max.append(bounds[0] + bounds[2]) y_min.append(bounds[1]) y_max.append(bounds[1] + bounds[3]) x_min, y_min, x_max, y_max = min(x_min), min(y_min), max(x_max), max(y_max) return (x_min, x_max), (y_min, y_max) def get_axis_mirror(main_spine, mirror_spine): if main_spine and mirror_spine: return "ticks" elif main_spine and not mirror_spine: return False elif not main_spine and mirror_spine: return False # can't handle this case yet! else: return False # nuttin'! def get_bar_gap(bar_starts, bar_ends, tol=1e-10): if len(bar_starts) == len(bar_ends) and len(bar_starts) > 1: sides1 = bar_starts[1:] sides2 = bar_ends[:-1] gaps = [s2 - s1 for s2, s1 in zip(sides1, sides2)] gap0 = gaps[0] uniform = all([abs(gap0 - gap) < tol for gap in gaps]) if uniform: return gap0 def convert_rgba_array(color_list): clean_color_list = list() for c in color_list: clean_color_list += [ (dict(r=int(c[0] * 255), g=int(c[1] * 255), b=int(c[2] * 255), a=c[3])) ] plotly_colors = list() for rgba in clean_color_list: plotly_colors += ["rgba({r},{g},{b},{a})".format(**rgba)] if len(plotly_colors) == 1: return plotly_colors[0] else: return plotly_colors def convert_path_array(path_array): symbols = list() for path in path_array: symbols += [convert_path(path)] if len(symbols) == 1: return symbols[0] else: return symbols def convert_linewidth_array(width_array): if len(width_array) == 1: return width_array[0] else: return width_array def convert_size_array(size_array): size = [math.sqrt(s) for s in size_array] if len(size) == 1: return size[0] else: return size def get_markerstyle_from_collection(props): markerstyle = dict( alpha=None, facecolor=convert_rgba_array(props["styles"]["facecolor"]), marker=convert_path_array(props["paths"]), edgewidth=convert_linewidth_array(props["styles"]["linewidth"]), # markersize=convert_size_array(props['styles']['size']), # TODO! markersize=convert_size_array(props["mplobj"].get_sizes()), edgecolor=convert_rgba_array(props["styles"]["edgecolor"]), ) return markerstyle def get_rect_xmin(data): """Find minimum x value from four (x,y) vertices.""" return min(data[0][0], data[1][0], data[2][0], data[3][0]) def get_rect_xmax(data): """Find maximum x value from four (x,y) vertices.""" return max(data[0][0], data[1][0], data[2][0], data[3][0]) def get_rect_ymin(data): """Find minimum y value from four (x,y) vertices.""" return min(data[0][1], data[1][1], data[2][1], data[3][1]) def get_rect_ymax(data): """Find maximum y value from four (x,y) vertices.""" return max(data[0][1], data[1][1], data[2][1], data[3][1]) def get_spine_visible(ax, spine_key): """Return some spine parameters for the spine, `spine_key`.""" spine = ax.spines[spine_key] ax_frame_on = ax.get_frame_on() position = spine._position or ("outward", 0.0) if isinstance(position, str): if position == "center": position = ("axes", 0.5) elif position == "zero": position = ("data", 0) position_type, amount = position if position_type == "outward" and amount == 0: spine_frame_like = True else: spine_frame_like = False if not spine.get_visible(): return False elif not spine._edgecolor[-1]: # user's may have set edgecolor alpha==0 return False elif not ax_frame_on and spine_frame_like: return False elif ax_frame_on and spine_frame_like: return True elif not ax_frame_on and not spine_frame_like: return True # we've already checked for that it's visible. else: return False # oh man, and i thought we exhausted the options... def is_bar(bar_containers, **props): """A test to decide whether a path is a bar from a vertical bar chart.""" # is this patch in a bar container? for container in bar_containers: if props["mplobj"] in container: return True return False def make_bar(**props): """Make an intermediate bar dictionary. This creates a bar dictionary which aids in the comparison of new bars to old bars from other bar chart (patch) collections. This is not the dictionary that needs to get passed to plotly as a data dictionary. That happens in PlotlyRenderer in that class's draw_bar method. In other words, this dictionary describes a SINGLE bar, whereas, plotly will require a set of bars to be passed in a data dictionary. """ return { "bar": props["mplobj"], "x0": get_rect_xmin(props["data"]), "y0": get_rect_ymin(props["data"]), "x1": get_rect_xmax(props["data"]), "y1": get_rect_ymax(props["data"]), "alpha": props["style"]["alpha"], "edgecolor": props["style"]["edgecolor"], "facecolor": props["style"]["facecolor"], "edgewidth": props["style"]["edgewidth"], "dasharray": props["style"]["dasharray"], "zorder": props["style"]["zorder"], } def prep_ticks(ax, index, ax_type, props): """Prepare axis obj belonging to axes obj. positional arguments: ax - the mpl axes instance index - the index of the axis in `props` ax_type - 'x' or 'y' (for now) props - an mplexporter poperties dictionary """ axis_dict = dict() if ax_type == "x": axis = ax.get_xaxis() elif ax_type == "y": axis = ax.get_yaxis() else: return dict() # whoops! scale = props["axes"][index]["scale"] if scale == "linear": # get tick location information try: tickvalues = props["axes"][index]["tickvalues"] tick0 = tickvalues[0] dticks = [ round(tickvalues[i] - tickvalues[i - 1], 12) for i in range(1, len(tickvalues) - 1) ] if all([dticks[i] == dticks[i - 1] for i in range(1, len(dticks) - 1)]): dtick = tickvalues[1] - tickvalues[0] else: warnings.warn( "'linear' {0}-axis tick spacing not even, " "ignoring mpl tick formatting.".format(ax_type) ) raise TypeError except (IndexError, TypeError): axis_dict["nticks"] = props["axes"][index]["nticks"] else: axis_dict["tick0"] = tick0 axis_dict["dtick"] = dtick axis_dict["tickmode"] = None elif scale == "log": try: axis_dict["tick0"] = props["axes"][index]["tickvalues"][0] axis_dict["dtick"] = ( props["axes"][index]["tickvalues"][1] - props["axes"][index]["tickvalues"][0] ) axis_dict["tickmode"] = None except (IndexError, TypeError): axis_dict = dict(nticks=props["axes"][index]["nticks"]) base = axis.get_transform().base if base == 10: if ax_type == "x": axis_dict["range"] = [ math.log10(props["xlim"][0]), math.log10(props["xlim"][1]), ] elif ax_type == "y": axis_dict["range"] = [ math.log10(props["ylim"][0]), math.log10(props["ylim"][1]), ] else: axis_dict = dict(range=None, type="linear") warnings.warn( "Converted non-base10 {0}-axis log scale to 'linear'" "".format(ax_type) ) else: return dict() # get tick label formatting information formatter = axis.get_major_formatter().__class__.__name__ if ax_type == "x" and "DateFormatter" in formatter: axis_dict["type"] = "date" try: axis_dict["tick0"] = mpl_dates_to_datestrings(axis_dict["tick0"], formatter) except KeyError: pass finally: axis_dict.pop("dtick", None) axis_dict.pop("tickmode", None) axis_dict["range"] = mpl_dates_to_datestrings(props["xlim"], formatter) if formatter == "LogFormatterMathtext": axis_dict["exponentformat"] = "e" return axis_dict def prep_xy_axis(ax, props, x_bounds, y_bounds): xaxis = dict( type=props["axes"][0]["scale"], range=list(props["xlim"]), showgrid=props["axes"][0]["grid"]["gridOn"], domain=convert_x_domain(props["bounds"], x_bounds), side=props["axes"][0]["position"], tickfont=dict(size=props["axes"][0]["fontsize"]), ) xaxis.update(prep_ticks(ax, 0, "x", props)) yaxis = dict( type=props["axes"][1]["scale"], range=list(props["ylim"]), showgrid=props["axes"][1]["grid"]["gridOn"], domain=convert_y_domain(props["bounds"], y_bounds), side=props["axes"][1]["position"], tickfont=dict(size=props["axes"][1]["fontsize"]), ) yaxis.update(prep_ticks(ax, 1, "y", props)) return xaxis, yaxis def mpl_dates_to_datestrings(dates, mpl_formatter): """Convert matplotlib dates to iso-formatted-like time strings. Plotly's accepted format: "YYYY-MM-DD HH:MM:SS" (e.g., 2001-01-01 00:00:00) Info on mpl dates: http://matplotlib.org/api/dates_api.html """ _dates = dates # this is a pandas datetime formatter, times show up in floating point days # since the epoch (1970-01-01T00:00:00+00:00) if mpl_formatter == "TimeSeries_DateFormatter": try: dates = matplotlib.dates.epoch2num([date * 24 * 60 * 60 for date in dates]) dates = matplotlib.dates.num2date(dates) except: return _dates # the rest of mpl dates are in floating point days since # (0001-01-01T00:00:00+00:00) + 1. I.e., (0001-01-01T00:00:00+00:00) == 1.0 # according to mpl --> try num2date(1) else: try: dates = matplotlib.dates.num2date(dates) except: return _dates time_stings = [ " ".join(date.isoformat().split("+")[0].split("T")) for date in dates ] return time_stings # dashed is dash in matplotlib DASH_MAP = { "10,0": "solid", "6,6": "dash", "2,2": "circle", "4,4,2,4": "dashdot", "none": "solid", "7.4,3.2": "dash", } PATH_MAP = { ("M", "C", "C", "C", "C", "C", "C", "C", "C", "Z"): "o", ("M", "L", "L", "L", "L", "L", "L", "L", "L", "L", "Z"): "*", ("M", "L", "L", "L", "L", "L", "L", "L", "Z"): "8", ("M", "L", "L", "L", "L", "L", "Z"): "h", ("M", "L", "L", "L", "L", "Z"): "p", ("M", "L", "M", "L", "M", "L"): "1", ("M", "L", "L", "L", "Z"): "s", ("M", "L", "M", "L"): "+", ("M", "L", "L", "Z"): "^", ("M", "L"): "|", } SYMBOL_MAP = { "o": "circle", "v": "triangle-down", "^": "triangle-up", "<": "triangle-left", ">": "triangle-right", "s": "square", "+": "cross", "x": "x", "*": "star", "D": "diamond", "d": "diamond", } VA_MAP = {"center": "middle", "baseline": "bottom", "top": "top"} plotly-5.15.0+dfsg1.orig/plotly/__init__.py0000644000175000017500000001235214440365260020057 0ustar noahfxnoahfx""" https://plot.ly/python/ Plotly's Python API allows users to programmatically access Plotly's server resources. This package is organized as follows: Subpackages: - plotly: all functionality that requires access to Plotly's servers - graph_objs: objects for designing figures and visualizing data - matplotlylib: tools to convert matplotlib figures Modules: - tools: some helpful tools that do not require access to Plotly's servers - utils: functions that you probably won't need, but that subpackages use - version: holds the current API version - exceptions: defines our custom exception classes """ from __future__ import absolute_import import sys from typing import TYPE_CHECKING from _plotly_utils.importers import relative_import if sys.version_info < (3, 7) or TYPE_CHECKING: from plotly import ( graph_objs, tools, utils, offline, colors, io, data, ) from plotly.version import __version__ __all__ = [ "graph_objs", "tools", "utils", "offline", "colors", "io", "data", "__version__", ] # Set default template (for >= 3.7 this is done in ploty/io/__init__.py) from plotly.io import templates templates._default = "plotly" else: __all__, __getattr__, __dir__ = relative_import( __name__, [ ".graph_objs", ".graph_objects", ".tools", ".utils", ".offline", ".colors", ".io", ".data", ], [".version.__version__"], ) def plot(data_frame, kind, **kwargs): """ Pandas plotting backend function, not meant to be called directly. To activate, set pandas.options.plotting.backend="plotly" See https://github.com/pandas-dev/pandas/blob/master/pandas/plotting/__init__.py """ from .express import ( scatter, line, area, bar, box, histogram, violin, strip, funnel, density_contour, density_heatmap, imshow, ) if kind == "scatter": new_kwargs = {k: kwargs[k] for k in kwargs if k not in ["s", "c"]} return scatter(data_frame, **new_kwargs) if kind == "line": return line(data_frame, **kwargs) if kind == "area": new_kwargs = {k: kwargs[k] for k in kwargs if k not in ["stacked"]} return area(data_frame, **new_kwargs) if kind == "bar": return bar(data_frame, **kwargs) if kind == "barh": return bar(data_frame, orientation="h", **kwargs) if kind == "box": new_kwargs = {k: kwargs[k] for k in kwargs if k not in ["by"]} return box(data_frame, **new_kwargs) if kind in ["hist", "histogram"]: new_kwargs = {k: kwargs[k] for k in kwargs if k not in ["by", "bins"]} return histogram(data_frame, **new_kwargs) if kind == "violin": return violin(data_frame, **kwargs) if kind == "strip": return strip(data_frame, **kwargs) if kind == "funnel": return funnel(data_frame, **kwargs) if kind == "density_contour": return density_contour(data_frame, **kwargs) if kind == "density_heatmap": return density_heatmap(data_frame, **kwargs) if kind == "imshow": return imshow(data_frame, **kwargs) if kind == "heatmap": raise ValueError( "kind='heatmap' not supported plotting.backend='plotly'. " "Please use kind='imshow' or kind='density_heatmap'." ) raise NotImplementedError( "kind='%s' not yet supported for plotting.backend='plotly'" % kind ) def boxplot_frame(data_frame, **kwargs): """ Pandas plotting backend function, not meant to be called directly. To activate, set pandas.options.plotting.backend="plotly" See https://github.com/pandas-dev/pandas/blob/master/pandas/plotting/__init__.py """ from .express import box skip = ["by", "column", "ax", "fontsize", "rot", "grid", "figsize", "layout"] skip += ["return_type"] new_kwargs = {k: kwargs[k] for k in kwargs if k not in skip} return box(data_frame, **new_kwargs) def hist_frame(data_frame, **kwargs): """ Pandas plotting backend function, not meant to be called directly. To activate, set pandas.options.plotting.backend="plotly" See https://github.com/pandas-dev/pandas/blob/master/pandas/plotting/__init__.py """ from .express import histogram skip = ["column", "by", "grid", "xlabelsize", "xrot", "ylabelsize", "yrot"] skip += ["ax", "sharex", "sharey", "figsize", "layout", "bins", "legend"] new_kwargs = {k: kwargs[k] for k in kwargs if k not in skip} return histogram(data_frame, **new_kwargs) def hist_series(data_frame, **kwargs): """ Pandas plotting backend function, not meant to be called directly. To activate, set pandas.options.plotting.backend="plotly" See https://github.com/pandas-dev/pandas/blob/master/pandas/plotting/__init__.py """ from .express import histogram skip = ["by", "grid", "xlabelsize", "xrot", "ylabelsize", "yrot", "ax"] skip += ["figsize", "bins", "legend"] new_kwargs = {k: kwargs[k] for k in kwargs if k not in skip} return histogram(data_frame, **new_kwargs) plotly-5.15.0+dfsg1.orig/plotly/optional_imports.py0000644000175000017500000000006614440365261021722 0ustar noahfxnoahfxfrom _plotly_utils.optional_imports import get_module plotly-5.15.0+dfsg1.orig/plotly/animation.py0000644000175000017500000000312014440365260020270 0ustar noahfxnoahfxfrom _plotly_utils.basevalidators import EnumeratedValidator, NumberValidator class EasingValidator(EnumeratedValidator): def __init__(self, plotly_name="easing", parent_name="batch_animate", **_): super(EasingValidator, self).__init__( plotly_name=plotly_name, parent_name=parent_name, values=[ "linear", "quad", "cubic", "sin", "exp", "circle", "elastic", "back", "bounce", "linear-in", "quad-in", "cubic-in", "sin-in", "exp-in", "circle-in", "elastic-in", "back-in", "bounce-in", "linear-out", "quad-out", "cubic-out", "sin-out", "exp-out", "circle-out", "elastic-out", "back-out", "bounce-out", "linear-in-out", "quad-in-out", "cubic-in-out", "sin-in-out", "exp-in-out", "circle-in-out", "elastic-in-out", "back-in-out", "bounce-in-out", ], ) class DurationValidator(NumberValidator): def __init__(self, plotly_name="duration"): super(DurationValidator, self).__init__( plotly_name=plotly_name, parent_name="batch_animate", min=0 ) plotly-5.15.0+dfsg1.orig/plotly/plotly/0000755000175000017500000000000014440366051017265 5ustar noahfxnoahfxplotly-5.15.0+dfsg1.orig/plotly/plotly/__init__.py0000644000175000017500000000016614440365261021403 0ustar noahfxnoahfxfrom __future__ import absolute_import from _plotly_future_ import _chart_studio_error _chart_studio_error("plotly") plotly-5.15.0+dfsg1.orig/plotly/plotly/chunked_requests.py0000644000175000017500000000020714440365261023214 0ustar noahfxnoahfxfrom __future__ import absolute_import from _plotly_future_ import _chart_studio_error _chart_studio_error("plotly.chunked_requests") plotly-5.15.0+dfsg1.orig/plotly/_version.py0000644000175000017500000000076214440366053020147 0ustar noahfxnoahfx # This file was generated by 'versioneer.py' (0.21) from # revision-control system data, or from the parent directory name of an # unpacked source archive. Distribution tarballs contain a pre-generated copy # of this file. import json version_json = ''' { "date": "2023-06-08T10:48:38-0400", "dirty": false, "error": null, "full-revisionid": "e42897d4be454be23004b3d1f8704386b57773dc", "version": "5.15.0" } ''' # END VERSION_JSON def get_versions(): return json.loads(version_json) plotly-5.15.0+dfsg1.orig/plotly/presentation_objs.py0000644000175000017500000000020114440365261022037 0ustar noahfxnoahfxfrom __future__ import absolute_import from _plotly_future_ import _chart_studio_error _chart_studio_error("presentation_objs") plotly-5.15.0+dfsg1.orig/plotly/data/0000755000175000017500000000000014440366051016653 5ustar noahfxnoahfxplotly-5.15.0+dfsg1.orig/plotly/data/__init__.py0000644000175000017500000001536414440365260020776 0ustar noahfxnoahfx""" Built-in datasets for demonstration, educational and test purposes. """ def gapminder(datetimes=False, centroids=False, year=None, pretty_names=False): """ Each row represents a country on a given year. https://www.gapminder.org/data/ Returns: A `pandas.DataFrame` with 1704 rows and the following columns: `['country', 'continent', 'year', 'lifeExp', 'pop', 'gdpPercap', 'iso_alpha', 'iso_num']`. If `datetimes` is True, the 'year' column will be a datetime column If `centroids` is True, two new columns are added: ['centroid_lat', 'centroid_lon'] If `year` is an integer, the dataset will be filtered for that year """ df = _get_dataset("gapminder") if year: df = df[df["year"] == year] if datetimes: df["year"] = (df["year"].astype(str) + "-01-01").astype("datetime64[ns]") if not centroids: df = df.drop(["centroid_lat", "centroid_lon"], axis=1) if pretty_names: df.rename( mapper=dict( country="Country", continent="Continent", year="Year", lifeExp="Life Expectancy", gdpPercap="GDP per Capita", pop="Population", iso_alpha="ISO Alpha Country Code", iso_num="ISO Numeric Country Code", centroid_lat="Centroid Latitude", centroid_lon="Centroid Longitude", ), axis="columns", inplace=True, ) return df def tips(pretty_names=False): """ Each row represents a restaurant bill. https://vincentarelbundock.github.io/Rdatasets/doc/reshape2/tips.html Returns: A `pandas.DataFrame` with 244 rows and the following columns: `['total_bill', 'tip', 'sex', 'smoker', 'day', 'time', 'size']`.""" df = _get_dataset("tips") if pretty_names: df.rename( mapper=dict( total_bill="Total Bill", tip="Tip", sex="Payer Gender", smoker="Smokers at Table", day="Day of Week", time="Meal", size="Party Size", ), axis="columns", inplace=True, ) return df def iris(): """ Each row represents a flower. https://en.wikipedia.org/wiki/Iris_flower_data_set Returns: A `pandas.DataFrame` with 150 rows and the following columns: `['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species', 'species_id']`.""" return _get_dataset("iris") def wind(): """ Each row represents a level of wind intensity in a cardinal direction, and its frequency. Returns: A `pandas.DataFrame` with 128 rows and the following columns: `['direction', 'strength', 'frequency']`.""" return _get_dataset("wind") def election(): """ Each row represents voting results for an electoral district in the 2013 Montreal mayoral election. Returns: A `pandas.DataFrame` with 58 rows and the following columns: `['district', 'Coderre', 'Bergeron', 'Joly', 'total', 'winner', 'result', 'district_id']`.""" return _get_dataset("election") def election_geojson(): """ Each feature represents an electoral district in the 2013 Montreal mayoral election. Returns: A GeoJSON-formatted `dict` with 58 polygon or multi-polygon features whose `id` is an electoral district numerical ID and whose `district` property is the ID and district name.""" import gzip import json import os path = os.path.join( os.path.dirname(os.path.dirname(__file__)), "package_data", "datasets", "election.geojson.gz", ) with gzip.GzipFile(path, "r") as f: result = json.loads(f.read().decode("utf-8")) return result def carshare(): """ Each row represents the availability of car-sharing services near the centroid of a zone in Montreal over a month-long period. Returns: A `pandas.DataFrame` with 249 rows and the following columns: `['centroid_lat', 'centroid_lon', 'car_hours', 'peak_hour']`.""" return _get_dataset("carshare") def stocks(indexed=False, datetimes=False): """ Each row in this wide dataset represents closing prices from 6 tech stocks in 2018/2019. Returns: A `pandas.DataFrame` with 100 rows and the following columns: `['date', 'GOOG', 'AAPL', 'AMZN', 'FB', 'NFLX', 'MSFT']`. If `indexed` is True, the 'date' column is used as the index and the column index If `datetimes` is True, the 'date' column will be a datetime column is named 'company'""" df = _get_dataset("stocks") if datetimes: df["date"] = df["date"].astype("datetime64[ns]") if indexed: df = df.set_index("date") df.columns.name = "company" return df def experiment(indexed=False): """ Each row in this wide dataset represents the results of 100 simulated participants on three hypothetical experiments, along with their gender and control/treatment group. Returns: A `pandas.DataFrame` with 100 rows and the following columns: `['experiment_1', 'experiment_2', 'experiment_3', 'gender', 'group']`. If `indexed` is True, the data frame index is named "participant" """ df = _get_dataset("experiment") if indexed: df.index.name = "participant" return df def medals_wide(indexed=False): """ This dataset represents the medal table for Olympic Short Track Speed Skating for the top three nations as of 2020. Returns: A `pandas.DataFrame` with 3 rows and the following columns: `['nation', 'gold', 'silver', 'bronze']`. If `indexed` is True, the 'nation' column is used as the index and the column index is named 'medal'""" df = _get_dataset("medals") if indexed: df = df.set_index("nation") df.columns.name = "medal" return df def medals_long(indexed=False): """ This dataset represents the medal table for Olympic Short Track Speed Skating for the top three nations as of 2020. Returns: A `pandas.DataFrame` with 9 rows and the following columns: `['nation', 'medal', 'count']`. If `indexed` is True, the 'nation' column is used as the index.""" df = _get_dataset("medals").melt( id_vars=["nation"], value_name="count", var_name="medal" ) if indexed: df = df.set_index("nation") return df def _get_dataset(d): import pandas import os return pandas.read_csv( os.path.join( os.path.dirname(os.path.dirname(__file__)), "package_data", "datasets", d + ".csv.gz", ) ) plotly-5.15.0+dfsg1.orig/plotly/_widget_version.py0000644000175000017500000000027314440365260021506 0ustar noahfxnoahfx# This file is generated by the updateplotlywidgetversion setup.py command # for automated dev builds # # It is edited by hand prior to official releases __frontend_version__ = "^5.15.0" plotly-5.15.0+dfsg1.orig/plotly/basedatatypes.py0000644000175000017500000066732214440365260021166 0ustar noahfxnoahfxfrom __future__ import absolute_import import collections from collections import OrderedDict import re import warnings from contextlib import contextmanager from copy import deepcopy, copy import itertools from functools import reduce from _plotly_utils.utils import ( _natural_sort_strings, _get_int_type, split_multichar, split_string_positions, display_string_positions, chomp_empty_strings, find_closest_string, ) from _plotly_utils.exceptions import PlotlyKeyError from .optional_imports import get_module from . import shapeannotation from . import _subplots # Create Undefined sentinel value # - Setting a property to None removes any existing value # - Setting a property to Undefined leaves existing value unmodified Undefined = object() def _len_dict_item(item): """ Because a parsed dict path is a tuple containings strings or integers, to know the length of the resulting string when printing we might need to convert to a string before calling len on it. """ try: l = len(item) except TypeError: try: l = len("%d" % (item,)) except TypeError: raise ValueError( "Cannot find string length of an item that is not string-like nor an integer." ) return l def _str_to_dict_path_full(key_path_str): """ Convert a key path string into a tuple of key path elements and also return a tuple of indices marking the beginning of each element in the string. Parameters ---------- key_path_str : str Key path string, where nested keys are joined on '.' characters and array indexes are specified using brackets (e.g. 'foo.bar[1]') Returns ------- tuple[str | int] tuple [int] """ # skip all the parsing if the string is empty if len(key_path_str): # split string on ".[]" and filter out empty strings key_path2 = split_multichar([key_path_str], list(".[]")) # Split out underscore # e.g. ['foo', 'bar_baz', '1'] -> ['foo', 'bar', 'baz', '1'] key_path3 = [] underscore_props = BaseFigure._valid_underscore_properties def _make_hyphen_key(key): if "_" in key[1:]: # For valid properties that contain underscores (error_x) # replace the underscores with hyphens to protect them # from being split up for under_prop, hyphen_prop in underscore_props.items(): key = key.replace(under_prop, hyphen_prop) return key def _make_underscore_key(key): return key.replace("-", "_") key_path2b = list(map(_make_hyphen_key, key_path2)) # Here we want to split up each non-empty string in the list at # underscores and recombine the strings using chomp_empty_strings so # that leading, trailing and multiple _ will be preserved def _split_and_chomp(s): if not len(s): return s s_split = split_multichar([s], list("_")) # handle key paths like "a_path_", "_another_path", or # "yet__another_path" by joining extra "_" to the string to the right or # the empty string if at the end s_chomped = chomp_empty_strings(s_split, "_", reverse=True) return s_chomped # after running _split_and_chomp on key_path2b, it will be a list # containing strings and lists of strings; concatenate the sublists with # the list ("lift" the items out of the sublists) key_path2c = list( reduce( lambda x, y: x + y if type(y) == type(list()) else x + [y], map(_split_and_chomp, key_path2b), [], ) ) key_path2d = list(map(_make_underscore_key, key_path2c)) all_elem_idcs = tuple(split_string_positions(list(key_path2d))) # remove empty strings, and indices pointing to them key_elem_pairs = list(filter(lambda t: len(t[1]), enumerate(key_path2d))) key_path3 = [x for _, x in key_elem_pairs] elem_idcs = [all_elem_idcs[i] for i, _ in key_elem_pairs] # Convert elements to ints if possible. # e.g. ['foo', 'bar', '0'] -> ['foo', 'bar', 0] for i in range(len(key_path3)): try: key_path3[i] = int(key_path3[i]) except ValueError as _: pass else: key_path3 = [] elem_idcs = [] return (tuple(key_path3), elem_idcs) def _remake_path_from_tuple(props): """ try to remake a path using the properties in props """ if len(props) == 0: return "" def _add_square_brackets_to_number(n): if type(n) == type(int()): return "[%d]" % (n,) return n def _prepend_dot_if_not_number(s): if not s.startswith("["): return "." + s return s props_all_str = list(map(_add_square_brackets_to_number, props)) props_w_underscore = props_all_str[:1] + list( map(_prepend_dot_if_not_number, props_all_str[1:]) ) return "".join(props_w_underscore) def _check_path_in_prop_tree(obj, path, error_cast=None): """ obj: the object in which the first property is looked up path: the path that will be split into properties to be looked up path can also be a tuple. In this case, it is combined using . and [] because it is impossible to reconstruct the string fully in order to give a decent error message. error_cast: this function walks down the property tree by looking up values in objects. So this will throw exceptions that are thrown by __getitem__, but in some cases we are checking the path for a different reason and would prefer throwing a more relevant exception (e.g., __getitem__ throws KeyError but __setitem__ throws ValueError for subclasses of BasePlotlyType and BaseFigure). So the resulting error can be "casted" to the passed in type, if not None. returns an Exception object or None. The caller can raise this exception to see where the lookup error occurred. """ if isinstance(path, tuple): path = _remake_path_from_tuple(path) prop, prop_idcs = _str_to_dict_path_full(path) prev_objs = [] for i, p in enumerate(prop): arg = "" prev_objs.append(obj) try: obj = obj[p] except (ValueError, KeyError, IndexError, TypeError) as e: arg = e.args[0] if issubclass(e.__class__, TypeError): # If obj doesn't support subscripting, state that and show the # (valid) property that gives the object that doesn't support # subscripting. if i > 0: validator = prev_objs[i - 1]._get_validator(prop[i - 1]) arg += """ Invalid value received for the '{plotly_name}' property of {parent_name} {description}""".format( parent_name=validator.parent_name, plotly_name=validator.plotly_name, description=validator.description(), ) # In case i is 0, the best we can do is indicate the first # property in the string as having caused the error disp_i = max(i - 1, 0) dict_item_len = _len_dict_item(prop[disp_i]) # if the path has trailing underscores, the prop string will start with "_" trailing_underscores = "" if prop[i][0] == "_": trailing_underscores = " and path has trailing underscores" # if the path has trailing underscores and the display index is # one less than the prop index (see above), then we can also # indicate the offending underscores if (trailing_underscores != "") and (disp_i != i): dict_item_len += _len_dict_item(prop[i]) arg += """ Property does not support subscripting%s: %s %s""" % ( trailing_underscores, path, display_string_positions( prop_idcs, disp_i, length=dict_item_len, char="^" ), ) else: # State that the property for which subscripting was attempted # is bad and indicate the start of the bad property. arg += """ Bad property path: %s %s""" % ( path, display_string_positions( prop_idcs, i, length=_len_dict_item(prop[i]), char="^" ), ) # Make KeyError more pretty by changing it to a PlotlyKeyError, # because the Python interpreter has a special way of printing # KeyError if isinstance(e, KeyError): e = PlotlyKeyError() if error_cast is not None: e = error_cast() e.args = (arg,) return e return None def _combine_dicts(dicts): all_args = dict() for d in dicts: for k in d: all_args[k] = d[k] return all_args def _indexing_combinations(dims, alls, product=False): """ Gives indexing tuples specified by the coordinates in dims. If a member of dims is 'all' then it is replaced by the corresponding member in alls. If product is True, then the cartesian product of all the indices is returned, otherwise the zip (that means index lists of mis-matched length will yield a list of tuples whose length is the length of the shortest list). """ if len(dims) == 0: # this is because list(itertools.product(*[])) returns [()] which has non-zero # length! return [] if len(dims) != len(alls): raise ValueError( "Must have corresponding values in alls for each value of dims. Got dims=%s and alls=%s." % (str(dims), str(alls)) ) r = [] for d, a in zip(dims, alls): if d == "all": d = a elif not isinstance(d, list): d = [d] r.append(d) if product: return itertools.product(*r) else: return zip(*r) def _is_select_subplot_coordinates_arg(*args): """Returns true if any args are lists or the string 'all'""" return any((a == "all") or isinstance(a, list) for a in args) def _axis_spanning_shapes_docstr(shape_type): docstr = "" if shape_type == "hline": docstr = """ Add a horizontal line to a plot or subplot that extends infinitely in the x-dimension. Parameters ---------- y: float or int A number representing the y coordinate of the horizontal line.""" elif shape_type == "vline": docstr = """ Add a vertical line to a plot or subplot that extends infinitely in the y-dimension. Parameters ---------- x: float or int A number representing the x coordinate of the vertical line.""" elif shape_type == "hrect": docstr = """ Add a rectangle to a plot or subplot that extends infinitely in the x-dimension. Parameters ---------- y0: float or int A number representing the y coordinate of one side of the rectangle. y1: float or int A number representing the y coordinate of the other side of the rectangle.""" elif shape_type == "vrect": docstr = """ Add a rectangle to a plot or subplot that extends infinitely in the y-dimension. Parameters ---------- x0: float or int A number representing the x coordinate of one side of the rectangle. x1: float or int A number representing the x coordinate of the other side of the rectangle.""" docstr += """ exclude_empty_subplots: Boolean If True (default) do not place the shape on subplots that have no data plotted on them. row: None, int or 'all' Subplot row for shape indexed starting at 1. If 'all', addresses all rows in the specified column(s). If both row and col are None, addresses the first subplot if subplots exist, or the only plot. By default is "all". col: None, int or 'all' Subplot column for shape indexed starting at 1. If 'all', addresses all rows in the specified column(s). If both row and col are None, addresses the first subplot if subplots exist, or the only plot. By default is "all". annotation: dict or plotly.graph_objects.layout.Annotation. If dict(), it is interpreted as describing an annotation. The annotation is placed relative to the shape based on annotation_position (see below) unless its x or y value has been specified for the annotation passed here. xref and yref are always the same as for the added shape and cannot be overridden.""" if shape_type in ["hline", "vline"]: docstr += """ annotation_position: a string containing optionally ["top", "bottom"] and ["left", "right"] specifying where the text should be anchored to on the line. Example positions are "bottom left", "right top", "right", "bottom". If an annotation is added but annotation_position is not specified, this defaults to "top right".""" elif shape_type in ["hrect", "vrect"]: docstr += """ annotation_position: a string containing optionally ["inside", "outside"], ["top", "bottom"] and ["left", "right"] specifying where the text should be anchored to on the rectangle. Example positions are "outside top left", "inside bottom", "right", "inside left", "inside" ("outside" is not supported). If an annotation is added but annotation_position is not specified this defaults to "inside top right".""" docstr += """ annotation_*: any parameters to go.layout.Annotation can be passed as keywords by prefixing them with "annotation_". For example, to specify the annotation text "example" you can pass annotation_text="example" as a keyword argument. **kwargs: Any named function parameters that can be passed to 'add_shape', except for x0, x1, y0, y1 or type.""" return docstr def _generator(i): """ "cast" an iterator to a generator""" for x in i: yield x class BaseFigure(object): """ Base class for all figure types (both widget and non-widget) """ _bracket_re = re.compile(r"^(.*)\[(\d+)\]$") _valid_underscore_properties = { "error_x": "error-x", "error_y": "error-y", "error_z": "error-z", "copy_xstyle": "copy-xstyle", "copy_ystyle": "copy-ystyle", "copy_zstyle": "copy-zstyle", "paper_bgcolor": "paper-bgcolor", "plot_bgcolor": "plot-bgcolor", } _set_trace_uid = False _allow_disable_validation = True # Constructor # ----------- def __init__( self, data=None, layout_plotly=None, frames=None, skip_invalid=False, **kwargs ): """ Construct a BaseFigure object Parameters ---------- data One of: - A list or tuple of trace objects (or dicts that can be coerced into trace objects) - If `data` is a dict that contains a 'data', 'layout', or 'frames' key then these values are used to construct the figure. - If `data` is a `BaseFigure` instance then the `data`, `layout`, and `frames` properties are extracted from the input figure layout_plotly The plotly layout dict. Note: this property is named `layout_plotly` rather than `layout` to deconflict it with the `layout` constructor parameter of the `widgets.DOMWidget` ipywidgets class, as the `BaseFigureWidget` class is a subclass of both BaseFigure and widgets.DOMWidget. If the `data` property is a BaseFigure instance, or a dict that contains a 'layout' key, then this property is ignored. frames A list or tuple of `plotly.graph_objs.Frame` objects (or dicts that can be coerced into Frame objects) If the `data` property is a BaseFigure instance, or a dict that contains a 'frames' key, then this property is ignored. skip_invalid: bool If True, invalid properties in the figure specification will be skipped silently. If False (default) invalid properties in the figure specification will result in a ValueError Raises ------ ValueError if a property in the specification of data, layout, or frames is invalid AND skip_invalid is False """ from .validators import DataValidator, LayoutValidator, FramesValidator super(BaseFigure, self).__init__() # Initialize validation self._validate = kwargs.pop("_validate", True) # Assign layout_plotly to layout # ------------------------------ # See docstring note for explanation layout = layout_plotly # Subplot properties # ------------------ # These properties are used by the tools.make_subplots logic. # We initialize them to None here, before checking if the input data # object is a BaseFigure, or a dict with _grid_str and _grid_ref # properties, in which case we bring over the _grid* properties of # the input self._grid_str = None self._grid_ref = None # Handle case where data is a Figure or Figure-like dict # ------------------------------------------------------ if isinstance(data, BaseFigure): # Bring over subplot fields self._grid_str = data._grid_str self._grid_ref = data._grid_ref # Extract data, layout, and frames data, layout, frames = data.data, data.layout, data.frames elif isinstance(data, dict) and ( "data" in data or "layout" in data or "frames" in data ): # Bring over subplot fields self._grid_str = data.get("_grid_str", None) self._grid_ref = data.get("_grid_ref", None) # Extract data, layout, and frames data, layout, frames = ( data.get("data", None), data.get("layout", None), data.get("frames", None), ) # Handle data (traces) # -------------------- # ### Construct data validator ### # This is the validator that handles importing sequences of trace # objects self._data_validator = DataValidator(set_uid=self._set_trace_uid) # ### Import traces ### data = self._data_validator.validate_coerce( data, skip_invalid=skip_invalid, _validate=self._validate ) # ### Save tuple of trace objects ### self._data_objs = data # ### Import clone of trace properties ### # The _data property is a list of dicts containing the properties # explicitly set by the user for each trace. self._data = [deepcopy(trace._props) for trace in data] # ### Create data defaults ### # _data_defaults is a tuple of dicts, one for each trace. When # running in a widget context, these defaults are populated with # all property values chosen by the Plotly.js library that # aren't explicitly specified by the user. # # Note: No property should exist in both the _data and # _data_defaults for the same trace. self._data_defaults = [{} for _ in data] # ### Reparent trace objects ### for trace_ind, trace in enumerate(data): # By setting the trace's parent to be this figure, we tell the # trace object to use the figure's _data and _data_defaults # dicts to get/set it's properties, rather than using the trace # object's internal _orphan_props dict. trace._parent = self # We clear the orphan props since the trace no longer needs then trace._orphan_props.clear() # Set trace index trace._trace_ind = trace_ind # Layout # ------ # ### Construct layout validator ### # This is the validator that handles importing Layout objects self._layout_validator = LayoutValidator() # ### Import Layout ### self._layout_obj = self._layout_validator.validate_coerce( layout, skip_invalid=skip_invalid, _validate=self._validate ) # ### Import clone of layout properties ### self._layout = deepcopy(self._layout_obj._props) # ### Initialize layout defaults dict ### self._layout_defaults = {} # ### Reparent layout object ### self._layout_obj._orphan_props.clear() self._layout_obj._parent = self # Config # ------ # Pass along default config to the front end. For now this just # ensures that the plotly domain url gets passed to the front end. # In the future we can extend this to allow the user to supply # arbitrary config options like in plotly.offline.plot/iplot. But # this will require a fair amount of testing to determine which # options are compatible with FigureWidget. from plotly.offline.offline import _get_jconfig self._config = _get_jconfig(None) # Frames # ------ # ### Construct frames validator ### # This is the validator that handles importing sequences of frame # objects self._frames_validator = FramesValidator() # ### Import frames ### self._frame_objs = self._frames_validator.validate_coerce( frames, skip_invalid=skip_invalid ) # Note: Because frames are not currently supported in the widget # context, we don't need to follow the pattern above and create # _frames and _frame_defaults properties and then reparent the # frames. The figure doesn't need to be notified of # changes to the properties in the frames object hierarchy. # Context manager # --------------- # ### batch mode indicator ### # Flag that indicates whether we're currently inside a batch_*() # context self._in_batch_mode = False # ### Batch trace edits ### # Dict from trace indexes to trace edit dicts. These trace edit dicts # are suitable as `data` elements of Plotly.animate, but not # the Plotly.update (See `_build_update_params_from_batch`) self._batch_trace_edits = OrderedDict() # ### Batch layout edits ### # Dict from layout properties to new layout values. This dict is # directly suitable for use in Plotly.animate and Plotly.update self._batch_layout_edits = OrderedDict() # Animation property validators # ----------------------------- from . import animation self._animation_duration_validator = animation.DurationValidator() self._animation_easing_validator = animation.EasingValidator() # Template # -------- # ### Check for default template ### self._initialize_layout_template() # Process kwargs # -------------- for k, v in kwargs.items(): err = _check_path_in_prop_tree(self, k) if err is None: self[k] = v elif not skip_invalid: type_err = TypeError("invalid Figure property: {}".format(k)) type_err.args = ( type_err.args[0] + """ %s""" % (err.args[0],), ) raise type_err # Magic Methods # ------------- def __reduce__(self): """ Custom implementation of reduce is used to support deep copying and pickling """ props = self.to_dict() props["_grid_str"] = self._grid_str props["_grid_ref"] = self._grid_ref return (self.__class__, (props,)) def __setitem__(self, prop, value): # Normalize prop # -------------- # Convert into a property tuple orig_prop = prop prop = BaseFigure._str_to_dict_path(prop) # Handle empty case # ----------------- if len(prop) == 0: raise KeyError(orig_prop) # Handle scalar case # ------------------ # e.g. ('foo',) elif len(prop) == 1: # ### Unwrap scalar tuple ### prop = prop[0] if prop == "data": self.data = value elif prop == "layout": self.layout = value elif prop == "frames": self.frames = value else: raise KeyError(prop) # Handle non-scalar case # ---------------------- # e.g. ('foo', 1) else: err = _check_path_in_prop_tree(self, orig_prop, error_cast=ValueError) if err is not None: raise err res = self for p in prop[:-1]: res = res[p] res._validate = self._validate res[prop[-1]] = value def __setattr__(self, prop, value): """ Parameters ---------- prop : str The name of a direct child of this object value New property value Returns ------- None """ if prop.startswith("_") or hasattr(self, prop): # Let known properties and private properties through super(BaseFigure, self).__setattr__(prop, value) else: # Raise error on unknown public properties raise AttributeError(prop) def __getitem__(self, prop): # Normalize prop # -------------- # Convert into a property tuple orig_prop = prop prop = BaseFigure._str_to_dict_path(prop) # Handle scalar case # ------------------ # e.g. ('foo',) if len(prop) == 1: # Unwrap scalar tuple prop = prop[0] if prop == "data": return self._data_validator.present(self._data_objs) elif prop == "layout": return self._layout_validator.present(self._layout_obj) elif prop == "frames": return self._frames_validator.present(self._frame_objs) else: raise KeyError(orig_prop) # Handle non-scalar case # ---------------------- # e.g. ('foo', 1) else: err = _check_path_in_prop_tree(self, orig_prop, error_cast=PlotlyKeyError) if err is not None: raise err res = self for p in prop: res = res[p] return res def __iter__(self): return iter(("data", "layout", "frames")) def __contains__(self, prop): prop = BaseFigure._str_to_dict_path(prop) if prop[0] not in ("data", "layout", "frames"): return False elif len(prop) == 1: return True else: return prop[1:] in self[prop[0]] def __eq__(self, other): if not isinstance(other, BaseFigure): # Require objects to both be BaseFigure instances return False else: # Compare plotly_json representations # Use _vals_equal instead of `==` to handle cases where # underlying dicts contain numpy arrays return BasePlotlyType._vals_equal( self.to_plotly_json(), other.to_plotly_json() ) def __repr__(self): """ Customize Figure representation when displayed in the terminal/notebook """ props = self.to_plotly_json() # Elide template template_props = props.get("layout", {}).get("template", {}) if template_props: props["layout"]["template"] = "..." repr_str = BasePlotlyType._build_repr_for_class( props=props, class_name=self.__class__.__name__ ) return repr_str def _repr_html_(self): """ Customize html representation """ bundle = self._repr_mimebundle_() if "text/html" in bundle: return bundle["text/html"] else: return self.to_html(full_html=False, include_plotlyjs="cdn") def _repr_mimebundle_(self, include=None, exclude=None, validate=True, **kwargs): """ Return mimebundle corresponding to default renderer. """ import plotly.io as pio renderer_str = pio.renderers.default renderers = pio._renderers.renderers from plotly.io._utils import validate_coerce_fig_to_dict fig_dict = validate_coerce_fig_to_dict(self, validate) return renderers._build_mime_bundle(fig_dict, renderer_str, **kwargs) def _ipython_display_(self): """ Handle rich display of figures in ipython contexts """ import plotly.io as pio if pio.renderers.render_on_display and pio.renderers.default: pio.show(self) else: print(repr(self)) def update(self, dict1=None, overwrite=False, **kwargs): """ Update the properties of the figure with a dict and/or with keyword arguments. This recursively updates the structure of the figure object with the values in the input dict / keyword arguments. Parameters ---------- dict1 : dict Dictionary of properties to be updated overwrite: bool If True, overwrite existing properties. If False, apply updates to existing properties recursively, preserving existing properties that are not specified in the update operation. kwargs : Keyword/value pair of properties to be updated Examples -------- >>> import plotly.graph_objs as go >>> fig = go.Figure(data=[{'y': [1, 2, 3]}]) >>> fig.update(data=[{'y': [4, 5, 6]}]) # doctest: +ELLIPSIS Figure(...) >>> fig.to_plotly_json() # doctest: +SKIP {'data': [{'type': 'scatter', 'uid': 'e86a7c7a-346a-11e8-8aa8-a0999b0c017b', 'y': array([4, 5, 6], dtype=int32)}], 'layout': {}} >>> fig = go.Figure(layout={'xaxis': ... {'color': 'green', ... 'range': [0, 1]}}) >>> fig.update({'layout': {'xaxis': {'color': 'pink'}}}) # doctest: +ELLIPSIS Figure(...) >>> fig.to_plotly_json() # doctest: +SKIP {'data': [], 'layout': {'xaxis': {'color': 'pink', 'range': [0, 1]}}} Returns ------- BaseFigure Updated figure """ with self.batch_update(): for d in [dict1, kwargs]: if d: for k, v in d.items(): update_target = self[k] if update_target == () or overwrite: if k == "data": # Overwrite all traces as special due to # restrictions on trace assignment self.data = () self.add_traces(v) else: # Accept v self[k] = v elif ( isinstance(update_target, BasePlotlyType) and isinstance(v, (dict, BasePlotlyType)) ) or ( isinstance(update_target, tuple) and isinstance(update_target[0], BasePlotlyType) ): BaseFigure._perform_update(self[k], v) else: self[k] = v return self def pop(self, key, *args): """ Remove the value associated with the specified key and return it Parameters ---------- key: str Property name dflt The default value to return if key was not found in figure Returns ------- value The removed value that was previously associated with key Raises ------ KeyError If key is not in object and no dflt argument specified """ # Handle default if key not in self and args: return args[0] elif key in self: val = self[key] self[key] = None return val else: raise KeyError(key) # Data # ---- @property def data(self): """ The `data` property is a tuple of the figure's trace objects Returns ------- tuple[BaseTraceType] """ return self["data"] @data.setter def data(self, new_data): # Validate new_data # ----------------- err_header = ( "The data property of a figure may only be assigned \n" "a list or tuple that contains a permutation of a " "subset of itself.\n" ) # ### Treat None as empty ### if new_data is None: new_data = () # ### Check valid input type ### if not isinstance(new_data, (list, tuple)): err_msg = err_header + " Received value with type {typ}".format( typ=type(new_data) ) raise ValueError(err_msg) # ### Check valid element types ### for trace in new_data: if not isinstance(trace, BaseTraceType): err_msg = ( err_header + " Received element value of type {typ}".format(typ=type(trace)) ) raise ValueError(err_msg) # ### Check trace objects ### # Require that no new traces are introduced orig_uids = [id(trace) for trace in self.data] new_uids = [id(trace) for trace in new_data] invalid_uids = set(new_uids).difference(set(orig_uids)) if invalid_uids: err_msg = err_header raise ValueError(err_msg) # ### Check for duplicates in assignment ### uid_counter = collections.Counter(new_uids) duplicate_uids = [uid for uid, count in uid_counter.items() if count > 1] if duplicate_uids: err_msg = err_header + " Received duplicated traces" raise ValueError(err_msg) # Remove traces # ------------- remove_uids = set(orig_uids).difference(set(new_uids)) delete_inds = [] # ### Unparent removed traces ### for i, trace in enumerate(self.data): if id(trace) in remove_uids: delete_inds.append(i) # Unparent trace object to be removed old_trace = self.data[i] old_trace._orphan_props.update(deepcopy(old_trace._props)) old_trace._parent = None old_trace._trace_ind = None # ### Compute trace props / defaults after removal ### traces_props_post_removal = [t for t in self._data] traces_prop_defaults_post_removal = [t for t in self._data_defaults] uids_post_removal = [id(trace_data) for trace_data in self.data] for i in reversed(delete_inds): del traces_props_post_removal[i] del traces_prop_defaults_post_removal[i] del uids_post_removal[i] # Modify in-place so we don't trigger serialization del self._data[i] if delete_inds: # Update widget, if any self._send_deleteTraces_msg(delete_inds) # Move traces # ----------- # ### Compute new index for each remaining trace ### new_inds = [] for uid in uids_post_removal: new_inds.append(new_uids.index(uid)) # ### Compute current index for each remaining trace ### current_inds = list(range(len(traces_props_post_removal))) # ### Check whether a move is needed ### if not all([i1 == i2 for i1, i2 in zip(new_inds, current_inds)]): # #### Save off index lists for moveTraces message #### msg_current_inds = current_inds msg_new_inds = new_inds # #### Reorder trace elements #### # We do so in-place so we don't trigger traitlet property # serialization for the FigureWidget case # ##### Remove by curr_inds in reverse order ##### moving_traces_data = [] for ci in reversed(current_inds): # Push moving traces data to front of list moving_traces_data.insert(0, self._data[ci]) del self._data[ci] # #### Sort new_inds and moving_traces_data by new_inds #### new_inds, moving_traces_data = zip( *sorted(zip(new_inds, moving_traces_data)) ) # #### Insert by new_inds in forward order #### for ni, trace_data in zip(new_inds, moving_traces_data): self._data.insert(ni, trace_data) # #### Update widget, if any #### self._send_moveTraces_msg(msg_current_inds, msg_new_inds) # ### Update data defaults ### # There is to front-end syncronization to worry about so this # operations doesn't need to be in-place self._data_defaults = [ _trace for i, _trace in sorted(zip(new_inds, traces_prop_defaults_post_removal)) ] # Update trace objects tuple self._data_objs = list(new_data) # Update trace indexes for trace_ind, trace in enumerate(self._data_objs): trace._trace_ind = trace_ind def select_traces(self, selector=None, row=None, col=None, secondary_y=None): """ Select traces from a particular subplot cell and/or traces that satisfy custom selection criteria. Parameters ---------- selector: dict, function, int, str or None (default None) Dict to use as selection criteria. Traces will be selected if they contain properties corresponding to all of the dictionary's keys, with values that exactly match the supplied values. If None (the default), all traces are selected. If a function, it must be a function accepting a single argument and returning a boolean. The function will be called on each trace and those for which the function returned True will be in the selection. If an int N, the Nth trace matching row and col will be selected (N can be negative). If a string S, the selector is equivalent to dict(type=S). row, col: int or None (default None) Subplot row and column index of traces to select. To select traces by row and column, the Figure must have been created using plotly.subplots.make_subplots. If None (the default), all traces are selected. secondary_y: boolean or None (default None) * If True, only select traces associated with the secondary y-axis of the subplot. * If False, only select traces associated with the primary y-axis of the subplot. * If None (the default), do not filter traces based on secondary y-axis. To select traces by secondary y-axis, the Figure must have been created using plotly.subplots.make_subplots. See the docstring for the specs argument to make_subplots for more info on creating subplots with secondary y-axes. Returns ------- generator Generator that iterates through all of the traces that satisfy all of the specified selection criteria """ if not selector and not isinstance(selector, int): selector = {} if row is not None or col is not None or secondary_y is not None: grid_ref = self._validate_get_grid_ref() filter_by_subplot = True if row is None and col is not None: # All rows for column grid_subplot_ref_tuples = [ref_row[col - 1] for ref_row in grid_ref] elif col is None and row is not None: # All columns for row grid_subplot_ref_tuples = grid_ref[row - 1] elif col is not None and row is not None: # Single grid cell grid_subplot_ref_tuples = [grid_ref[row - 1][col - 1]] else: # row and col are None, secondary_y not None grid_subplot_ref_tuples = [ refs for refs_row in grid_ref for refs in refs_row ] # Collect list of subplot refs, taking secondary_y into account grid_subplot_refs = [] for refs in grid_subplot_ref_tuples: if not refs: continue if secondary_y is not True: grid_subplot_refs.append(refs[0]) if secondary_y is not False and len(refs) > 1: grid_subplot_refs.append(refs[1]) else: filter_by_subplot = False grid_subplot_refs = None return self._perform_select_traces( filter_by_subplot, grid_subplot_refs, selector ) def _perform_select_traces(self, filter_by_subplot, grid_subplot_refs, selector): from plotly._subplots import _get_subplot_ref_for_trace # functions for filtering def _filter_by_subplot_ref(trace): trace_subplot_ref = _get_subplot_ref_for_trace(trace) return trace_subplot_ref in grid_subplot_refs funcs = [] if filter_by_subplot: funcs.append(_filter_by_subplot_ref) return _generator(self._filter_by_selector(self.data, funcs, selector)) @staticmethod def _selector_matches(obj, selector): if selector is None: return True # If selector is a string then put it at the 'type' key of a dictionary # to select objects where "type":selector if isinstance(selector, str): selector = dict(type=selector) # If selector is a dict, compare the fields if isinstance(selector, dict) or isinstance(selector, BasePlotlyType): # This returns True if selector is an empty dict for k in selector: if k not in obj: return False obj_val = obj[k] selector_val = selector[k] if isinstance(obj_val, BasePlotlyType): obj_val = obj_val.to_plotly_json() if isinstance(selector_val, BasePlotlyType): selector_val = selector_val.to_plotly_json() if obj_val != selector_val: return False return True # If selector is a function, call it with the obj as the argument elif callable(selector): return selector(obj) else: raise TypeError( "selector must be dict or a function " "accepting a graph object returning a boolean." ) def _filter_by_selector(self, objects, funcs, selector): """ objects is a sequence of objects, funcs a list of functions that return True if the object should be included in the selection and False otherwise and selector is an argument to the self._selector_matches function. If selector is an integer, the resulting sequence obtained after sucessively filtering by each function in funcs is indexed by this integer. Otherwise selector is used as the selector argument to self._selector_matches which is used to filter down the sequence. The function returns the sequence (an iterator). """ # if selector is not an int, we call it on each trace to test it for selection if not isinstance(selector, int): funcs.append(lambda obj: self._selector_matches(obj, selector)) def _filt(last, f): return filter(f, last) filtered_objects = reduce(_filt, funcs, objects) if isinstance(selector, int): return iter([list(filtered_objects)[selector]]) return filtered_objects def for_each_trace(self, fn, selector=None, row=None, col=None, secondary_y=None): """ Apply a function to all traces that satisfy the specified selection criteria Parameters ---------- fn: Function that inputs a single trace object. selector: dict, function, int, str or None (default None) Dict to use as selection criteria. Traces will be selected if they contain properties corresponding to all of the dictionary's keys, with values that exactly match the supplied values. If None (the default), all traces are selected. If a function, it must be a function accepting a single argument and returning a boolean. The function will be called on each trace and those for which the function returned True will be in the selection. If an int N, the Nth trace matching row and col will be selected (N can be negative). If a string S, the selector is equivalent to dict(type=S). row, col: int or None (default None) Subplot row and column index of traces to select. To select traces by row and column, the Figure must have been created using plotly.subplots.make_subplots. If None (the default), all traces are selected. secondary_y: boolean or None (default None) * If True, only select traces associated with the secondary y-axis of the subplot. * If False, only select traces associated with the primary y-axis of the subplot. * If None (the default), do not filter traces based on secondary y-axis. To select traces by secondary y-axis, the Figure must have been created using plotly.subplots.make_subplots. See the docstring for the specs argument to make_subplots for more info on creating subplots with secondary y-axes. Returns ------- self Returns the Figure object that the method was called on """ for trace in self.select_traces( selector=selector, row=row, col=col, secondary_y=secondary_y ): fn(trace) return self def update_traces( self, patch=None, selector=None, row=None, col=None, secondary_y=None, overwrite=False, **kwargs, ): """ Perform a property update operation on all traces that satisfy the specified selection criteria Parameters ---------- patch: dict or None (default None) Dictionary of property updates to be applied to all traces that satisfy the selection criteria. selector: dict, function, int, str or None (default None) Dict to use as selection criteria. Traces will be selected if they contain properties corresponding to all of the dictionary's keys, with values that exactly match the supplied values. If None (the default), all traces are selected. If a function, it must be a function accepting a single argument and returning a boolean. The function will be called on each trace and those for which the function returned True will be in the selection. If an int N, the Nth trace matching row and col will be selected (N can be negative). If a string S, the selector is equivalent to dict(type=S). row, col: int or None (default None) Subplot row and column index of traces to select. To select traces by row and column, the Figure must have been created using plotly.subplots.make_subplots. If None (the default), all traces are selected. secondary_y: boolean or None (default None) * If True, only select traces associated with the secondary y-axis of the subplot. * If False, only select traces associated with the primary y-axis of the subplot. * If None (the default), do not filter traces based on secondary y-axis. To select traces by secondary y-axis, the Figure must have been created using plotly.subplots.make_subplots. See the docstring for the specs argument to make_subplots for more info on creating subplots with secondary y-axes. overwrite: bool If True, overwrite existing properties. If False, apply updates to existing properties recursively, preserving existing properties that are not specified in the update operation. **kwargs Additional property updates to apply to each selected trace. If a property is specified in both patch and in **kwargs then the one in **kwargs takes precedence. Returns ------- self Returns the Figure object that the method was called on """ for trace in self.select_traces( selector=selector, row=row, col=col, secondary_y=secondary_y ): trace.update(patch, overwrite=overwrite, **kwargs) return self def update_layout(self, dict1=None, overwrite=False, **kwargs): """ Update the properties of the figure's layout with a dict and/or with keyword arguments. This recursively updates the structure of the original layout with the values in the input dict / keyword arguments. Parameters ---------- dict1 : dict Dictionary of properties to be updated overwrite: bool If True, overwrite existing properties. If False, apply updates to existing properties recursively, preserving existing properties that are not specified in the update operation. kwargs : Keyword/value pair of properties to be updated Returns ------- BaseFigure The Figure object that the update_layout method was called on """ self.layout.update(dict1, overwrite=overwrite, **kwargs) return self def _select_layout_subplots_by_prefix( self, prefix, selector=None, row=None, col=None, secondary_y=None ): """ Helper called by code generated select_* methods """ if row is not None or col is not None or secondary_y is not None: # Build mapping from container keys ('xaxis2', 'scene4', etc.) # to (row, col, secondary_y) triplets grid_ref = self._validate_get_grid_ref() container_to_row_col = {} for r, subplot_row in enumerate(grid_ref): for c, subplot_refs in enumerate(subplot_row): if not subplot_refs: continue # collect primary keys for i, subplot_ref in enumerate(subplot_refs): for layout_key in subplot_ref.layout_keys: if layout_key.startswith(prefix): is_secondary_y = i == 1 container_to_row_col[layout_key] = ( r + 1, c + 1, is_secondary_y, ) else: container_to_row_col = None layout_keys_filters = [ lambda k: k.startswith(prefix) and self.layout[k] is not None, lambda k: row is None or container_to_row_col.get(k, (None, None, None))[0] == row, lambda k: col is None or container_to_row_col.get(k, (None, None, None))[1] == col, lambda k: ( secondary_y is None or container_to_row_col.get(k, (None, None, None))[2] == secondary_y ), ] layout_keys = reduce( lambda last, f: filter(f, last), layout_keys_filters, # Natural sort keys so that xaxis20 is after xaxis3 _natural_sort_strings(list(self.layout)), ) layout_objs = [self.layout[k] for k in layout_keys] return _generator(self._filter_by_selector(layout_objs, [], selector)) def _select_annotations_like( self, prop, selector=None, row=None, col=None, secondary_y=None ): """ Helper to select annotation-like elements from a layout object array. Compatible with layout.annotations, layout.shapes, and layout.images """ xref_to_col = {} yref_to_row = {} yref_to_secondary_y = {} if isinstance(row, int) or isinstance(col, int) or secondary_y is not None: grid_ref = self._validate_get_grid_ref() for r, subplot_row in enumerate(grid_ref): for c, subplot_refs in enumerate(subplot_row): if not subplot_refs: continue for i, subplot_ref in enumerate(subplot_refs): if subplot_ref.subplot_type == "xy": is_secondary_y = i == 1 xaxis, yaxis = subplot_ref.layout_keys xref = xaxis.replace("axis", "") yref = yaxis.replace("axis", "") xref_to_col[xref] = c + 1 yref_to_row[yref] = r + 1 yref_to_secondary_y[yref] = is_secondary_y # filter down (select) which graph objects, by applying the filters # successively def _filter_row(obj): """Filter objects in rows by column""" return (col is None) or (xref_to_col.get(obj.xref, None) == col) def _filter_col(obj): """Filter objects in columns by row""" return (row is None) or (yref_to_row.get(obj.yref, None) == row) def _filter_sec_y(obj): """Filter objects on secondary y axes""" return (secondary_y is None) or ( yref_to_secondary_y.get(obj.yref, None) == secondary_y ) funcs = [_filter_row, _filter_col, _filter_sec_y] return _generator(self._filter_by_selector(self.layout[prop], funcs, selector)) def _add_annotation_like( self, prop_singular, prop_plural, new_obj, row=None, col=None, secondary_y=None, exclude_empty_subplots=False, ): # Make sure we have both row and col or neither if row is not None and col is None: raise ValueError( "Received row parameter but not col.\n" "row and col must be specified together" ) elif col is not None and row is None: raise ValueError( "Received col parameter but not row.\n" "row and col must be specified together" ) # Address multiple subplots if row is not None and _is_select_subplot_coordinates_arg(row, col): # TODO product argument could be added rows_cols = self._select_subplot_coordinates(row, col) for r, c in rows_cols: self._add_annotation_like( prop_singular, prop_plural, new_obj, row=r, col=c, secondary_y=secondary_y, exclude_empty_subplots=exclude_empty_subplots, ) return self # Get grid_ref if specific row or column requested if row is not None: grid_ref = self._validate_get_grid_ref() if row > len(grid_ref): raise IndexError( "row index %d out-of-bounds, row index must be between 1 and %d, inclusive." % (row, len(grid_ref)) ) if col > len(grid_ref[row - 1]): raise IndexError( "column index %d out-of-bounds, " "column index must be between 1 and %d, inclusive." % (row, len(grid_ref[row - 1])) ) refs = grid_ref[row - 1][col - 1] if not refs: raise ValueError( "No subplot found at position ({r}, {c})".format(r=row, c=col) ) if refs[0].subplot_type != "xy": raise ValueError( """ Cannot add {prop_singular} to subplot at position ({r}, {c}) because subplot is of type {subplot_type}.""".format( prop_singular=prop_singular, r=row, c=col, subplot_type=refs[0].subplot_type, ) ) # If the new_object was created with a yref specified that did not include paper or domain, the specified yref should be used otherwise assign the xref and yref from the layout_keys if ( new_obj.yref is None or new_obj.yref == "y" or "paper" in new_obj.yref or "domain" in new_obj.yref ): if len(refs) == 1 and secondary_y: raise ValueError( """ Cannot add {prop_singular} to secondary y-axis of subplot at position ({r}, {c}) because subplot does not have a secondary y-axis""".format( prop_singular=prop_singular, r=row, c=col ) ) if secondary_y: xaxis, yaxis = refs[1].layout_keys else: xaxis, yaxis = refs[0].layout_keys xref, yref = xaxis.replace("axis", ""), yaxis.replace("axis", "") else: yref = new_obj.yref xaxis = refs[0].layout_keys[0] xref = xaxis.replace("axis", "") # if exclude_empty_subplots is True, check to see if subplot is # empty and return if it is if exclude_empty_subplots and ( not self._subplot_not_empty( xref, yref, selector=bool(exclude_empty_subplots) ) ): return self # in case the user specified they wanted an axis to refer to the # domain of that axis and not the data, append ' domain' to the # computed axis accordingly def _add_domain(ax_letter, new_axref): axref = ax_letter + "ref" if axref in new_obj._props.keys() and "domain" in new_obj[axref]: new_axref += " domain" return new_axref xref, yref = map(lambda t: _add_domain(*t), zip(["x", "y"], [xref, yref])) new_obj.update(xref=xref, yref=yref) self.layout[prop_plural] += (new_obj,) # The 'new_obj.xref' and 'new_obj.yref' parameters need to be reset otherwise it # will appear as if user supplied yref params when looping through subplots and # will force annotation to be on the axis of the last drawn annotation # i.e. they all end up on the same axis. new_obj.update(xref=None, yref=None) return self # Restyle # ------- def plotly_restyle(self, restyle_data, trace_indexes=None, **kwargs): """ Perform a Plotly restyle operation on the figure's traces Parameters ---------- restyle_data : dict Dict of trace style updates. Keys are strings that specify the properties to be updated. Nested properties are expressed by joining successive keys on '.' characters (e.g. 'marker.color'). Values may be scalars or lists. When values are scalars, that scalar value is applied to all traces specified by the `trace_indexes` parameter. When values are lists, the restyle operation will cycle through the elements of the list as it cycles through the traces specified by the `trace_indexes` parameter. Caution: To use plotly_restyle to update a list property (e.g. the `x` property of the scatter trace), the property value should be a scalar list containing the list to update with. For example, the following command would be used to update the 'x' property of the first trace to the list [1, 2, 3] >>> import plotly.graph_objects as go >>> fig = go.Figure(go.Scatter(x=[2, 4, 6])) >>> fig.plotly_restyle({'x': [[1, 2, 3]]}, 0) trace_indexes : int or list of int Trace index, or list of trace indexes, that the restyle operation applies to. Defaults to all trace indexes. Returns ------- None """ # Normalize trace indexes # ----------------------- trace_indexes = self._normalize_trace_indexes(trace_indexes) # Handle source_view_id # --------------------- # If not None, the source_view_id is the UID of the frontend # Plotly.js view that initially triggered this restyle operation # (e.g. the user clicked on the legend to hide a trace). We pass # this UID along so that the frontend views can determine whether # they need to apply the restyle operation on themselves. source_view_id = kwargs.get("source_view_id", None) # Perform restyle on trace dicts # ------------------------------ restyle_changes = self._perform_plotly_restyle(restyle_data, trace_indexes) if restyle_changes: # The restyle operation resulted in a change to some trace # properties, so we dispatch change callbacks and send the # restyle message to the frontend (if any) msg_kwargs = ( {"source_view_id": source_view_id} if source_view_id is not None else {} ) self._send_restyle_msg( restyle_changes, trace_indexes=trace_indexes, **msg_kwargs ) self._dispatch_trace_change_callbacks(restyle_changes, trace_indexes) def _perform_plotly_restyle(self, restyle_data, trace_indexes): """ Perform a restyle operation on the figure's traces data and return the changes that were applied Parameters ---------- restyle_data : dict[str, any] See docstring for plotly_restyle trace_indexes : list[int] List of trace indexes that restyle operation applies to Returns ------- restyle_changes: dict[str, any] Subset of restyle_data including only the keys / values that resulted in a change to the figure's traces data """ # Initialize restyle changes # -------------------------- # This will be a subset of the restyle_data including only the # keys / values that are changed in the figure's trace data restyle_changes = {} # Process each key # ---------------- for key_path_str, v in restyle_data.items(): # Track whether any of the new values are cause a change in # self._data any_vals_changed = False for i, trace_ind in enumerate(trace_indexes): if trace_ind >= len(self._data): raise ValueError( "Trace index {trace_ind} out of range".format( trace_ind=trace_ind ) ) # Get new value for this particular trace trace_v = v[i % len(v)] if isinstance(v, list) else v if trace_v is not Undefined: # Get trace being updated trace_obj = self.data[trace_ind] # Validate key_path_str if not BaseFigure._is_key_path_compatible(key_path_str, trace_obj): trace_class = trace_obj.__class__.__name__ raise ValueError( """ Invalid property path '{key_path_str}' for trace class {trace_class} """.format( key_path_str=key_path_str, trace_class=trace_class ) ) # Apply set operation for this trace and thist value val_changed = BaseFigure._set_in( self._data[trace_ind], key_path_str, trace_v ) # Update any_vals_changed status any_vals_changed = any_vals_changed or val_changed if any_vals_changed: restyle_changes[key_path_str] = v return restyle_changes def _restyle_child(self, child, key_path_str, val): """ Process restyle operation on a child trace object Note: This method name/signature must match the one in BasePlotlyType. BasePlotlyType objects call their parent's _restyle_child method without knowing whether their parent is a BasePlotlyType or a BaseFigure. Parameters ---------- child : BaseTraceType Child being restyled key_path_str : str A key path string (e.g. 'foo.bar[0]') val Restyle value Returns ------- None """ # Compute trace index # ------------------- trace_index = child._trace_ind # Not in batch mode # ----------------- # Dispatch change callbacks and send restyle message if not self._in_batch_mode: send_val = [val] restyle = {key_path_str: send_val} self._send_restyle_msg(restyle, trace_indexes=trace_index) self._dispatch_trace_change_callbacks(restyle, [trace_index]) # In batch mode # ------------- # Add key_path_str/val to saved batch edits else: if trace_index not in self._batch_trace_edits: self._batch_trace_edits[trace_index] = OrderedDict() self._batch_trace_edits[trace_index][key_path_str] = val def _normalize_trace_indexes(self, trace_indexes): """ Input trace index specification and return list of the specified trace indexes Parameters ---------- trace_indexes : None or int or list[int] Returns ------- list[int] """ if trace_indexes is None: trace_indexes = list(range(len(self.data))) if not isinstance(trace_indexes, (list, tuple)): trace_indexes = [trace_indexes] return list(trace_indexes) @staticmethod def _str_to_dict_path(key_path_str): """ Convert a key path string into a tuple of key path elements. Parameters ---------- key_path_str : str Key path string, where nested keys are joined on '.' characters and array indexes are specified using brackets (e.g. 'foo.bar[1]') Returns ------- tuple[str | int] """ if ( isinstance(key_path_str, str) and "." not in key_path_str and "[" not in key_path_str and "_" not in key_path_str ): # Fast path for common case that avoids regular expressions return (key_path_str,) elif isinstance(key_path_str, tuple): # Nothing to do return key_path_str else: ret = _str_to_dict_path_full(key_path_str)[0] return ret @staticmethod def _set_in(d, key_path_str, v): """ Set a value in a nested dict using a key path string (e.g. 'foo.bar[0]') Parameters ---------- d : dict Input dict to set property in key_path_str : str Key path string, where nested keys are joined on '.' characters and array indexes are specified using brackets (e.g. 'foo.bar[1]') v New value Returns ------- bool True if set resulted in modification of dict (i.e. v was not already present at the specified location), False otherwise. """ # Validate inputs # --------------- assert isinstance(d, dict) # Compute key path # ---------------- # Convert the key_path_str into a tuple of key paths # e.g. 'foo.bar[0]' -> ('foo', 'bar', 0) key_path = BaseFigure._str_to_dict_path(key_path_str) # Initialize val_parent # --------------------- # This variable will be assigned to the parent of the next key path # element currently being processed val_parent = d # Initialize parent dict or list of value to be assigned # ----------------------------------------------------- for kp, key_path_el in enumerate(key_path[:-1]): # Extend val_parent list if needed if isinstance(val_parent, list) and isinstance(key_path_el, int): while len(val_parent) <= key_path_el: val_parent.append(None) elif isinstance(val_parent, dict) and key_path_el not in val_parent: if isinstance(key_path[kp + 1], int): val_parent[key_path_el] = [] else: val_parent[key_path_el] = {} val_parent = val_parent[key_path_el] # Assign value to to final parent dict or list # -------------------------------------------- # ### Get reference to final key path element ### last_key = key_path[-1] # ### Track whether assignment alters parent ### val_changed = False # v is Undefined # -------------- # Don't alter val_parent if v is Undefined: pass # v is None # --------- # Check whether we can remove key from parent elif v is None: if isinstance(val_parent, dict): if last_key in val_parent: # Parent is a dict and has last_key as a current key so # we can pop the key, which alters parent val_parent.pop(last_key) val_changed = True elif isinstance(val_parent, list): if isinstance(last_key, int) and 0 <= last_key < len(val_parent): # Parent is a list and last_key is a valid index so we # can set the element value to None val_parent[last_key] = None val_changed = True else: # Unsupported parent type (numpy array for example) raise ValueError( """ Cannot remove element of type {typ} at location {raw_key}""".format( typ=type(val_parent), raw_key=key_path_str ) ) # v is a valid value # ------------------ # Check whether parent should be updated else: if isinstance(val_parent, dict): if last_key not in val_parent or not BasePlotlyType._vals_equal( val_parent[last_key], v ): # Parent is a dict and does not already contain the # value v at key last_key val_parent[last_key] = v val_changed = True elif isinstance(val_parent, list): if isinstance(last_key, int): # Extend list with Nones if needed so that last_key is # in bounds while len(val_parent) <= last_key: val_parent.append(None) if not BasePlotlyType._vals_equal(val_parent[last_key], v): # Parent is a list and does not already contain the # value v at index last_key val_parent[last_key] = v val_changed = True else: # Unsupported parent type (numpy array for example) raise ValueError( """ Cannot set element of type {typ} at location {raw_key}""".format( typ=type(val_parent), raw_key=key_path_str ) ) return val_changed # Add traces # ---------- @staticmethod def _raise_invalid_rows_cols(name, n, invalid): rows_err_msg = """ If specified, the {name} parameter must be a list or tuple of integers of length {n} (The number of traces being added) Received: {invalid} """.format( name=name, n=n, invalid=invalid ) raise ValueError(rows_err_msg) @staticmethod def _validate_rows_cols(name, n, vals): if vals is None: pass elif isinstance(vals, (list, tuple)): if len(vals) != n: BaseFigure._raise_invalid_rows_cols(name=name, n=n, invalid=vals) int_type = _get_int_type() if [r for r in vals if not isinstance(r, int_type)]: BaseFigure._raise_invalid_rows_cols(name=name, n=n, invalid=vals) else: BaseFigure._raise_invalid_rows_cols(name=name, n=n, invalid=vals) def add_trace( self, trace, row=None, col=None, secondary_y=None, exclude_empty_subplots=False ): """ Add a trace to the figure Parameters ---------- trace : BaseTraceType or dict Either: - An instances of a trace classe from the plotly.graph_objs package (e.g plotly.graph_objs.Scatter, plotly.graph_objs.Bar) - or a dicts where: - The 'type' property specifies the trace type (e.g. 'scatter', 'bar', 'area', etc.). If the dict has no 'type' property then 'scatter' is assumed. - All remaining properties are passed to the constructor of the specified trace type. row : 'all', int or None (default) Subplot row index (starting from 1) for the trace to be added. Only valid if figure was created using `plotly.tools.make_subplots`. If 'all', addresses all rows in the specified column(s). col : 'all', int or None (default) Subplot col index (starting from 1) for the trace to be added. Only valid if figure was created using `plotly.tools.make_subplots`. If 'all', addresses all columns in the specified row(s). secondary_y: boolean or None (default None) If True, associate this trace with the secondary y-axis of the subplot at the specified row and col. Only valid if all of the following conditions are satisfied: * The figure was created using `plotly.subplots.make_subplots`. * The row and col arguments are not None * The subplot at the specified row and col has type xy (which is the default) and secondary_y True. These properties are specified in the specs argument to make_subplots. See the make_subplots docstring for more info. * The trace argument is a 2D cartesian trace (scatter, bar, etc.) exclude_empty_subplots: boolean If True, the trace will not be added to subplots that don't already have traces. Returns ------- BaseFigure The Figure that add_trace was called on Examples -------- >>> from plotly import subplots >>> import plotly.graph_objs as go Add two Scatter traces to a figure >>> fig = go.Figure() >>> fig.add_trace(go.Scatter(x=[1,2,3], y=[2,1,2])) # doctest: +ELLIPSIS Figure(...) >>> fig.add_trace(go.Scatter(x=[1,2,3], y=[2,1,2])) # doctest: +ELLIPSIS Figure(...) Add two Scatter traces to vertically stacked subplots >>> fig = subplots.make_subplots(rows=2) >>> fig.add_trace(go.Scatter(x=[1,2,3], y=[2,1,2]), row=1, col=1) # doctest: +ELLIPSIS Figure(...) >>> fig.add_trace(go.Scatter(x=[1,2,3], y=[2,1,2]), row=2, col=1) # doctest: +ELLIPSIS Figure(...) """ # Make sure we have both row and col or neither if row is not None and col is None: raise ValueError( "Received row parameter but not col.\n" "row and col must be specified together" ) elif col is not None and row is None: raise ValueError( "Received col parameter but not row.\n" "row and col must be specified together" ) # Address multiple subplots if row is not None and _is_select_subplot_coordinates_arg(row, col): # TODO add product argument rows_cols = self._select_subplot_coordinates(row, col) for r, c in rows_cols: self.add_trace( trace, row=r, col=c, secondary_y=secondary_y, exclude_empty_subplots=exclude_empty_subplots, ) return self return self.add_traces( data=[trace], rows=[row] if row is not None else None, cols=[col] if col is not None else None, secondary_ys=[secondary_y] if secondary_y is not None else None, exclude_empty_subplots=exclude_empty_subplots, ) def add_traces( self, data, rows=None, cols=None, secondary_ys=None, exclude_empty_subplots=False, ): """ Add traces to the figure Parameters ---------- data : list[BaseTraceType or dict] A list of trace specifications to be added. Trace specifications may be either: - Instances of trace classes from the plotly.graph_objs package (e.g plotly.graph_objs.Scatter, plotly.graph_objs.Bar) - Dicts where: - The 'type' property specifies the trace type (e.g. 'scatter', 'bar', 'area', etc.). If the dict has no 'type' property then 'scatter' is assumed. - All remaining properties are passed to the constructor of the specified trace type. rows : None, list[int], or int (default None) List of subplot row indexes (starting from 1) for the traces to be added. Only valid if figure was created using `plotly.tools.make_subplots` If a single integer is passed, all traces will be added to row number cols : None or list[int] (default None) List of subplot column indexes (starting from 1) for the traces to be added. Only valid if figure was created using `plotly.tools.make_subplots` If a single integer is passed, all traces will be added to column number secondary_ys: None or list[boolean] (default None) List of secondary_y booleans for traces to be added. See the docstring for `add_trace` for more info. exclude_empty_subplots: boolean If True, the trace will not be added to subplots that don't already have traces. Returns ------- BaseFigure The Figure that add_traces was called on Examples -------- >>> from plotly import subplots >>> import plotly.graph_objs as go Add two Scatter traces to a figure >>> fig = go.Figure() >>> fig.add_traces([go.Scatter(x=[1,2,3], y=[2,1,2]), ... go.Scatter(x=[1,2,3], y=[2,1,2])]) # doctest: +ELLIPSIS Figure(...) Add two Scatter traces to vertically stacked subplots >>> fig = subplots.make_subplots(rows=2) >>> fig.add_traces([go.Scatter(x=[1,2,3], y=[2,1,2]), ... go.Scatter(x=[1,2,3], y=[2,1,2])], ... rows=[1, 2], cols=[1, 1]) # doctest: +ELLIPSIS Figure(...) """ # Validate traces data = self._data_validator.validate_coerce(data) # Set trace indexes for ind, new_trace in enumerate(data): new_trace._trace_ind = ind + len(self.data) # Allow integers as inputs to subplots int_type = _get_int_type() if isinstance(rows, int_type): rows = [rows] * len(data) if isinstance(cols, int_type): cols = [cols] * len(data) # Validate rows / cols n = len(data) BaseFigure._validate_rows_cols("rows", n, rows) BaseFigure._validate_rows_cols("cols", n, cols) # Make sure we have both rows and cols or neither if rows is not None and cols is None: raise ValueError( "Received rows parameter but not cols.\n" "rows and cols must be specified together" ) elif cols is not None and rows is None: raise ValueError( "Received cols parameter but not rows.\n" "rows and cols must be specified together" ) # Process secondary_ys defaults if secondary_ys is not None and rows is None: # Default rows/cols to 1s if secondary_ys specified but not rows # or cols rows = [1] * len(secondary_ys) cols = rows elif secondary_ys is None and rows is not None: # Default secondary_ys to Nones if secondary_ys is not specified # but not rows and cols are specified secondary_ys = [None] * len(rows) # Apply rows / cols if rows is not None: for trace, row, col, secondary_y in zip(data, rows, cols, secondary_ys): self._set_trace_grid_position(trace, row, col, secondary_y) if exclude_empty_subplots: data = list( filter( lambda trace: self._subplot_not_empty( trace["xaxis"], trace["yaxis"], bool(exclude_empty_subplots) ), data, ) ) # Make deep copy of trace data (Optimize later if needed) new_traces_data = [deepcopy(trace._props) for trace in data] # Update trace parent for trace in data: trace._parent = self trace._orphan_props.clear() # Update python side # Use extend instead of assignment so we don't trigger serialization self._data.extend(new_traces_data) self._data_defaults = self._data_defaults + [{} for _ in data] self._data_objs = self._data_objs + data # Update messages self._send_addTraces_msg(new_traces_data) return self # Subplots # -------- def print_grid(self): """ Print a visual layout of the figure's axes arrangement. This is only valid for figures that are created with plotly.tools.make_subplots. """ if self._grid_str is None: raise Exception( "Use plotly.tools.make_subplots " "to create a subplot grid." ) print(self._grid_str) def append_trace(self, trace, row, col): """ Add a trace to the figure bound to axes at the specified row, col index. A row, col index grid is generated for figures created with plotly.tools.make_subplots, and can be viewed with the `print_grid` method Parameters ---------- trace The data trace to be bound row: int Subplot row index (see Figure.print_grid) col: int Subplot column index (see Figure.print_grid) Examples -------- >>> from plotly import tools >>> import plotly.graph_objs as go >>> # stack two subplots vertically >>> fig = tools.make_subplots(rows=2) This is the format of your plot grid: [ (1,1) x1,y1 ] [ (2,1) x2,y2 ] >>> fig.append_trace(go.Scatter(x=[1,2,3], y=[2,1,2]), row=1, col=1) >>> fig.append_trace(go.Scatter(x=[1,2,3], y=[2,1,2]), row=2, col=1) """ warnings.warn( """\ The append_trace method is deprecated and will be removed in a future version. Please use the add_trace method with the row and col parameters. """, DeprecationWarning, ) self.add_trace(trace=trace, row=row, col=col) def _set_trace_grid_position(self, trace, row, col, secondary_y=False): from plotly._subplots import _set_trace_grid_reference grid_ref = self._validate_get_grid_ref() return _set_trace_grid_reference( trace, self.layout, grid_ref, row, col, secondary_y ) def _validate_get_grid_ref(self): try: grid_ref = self._grid_ref if grid_ref is None: raise AttributeError("_grid_ref") except AttributeError: raise Exception( "In order to reference traces by row and column, " "you must first use " "plotly.tools.make_subplots " "to create the figure with a subplot grid." ) return grid_ref def _get_subplot_rows_columns(self): """ Returns a pair of lists, the first containing all the row indices and the second all the column indices. """ # currently, this just iterates over all the rows and columns (because # self._grid_ref is currently always rectangular) grid_ref = self._validate_get_grid_ref() nrows = len(grid_ref) ncols = len(grid_ref[0]) return (range(1, nrows + 1), range(1, ncols + 1)) def _get_subplot_coordinates(self): """ Returns an iterator over (row,col) pairs representing all the possible subplot coordinates. """ return itertools.product(*self._get_subplot_rows_columns()) def _select_subplot_coordinates(self, rows, cols, product=False): """ Allows selecting all or a subset of the subplots. If any of rows or columns is 'all', product is set to True. This is probably the expected behaviour, so that rows=1,cols='all' selects all the columns in row 1 (otherwise it would just select the subplot in the first row and first column). """ product |= any([s == "all" for s in [rows, cols]]) # TODO: If grid_ref ever becomes non-rectangular, then t should be the # set-intersection of the result of _indexing_combinations and # _get_subplot_coordinates, because some coordinates given by # the _indexing_combinations function might be invalid. t = _indexing_combinations( [rows, cols], list(self._get_subplot_rows_columns()), product=product, ) t = list(t) # remove rows and cols where the subplot is "None" grid_ref = self._validate_get_grid_ref() t = list(filter(lambda u: grid_ref[u[0] - 1][u[1] - 1] is not None, t)) return t def get_subplot(self, row, col, secondary_y=False): """ Return an object representing the subplot at the specified row and column. May only be used on Figures created using plotly.tools.make_subplots Parameters ---------- row: int 1-based index of subplot row col: int 1-based index of subplot column secondary_y: bool If True, select the subplot that consists of the x-axis and the secondary y-axis at the specified row/col. Only valid if the subplot at row/col is an 2D cartesian subplot that was created with a secondary y-axis. See the docstring for the specs argument to make_subplots for more info on creating a subplot with a secondary y-axis. Returns ------- subplot * None: if subplot is empty * plotly.graph_objs.layout.Scene: if subplot type is 'scene' * plotly.graph_objs.layout.Polar: if subplot type is 'polar' * plotly.graph_objs.layout.Ternary: if subplot type is 'ternary' * plotly.graph_objs.layout.Mapbox: if subplot type is 'ternary' * SubplotDomain namedtuple with `x` and `y` fields: if subplot type is 'domain'. - x: length 2 list of the subplot start and stop width - y: length 2 list of the subplot start and stop height * SubplotXY namedtuple with `xaxis` and `yaxis` fields: if subplot type is 'xy'. - xaxis: plotly.graph_objs.layout.XAxis instance for subplot - yaxis: plotly.graph_objs.layout.YAxis instance for subplot """ from plotly._subplots import _get_grid_subplot return _get_grid_subplot(self, row, col, secondary_y) # Child property operations # ------------------------- def _get_child_props(self, child): """ Return the properties dict for a child trace or child layout Note: this method must match the name/signature of one on BasePlotlyType Parameters ---------- child : BaseTraceType | BaseLayoutType Returns ------- dict """ # Try to find index of child as a trace # ------------------------------------- if isinstance(child, BaseTraceType): # ### Child is a trace ### trace_index = child._trace_ind return self._data[trace_index] # Child is the layout # ------------------- elif child is self.layout: return self._layout # Unknown child # ------------- else: raise ValueError("Unrecognized child: %s" % child) def _get_child_prop_defaults(self, child): """ Return the default properties dict for a child trace or child layout Note: this method must match the name/signature of one on BasePlotlyType Parameters ---------- child : BaseTraceType | BaseLayoutType Returns ------- dict """ # Child is a trace # ---------------- if isinstance(child, BaseTraceType): trace_index = child._trace_ind return self._data_defaults[trace_index] # Child is the layout # ------------------- elif child is self.layout: return self._layout_defaults # Unknown child # ------------- else: raise ValueError("Unrecognized child: %s" % child) def _init_child_props(self, child): """ Initialize the properites dict for a child trace or layout Note: this method must match the name/signature of one on BasePlotlyType Parameters ---------- child : BaseTraceType | BaseLayoutType Returns ------- None """ # layout and traces dict are initialize when figure is constructed # and when new traces are added to the figure pass # Layout # ------ def _initialize_layout_template(self): import plotly.io as pio if self._layout_obj._props.get("template", None) is None: if pio.templates.default is not None: # Assume default template is already validated if self._allow_disable_validation: self._layout_obj._validate = False try: if isinstance(pio.templates.default, BasePlotlyType): # Template object. Don't want to actually import `Template` # here for performance so we check against `BasePlotlyType` template_object = pio.templates.default else: # Name of registered template object template_object = pio.templates[pio.templates.default] self._layout_obj.template = template_object finally: self._layout_obj._validate = self._validate @property def layout(self): """ The `layout` property of the figure Returns ------- plotly.graph_objs.Layout """ return self["layout"] @layout.setter def layout(self, new_layout): # Validate new layout # ------------------- new_layout = self._layout_validator.validate_coerce(new_layout) new_layout_data = deepcopy(new_layout._props) # Unparent current layout # ----------------------- if self._layout_obj: old_layout_data = deepcopy(self._layout_obj._props) self._layout_obj._orphan_props.update(old_layout_data) self._layout_obj._parent = None # Parent new layout # ----------------- self._layout = new_layout_data new_layout._parent = self new_layout._orphan_props.clear() self._layout_obj = new_layout # Initialize template object # -------------------------- self._initialize_layout_template() # Notify JS side self._send_relayout_msg(new_layout_data) def plotly_relayout(self, relayout_data, **kwargs): """ Perform a Plotly relayout operation on the figure's layout Parameters ---------- relayout_data : dict Dict of layout updates dict keys are strings that specify the properties to be updated. Nested properties are expressed by joining successive keys on '.' characters (e.g. 'xaxis.range') dict values are the values to use to update the layout. Returns ------- None """ # Handle source_view_id # --------------------- # If not None, the source_view_id is the UID of the frontend # Plotly.js view that initially triggered this relayout operation # (e.g. the user clicked on the toolbar to change the drag mode # from zoom to pan). We pass this UID along so that the frontend # views can determine whether they need to apply the relayout # operation on themselves. if "source_view_id" in kwargs: msg_kwargs = {"source_view_id": kwargs["source_view_id"]} else: msg_kwargs = {} # Perform relayout operation on layout dict # ----------------------------------------- relayout_changes = self._perform_plotly_relayout(relayout_data) if relayout_changes: # The relayout operation resulted in a change to some layout # properties, so we dispatch change callbacks and send the # relayout message to the frontend (if any) self._send_relayout_msg(relayout_changes, **msg_kwargs) self._dispatch_layout_change_callbacks(relayout_changes) def _perform_plotly_relayout(self, relayout_data): """ Perform a relayout operation on the figure's layout data and return the changes that were applied Parameters ---------- relayout_data : dict[str, any] See the docstring for plotly_relayout Returns ------- relayout_changes: dict[str, any] Subset of relayout_data including only the keys / values that resulted in a change to the figure's layout data """ # Initialize relayout changes # --------------------------- # This will be a subset of the relayout_data including only the # keys / values that are changed in the figure's layout data relayout_changes = {} # Process each key # ---------------- for key_path_str, v in relayout_data.items(): if not BaseFigure._is_key_path_compatible(key_path_str, self.layout): raise ValueError( """ Invalid property path '{key_path_str}' for layout """.format( key_path_str=key_path_str ) ) # Apply set operation on the layout dict val_changed = BaseFigure._set_in(self._layout, key_path_str, v) if val_changed: relayout_changes[key_path_str] = v return relayout_changes @staticmethod def _is_key_path_compatible(key_path_str, plotly_obj): """ Return whether the specifieid key path string is compatible with the specified plotly object for the purpose of relayout/restyle operation """ # Convert string to tuple of path components # e.g. 'foo[0].bar[1]' -> ('foo', 0, 'bar', 1) key_path_tuple = BaseFigure._str_to_dict_path(key_path_str) # Remove trailing integer component # e.g. ('foo', 0, 'bar', 1) -> ('foo', 0, 'bar') # We do this because it's fine for relayout/restyle to create new # elements in the final array in the path. if isinstance(key_path_tuple[-1], int): key_path_tuple = key_path_tuple[:-1] # Test whether modified key path tuple is in plotly_obj return key_path_tuple in plotly_obj def _relayout_child(self, child, key_path_str, val): """ Process relayout operation on child layout object Parameters ---------- child : BaseLayoutType The figure's layout key_path_str : A key path string (e.g. 'foo.bar[0]') val Relayout value Returns ------- None """ # Validate input # -------------- assert child is self.layout # Not in batch mode # ------------- # Dispatch change callbacks and send relayout message if not self._in_batch_mode: relayout_msg = {key_path_str: val} self._send_relayout_msg(relayout_msg) self._dispatch_layout_change_callbacks(relayout_msg) # In batch mode # ------------- # Add key_path_str/val to saved batch edits else: self._batch_layout_edits[key_path_str] = val # Dispatch change callbacks # ------------------------- @staticmethod def _build_dispatch_plan(key_path_strs): """ Build a dispatch plan for a list of key path strings A dispatch plan is a dict: - *from* path tuples that reference an object that has descendants that are referenced in `key_path_strs`. - *to* sets of tuples that correspond to descendants of the object above. Parameters ---------- key_path_strs : list[str] List of key path strings. For example: ['xaxis.rangeselector.font.color', 'xaxis.rangeselector.bgcolor'] Returns ------- dispatch_plan: dict[tuple[str|int], set[tuple[str|int]]] Examples -------- >>> key_path_strs = ['xaxis.rangeselector.font.color', ... 'xaxis.rangeselector.bgcolor'] >>> BaseFigure._build_dispatch_plan(key_path_strs) # doctest: +SKIP {(): {'xaxis', ('xaxis', 'rangeselector'), ('xaxis', 'rangeselector', 'bgcolor'), ('xaxis', 'rangeselector', 'font'), ('xaxis', 'rangeselector', 'font', 'color')}, ('xaxis',): {('rangeselector',), ('rangeselector', 'bgcolor'), ('rangeselector', 'font'), ('rangeselector', 'font', 'color')}, ('xaxis', 'rangeselector'): {('bgcolor',), ('font',), ('font', 'color')}, ('xaxis', 'rangeselector', 'font'): {('color',)}} """ dispatch_plan = {} for key_path_str in key_path_strs: key_path = BaseFigure._str_to_dict_path(key_path_str) key_path_so_far = () keys_left = key_path # Iterate down the key path for next_key in key_path: if key_path_so_far not in dispatch_plan: dispatch_plan[key_path_so_far] = set() to_add = [keys_left[: i + 1] for i in range(len(keys_left))] dispatch_plan[key_path_so_far].update(to_add) key_path_so_far = key_path_so_far + (next_key,) keys_left = keys_left[1:] return dispatch_plan def _dispatch_layout_change_callbacks(self, relayout_data): """ Dispatch property change callbacks given relayout_data Parameters ---------- relayout_data : dict[str, any] See docstring for plotly_relayout. Returns ------- None """ # Build dispatch plan # ------------------- key_path_strs = list(relayout_data.keys()) dispatch_plan = BaseFigure._build_dispatch_plan(key_path_strs) # Dispatch changes to each layout objects # --------------------------------------- for path_tuple, changed_paths in dispatch_plan.items(): if path_tuple in self.layout: dispatch_obj = self.layout[path_tuple] if isinstance(dispatch_obj, BasePlotlyType): dispatch_obj._dispatch_change_callbacks(changed_paths) def _dispatch_trace_change_callbacks(self, restyle_data, trace_indexes): """ Dispatch property change callbacks given restyle_data Parameters ---------- restyle_data : dict[str, any] See docstring for plotly_restyle. trace_indexes : list[int] List of trace indexes that restyle operation applied to Returns ------- None """ # Build dispatch plan # ------------------- key_path_strs = list(restyle_data.keys()) dispatch_plan = BaseFigure._build_dispatch_plan(key_path_strs) # Dispatch changes to each object in each trace # --------------------------------------------- for path_tuple, changed_paths in dispatch_plan.items(): for trace_ind in trace_indexes: trace = self.data[trace_ind] if path_tuple in trace: dispatch_obj = trace[path_tuple] if isinstance(dispatch_obj, BasePlotlyType): dispatch_obj._dispatch_change_callbacks(changed_paths) # Frames # ------ @property def frames(self): """ The `frames` property is a tuple of the figure's frame objects Returns ------- tuple[plotly.graph_objs.Frame] """ return self["frames"] @frames.setter def frames(self, new_frames): # Note: Frames are not supported by the FigureWidget subclass so we # only validate coerce the frames. We don't emit any events on frame # changes, and we don't reparent the frames. # Validate frames self._frame_objs = self._frames_validator.validate_coerce(new_frames) # Update # ------ def plotly_update( self, restyle_data=None, relayout_data=None, trace_indexes=None, **kwargs ): """ Perform a Plotly update operation on the figure. Note: This operation both mutates and returns the figure Parameters ---------- restyle_data : dict Traces update specification. See the docstring for the `plotly_restyle` method for details relayout_data : dict Layout update specification. See the docstring for the `plotly_relayout` method for details trace_indexes : Trace index, or list of trace indexes, that the update operation applies to. Defaults to all trace indexes. Returns ------- BaseFigure None """ # Handle source_view_id # --------------------- # If not None, the source_view_id is the UID of the frontend # Plotly.js view that initially triggered this update operation # (e.g. the user clicked a button that triggered an update # operation). We pass this UID along so that the frontend views can # determine whether they need to apply the update operation on # themselves. if "source_view_id" in kwargs: msg_kwargs = {"source_view_id": kwargs["source_view_id"]} else: msg_kwargs = {} # Perform update operation # ------------------------ # This updates the _data and _layout dicts, and returns the changes # to the traces (restyle_changes) and layout (relayout_changes) ( restyle_changes, relayout_changes, trace_indexes, ) = self._perform_plotly_update( restyle_data=restyle_data, relayout_data=relayout_data, trace_indexes=trace_indexes, ) # Send update message # ------------------- # Send a plotly_update message to the frontend (if any) if restyle_changes or relayout_changes: self._send_update_msg( restyle_data=restyle_changes, relayout_data=relayout_changes, trace_indexes=trace_indexes, **msg_kwargs, ) # Dispatch changes # ---------------- # ### Dispatch restyle changes ### if restyle_changes: self._dispatch_trace_change_callbacks(restyle_changes, trace_indexes) # ### Dispatch relayout changes ### if relayout_changes: self._dispatch_layout_change_callbacks(relayout_changes) def _perform_plotly_update( self, restyle_data=None, relayout_data=None, trace_indexes=None ): # Check for early exist # --------------------- if not restyle_data and not relayout_data: # Nothing to do return None, None, None # Normalize input # --------------- if restyle_data is None: restyle_data = {} if relayout_data is None: relayout_data = {} trace_indexes = self._normalize_trace_indexes(trace_indexes) # Perform relayout # ---------------- relayout_changes = self._perform_plotly_relayout(relayout_data) # Perform restyle # --------------- restyle_changes = self._perform_plotly_restyle(restyle_data, trace_indexes) # Return changes # -------------- return restyle_changes, relayout_changes, trace_indexes # Plotly message stubs # -------------------- # send-message stubs that may be overridden by the widget subclass def _send_addTraces_msg(self, new_traces_data): pass def _send_moveTraces_msg(self, current_inds, new_inds): pass def _send_deleteTraces_msg(self, delete_inds): pass def _send_restyle_msg(self, style, trace_indexes=None, source_view_id=None): pass def _send_relayout_msg(self, layout, source_view_id=None): pass def _send_update_msg( self, restyle_data, relayout_data, trace_indexes=None, source_view_id=None ): pass def _send_animate_msg( self, styles_data, relayout_data, trace_indexes, animation_opts ): pass # Context managers # ---------------- @contextmanager def batch_update(self): """ A context manager that batches up trace and layout assignment operations into a singe plotly_update message that is executed when the context exits. Examples -------- For example, suppose we have a figure widget, `fig`, with a single trace. >>> import plotly.graph_objs as go >>> fig = go.FigureWidget(data=[{'y': [3, 4, 2]}]) If we want to update the xaxis range, the yaxis range, and the marker color, we could do so using a series of three property assignments as follows: >>> fig.layout.xaxis.range = [0, 5] >>> fig.layout.yaxis.range = [0, 10] >>> fig.data[0].marker.color = 'green' This will work, however it will result in three messages being sent to the front end (two relayout messages for the axis range updates followed by one restyle message for the marker color update). This can cause the plot to appear to stutter as the three updates are applied incrementally. We can avoid this problem by performing these three assignments in a `batch_update` context as follows: >>> with fig.batch_update(): ... fig.layout.xaxis.range = [0, 5] ... fig.layout.yaxis.range = [0, 10] ... fig.data[0].marker.color = 'green' Now, these three property updates will be sent to the frontend in a single update message, and they will be applied by the front end simultaneously. """ if self._in_batch_mode is True: yield else: try: self._in_batch_mode = True yield finally: # ### Disable batch mode ### self._in_batch_mode = False # ### Build plotly_update params ### ( restyle_data, relayout_data, trace_indexes, ) = self._build_update_params_from_batch() # ### Call plotly_update ### self.plotly_update( restyle_data=restyle_data, relayout_data=relayout_data, trace_indexes=trace_indexes, ) # ### Clear out saved batch edits ### self._batch_layout_edits.clear() self._batch_trace_edits.clear() def _build_update_params_from_batch(self): """ Convert `_batch_trace_edits` and `_batch_layout_edits` into the `restyle_data`, `relayout_data`, and `trace_indexes` params accepted by the `plotly_update` method. Returns ------- (dict, dict, list[int]) """ # Handle Style / Trace Indexes # ---------------------------- batch_style_commands = self._batch_trace_edits trace_indexes = sorted(set([trace_ind for trace_ind in batch_style_commands])) all_props = sorted( set( [ prop for trace_style in self._batch_trace_edits.values() for prop in trace_style ] ) ) # Initialize restyle_data dict with all values undefined restyle_data = { prop: [Undefined for _ in range(len(trace_indexes))] for prop in all_props } # Fill in values for trace_ind, trace_style in batch_style_commands.items(): for trace_prop, trace_val in trace_style.items(): restyle_trace_index = trace_indexes.index(trace_ind) restyle_data[trace_prop][restyle_trace_index] = trace_val # Handle Layout # ------------- relayout_data = self._batch_layout_edits # Return plotly_update params # --------------------------- return restyle_data, relayout_data, trace_indexes @contextmanager def batch_animate(self, duration=500, easing="cubic-in-out"): """ Context manager to animate trace / layout updates Parameters ---------- duration : number The duration of the transition, in milliseconds. If equal to zero, updates are synchronous. easing : string The easing function used for the transition. One of: - linear - quad - cubic - sin - exp - circle - elastic - back - bounce - linear-in - quad-in - cubic-in - sin-in - exp-in - circle-in - elastic-in - back-in - bounce-in - linear-out - quad-out - cubic-out - sin-out - exp-out - circle-out - elastic-out - back-out - bounce-out - linear-in-out - quad-in-out - cubic-in-out - sin-in-out - exp-in-out - circle-in-out - elastic-in-out - back-in-out - bounce-in-out Examples -------- Suppose we have a figure widget, `fig`, with a single trace. >>> import plotly.graph_objs as go >>> fig = go.FigureWidget(data=[{'y': [3, 4, 2]}]) 1) Animate a change in the xaxis and yaxis ranges using default duration and easing parameters. >>> with fig.batch_animate(): ... fig.layout.xaxis.range = [0, 5] ... fig.layout.yaxis.range = [0, 10] 2) Animate a change in the size and color of the trace's markers over 2 seconds using the elastic-in-out easing method >>> with fig.batch_animate(duration=2000, easing='elastic-in-out'): ... fig.data[0].marker.color = 'green' ... fig.data[0].marker.size = 20 """ # Validate inputs # --------------- duration = self._animation_duration_validator.validate_coerce(duration) easing = self._animation_easing_validator.validate_coerce(easing) if self._in_batch_mode is True: yield else: try: self._in_batch_mode = True yield finally: # Exit batch mode # --------------- self._in_batch_mode = False # Apply batch animate # ------------------- self._perform_batch_animate( { "transition": {"duration": duration, "easing": easing}, "frame": {"duration": duration}, } ) def _perform_batch_animate(self, animation_opts): """ Perform the batch animate operation This method should be called with the batch_animate() context manager exits. Parameters ---------- animation_opts : dict Animation options as accepted by frontend Plotly.animation command Returns ------- None """ # Apply commands to internal dictionaries as an update # ---------------------------------------------------- ( restyle_data, relayout_data, trace_indexes, ) = self._build_update_params_from_batch() ( restyle_changes, relayout_changes, trace_indexes, ) = self._perform_plotly_update(restyle_data, relayout_data, trace_indexes) # Convert style / trace_indexes into animate form # ----------------------------------------------- if self._batch_trace_edits: animate_styles, animate_trace_indexes = zip( *[ (trace_style, trace_index) for trace_index, trace_style in self._batch_trace_edits.items() ] ) else: animate_styles, animate_trace_indexes = {}, [] animate_layout = copy(self._batch_layout_edits) # Send animate message # -------------------- # Sends animate message to the front end (if any) self._send_animate_msg( styles_data=list(animate_styles), relayout_data=animate_layout, trace_indexes=list(animate_trace_indexes), animation_opts=animation_opts, ) # Clear batched commands # ---------------------- self._batch_layout_edits.clear() self._batch_trace_edits.clear() # Dispatch callbacks # ------------------ # ### Dispatch restyle changes ### if restyle_changes: self._dispatch_trace_change_callbacks(restyle_changes, trace_indexes) # ### Dispatch relayout changes ### if relayout_changes: self._dispatch_layout_change_callbacks(relayout_changes) # Exports # ------- def to_dict(self): """ Convert figure to a dictionary Note: the dictionary includes the properties explicitly set by the user, it does not include default values of unspecified properties Returns ------- dict """ # Handle data # ----------- data = deepcopy(self._data) # Handle layout # ------------- layout = deepcopy(self._layout) # Handle frames # ------------- # Frame key is only added if there are any frames res = {"data": data, "layout": layout} frames = deepcopy([frame._props for frame in self._frame_objs]) if frames: res["frames"] = frames return res def to_plotly_json(self): """ Convert figure to a JSON representation as a Python dict Returns ------- dict """ return self.to_dict() @staticmethod def _to_ordered_dict(d, skip_uid=False): """ Static helper for converting dict or list to structure of ordered dictionaries """ if isinstance(d, dict): # d is a dict result = collections.OrderedDict() for key in sorted(d.keys()): if skip_uid and key == "uid": continue else: result[key] = BaseFigure._to_ordered_dict(d[key], skip_uid=skip_uid) elif isinstance(d, list) and d and isinstance(d[0], dict): # d is a list of dicts result = [BaseFigure._to_ordered_dict(el, skip_uid=skip_uid) for el in d] else: result = d return result def to_ordered_dict(self, skip_uid=True): # Initialize resulting OrderedDict # -------------------------------- result = collections.OrderedDict() # Handle data # ----------- result["data"] = BaseFigure._to_ordered_dict(self._data, skip_uid=skip_uid) # Handle layout # ------------- result["layout"] = BaseFigure._to_ordered_dict(self._layout) # Handle frames # ------------- if self._frame_objs: frames_props = [frame._props for frame in self._frame_objs] result["frames"] = BaseFigure._to_ordered_dict(frames_props) return result # plotly.io methods # ----------------- # Note that docstrings are auto-generated in plotly/_docstring_gen.py def show(self, *args, **kwargs): """ Show a figure using either the default renderer(s) or the renderer(s) specified by the renderer argument Parameters ---------- renderer: str or None (default None) A string containing the names of one or more registered renderers (separated by '+' characters) or None. If None, then the default renderers specified in plotly.io.renderers.default are used. validate: bool (default True) True if the figure should be validated before being shown, False otherwise. width: int or float An integer or float that determines the number of pixels wide the plot is. The default is set in plotly.js. height: int or float An integer or float that determines the number of pixels wide the plot is. The default is set in plotly.js. config: dict A dict of parameters to configure the figure. The defaults are set in plotly.js. Returns ------- None """ import plotly.io as pio return pio.show(self, *args, **kwargs) def to_json(self, *args, **kwargs): """ Convert a figure to a JSON string representation Parameters ---------- validate: bool (default True) True if the figure should be validated before being converted to JSON, False otherwise. pretty: bool (default False) True if JSON representation should be pretty-printed, False if representation should be as compact as possible. remove_uids: bool (default True) True if trace UIDs should be omitted from the JSON representation engine: str (default None) The JSON encoding engine to use. One of: - "json" for an encoder based on the built-in Python json module - "orjson" for a fast encoder the requires the orjson package If not specified, the default encoder is set to the current value of plotly.io.json.config.default_encoder. Returns ------- str Representation of figure as a JSON string """ import plotly.io as pio return pio.to_json(self, *args, **kwargs) def full_figure_for_development(self, warn=True, as_dict=False): """ Compute default values for all attributes not specified in the input figure and returns the output as a "full" figure. This function calls Plotly.js via Kaleido to populate unspecified attributes. This function is intended for interactive use during development to learn more about how Plotly.js computes default values and is not generally necessary or recommended for production use. Parameters ---------- fig: Figure object or dict representing a figure warn: bool If False, suppress warnings about not using this in production. as_dict: bool If True, output is a dict with some keys that go.Figure can't parse. If False, output is a go.Figure with unparseable keys skipped. Returns ------- plotly.graph_objects.Figure or dict The full figure """ import plotly.io as pio return pio.full_figure_for_development(self, warn, as_dict) def write_json(self, *args, **kwargs): """ Convert a figure to JSON and write it to a file or writeable object Parameters ---------- file: str or writeable A string representing a local file path or a writeable object (e.g. an open file descriptor) pretty: bool (default False) True if JSON representation should be pretty-printed, False if representation should be as compact as possible. remove_uids: bool (default True) True if trace UIDs should be omitted from the JSON representation engine: str (default None) The JSON encoding engine to use. One of: - "json" for an encoder based on the built-in Python json module - "orjson" for a fast encoder the requires the orjson package If not specified, the default encoder is set to the current value of plotly.io.json.config.default_encoder. Returns ------- None """ import plotly.io as pio return pio.write_json(self, *args, **kwargs) def to_html(self, *args, **kwargs): """ Convert a figure to an HTML string representation. Parameters ---------- config: dict or None (default None) Plotly.js figure config options auto_play: bool (default=True) Whether to automatically start the animation sequence on page load if the figure contains frames. Has no effect if the figure does not contain frames. include_plotlyjs: bool or string (default True) Specifies how the plotly.js library is included/loaded in the output div string. If True, a script tag containing the plotly.js source code (~3MB) is included in the output. HTML files generated with this option are fully self-contained and can be used offline. If 'cdn', a script tag that references the plotly.js CDN is included in the output. HTML files generated with this option are about 3MB smaller than those generated with include_plotlyjs=True, but they require an active internet connection in order to load the plotly.js library. If 'directory', a script tag is included that references an external plotly.min.js bundle that is assumed to reside in the same directory as the HTML file. If 'require', Plotly.js is loaded using require.js. This option assumes that require.js is globally available and that it has been globally configured to know how to find Plotly.js as 'plotly'. This option is not advised when full_html=True as it will result in a non-functional html file. If a string that ends in '.js', a script tag is included that references the specified path. This approach can be used to point the resulting HTML file to an alternative CDN or local bundle. If False, no script tag referencing plotly.js is included. This is useful when the resulting div string will be placed inside an HTML document that already loads plotly.js. This option is not advised when full_html=True as it will result in a non-functional html file. include_mathjax: bool or string (default False) Specifies how the MathJax.js library is included in the output html div string. MathJax is required in order to display labels with LaTeX typesetting. If False, no script tag referencing MathJax.js will be included in the output. If 'cdn', a script tag that references a MathJax CDN location will be included in the output. HTML div strings generated with this option will be able to display LaTeX typesetting as long as internet access is available. If a string that ends in '.js', a script tag is included that references the specified path. This approach can be used to point the resulting HTML div string to an alternative CDN. post_script: str or list or None (default None) JavaScript snippet(s) to be included in the resulting div just after plot creation. The string(s) may include '{plot_id}' placeholders that will then be replaced by the `id` of the div element that the plotly.js figure is associated with. One application for this script is to install custom plotly.js event handlers. full_html: bool (default True) If True, produce a string containing a complete HTML document starting with an tag. If False, produce a string containing a single
element. animation_opts: dict or None (default None) dict of custom animation parameters to be passed to the function Plotly.animate in Plotly.js. See https://github.com/plotly/plotly.js/blob/master/src/plots/animation_attributes.js for available options. Has no effect if the figure does not contain frames, or auto_play is False. default_width, default_height: number or str (default '100%') The default figure width/height to use if the provided figure does not specify its own layout.width/layout.height property. May be specified in pixels as an integer (e.g. 500), or as a css width style string (e.g. '500px', '100%'). validate: bool (default True) True if the figure should be validated before being converted to JSON, False otherwise. div_id: str (default None) If provided, this is the value of the id attribute of the div tag. If None, the id attribute is a UUID. Returns ------- str Representation of figure as an HTML div string """ import plotly.io as pio return pio.to_html(self, *args, **kwargs) def write_html(self, *args, **kwargs): """ Write a figure to an HTML file representation Parameters ---------- file: str or writeable A string representing a local file path or a writeable object (e.g. a pathlib.Path object or an open file descriptor) config: dict or None (default None) Plotly.js figure config options auto_play: bool (default=True) Whether to automatically start the animation sequence on page load if the figure contains frames. Has no effect if the figure does not contain frames. include_plotlyjs: bool or string (default True) Specifies how the plotly.js library is included/loaded in the output div string. If True, a script tag containing the plotly.js source code (~3MB) is included in the output. HTML files generated with this option are fully self-contained and can be used offline. If 'cdn', a script tag that references the plotly.js CDN is included in the output. HTML files generated with this option are about 3MB smaller than those generated with include_plotlyjs=True, but they require an active internet connection in order to load the plotly.js library. If 'directory', a script tag is included that references an external plotly.min.js bundle that is assumed to reside in the same directory as the HTML file. If `file` is a string to a local file path and `full_html` is True then If 'directory', a script tag is included that references an external plotly.min.js bundle that is assumed to reside in the same directory as the HTML file. If `file` is a string to a local file path and `full_html` is True, then the plotly.min.js bundle is copied into the directory of the resulting HTML file. If a file named plotly.min.js already exists in the output directory then this file is left unmodified and no copy is performed. HTML files generated with this option can be used offline, but they require a copy of the plotly.min.js bundle in the same directory. This option is useful when many figures will be saved as HTML files in the same directory because the plotly.js source code will be included only once per output directory, rather than once per output file. If 'require', Plotly.js is loaded using require.js. This option assumes that require.js is globally available and that it has been globally configured to know how to find Plotly.js as 'plotly'. This option is not advised when full_html=True as it will result in a non-functional html file. If a string that ends in '.js', a script tag is included that references the specified path. This approach can be used to point the resulting HTML file to an alternative CDN or local bundle. If False, no script tag referencing plotly.js is included. This is useful when the resulting div string will be placed inside an HTML document that already loads plotly.js. This option is not advised when full_html=True as it will result in a non-functional html file. include_mathjax: bool or string (default False) Specifies how the MathJax.js library is included in the output html div string. MathJax is required in order to display labels with LaTeX typesetting. If False, no script tag referencing MathJax.js will be included in the output. If 'cdn', a script tag that references a MathJax CDN location will be included in the output. HTML div strings generated with this option will be able to display LaTeX typesetting as long as internet access is available. If a string that ends in '.js', a script tag is included that references the specified path. This approach can be used to point the resulting HTML div string to an alternative CDN. post_script: str or list or None (default None) JavaScript snippet(s) to be included in the resulting div just after plot creation. The string(s) may include '{plot_id}' placeholders that will then be replaced by the `id` of the div element that the plotly.js figure is associated with. One application for this script is to install custom plotly.js event handlers. full_html: bool (default True) If True, produce a string containing a complete HTML document starting with an tag. If False, produce a string containing a single
element. animation_opts: dict or None (default None) dict of custom animation parameters to be passed to the function Plotly.animate in Plotly.js. See https://github.com/plotly/plotly.js/blob/master/src/plots/animation_attributes.js for available options. Has no effect if the figure does not contain frames, or auto_play is False. default_width, default_height: number or str (default '100%') The default figure width/height to use if the provided figure does not specify its own layout.width/layout.height property. May be specified in pixels as an integer (e.g. 500), or as a css width style string (e.g. '500px', '100%'). validate: bool (default True) True if the figure should be validated before being converted to JSON, False otherwise. auto_open: bool (default True) If True, open the saved file in a web browser after saving. This argument only applies if `full_html` is True. div_id: str (default None) If provided, this is the value of the id attribute of the div tag. If None, the id attribute is a UUID. Returns ------- str Representation of figure as an HTML div string """ import plotly.io as pio return pio.write_html(self, *args, **kwargs) def to_image(self, *args, **kwargs): """ Convert a figure to a static image bytes string Parameters ---------- format: str or None The desired image format. One of - 'png' - 'jpg' or 'jpeg' - 'webp' - 'svg' - 'pdf' - 'eps' (Requires the poppler library to be installed) If not specified, will default to `plotly.io.config.default_format` width: int or None The width of the exported image in layout pixels. If the `scale` property is 1.0, this will also be the width of the exported image in physical pixels. If not specified, will default to `plotly.io.config.default_width` height: int or None The height of the exported image in layout pixels. If the `scale` property is 1.0, this will also be the height of the exported image in physical pixels. If not specified, will default to `plotly.io.config.default_height` scale: int or float or None The scale factor to use when exporting the figure. A scale factor larger than 1.0 will increase the image resolution with respect to the figure's layout pixel dimensions. Whereas as scale factor of less than 1.0 will decrease the image resolution. If not specified, will default to `plotly.io.config.default_scale` validate: bool True if the figure should be validated before being converted to an image, False otherwise. engine: str Image export engine to use: - "kaleido": Use Kaleido for image export - "orca": Use Orca for image export - "auto" (default): Use Kaleido if installed, otherwise use orca Returns ------- bytes The image data """ import plotly.io as pio return pio.to_image(self, *args, **kwargs) def write_image(self, *args, **kwargs): """ Convert a figure to a static image and write it to a file or writeable object Parameters ---------- file: str or writeable A string representing a local file path or a writeable object (e.g. a pathlib.Path object or an open file descriptor) format: str or None The desired image format. One of - 'png' - 'jpg' or 'jpeg' - 'webp' - 'svg' - 'pdf' - 'eps' (Requires the poppler library to be installed) If not specified and `file` is a string then this will default to the file extension. If not specified and `file` is not a string then this will default to `plotly.io.config.default_format` width: int or None The width of the exported image in layout pixels. If the `scale` property is 1.0, this will also be the width of the exported image in physical pixels. If not specified, will default to `plotly.io.config.default_width` height: int or None The height of the exported image in layout pixels. If the `scale` property is 1.0, this will also be the height of the exported image in physical pixels. If not specified, will default to `plotly.io.config.default_height` scale: int or float or None The scale factor to use when exporting the figure. A scale factor larger than 1.0 will increase the image resolution with respect to the figure's layout pixel dimensions. Whereas as scale factor of less than 1.0 will decrease the image resolution. If not specified, will default to `plotly.io.config.default_scale` validate: bool True if the figure should be validated before being converted to an image, False otherwise. engine: str Image export engine to use: - "kaleido": Use Kaleido for image export - "orca": Use Orca for image export - "auto" (default): Use Kaleido if installed, otherwise use orca Returns ------- None """ import plotly.io as pio return pio.write_image(self, *args, **kwargs) # Static helpers # -------------- @staticmethod def _is_dict_list(v): """ Return true of the input object is a list of dicts """ return isinstance(v, list) and len(v) > 0 and isinstance(v[0], dict) @staticmethod def _perform_update(plotly_obj, update_obj, overwrite=False): """ Helper to support the update() methods on :class:`BaseFigure` and :class:`BasePlotlyType` Parameters ---------- plotly_obj : BasePlotlyType|tuple[BasePlotlyType] Object to up updated update_obj : dict|list[dict]|tuple[dict] When ``plotly_obj`` is an instance of :class:`BaseFigure`, ``update_obj`` should be a dict When ``plotly_obj`` is a tuple of instances of :class:`BasePlotlyType`, ``update_obj`` should be a tuple or list of dicts """ from _plotly_utils.basevalidators import ( CompoundValidator, CompoundArrayValidator, ) if update_obj is None: # Nothing to do return elif isinstance(plotly_obj, BasePlotlyType): # Handle initializing subplot ids # ------------------------------- # This should be valid even if xaxis2 hasn't been initialized: # >>> layout.update(xaxis2={'title': 'xaxis 2'}) for key in update_obj: # special handling for missing keys that match _subplot_re_match if key not in plotly_obj and isinstance(plotly_obj, BaseLayoutType): # try _subplot_re_match match = plotly_obj._subplot_re_match(key) if match: # We need to create a subplotid object plotly_obj[key] = {} continue err = _check_path_in_prop_tree(plotly_obj, key, error_cast=ValueError) if err is not None: raise err # Convert update_obj to dict # -------------------------- if isinstance(update_obj, BasePlotlyType): update_obj = update_obj.to_plotly_json() # Process valid properties # ------------------------ for key in update_obj: val = update_obj[key] if overwrite: # Don't recurse and assign property as-is plotly_obj[key] = val continue validator = plotly_obj._get_prop_validator(key) if isinstance(validator, CompoundValidator) and isinstance(val, dict): # Update compound objects recursively # plotly_obj[key].update(val) BaseFigure._perform_update(plotly_obj[key], val) elif isinstance(validator, CompoundArrayValidator): if plotly_obj[key]: # plotly_obj has an existing non-empty array for key # In this case we merge val into the existing elements BaseFigure._perform_update(plotly_obj[key], val) # If update tuple is longer that current tuple, append the # extra elements to the end if isinstance(val, (list, tuple)) and len(val) > len( plotly_obj[key] ): plotly_obj[key] = plotly_obj[key] + tuple( val[len(plotly_obj[key]) :] ) else: # plotly_obj is an empty or uninitialized list for key # In this case we accept val as is plotly_obj[key] = val else: # Assign non-compound value plotly_obj[key] = val elif isinstance(plotly_obj, tuple): if len(update_obj) == 0: # Nothing to do return else: for i, plotly_element in enumerate(plotly_obj): if isinstance(update_obj, dict): if i in update_obj: update_element = update_obj[i] else: continue else: update_element = update_obj[i % len(update_obj)] BaseFigure._perform_update(plotly_element, update_element) else: raise ValueError( "Unexpected plotly object with type {typ}".format(typ=type(plotly_obj)) ) @staticmethod def _index_is(iterable, val): """ Return the index of a value in an iterable using object identity (not object equality as is the case for list.index) """ index_list = [i for i, curr_val in enumerate(iterable) if curr_val is val] if not index_list: raise ValueError("Invalid value") return index_list[0] def _make_axis_spanning_layout_object(self, direction, shape): """ Convert a shape drawn on a plot or a subplot into one whose yref or xref ends with " domain" and has coordinates so that the shape will seem to extend infinitely in that dimension. This is useful for drawing lines or boxes on a plot where one dimension of the shape will not move out of bounds when moving the plot's view. Note that the shape already added to the (sub)plot must have the corresponding axis reference referring to an actual axis (e.g., 'x', 'y2' etc. are accepted, but not 'paper'). This will be the case if the shape was added with "add_shape". Shape must have the x0, x1, y0, y1 fields already initialized. """ if direction == "vertical": # fix y points to top and bottom of subplot ref = "yref" elif direction == "horizontal": # fix x points to left and right of subplot ref = "xref" else: raise ValueError( "Bad direction: %s. Permissible values are 'vertical' and 'horizontal'." % (direction,) ) # set the ref to " domain" so that its size is based on the # axis's size shape[ref] += " domain" return shape def _process_multiple_axis_spanning_shapes( self, shape_args, row, col, shape_type, exclude_empty_subplots=True, annotation=None, **kwargs, ): """ Add a shape or multiple shapes and call _make_axis_spanning_layout_object on all the new shapes. """ if shape_type in ["vline", "vrect"]: direction = "vertical" elif shape_type in ["hline", "hrect"]: direction = "horizontal" else: raise ValueError( "Bad shape_type %s, needs to be one of 'vline', 'hline', 'vrect', 'hrect'" % (shape_type,) ) if (row is not None or col is not None) and (not self._has_subplots()): # this has no subplots to address, so we force row and col to be None row = None col = None n_shapes_before = len(self.layout["shapes"]) n_annotations_before = len(self.layout["annotations"]) # shapes are always added at the end of the tuple of shapes, so we see # how long the tuple is before the call and after the call, and adjust # the new shapes that were added at the end # extract annotation prefixed kwargs # annotation with extra parameters based on the annotation_position # argument and other annotation_ prefixed kwargs shape_kwargs, annotation_kwargs = shapeannotation.split_dict_by_key_prefix( kwargs, "annotation_" ) augmented_annotation = shapeannotation.axis_spanning_shape_annotation( annotation, shape_type, shape_args, annotation_kwargs ) self.add_shape( row=row, col=col, exclude_empty_subplots=exclude_empty_subplots, **_combine_dicts([shape_args, shape_kwargs]), ) if augmented_annotation is not None: self.add_annotation( augmented_annotation, row=row, col=col, exclude_empty_subplots=exclude_empty_subplots, yref=shape_kwargs.get("yref", "y"), ) # update xref and yref for the new shapes and annotations for layout_obj, n_layout_objs_before in zip( ["shapes", "annotations"], [n_shapes_before, n_annotations_before] ): n_layout_objs_after = len(self.layout[layout_obj]) if (n_layout_objs_after > n_layout_objs_before) and ( row is None and col is None ): # this was called intending to add to a single plot (and # self.add_{layout_obj} succeeded) # however, in the case of a single plot, xref and yref MAY not be # specified, IF they are not specified we specify them here so the following routines can work # (they need to append " domain" to xref or yref). If they are specified, we leave them alone. if self.layout[layout_obj][-1].xref is None: self.layout[layout_obj][-1].update(xref="x") if self.layout[layout_obj][-1].yref is None: self.layout[layout_obj][-1].update(yref="y") new_layout_objs = tuple( filter( lambda x: x is not None, [ self._make_axis_spanning_layout_object( direction, self.layout[layout_obj][n], ) for n in range(n_layout_objs_before, n_layout_objs_after) ], ) ) self.layout[layout_obj] = ( self.layout[layout_obj][:n_layout_objs_before] + new_layout_objs ) def add_vline( self, x, row="all", col="all", exclude_empty_subplots=True, annotation=None, **kwargs, ): self._process_multiple_axis_spanning_shapes( dict(type="line", x0=x, x1=x, y0=0, y1=1), row, col, "vline", exclude_empty_subplots=exclude_empty_subplots, annotation=annotation, **kwargs, ) return self add_vline.__doc__ = _axis_spanning_shapes_docstr("vline") def add_hline( self, y, row="all", col="all", exclude_empty_subplots=True, annotation=None, **kwargs, ): self._process_multiple_axis_spanning_shapes( dict( type="line", x0=0, x1=1, y0=y, y1=y, ), row, col, "hline", exclude_empty_subplots=exclude_empty_subplots, annotation=annotation, **kwargs, ) return self add_hline.__doc__ = _axis_spanning_shapes_docstr("hline") def add_vrect( self, x0, x1, row="all", col="all", exclude_empty_subplots=True, annotation=None, **kwargs, ): self._process_multiple_axis_spanning_shapes( dict(type="rect", x0=x0, x1=x1, y0=0, y1=1), row, col, "vrect", exclude_empty_subplots=exclude_empty_subplots, annotation=annotation, **kwargs, ) return self add_vrect.__doc__ = _axis_spanning_shapes_docstr("vrect") def add_hrect( self, y0, y1, row="all", col="all", exclude_empty_subplots=True, annotation=None, **kwargs, ): self._process_multiple_axis_spanning_shapes( dict(type="rect", x0=0, x1=1, y0=y0, y1=y1), row, col, "hrect", exclude_empty_subplots=exclude_empty_subplots, annotation=annotation, **kwargs, ) return self add_hrect.__doc__ = _axis_spanning_shapes_docstr("hrect") def _has_subplots(self): """Returns True if figure contains subplots, otherwise it contains a single plot and so this returns False.""" return self._grid_ref is not None def _subplot_not_empty(self, xref, yref, selector="all"): """ xref: string representing the axis. Objects in the plot will be checked for this xref (for layout objects) or xaxis (for traces) to determine if they lie in a certain subplot. yref: string representing the axis. Objects in the plot will be checked for this yref (for layout objects) or yaxis (for traces) to determine if they lie in a certain subplot. selector: can be "all" or an iterable containing some combination of "traces", "shapes", "annotations", "images". Only the presence of objects specified in selector will be checked. So if ["traces","shapes"] is passed then a plot we be considered non-empty if it contains traces or shapes. If bool(selector) returns False, no checking is performed and this function returns True. If selector is True, it is converted to "all". """ if not selector: # If nothing to select was specified then a subplot is always deemed non-empty return True if selector is True: selector = "all" if selector == "all": selector = ["traces", "shapes", "annotations", "images"] ret = False for s in selector: if s == "traces": obj = self.data xaxiskw = "xaxis" yaxiskw = "yaxis" elif s in ["shapes", "annotations", "images"]: obj = self.layout[s] xaxiskw = "xref" yaxiskw = "yref" else: obj = None if obj: ret |= any( t == (xref, yref) for t in [ # if a object exists but has no xaxis or yaxis keys, then it # is plotted with xaxis/xref 'x' and yaxis/yref 'y' ( "x" if d[xaxiskw] is None else d[xaxiskw], "y" if d[yaxiskw] is None else d[yaxiskw], ) for d in obj ] ) return ret def set_subplots(self, rows=None, cols=None, **make_subplots_args): """ Add subplots to this figure. If the figure already contains subplots, then this throws an error. Accepts any keyword arguments that plotly.subplots.make_subplots accepts. """ # rows, cols provided so that this can be called like # fig.set_subplots(2,3), say if rows is not None: make_subplots_args["rows"] = rows if cols is not None: make_subplots_args["cols"] = cols if self._has_subplots(): raise ValueError("This figure already has subplots.") return _subplots.make_subplots(figure=self, **make_subplots_args) class BasePlotlyType(object): """ BasePlotlyType is the base class for all objects in the trace, layout, and frame object hierarchies """ # ### Mapped (deprecated) properties ### # dict for deprecated property name (e.g. 'titlefont') to tuple # of relative path to new property (e.g. ('title', 'font') _mapped_properties = {} _parent_path_str = "" _path_str = "" _valid_props = set() def __init__(self, plotly_name, **kwargs): """ Construct a new BasePlotlyType Parameters ---------- plotly_name : str The lowercase name of the plotly object kwargs : dict Invalid props/values to raise on """ # ### _skip_invalid ## # If True, then invalid properties should be skipped, if False then # invalid properties will result in an exception self._skip_invalid = False self._validate = True # Validate inputs # --------------- self._process_kwargs(**kwargs) # Store params # ------------ self._plotly_name = plotly_name # Initialize properties # --------------------- # ### _compound_props ### # A dict from compound property names to compound objects self._compound_props = {} # ### _compound_array_props ### # A dict from compound array property names to tuples of compound # objects self._compound_array_props = {} # ### _orphan_props ### # A dict of properties for use while object has no parent. When # object has a parent, it requests its properties dict from its # parent and doesn't use this. self._orphan_props = {} # ### _parent ### # The parent of the object. May be another BasePlotlyType or it may # be a BaseFigure (as is the case for the Layout and Trace objects) self._parent = None # ### _change_callbacks ### # A dict from tuples of child property path tuples to lists # of callbacks that should be executed whenever any of these # properties is modified self._change_callbacks = {} # ### Backing property for backward compatible _validator property ## self.__validators = None # @property # def _validate(self): # fig = self.figure # if fig is None: # return True # else: # return fig._validate def _get_validator(self, prop): from .validator_cache import ValidatorCache return ValidatorCache.get_validator(self._path_str, prop) @property def _validators(self): """ Validators used to be stored in a private _validators property. This was eliminated when we switched to building validators on demand using the _get_validator method. This property returns a simple object that Returns ------- dict-like interface for accessing the object's validators """ obj = self if self.__validators is None: class ValidatorCompat(object): def __getitem__(self, item): return obj._get_validator(item) def __contains__(self, item): return obj.__contains__(item) def __iter__(self): return iter(obj) def items(self): return [(k, self[k]) for k in self] self.__validators = ValidatorCompat() return self.__validators def _process_kwargs(self, **kwargs): """ Process any extra kwargs that are not predefined as constructor params """ for k, v in kwargs.items(): err = _check_path_in_prop_tree(self, k, error_cast=ValueError) if err is None: # e.g. underscore kwargs like marker_line_color self[k] = v elif not self._validate: # Set extra property as-is self[k] = v elif not self._skip_invalid: raise err # No need to call _raise_on_invalid_property_error here, # because we have it set up so that the singular case of calling # __setitem__ will raise this. If _check_path_in_prop_tree # raised that in its travels, it will already be in the error # message. @property def plotly_name(self): """ The plotly name of the object Returns ------- str """ return self._plotly_name @property def _prop_descriptions(self): """ Formatted string containing all of this obejcts child properties and their descriptions Returns ------- str """ raise NotImplementedError @property def _props(self): """ Dictionary used to store this object properties. When the object has a parent, this dict is retreived from the parent. When the object does not have a parent, this dict is the object's `_orphan_props` property Note: Property will return None if the object has a parent and the object's properties have not been initialized using the `_init_props` method. Returns ------- dict|None """ if self.parent is None: # Use orphan data return self._orphan_props else: # Get data from parent's dict return self.parent._get_child_props(self) def _get_child_props(self, child): """ Return properties dict for child Parameters ---------- child : BasePlotlyType Returns ------- dict """ if self._props is None: # If this node's properties are uninitialized then so are its # child's return None else: # ### Child a compound property ### if child.plotly_name in self: from _plotly_utils.basevalidators import ( CompoundValidator, CompoundArrayValidator, ) validator = self._get_validator(child.plotly_name) if isinstance(validator, CompoundValidator): return self._props.get(child.plotly_name, None) # ### Child an element of a compound array property ### elif isinstance(validator, CompoundArrayValidator): children = self[child.plotly_name] child_ind = BaseFigure._index_is(children, child) assert child_ind is not None children_props = self._props.get(child.plotly_name, None) return ( children_props[child_ind] if children_props is not None and len(children_props) > child_ind else None ) # ### Invalid child ### else: raise ValueError("Invalid child with name: %s" % child.plotly_name) def _init_props(self): """ Ensure that this object's properties dict has been initialized. When the object has a parent, this ensures that the parent has an initialized properties dict with this object's plotly_name as a key. Returns ------- None """ # Ensure that _data is initialized. if self._props is not None: pass else: self._parent._init_child_props(self) def _init_child_props(self, child): """ Ensure that a properties dict has been initialized for a child object Parameters ---------- child : BasePlotlyType Returns ------- None """ # Init our own properties # ----------------------- self._init_props() # Child a compound property # ------------------------- if child.plotly_name in self._compound_props: if child.plotly_name not in self._props: self._props[child.plotly_name] = {} # Child an element of a compound array property # --------------------------------------------- elif child.plotly_name in self._compound_array_props: children = self._compound_array_props[child.plotly_name] child_ind = BaseFigure._index_is(children, child) assert child_ind is not None if child.plotly_name not in self._props: # Initialize list self._props[child.plotly_name] = [] # Make sure list is long enough for child children_list = self._props[child.plotly_name] while len(children_list) <= child_ind: children_list.append({}) # Invalid child # ------------- else: raise ValueError("Invalid child with name: %s" % child.plotly_name) def _get_child_prop_defaults(self, child): """ Return default properties dict for child Parameters ---------- child : BasePlotlyType Returns ------- dict """ if self._prop_defaults is None: # If this node's default properties are uninitialized then so are # its child's return None else: # ### Child a compound property ### if child.plotly_name in self._compound_props: return self._prop_defaults.get(child.plotly_name, None) # ### Child an element of a compound array property ### elif child.plotly_name in self._compound_array_props: children = self._compound_array_props[child.plotly_name] child_ind = BaseFigure._index_is(children, child) assert child_ind is not None children_props = self._prop_defaults.get(child.plotly_name, None) return ( children_props[child_ind] if children_props is not None and len(children_props) > child_ind else None ) # ### Invalid child ### else: raise ValueError("Invalid child with name: %s" % child.plotly_name) @property def _prop_defaults(self): """ Return default properties dict Returns ------- dict """ if self.parent is None: return None else: return self.parent._get_child_prop_defaults(self) def _get_prop_validator(self, prop): """ Return the validator associated with the specified property Parameters ---------- prop: str A property that exists in this object Returns ------- BaseValidator """ # Handle remapping # ---------------- if prop in self._mapped_properties: prop_path = self._mapped_properties[prop] plotly_obj = self[prop_path[:-1]] prop = prop_path[-1] else: prop_path = BaseFigure._str_to_dict_path(prop) plotly_obj = self[prop_path[:-1]] prop = prop_path[-1] # Return validator # ---------------- return plotly_obj._get_validator(prop) @property def parent(self): """ Return the object's parent, or None if the object has no parent Returns ------- BasePlotlyType|BaseFigure """ return self._parent @property def figure(self): """ Reference to the top-level Figure or FigureWidget that this object belongs to. None if the object does not belong to a Figure Returns ------- Union[BaseFigure, None] """ top_parent = self while top_parent is not None: if isinstance(top_parent, BaseFigure): break else: top_parent = top_parent.parent return top_parent # Magic Methods # ------------- def __reduce__(self): """ Custom implementation of reduce is used to support deep copying and pickling """ props = self.to_plotly_json() return (self.__class__, (props,)) def __getitem__(self, prop): """ Get item or nested item from object Parameters ---------- prop : str|tuple If prop is the name of a property of this object, then the property is returned. If prop is a nested property path string (e.g. 'foo[1].bar'), then a nested property is returned (e.g. obj['foo'][1]['bar']) If prop is a path tuple (e.g. ('foo', 1, 'bar')), then a nested property is returned (e.g. obj['foo'][1]['bar']). Returns ------- Any """ from _plotly_utils.basevalidators import ( CompoundValidator, CompoundArrayValidator, BaseDataValidator, ) # Normalize prop # -------------- # Convert into a property tuple orig_prop = prop prop = BaseFigure._str_to_dict_path(prop) # Handle remapping # ---------------- if prop and prop[0] in self._mapped_properties: prop = self._mapped_properties[prop[0]] + prop[1:] orig_prop = _remake_path_from_tuple(prop) # Handle scalar case # ------------------ # e.g. ('foo',) if len(prop) == 1: # Unwrap scalar tuple prop = prop[0] if prop not in self._valid_props: self._raise_on_invalid_property_error(_error_to_raise=PlotlyKeyError)( prop ) validator = self._get_validator(prop) if isinstance(validator, CompoundValidator): if self._compound_props.get(prop, None) is None: # Init compound objects self._compound_props[prop] = validator.data_class( _parent=self, plotly_name=prop ) # Update plotly_name value in case the validator applies # non-standard name (e.g. imagedefaults instead of image) self._compound_props[prop]._plotly_name = prop return validator.present(self._compound_props[prop]) elif isinstance(validator, (CompoundArrayValidator, BaseDataValidator)): if self._compound_array_props.get(prop, None) is None: # Init list of compound objects if self._props is not None: self._compound_array_props[prop] = [ validator.data_class(_parent=self) for _ in self._props.get(prop, []) ] else: self._compound_array_props[prop] = [] return validator.present(self._compound_array_props[prop]) elif self._props is not None and prop in self._props: return validator.present(self._props[prop]) elif self._prop_defaults is not None: return validator.present(self._prop_defaults.get(prop, None)) else: return None # Handle non-scalar case # ---------------------- # e.g. ('foo', 1), () else: err = _check_path_in_prop_tree(self, orig_prop, error_cast=PlotlyKeyError) if err is not None: raise err res = self for p in prop: res = res[p] return res def __contains__(self, prop): """ Determine whether object contains a property or nested property Parameters ---------- prop : str|tuple If prop is a simple string (e.g. 'foo'), then return true of the object contains an element named 'foo' If prop is a property path string (e.g. 'foo[0].bar'), then return true if the obejct contains the nested elements for each entry in the path string (e.g. 'bar' in obj['foo'][0]) If prop is a property path tuple (e.g. ('foo', 0, 'bar')), then return true if the object contains the nested elements for each entry in the path string (e.g. 'bar' in obj['foo'][0]) Returns ------- bool """ prop = BaseFigure._str_to_dict_path(prop) # Handle remapping if prop and prop[0] in self._mapped_properties: prop = self._mapped_properties[prop[0]] + prop[1:] obj = self for p in prop: if isinstance(p, int): if isinstance(obj, tuple) and 0 <= p < len(obj): obj = obj[p] else: return False else: if hasattr(obj, "_valid_props") and p in obj._valid_props: obj = obj[p] else: return False return True def __setitem__(self, prop, value): """ Parameters ---------- prop : str The name of a direct child of this object Note: Setting nested properties using property path string or property path tuples is not supported. value New property value Returns ------- None """ from _plotly_utils.basevalidators import ( CompoundValidator, CompoundArrayValidator, BaseDataValidator, ) # Normalize prop # -------------- # Convert into a property tuple orig_prop = prop prop = BaseFigure._str_to_dict_path(prop) # Handle empty case # ----------------- if len(prop) == 0: raise KeyError(orig_prop) # Handle remapping # ---------------- if prop[0] in self._mapped_properties: prop = self._mapped_properties[prop[0]] + prop[1:] # Handle scalar case # ------------------ # e.g. ('foo',) if len(prop) == 1: # ### Unwrap scalar tuple ### prop = prop[0] if self._validate: if prop not in self._valid_props: self._raise_on_invalid_property_error()(prop) # ### Get validator for this property ### validator = self._get_validator(prop) # ### Handle compound property ### if isinstance(validator, CompoundValidator): self._set_compound_prop(prop, value) # ### Handle compound array property ### elif isinstance(validator, (CompoundArrayValidator, BaseDataValidator)): self._set_array_prop(prop, value) # ### Handle simple property ### else: self._set_prop(prop, value) else: # Make sure properties dict is initialized self._init_props() if isinstance(value, BasePlotlyType): # Extract json from graph objects value = value.to_plotly_json() # Check for list/tuple of graph objects if ( isinstance(value, (list, tuple)) and value and isinstance(value[0], BasePlotlyType) ): value = [ v.to_plotly_json() if isinstance(v, BasePlotlyType) else v for v in value ] self._props[prop] = value # Remove any already constructed graph object so that it will be # reconstructed on property access self._compound_props.pop(prop, None) self._compound_array_props.pop(prop, None) # Handle non-scalar case # ---------------------- # e.g. ('foo', 1), () else: err = _check_path_in_prop_tree(self, orig_prop, error_cast=ValueError) if err is not None: raise err res = self for p in prop[:-1]: res = res[p] res._validate = self._validate res[prop[-1]] = value def __setattr__(self, prop, value): """ Parameters ---------- prop : str The name of a direct child of this object value New property value Returns ------- None """ if prop.startswith("_") or hasattr(self, prop) or prop in self._valid_props: # Let known properties and private properties through super(BasePlotlyType, self).__setattr__(prop, value) else: # Raise error on unknown public properties self._raise_on_invalid_property_error()(prop) def __iter__(self): """ Return an iterator over the object's properties """ res = list(self._valid_props) for prop in self._mapped_properties: res.append(prop) return iter(res) def __eq__(self, other): """ Test for equality To be considered equal, `other` must have the same type as this object and their `to_plotly_json` representaitons must be identical. Parameters ---------- other The object to compare against Returns ------- bool """ if not isinstance(other, self.__class__): # Require objects to be of the same plotly type return False else: # Compare plotly_json representations # Use _vals_equal instead of `==` to handle cases where # underlying dicts contain numpy arrays return BasePlotlyType._vals_equal( self._props if self._props is not None else {}, other._props if other._props is not None else {}, ) @staticmethod def _build_repr_for_class(props, class_name, parent_path_str=None): """ Helper to build representation string for a class Parameters ---------- class_name : str Name of the class being represented parent_path_str : str of None (default) Name of the class's parent package to display props : dict Properties to unpack into the constructor Returns ------- str The representation string """ from plotly.utils import ElidedPrettyPrinter if parent_path_str: class_name = parent_path_str + "." + class_name if len(props) == 0: repr_str = class_name + "()" else: pprinter = ElidedPrettyPrinter(threshold=200, width=120) pprint_res = pprinter.pformat(props) # pprint_res is indented by 1 space. Add extra 3 spaces for PEP8 # complaint indent body = " " + pprint_res[1:-1].replace("\n", "\n ") repr_str = class_name + "({\n " + body + "\n})" return repr_str def __repr__(self): """ Customize object representation when displayed in the terminal/notebook """ from _plotly_utils.basevalidators import LiteralValidator # Get all properties props = self._props if self._props is not None else {} # Remove literals (These can't be specified in the constructor) props = { p: v for p, v in props.items() if p in self._valid_props and not isinstance(self._get_validator(p), LiteralValidator) } # Elide template if "template" in props: props["template"] = "..." # Build repr string repr_str = BasePlotlyType._build_repr_for_class( props=props, class_name=self.__class__.__name__, parent_path_str=self._parent_path_str, ) return repr_str def _raise_on_invalid_property_error(self, _error_to_raise=None): """ Returns a function that raises informative exception when invalid property names are encountered. The _error_to_raise argument allows specifying the exception to raise, which is ValueError if None. Parameters ---------- args : list[str] List of property names that have already been determined to be invalid Raises ------ ValueError by default, or _error_to_raise if not None """ if _error_to_raise is None: _error_to_raise = ValueError def _ret(*args): invalid_props = args if invalid_props: if len(invalid_props) == 1: prop_str = "property" invalid_str = repr(invalid_props[0]) else: prop_str = "properties" invalid_str = repr(invalid_props) module_root = "plotly.graph_objs." if self._parent_path_str: full_obj_name = ( module_root + self._parent_path_str + "." + self.__class__.__name__ ) else: full_obj_name = module_root + self.__class__.__name__ guessed_prop = None if len(invalid_props) == 1: try: guessed_prop = find_closest_string( invalid_props[0], self._valid_props ) except Exception: pass guessed_prop_suggestion = "" if guessed_prop is not None: guessed_prop_suggestion = 'Did you mean "%s"?' % (guessed_prop,) raise _error_to_raise( "Invalid {prop_str} specified for object of type " "{full_obj_name}: {invalid_str}\n" "\n{guessed_prop_suggestion}\n" "\n Valid properties:\n" "{prop_descriptions}" "\n{guessed_prop_suggestion}\n".format( prop_str=prop_str, full_obj_name=full_obj_name, invalid_str=invalid_str, prop_descriptions=self._prop_descriptions, guessed_prop_suggestion=guessed_prop_suggestion, ) ) return _ret def update(self, dict1=None, overwrite=False, **kwargs): """ Update the properties of an object with a dict and/or with keyword arguments. This recursively updates the structure of the original object with the values in the input dict / keyword arguments. Parameters ---------- dict1 : dict Dictionary of properties to be updated overwrite: bool If True, overwrite existing properties. If False, apply updates to existing properties recursively, preserving existing properties that are not specified in the update operation. kwargs : Keyword/value pair of properties to be updated Returns ------- BasePlotlyType Updated plotly object """ if self.figure: with self.figure.batch_update(): BaseFigure._perform_update(self, dict1, overwrite=overwrite) BaseFigure._perform_update(self, kwargs, overwrite=overwrite) else: BaseFigure._perform_update(self, dict1, overwrite=overwrite) BaseFigure._perform_update(self, kwargs, overwrite=overwrite) return self def pop(self, key, *args): """ Remove the value associated with the specified key and return it Parameters ---------- key: str Property name dflt The default value to return if key was not found in object Returns ------- value The removed value that was previously associated with key Raises ------ KeyError If key is not in object and no dflt argument specified """ # Handle default if key not in self and args: return args[0] elif key in self: val = self[key] self[key] = None return val else: raise KeyError(key) @property def _in_batch_mode(self): """ True if the object belongs to a figure that is currently in batch mode Returns ------- bool """ return self.parent and self.parent._in_batch_mode def _set_prop(self, prop, val): """ Set the value of a simple property Parameters ---------- prop : str Name of a simple (non-compound, non-array) property val The new property value Returns ------- Any The coerced assigned value """ # val is Undefined # ---------------- if val is Undefined: # Do nothing return # Import value # ------------ validator = self._get_validator(prop) try: val = validator.validate_coerce(val) except ValueError as err: if self._skip_invalid: return else: raise err # val is None # ----------- if val is None: # Check if we should send null update if self._props and prop in self._props: # Remove property if not in batch mode if not self._in_batch_mode: self._props.pop(prop) # Send property update message self._send_prop_set(prop, val) # val is valid value # ------------------ else: # Make sure properties dict is initialized self._init_props() # Check whether the value is a change if prop not in self._props or not BasePlotlyType._vals_equal( self._props[prop], val ): # Set property value if not in batch mode if not self._in_batch_mode: self._props[prop] = val # Send property update message self._send_prop_set(prop, val) return val def _set_compound_prop(self, prop, val): """ Set the value of a compound property Parameters ---------- prop : str Name of a compound property val The new property value Returns ------- BasePlotlyType The coerced assigned object """ # val is Undefined # ---------------- if val is Undefined: # Do nothing return # Import value # ------------ validator = self._get_validator(prop) val = validator.validate_coerce(val, skip_invalid=self._skip_invalid) # Save deep copies of current and new states # ------------------------------------------ curr_val = self._compound_props.get(prop, None) if curr_val is not None: curr_dict_val = deepcopy(curr_val._props) else: curr_dict_val = None if val is not None: new_dict_val = deepcopy(val._props) else: new_dict_val = None # Update _props dict # ------------------ if not self._in_batch_mode: if not new_dict_val: if self._props and prop in self._props: self._props.pop(prop) else: self._init_props() self._props[prop] = new_dict_val # Send update if there was a change in value # ------------------------------------------ if not BasePlotlyType._vals_equal(curr_dict_val, new_dict_val): self._send_prop_set(prop, new_dict_val) # Reparent # -------- # ### Reparent new value and clear orphan data ### if isinstance(val, BasePlotlyType): val._parent = self val._orphan_props.clear() # ### Unparent old value and update orphan data ### if curr_val is not None: if curr_dict_val is not None: curr_val._orphan_props.update(curr_dict_val) curr_val._parent = None # Update _compound_props # ---------------------- self._compound_props[prop] = val return val def _set_array_prop(self, prop, val): """ Set the value of a compound property Parameters ---------- prop : str Name of a compound property val The new property value Returns ------- tuple[BasePlotlyType] The coerced assigned object """ # val is Undefined # ---------------- if val is Undefined: # Do nothing return # Import value # ------------ validator = self._get_validator(prop) val = validator.validate_coerce(val, skip_invalid=self._skip_invalid) # Save deep copies of current and new states # ------------------------------------------ curr_val = self._compound_array_props.get(prop, None) if curr_val is not None: curr_dict_vals = [deepcopy(cv._props) for cv in curr_val] else: curr_dict_vals = None if val is not None: new_dict_vals = [deepcopy(nv._props) for nv in val] else: new_dict_vals = None # Update _props dict # ------------------ if not self._in_batch_mode: if not new_dict_vals: if self._props and prop in self._props: self._props.pop(prop) else: self._init_props() self._props[prop] = new_dict_vals # Send update if there was a change in value # ------------------------------------------ if not BasePlotlyType._vals_equal(curr_dict_vals, new_dict_vals): self._send_prop_set(prop, new_dict_vals) # Reparent # -------- # ### Reparent new values and clear orphan data ### if val is not None: for v in val: v._orphan_props.clear() v._parent = self # ### Unparent old value and update orphan data ### if curr_val is not None: for cv, cv_dict in zip(curr_val, curr_dict_vals): if cv_dict is not None: cv._orphan_props.update(cv_dict) cv._parent = None # Update _compound_array_props # ---------------------------- self._compound_array_props[prop] = val return val def _send_prop_set(self, prop_path_str, val): """ Notify parent that a property has been set to a new value Parameters ---------- prop_path_str : str Property path string (e.g. 'foo[0].bar') of property that was set, relative to this object val New value for property. Either a simple value, a dict, or a tuple of dicts. This should *not* be a BasePlotlyType object. Returns ------- None """ raise NotImplementedError() def _prop_set_child(self, child, prop_path_str, val): """ Propagate property setting notification from child to parent Parameters ---------- child : BasePlotlyType Child object prop_path_str : str Property path string (e.g. 'foo[0].bar') of property that was set, relative to `child` val New value for property. Either a simple value, a dict, or a tuple of dicts. This should *not* be a BasePlotlyType object. Returns ------- None """ # Child is compound array property # -------------------------------- child_prop_val = getattr(self, child.plotly_name) if isinstance(child_prop_val, (list, tuple)): child_ind = BaseFigure._index_is(child_prop_val, child) obj_path = "{child_name}.{child_ind}.{prop}".format( child_name=child.plotly_name, child_ind=child_ind, prop=prop_path_str ) # Child is compound property # -------------------------- else: obj_path = "{child_name}.{prop}".format( child_name=child.plotly_name, prop=prop_path_str ) # Propagate to parent # ------------------- self._send_prop_set(obj_path, val) def _restyle_child(self, child, prop, val): """ Propagate _restyle_child to parent Note: This method must match the name and signature of the corresponding method on BaseFigure """ self._prop_set_child(child, prop, val) def _relayout_child(self, child, prop, val): """ Propagate _relayout_child to parent Note: This method must match the name and signature of the corresponding method on BaseFigure """ self._prop_set_child(child, prop, val) # Callbacks # --------- def _dispatch_change_callbacks(self, changed_paths): """ Execute the appropriate change callback functions given a set of changed property path tuples Parameters ---------- changed_paths : set[tuple[int|str]] Returns ------- None """ # Loop over registered callbacks # ------------------------------ for prop_path_tuples, callbacks in self._change_callbacks.items(): # ### Compute callback paths that changed ### common_paths = changed_paths.intersection(set(prop_path_tuples)) if common_paths: # #### Invoke callback #### callback_args = [self[cb_path] for cb_path in prop_path_tuples] for callback in callbacks: callback(self, *callback_args) def on_change(self, callback, *args, **kwargs): """ Register callback function to be called when certain properties or subproperties of this object are modified. Callback will be invoked whenever ANY of these properties is modified. Furthermore, the callback will only be invoked once even if multiple properties are modified during the same restyle / relayout / update operation. Parameters ---------- callback : function Function that accepts 1 + len(`args`) parameters. First parameter is this object. Second through last parameters are the property / subpropery values referenced by args. args : list[str|tuple[int|str]] List of property references where each reference may be one of: 1) A property name string (e.g. 'foo') for direct properties 2) A property path string (e.g. 'foo[0].bar') for subproperties 3) A property path tuple (e.g. ('foo', 0, 'bar')) for subproperties append : bool True if callback should be appended to previously registered callback on the same properties, False if callback should replace previously registered callbacks on the same properties. Defaults to False. Examples -------- Register callback that prints out the range extents of the xaxis and yaxis whenever either either of them changes. >>> import plotly.graph_objects as go >>> fig = go.Figure(go.Scatter(x=[1, 2], y=[1, 0])) >>> fig.layout.on_change( ... lambda obj, xrange, yrange: print("%s-%s" % (xrange, yrange)), ... ('xaxis', 'range'), ('yaxis', 'range')) Returns ------- None """ # Warn if object not descendent of a figure # ----------------------------------------- if not self.figure: class_name = self.__class__.__name__ msg = """ {class_name} object is not a descendant of a Figure. on_change callbacks are not supported in this case. """.format( class_name=class_name ) raise ValueError(msg) # Validate args not empty # ----------------------- if len(args) == 0: raise ValueError("At least one change property must be specified") # Validate args # ------------- invalid_args = [arg for arg in args if arg not in self] if invalid_args: raise ValueError("Invalid property specification(s): %s" % invalid_args) # Process append option # --------------------- append = kwargs.get("append", False) # Normalize args to path tuples # ----------------------------- arg_tuples = tuple([BaseFigure._str_to_dict_path(a) for a in args]) # Initialize callbacks list # ------------------------- # Initialize an empty callbacks list if there are no previously # defined callbacks for this collection of args, or if append is False if arg_tuples not in self._change_callbacks or not append: self._change_callbacks[arg_tuples] = [] # Register callback # ----------------- self._change_callbacks[arg_tuples].append(callback) def to_plotly_json(self): """ Return plotly JSON representation of object as a Python dict Returns ------- dict """ return deepcopy(self._props if self._props is not None else {}) @staticmethod def _vals_equal(v1, v2): """ Recursive equality function that handles nested dicts / tuples / lists that contain numpy arrays. v1 First value to compare v2 Second value to compare Returns ------- bool True if v1 and v2 are equal, False otherwise """ np = get_module("numpy", should_load=False) if np is not None and ( isinstance(v1, np.ndarray) or isinstance(v2, np.ndarray) ): return np.array_equal(v1, v2) elif isinstance(v1, (list, tuple)): # Handle recursive equality on lists and tuples return ( isinstance(v2, (list, tuple)) and len(v1) == len(v2) and all(BasePlotlyType._vals_equal(e1, e2) for e1, e2 in zip(v1, v2)) ) elif isinstance(v1, dict): # Handle recursive equality on dicts return ( isinstance(v2, dict) and set(v1.keys()) == set(v2.keys()) and all(BasePlotlyType._vals_equal(v1[k], v2[k]) for k in v1) ) else: return v1 == v2 class BaseLayoutHierarchyType(BasePlotlyType): """ Base class for all types in the layout hierarchy """ @property def _parent_path_str(self): pass def __init__(self, plotly_name, **kwargs): super(BaseLayoutHierarchyType, self).__init__(plotly_name, **kwargs) def _send_prop_set(self, prop_path_str, val): if self.parent: # ### Inform parent of relayout operation ### self.parent._relayout_child(self, prop_path_str, val) class BaseLayoutType(BaseLayoutHierarchyType): """ Base class for the layout type. The Layout class itself is a code-generated subclass. """ # Dynamic properties # ------------------ # Unlike all other plotly types, BaseLayoutType has dynamic properties. # These are used when a layout has multiple instances of subplot types # (xaxis2, yaxis3, geo4, etc.) # # The base version of each suplot type is defined in the schema and code # generated. So the Layout subclass has statically defined properties # for xaxis, yaxis, geo, ternary, and scene. But, we need to dynamically # generated properties/validators as needed for xaxis2, yaxis3, etc. @property def _subplotid_validators(self): """ dict of validator classes for each subplot type Returns ------- dict """ raise NotImplementedError() def _subplot_re_match(self, prop): raise NotImplementedError() def __init__(self, plotly_name, **kwargs): """ Construct a new BaseLayoutType object Parameters ---------- plotly_name : str Name of the object (should always be 'layout') kwargs : dict[str, any] Properties that were not recognized by the Layout subclass. These are subplot identifiers (xaxis2, geo4, etc.) or they are invalid properties. """ # Validate inputs # --------------- assert plotly_name == "layout" # Call superclass constructor # --------------------------- super(BaseLayoutHierarchyType, self).__init__(plotly_name) # Initialize _subplotid_props # --------------------------- # This is a set storing the names of the layout's dynamic subplot # properties self._subplotid_props = set() # Process kwargs # -------------- self._process_kwargs(**kwargs) def _process_kwargs(self, **kwargs): """ Process any extra kwargs that are not predefined as constructor params """ unknown_kwargs = { k: v for k, v in kwargs.items() if not self._subplot_re_match(k) } super(BaseLayoutHierarchyType, self)._process_kwargs(**unknown_kwargs) subplot_kwargs = {k: v for k, v in kwargs.items() if self._subplot_re_match(k)} for prop, value in subplot_kwargs.items(): self._set_subplotid_prop(prop, value) def _set_subplotid_prop(self, prop, value): """ Set a subplot property on the layout Parameters ---------- prop : str A valid subplot property value Subplot value """ # Get regular expression match # ---------------------------- # Note: we already tested that match exists in the constructor match = self._subplot_re_match(prop) subplot_prop = match.group(1) suffix_digit = int(match.group(2)) # Validate suffix digit # --------------------- if suffix_digit == 0: raise TypeError( "Subplot properties may only be suffixed by an " "integer >= 1\n" "Received {k}".format(k=prop) ) # Handle suffix_digit == 1 # ------------------------ # In this case we remove suffix digit (e.g. xaxis1 -> xaxis) if suffix_digit == 1: prop = subplot_prop # Construct and add validator # --------------------------- if prop not in self._valid_props: self._valid_props.add(prop) # Import value # ------------ # Use the standard _set_compound_prop method to # validate/coerce/import subplot value. This must be called AFTER # the validator instance is added to self._validators above. self._set_compound_prop(prop, value) self._subplotid_props.add(prop) def _strip_subplot_suffix_of_1(self, prop): """ Strip the suffix for subplot property names that have a suffix of 1. All other properties are returned unchanged e.g. 'xaxis1' -> 'xaxis' Parameters ---------- prop : str|tuple Returns ------- str|tuple """ # Let parent handle non-scalar cases # ---------------------------------- # e.g. ('xaxis', 'range') or 'xaxis.range' prop_tuple = BaseFigure._str_to_dict_path(prop) if len(prop_tuple) != 1 or not isinstance(prop_tuple[0], str): return prop else: # Unwrap to scalar string prop = prop_tuple[0] # Handle subplot suffix digit of 1 # -------------------------------- # Remove digit of 1 from subplot id (e.g.. xaxis1 -> xaxis) match = self._subplot_re_match(prop) if match: subplot_prop = match.group(1) suffix_digit = int(match.group(2)) if subplot_prop and suffix_digit == 1: prop = subplot_prop return prop def _get_prop_validator(self, prop): """ Custom _get_prop_validator that handles subplot properties """ prop = self._strip_subplot_suffix_of_1(prop) return super(BaseLayoutHierarchyType, self)._get_prop_validator(prop) def __getattr__(self, prop): """ Custom __getattr__ that handles dynamic subplot properties """ prop = self._strip_subplot_suffix_of_1(prop) if prop != "_subplotid_props" and prop in self._subplotid_props: validator = self._get_validator(prop) return validator.present(self._compound_props[prop]) else: return super(BaseLayoutHierarchyType, self).__getattribute__(prop) def __getitem__(self, prop): """ Custom __getitem__ that handles dynamic subplot properties """ prop = self._strip_subplot_suffix_of_1(prop) return super(BaseLayoutHierarchyType, self).__getitem__(prop) def __contains__(self, prop): """ Custom __contains__ that handles dynamic subplot properties """ prop = self._strip_subplot_suffix_of_1(prop) return super(BaseLayoutHierarchyType, self).__contains__(prop) def __setitem__(self, prop, value): """ Custom __setitem__ that handles dynamic subplot properties """ # Convert prop to prop tuple # -------------------------- prop_tuple = BaseFigure._str_to_dict_path(prop) if len(prop_tuple) != 1 or not isinstance(prop_tuple[0], str): # Let parent handle non-scalar non-string cases super(BaseLayoutHierarchyType, self).__setitem__(prop, value) return else: # Unwrap prop tuple prop = prop_tuple[0] # Check for subplot assignment # ---------------------------- match = self._subplot_re_match(prop) if match is None: # Set as ordinary property super(BaseLayoutHierarchyType, self).__setitem__(prop, value) else: # Set as subplotid property self._set_subplotid_prop(prop, value) def __setattr__(self, prop, value): """ Custom __setattr__ that handles dynamic subplot properties """ # Check for subplot assignment # ---------------------------- match = self._subplot_re_match(prop) if match is None: # Set as ordinary property super(BaseLayoutHierarchyType, self).__setattr__(prop, value) else: # Set as subplotid property self._set_subplotid_prop(prop, value) def __dir__(self): """ Custom __dir__ that handles dynamic subplot properties """ # Include any active subplot values return list(super(BaseLayoutHierarchyType, self).__dir__()) + sorted( self._subplotid_props ) class BaseTraceHierarchyType(BasePlotlyType): """ Base class for all types in the trace hierarchy """ def __init__(self, plotly_name, **kwargs): super(BaseTraceHierarchyType, self).__init__(plotly_name, **kwargs) def _send_prop_set(self, prop_path_str, val): if self.parent: # ### Inform parent of restyle operation ### self.parent._restyle_child(self, prop_path_str, val) class BaseTraceType(BaseTraceHierarchyType): """ Base class for the all trace types. Specific trace type classes (Scatter, Bar, etc.) are code generated as subclasses of this class. """ def __init__(self, plotly_name, **kwargs): super(BaseTraceHierarchyType, self).__init__(plotly_name, **kwargs) # Initialize callback function lists # ---------------------------------- # ### Callbacks to be called on hover ### self._hover_callbacks = [] # ### Callbacks to be called on unhover ### self._unhover_callbacks = [] # ### Callbacks to be called on click ### self._click_callbacks = [] # ### Callbacks to be called on selection ### self._select_callbacks = [] # ### Callbacks to be called on deselect ### self._deselect_callbacks = [] # ### Trace index in figure ### self._trace_ind = None # uid # --- # All trace types must have a top-level UID @property def uid(self): raise NotImplementedError @uid.setter def uid(self, val): raise NotImplementedError # Hover # ----- def on_hover(self, callback, append=False): """ Register function to be called when the user hovers over one or more points in this trace Note: Callbacks will only be triggered when the trace belongs to a instance of plotly.graph_objs.FigureWidget and it is displayed in an ipywidget context. Callbacks will not be triggered on figures that are displayed using plot/iplot. Parameters ---------- callback Callable function that accepts 3 arguments - this trace - plotly.callbacks.Points object - plotly.callbacks.InputDeviceState object append : bool If False (the default), this callback replaces any previously defined on_hover callbacks for this trace. If True, this callback is appended to the list of any previously defined callbacks. Returns ------- None Examples -------- >>> import plotly.graph_objects as go >>> from plotly.callbacks import Points, InputDeviceState >>> points, state = Points(), InputDeviceState() >>> def hover_fn(trace, points, state): ... inds = points.point_inds ... # Do something >>> trace = go.Scatter(x=[1, 2], y=[3, 0]) >>> trace.on_hover(hover_fn) Note: The creation of the `points` and `state` objects is optional, it's simply a convenience to help the text editor perform completion on the arguments inside `hover_fn` """ if not append: del self._hover_callbacks[:] if callback: self._hover_callbacks.append(callback) def _dispatch_on_hover(self, points, state): """ Dispatch points and device state all all hover callbacks """ for callback in self._hover_callbacks: callback(self, points, state) # Unhover # ------- def on_unhover(self, callback, append=False): """ Register function to be called when the user unhovers away from one or more points in this trace. Note: Callbacks will only be triggered when the trace belongs to a instance of plotly.graph_objs.FigureWidget and it is displayed in an ipywidget context. Callbacks will not be triggered on figures that are displayed using plot/iplot. Parameters ---------- callback Callable function that accepts 3 arguments - this trace - plotly.callbacks.Points object - plotly.callbacks.InputDeviceState object append : bool If False (the default), this callback replaces any previously defined on_unhover callbacks for this trace. If True, this callback is appended to the list of any previously defined callbacks. Returns ------- None Examples -------- >>> import plotly.graph_objects as go >>> from plotly.callbacks import Points, InputDeviceState >>> points, state = Points(), InputDeviceState() >>> def unhover_fn(trace, points, state): ... inds = points.point_inds ... # Do something >>> trace = go.Scatter(x=[1, 2], y=[3, 0]) >>> trace.on_unhover(unhover_fn) Note: The creation of the `points` and `state` objects is optional, it's simply a convenience to help the text editor perform completion on the arguments inside `unhover_fn` """ if not append: del self._unhover_callbacks[:] if callback: self._unhover_callbacks.append(callback) def _dispatch_on_unhover(self, points, state): """ Dispatch points and device state all all hover callbacks """ for callback in self._unhover_callbacks: callback(self, points, state) # Click # ----- def on_click(self, callback, append=False): """ Register function to be called when the user clicks on one or more points in this trace. Note: Callbacks will only be triggered when the trace belongs to a instance of plotly.graph_objs.FigureWidget and it is displayed in an ipywidget context. Callbacks will not be triggered on figures that are displayed using plot/iplot. Parameters ---------- callback Callable function that accepts 3 arguments - this trace - plotly.callbacks.Points object - plotly.callbacks.InputDeviceState object append : bool If False (the default), this callback replaces any previously defined on_click callbacks for this trace. If True, this callback is appended to the list of any previously defined callbacks. Returns ------- None Examples -------- >>> import plotly.graph_objects as go >>> from plotly.callbacks import Points, InputDeviceState >>> points, state = Points(), InputDeviceState() >>> def click_fn(trace, points, state): ... inds = points.point_inds ... # Do something >>> trace = go.Scatter(x=[1, 2], y=[3, 0]) >>> trace.on_click(click_fn) Note: The creation of the `points` and `state` objects is optional, it's simply a convenience to help the text editor perform completion on the arguments inside `click_fn` """ if not append: del self._click_callbacks[:] if callback: self._click_callbacks.append(callback) def _dispatch_on_click(self, points, state): """ Dispatch points and device state all all hover callbacks """ for callback in self._click_callbacks: callback(self, points, state) # Select # ------ def on_selection(self, callback, append=False): """ Register function to be called when the user selects one or more points in this trace. Note: Callbacks will only be triggered when the trace belongs to a instance of plotly.graph_objs.FigureWidget and it is displayed in an ipywidget context. Callbacks will not be triggered on figures that are displayed using plot/iplot. Parameters ---------- callback Callable function that accepts 4 arguments - this trace - plotly.callbacks.Points object - plotly.callbacks.BoxSelector or plotly.callbacks.LassoSelector append : bool If False (the default), this callback replaces any previously defined on_selection callbacks for this trace. If True, this callback is appended to the list of any previously defined callbacks. Returns ------- None Examples -------- >>> import plotly.graph_objects as go >>> from plotly.callbacks import Points >>> points = Points() >>> def selection_fn(trace, points, selector): ... inds = points.point_inds ... # Do something >>> trace = go.Scatter(x=[1, 2], y=[3, 0]) >>> trace.on_selection(selection_fn) Note: The creation of the `points` object is optional, it's simply a convenience to help the text editor perform completion on the `points` arguments inside `selection_fn` """ if not append: del self._select_callbacks[:] if callback: self._select_callbacks.append(callback) def _dispatch_on_selection(self, points, selector): """ Dispatch points and selector info to selection callbacks """ if "selectedpoints" in self: # Update the selectedpoints property, which will notify all views # of the selection change. This is a special case because no # restyle event is emitted by plotly.js on selection events # even though these events update the selectedpoints property. self.selectedpoints = points.point_inds for callback in self._select_callbacks: callback(self, points, selector) # deselect # -------- def on_deselect(self, callback, append=False): """ Register function to be called when the user deselects points in this trace using doubleclick. Note: Callbacks will only be triggered when the trace belongs to a instance of plotly.graph_objs.FigureWidget and it is displayed in an ipywidget context. Callbacks will not be triggered on figures that are displayed using plot/iplot. Parameters ---------- callback Callable function that accepts 3 arguments - this trace - plotly.callbacks.Points object append : bool If False (the default), this callback replaces any previously defined on_deselect callbacks for this trace. If True, this callback is appended to the list of any previously defined callbacks. Returns ------- None Examples -------- >>> import plotly.graph_objects as go >>> from plotly.callbacks import Points >>> points = Points() >>> def deselect_fn(trace, points): ... inds = points.point_inds ... # Do something >>> trace = go.Scatter(x=[1, 2], y=[3, 0]) >>> trace.on_deselect(deselect_fn) Note: The creation of the `points` object is optional, it's simply a convenience to help the text editor perform completion on the `points` arguments inside `selection_fn` """ if not append: del self._deselect_callbacks[:] if callback: self._deselect_callbacks.append(callback) def _dispatch_on_deselect(self, points): """ Dispatch points info to deselection callbacks """ if "selectedpoints" in self: # Update the selectedpoints property, which will notify all views # of the selection change. This is a special case because no # restyle event is emitted by plotly.js on selection events # even though these events update the selectedpoints property. self.selectedpoints = None for callback in self._deselect_callbacks: callback(self, points) class BaseFrameHierarchyType(BasePlotlyType): """ Base class for all types in the trace hierarchy """ def __init__(self, plotly_name, **kwargs): super(BaseFrameHierarchyType, self).__init__(plotly_name, **kwargs) def _send_prop_set(self, prop_path_str, val): # Note: Frames are not supported by FigureWidget, and updates are not # propagated to parents pass def _restyle_child(self, child, key_path_str, val): # Note: Frames are not supported by FigureWidget, and updates are not # propagated to parents pass def on_change(self, callback, *args): raise NotImplementedError("Change callbacks are not supported on Frames") def _get_child_props(self, child): """ Return the properties dict for a child trace or child layout Note: this method must match the name/signature of one on BasePlotlyType Parameters ---------- child : BaseTraceType | BaseLayoutType Returns ------- dict """ # Try to find index of child as a trace # ------------------------------------- try: trace_index = BaseFigure._index_is(self.data, child) except ValueError: trace_index = None # Child is a trace # ---------------- if trace_index is not None: if "data" in self._props: return self._props["data"][trace_index] else: return None # Child is the layout # ------------------- elif child is self.layout: return self._props.get("layout", None) # Unknown child # ------------- else: raise ValueError("Unrecognized child: %s" % child) plotly-5.15.0+dfsg1.orig/plotly/dashboard_objs.py0000644000175000017500000000017614440365260021265 0ustar noahfxnoahfxfrom __future__ import absolute_import from _plotly_future_ import _chart_studio_error _chart_studio_error("dashboard_objs") plotly-5.15.0+dfsg1.orig/plotly/io/0000755000175000017500000000000014440366051016351 5ustar noahfxnoahfxplotly-5.15.0+dfsg1.orig/plotly/io/orca.py0000644000175000017500000000020214440365261017643 0ustar noahfxnoahfxfrom ._orca import ( ensure_server, shutdown_server, validate_executable, reset_status, config, status, ) plotly-5.15.0+dfsg1.orig/plotly/io/_sg_scraper.py0000644000175000017500000000626714440365261021227 0ustar noahfxnoahfx# This module defines an image scraper for sphinx-gallery # https://sphinx-gallery.github.io/ # which can be used by projects using plotly in their documentation. import inspect, os import plotly from glob import glob import shutil plotly.io.renderers.default = "sphinx_gallery_png" def plotly_sg_scraper(block, block_vars, gallery_conf, **kwargs): """Scrape Plotly figures for galleries of examples using sphinx-gallery. Examples should use ``plotly.io.show()`` to display the figure with the custom sphinx_gallery renderer. Since the sphinx_gallery renderer generates both html and static png files, we simply crawl these files and give them the appropriate path. Parameters ---------- block : tuple A tuple containing the (label, content, line_number) of the block. block_vars : dict Dict of block variables. gallery_conf : dict Contains the configuration of Sphinx-Gallery **kwargs : dict Additional keyword arguments to pass to :meth:`~matplotlib.figure.Figure.savefig`, e.g. ``format='svg'``. The ``format`` kwarg in particular is used to set the file extension of the output file (currently only 'png' and 'svg' are supported). Returns ------- rst : str The ReSTructuredText that will be rendered to HTML containing the images. Notes ----- Add this function to the image scrapers """ examples_dir = os.path.dirname(block_vars["src_file"]) pngs = sorted(glob(os.path.join(examples_dir, "*.png"))) htmls = sorted(glob(os.path.join(examples_dir, "*.html"))) image_path_iterator = block_vars["image_path_iterator"] image_names = list() seen = set() for html, png in zip(htmls, pngs): if png not in seen: seen |= set(png) this_image_path_png = next(image_path_iterator) this_image_path_html = os.path.splitext(this_image_path_png)[0] + ".html" image_names.append(this_image_path_html) shutil.move(png, this_image_path_png) shutil.move(html, this_image_path_html) # Use the `figure_rst` helper function to generate rST for image files return figure_rst(image_names, gallery_conf["src_dir"]) def figure_rst(figure_list, sources_dir): """Generate RST for a list of PNG filenames. Depending on whether we have one or more figures, we use a single rst call to 'image' or a horizontal list. Parameters ---------- figure_list : list List of strings of the figures' absolute paths. sources_dir : str absolute path of Sphinx documentation sources Returns ------- images_rst : str rst code to embed the images in the document """ figure_paths = [ os.path.relpath(figure_path, sources_dir).replace(os.sep, "/").lstrip("/") for figure_path in figure_list ] images_rst = "" if not figure_paths: return images_rst figure_name = figure_paths[0] ext = os.path.splitext(figure_name)[1] figure_path = os.path.join("images", os.path.basename(figure_name)) images_rst = SINGLE_HTML % figure_path return images_rst SINGLE_HTML = """ .. raw:: html :file: %s """ plotly-5.15.0+dfsg1.orig/plotly/io/__init__.py0000644000175000017500000000316214440365261020466 0ustar noahfxnoahfxfrom _plotly_utils.importers import relative_import import sys from typing import TYPE_CHECKING if sys.version_info < (3, 7) or TYPE_CHECKING: from ._kaleido import to_image, write_image, full_figure_for_development from . import orca, kaleido from . import json from ._json import to_json, from_json, read_json, write_json from ._templates import templates, to_templated from ._html import to_html, write_html from ._renderers import renderers, show from . import base_renderers __all__ = [ "to_image", "write_image", "orca", "json", "to_json", "from_json", "read_json", "write_json", "templates", "to_templated", "to_html", "write_html", "renderers", "show", "base_renderers", "full_figure_for_development", ] else: __all__, __getattr__, __dir__ = relative_import( __name__, [".orca", ".kaleido", ".json", ".base_renderers"], [ "._kaleido.to_image", "._kaleido.write_image", "._kaleido.full_figure_for_development", "._json.to_json", "._json.from_json", "._json.read_json", "._json.write_json", "._templates.templates", "._templates.to_templated", "._html.to_html", "._html.write_html", "._renderers.renderers", "._renderers.show", ], ) # Set default template (for < 3.7 this is done in ploty/__init__.py) from plotly.io import templates templates._default = "plotly" plotly-5.15.0+dfsg1.orig/plotly/io/_utils.py0000644000175000017500000000271614440365261020232 0ustar noahfxnoahfxfrom __future__ import absolute_import import plotly import plotly.graph_objs as go from plotly.offline import get_plotlyjs_version def validate_coerce_fig_to_dict(fig, validate): from plotly.basedatatypes import BaseFigure if isinstance(fig, BaseFigure): fig_dict = fig.to_dict() elif isinstance(fig, dict): if validate: # This will raise an exception if fig is not a valid plotly figure fig_dict = plotly.graph_objs.Figure(fig).to_plotly_json() else: fig_dict = fig elif hasattr(fig, "to_plotly_json"): fig_dict = fig.to_plotly_json() else: raise ValueError( """ The fig parameter must be a dict or Figure. Received value of type {typ}: {v}""".format( typ=type(fig), v=fig ) ) return fig_dict def validate_coerce_output_type(output_type): if output_type == "Figure" or output_type == go.Figure: cls = go.Figure elif output_type == "FigureWidget" or ( hasattr(go, "FigureWidget") and output_type == go.FigureWidget ): cls = go.FigureWidget else: raise ValueError( """ Invalid output type: {output_type} Must be one of: 'Figure', 'FigureWidget'""" ) return cls def plotly_cdn_url(cdn_ver=get_plotlyjs_version()): """Return a valid plotly CDN url.""" return "https://cdn.plot.ly/plotly-{cdn_ver}.min.js".format( cdn_ver=cdn_ver, ) plotly-5.15.0+dfsg1.orig/plotly/io/kaleido.py0000644000175000017500000000006314440365261020334 0ustar noahfxnoahfxfrom ._kaleido import to_image, write_image, scope plotly-5.15.0+dfsg1.orig/plotly/io/_templates.py0000644000175000017500000003545014440365261021071 0ustar noahfxnoahfxfrom __future__ import absolute_import import textwrap import pkgutil import copy import os import json from functools import reduce try: from math import gcd except ImportError: # Python 2 from fractions import gcd # Create Lazy sentinal object to indicate that a template should be loaded # on-demand from package_data Lazy = object() # Templates configuration class # ----------------------------- class TemplatesConfig(object): """ Singleton object containing the current figure templates (aka themes) """ def __init__(self): # Initialize properties dict self._templates = {} # Initialize built-in templates default_templates = [ "ggplot2", "seaborn", "simple_white", "plotly", "plotly_white", "plotly_dark", "presentation", "xgridoff", "ygridoff", "gridon", "none", ] for template_name in default_templates: self._templates[template_name] = Lazy self._validator = None self._default = None # ### Magic methods ### # Make this act as a dict of templates def __len__(self): return len(self._templates) def __contains__(self, item): return item in self._templates def __iter__(self): return iter(self._templates) def __getitem__(self, item): if isinstance(item, str): template_names = item.split("+") else: template_names = [item] templates = [] for template_name in template_names: template = self._templates[template_name] if template is Lazy: from plotly.graph_objs.layout import Template if template_name == "none": # "none" is a special built-in named template that applied no defaults template = Template(data_scatter=[{}]) self._templates[template_name] = template else: # Load template from package data path = os.path.join( "package_data", "templates", template_name + ".json" ) template_str = pkgutil.get_data("plotly", path).decode("utf-8") template_dict = json.loads(template_str) template = Template(template_dict, _validate=False) self._templates[template_name] = template templates.append(self._templates[template_name]) return self.merge_templates(*templates) def __setitem__(self, key, value): self._templates[key] = self._validate(value) def __delitem__(self, key): # Remove template del self._templates[key] # Check if we need to remove it as the default if self._default == key: self._default = None def _validate(self, value): if not self._validator: from plotly.validators.layout import TemplateValidator self._validator = TemplateValidator() return self._validator.validate_coerce(value) def keys(self): return self._templates.keys() def items(self): return self._templates.items() def update(self, d={}, **kwargs): """ Update one or more templates from a dict or from input keyword arguments. Parameters ---------- d: dict Dictionary from template names to new template values. kwargs Named argument value pairs where the name is a template name and the value is a new template value. """ for k, v in dict(d, **kwargs).items(): self[k] = v # ### Properties ### @property def default(self): """ The name of the default template, or None if no there is no default If not None, the default template is automatically applied to all figures during figure construction if no explicit template is specified. The names of available templates may be retrieved with: >>> import plotly.io as pio >>> list(pio.templates) Returns ------- str """ return self._default @default.setter def default(self, value): # Validate value # Could be a Template object, the key of a registered template, # Or a string containing the names of multiple templates joined on # '+' characters self._validate(value) self._default = value def __repr__(self): return """\ Templates configuration ----------------------- Default template: {default} Available templates: {available} """.format( default=repr(self.default), available=self._available_templates_str() ) def _available_templates_str(self): """ Return nicely wrapped string representation of all available template names """ available = "\n".join( textwrap.wrap( repr(list(self)), width=79 - 8, initial_indent=" " * 8, subsequent_indent=" " * 9, ) ) return available def merge_templates(self, *args): """ Merge a collection of templates into a single combined template. Templates are process from left to right so if multiple templates specify the same propery, the right-most template will take precedence. Parameters ---------- args: list of Template Zero or more template objects (or dicts with compatible properties) Returns ------- template: A combined template object Examples -------- >>> pio.templates.merge_templates( ... go.layout.Template(layout={'font': {'size': 20}}), ... go.layout.Template(data={'scatter': [{'mode': 'markers'}]}), ... go.layout.Template(layout={'font': {'family': 'Courier'}})) layout.Template({ 'data': {'scatter': [{'mode': 'markers', 'type': 'scatter'}]}, 'layout': {'font': {'family': 'Courier', 'size': 20}} }) """ if args: return reduce(self._merge_2_templates, args) else: from plotly.graph_objs.layout import Template return Template() def _merge_2_templates(self, template1, template2): """ Helper function for merge_templates that merges exactly two templates Parameters ---------- template1: Template template2: Template Returns ------- Template: merged template """ # Validate/copy input templates result = self._validate(template1) other = self._validate(template2) # Cycle traces for trace_type in result.data: result_traces = result.data[trace_type] other_traces = other.data[trace_type] if result_traces and other_traces: lcm = ( len(result_traces) * len(other_traces) // gcd(len(result_traces), len(other_traces)) ) # Cycle result traces result.data[trace_type] = result_traces * (lcm // len(result_traces)) # Cycle other traces other.data[trace_type] = other_traces * (lcm // len(other_traces)) # Perform update result.update(other) return result # Make config a singleton object # ------------------------------ templates = TemplatesConfig() del TemplatesConfig # Template utilities # ------------------ def walk_push_to_template(fig_obj, template_obj, skip): """ Move style properties from fig_obj to template_obj. Parameters ---------- fig_obj: plotly.basedatatypes.BasePlotlyType template_obj: plotly.basedatatypes.BasePlotlyType skip: set of str Set of names of properties to skip """ from _plotly_utils.basevalidators import ( CompoundValidator, CompoundArrayValidator, is_array, ) for prop in list(fig_obj._props): if prop == "template" or prop in skip: # Avoid infinite recursion continue fig_val = fig_obj[prop] template_val = template_obj[prop] validator = fig_obj._get_validator(prop) if isinstance(validator, CompoundValidator): walk_push_to_template(fig_val, template_val, skip) if not fig_val._props: # Check if we can remove prop itself fig_obj[prop] = None elif isinstance(validator, CompoundArrayValidator) and fig_val: template_elements = list(template_val) template_element_names = [el.name for el in template_elements] template_propdefaults = template_obj[prop[:-1] + "defaults"] for fig_el in fig_val: element_name = fig_el.name if element_name: # No properties are skipped inside a named array element skip = set() if fig_el.name in template_element_names: item_index = template_element_names.index(fig_el.name) template_el = template_elements[item_index] walk_push_to_template(fig_el, template_el, skip) else: template_el = fig_el.__class__() walk_push_to_template(fig_el, template_el, skip) template_elements.append(template_el) template_element_names.append(fig_el.name) # Restore element name # since it was pushed to template above fig_el.name = element_name else: walk_push_to_template(fig_el, template_propdefaults, skip) template_obj[prop] = template_elements elif not validator.array_ok or not is_array(fig_val): # Move property value from figure to template template_obj[prop] = fig_val try: fig_obj[prop] = None except ValueError: # Property cannot be set to None, move on. pass def to_templated(fig, skip=("title", "text")): """ Return a copy of a figure where all styling properties have been moved into the figure's template. The template property of the resulting figure may then be used to set the default styling of other figures. Parameters ---------- fig Figure object or dict representing a figure skip A collection of names of properties to skip when moving properties to the template. Defaults to ('title', 'text') so that the text of figure titles, axis titles, and annotations does not become part of the template Examples -------- Imports >>> import plotly.graph_objs as go >>> import plotly.io as pio Construct a figure with large courier text >>> fig = go.Figure(layout={'title': 'Figure Title', ... 'font': {'size': 20, 'family': 'Courier'}, ... 'template':"none"}) >>> fig # doctest: +NORMALIZE_WHITESPACE Figure({ 'data': [], 'layout': {'font': {'family': 'Courier', 'size': 20}, 'template': '...', 'title': {'text': 'Figure Title'}} }) Convert to a figure with a template. Note how the 'font' properties have been moved into the template property. >>> templated_fig = pio.to_templated(fig) >>> templated_fig.layout.template layout.Template({ 'layout': {'font': {'family': 'Courier', 'size': 20}} }) >>> templated_fig Figure({ 'data': [], 'layout': {'template': '...', 'title': {'text': 'Figure Title'}} }) Next create a new figure with this template >>> fig2 = go.Figure(layout={ ... 'title': 'Figure 2 Title', ... 'template': templated_fig.layout.template}) >>> fig2.layout.template layout.Template({ 'layout': {'font': {'family': 'Courier', 'size': 20}} }) The default font in fig2 will now be size 20 Courier. Next, register as a named template... >>> pio.templates['large_courier'] = templated_fig.layout.template and specify this template by name when constructing a figure. >>> go.Figure(layout={ ... 'title': 'Figure 3 Title', ... 'template': 'large_courier'}) # doctest: +ELLIPSIS Figure(...) Finally, set this as the default template to be applied to all new figures >>> pio.templates.default = 'large_courier' >>> fig = go.Figure(layout={'title': 'Figure 4 Title'}) >>> fig.layout.template layout.Template({ 'layout': {'font': {'family': 'Courier', 'size': 20}} }) Returns ------- go.Figure """ # process fig from plotly.basedatatypes import BaseFigure from plotly.graph_objs import Figure if not isinstance(fig, BaseFigure): fig = Figure(fig) # Process skip if not skip: skip = set() else: skip = set(skip) # Always skip uids skip.add("uid") # Initialize templated figure with deep copy of input figure templated_fig = copy.deepcopy(fig) # Handle layout walk_push_to_template( templated_fig.layout, templated_fig.layout.template.layout, skip=skip ) # Handle traces trace_type_indexes = {} for trace in list(templated_fig.data): template_index = trace_type_indexes.get(trace.type, 0) # Extend template traces if necessary template_traces = list(templated_fig.layout.template.data[trace.type]) while len(template_traces) <= template_index: # Append empty trace template_traces.append(trace.__class__()) # Get corresponding template trace template_trace = template_traces[template_index] # Perform push properties to template walk_push_to_template(trace, template_trace, skip=skip) # Update template traces in templated_fig templated_fig.layout.template.data[trace.type] = template_traces # Update trace_type_indexes trace_type_indexes[trace.type] = template_index + 1 # Remove useless trace arrays any_non_empty = False for trace_type in templated_fig.layout.template.data: traces = templated_fig.layout.template.data[trace_type] is_empty = [trace.to_plotly_json() == {"type": trace_type} for trace in traces] if all(is_empty): templated_fig.layout.template.data[trace_type] = None else: any_non_empty = True # Check if we can remove the data altogether key if not any_non_empty: templated_fig.layout.template.data = None return templated_fig plotly-5.15.0+dfsg1.orig/plotly/io/_base_renderers.py0000644000175000017500000006427114440365261022061 0ustar noahfxnoahfxfrom __future__ import absolute_import import base64 import json import webbrowser import inspect import os from os.path import isdir from plotly import utils, optional_imports from plotly.io import to_json, to_image, write_image, write_html from plotly.io._orca import ensure_server from plotly.io._utils import plotly_cdn_url from plotly.offline.offline import _get_jconfig, get_plotlyjs from plotly.tools import return_figure_from_figure_or_data ipython_display = optional_imports.get_module("IPython.display") IPython = optional_imports.get_module("IPython") try: from http.server import BaseHTTPRequestHandler, HTTPServer except ImportError: # Python 2.7 from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer class BaseRenderer(object): """ Base class for all renderers """ def activate(self): pass def __repr__(self): try: init_sig = inspect.signature(self.__init__) init_args = list(init_sig.parameters.keys()) except AttributeError: # Python 2.7 argspec = inspect.getargspec(self.__init__) init_args = [a for a in argspec.args if a != "self"] return "{cls}({attrs})\n{doc}".format( cls=self.__class__.__name__, attrs=", ".join("{}={!r}".format(k, self.__dict__[k]) for k in init_args), doc=self.__doc__, ) def __hash__(self): # Constructor args fully define uniqueness return hash(repr(self)) class MimetypeRenderer(BaseRenderer): """ Base class for all mime type renderers """ def to_mimebundle(self, fig_dict): raise NotImplementedError() class JsonRenderer(MimetypeRenderer): """ Renderer to display figures as JSON hierarchies. This renderer is compatible with JupyterLab and VSCode. mime type: 'application/json' """ def to_mimebundle(self, fig_dict): value = json.loads(to_json(fig_dict, validate=False, remove_uids=False)) return {"application/json": value} # Plotly mimetype class PlotlyRenderer(MimetypeRenderer): """ Renderer to display figures using the plotly mime type. This renderer is compatible with JupyterLab (using the @jupyterlab/plotly-extension), VSCode, and nteract. mime type: 'application/vnd.plotly.v1+json' """ def __init__(self, config=None): self.config = dict(config) if config else {} def to_mimebundle(self, fig_dict): config = _get_jconfig(self.config) if config: fig_dict["config"] = config json_compatible_fig_dict = json.loads( to_json(fig_dict, validate=False, remove_uids=False) ) return {"application/vnd.plotly.v1+json": json_compatible_fig_dict} # Static Image class ImageRenderer(MimetypeRenderer): """ Base class for all static image renderers """ def __init__( self, mime_type, b64_encode=False, format=None, width=None, height=None, scale=None, engine="auto", ): self.mime_type = mime_type self.b64_encode = b64_encode self.format = format self.width = width self.height = height self.scale = scale self.engine = engine def to_mimebundle(self, fig_dict): image_bytes = to_image( fig_dict, format=self.format, width=self.width, height=self.height, scale=self.scale, validate=False, engine=self.engine, ) if self.b64_encode: image_str = base64.b64encode(image_bytes).decode("utf8") else: image_str = image_bytes.decode("utf8") return {self.mime_type: image_str} class PngRenderer(ImageRenderer): """ Renderer to display figures as static PNG images. This renderer requires either the kaleido package or the orca command-line utility and is broadly compatible across IPython environments (classic Jupyter Notebook, JupyterLab, QtConsole, VSCode, PyCharm, etc) and nbconvert targets (HTML, PDF, etc.). mime type: 'image/png' """ def __init__(self, width=None, height=None, scale=None, engine="auto"): super(PngRenderer, self).__init__( mime_type="image/png", b64_encode=True, format="png", width=width, height=height, scale=scale, engine=engine, ) class SvgRenderer(ImageRenderer): """ Renderer to display figures as static SVG images. This renderer requires either the kaleido package or the orca command-line utility and is broadly compatible across IPython environments (classic Jupyter Notebook, JupyterLab, QtConsole, VSCode, PyCharm, etc) and nbconvert targets (HTML, PDF, etc.). mime type: 'image/svg+xml' """ def __init__(self, width=None, height=None, scale=None, engine="auto"): super(SvgRenderer, self).__init__( mime_type="image/svg+xml", b64_encode=False, format="svg", width=width, height=height, scale=scale, engine=engine, ) class JpegRenderer(ImageRenderer): """ Renderer to display figures as static JPEG images. This renderer requires either the kaleido package or the orca command-line utility and is broadly compatible across IPython environments (classic Jupyter Notebook, JupyterLab, QtConsole, VSCode, PyCharm, etc) and nbconvert targets (HTML, PDF, etc.). mime type: 'image/jpeg' """ def __init__(self, width=None, height=None, scale=None, engine="auto"): super(JpegRenderer, self).__init__( mime_type="image/jpeg", b64_encode=True, format="jpg", width=width, height=height, scale=scale, engine=engine, ) class PdfRenderer(ImageRenderer): """ Renderer to display figures as static PDF images. This renderer requires either the kaleido package or the orca command-line utility and is compatible with JupyterLab and the LaTeX-based nbconvert export to PDF. mime type: 'application/pdf' """ def __init__(self, width=None, height=None, scale=None, engine="auto"): super(PdfRenderer, self).__init__( mime_type="application/pdf", b64_encode=True, format="pdf", width=width, height=height, scale=scale, engine=engine, ) # HTML # Build script to set global PlotlyConfig object. This must execute before # plotly.js is loaded. _window_plotly_config = """\ window.PlotlyConfig = {MathJaxConfig: 'local'};""" _mathjax_config = """\ if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}""" class HtmlRenderer(MimetypeRenderer): """ Base class for all HTML mime type renderers mime type: 'text/html' """ def __init__( self, connected=False, full_html=False, requirejs=True, global_init=False, config=None, auto_play=False, post_script=None, animation_opts=None, ): self.config = dict(config) if config else {} self.auto_play = auto_play self.connected = connected self.global_init = global_init self.requirejs = requirejs self.full_html = full_html self.animation_opts = animation_opts self.post_script = post_script def activate(self): if self.global_init: if not ipython_display: raise ValueError( "The {cls} class requires ipython but it is not installed".format( cls=self.__class__.__name__ ) ) if not self.requirejs: raise ValueError("global_init is only supported with requirejs=True") if self.connected: # Connected so we configure requirejs with the plotly CDN script = """\ """.format( win_config=_window_plotly_config, mathjax_config=_mathjax_config, plotly_cdn=plotly_cdn_url().rstrip(".js"), ) else: # If not connected then we embed a copy of the plotly.js # library in the notebook script = """\ """.format( script=get_plotlyjs(), win_config=_window_plotly_config, mathjax_config=_mathjax_config, ) ipython_display.display_html(script, raw=True) def to_mimebundle(self, fig_dict): from plotly.io import to_html if self.requirejs: include_plotlyjs = "require" include_mathjax = False elif self.connected: include_plotlyjs = "cdn" include_mathjax = "cdn" else: include_plotlyjs = True include_mathjax = "cdn" # build post script post_script = [ """ var gd = document.getElementById('{plot_id}'); var x = new MutationObserver(function (mutations, observer) {{ var display = window.getComputedStyle(gd).display; if (!display || display === 'none') {{ console.log([gd, 'removed!']); Plotly.purge(gd); observer.disconnect(); }} }}); // Listen for the removal of the full notebook cells var notebookContainer = gd.closest('#notebook-container'); if (notebookContainer) {{ x.observe(notebookContainer, {childList: true}); }} // Listen for the clearing of the current output cell var outputEl = gd.closest('.output'); if (outputEl) {{ x.observe(outputEl, {childList: true}); }} """ ] # Add user defined post script if self.post_script: if not isinstance(self.post_script, (list, tuple)): post_script.append(self.post_script) else: post_script.extend(self.post_script) html = to_html( fig_dict, config=self.config, auto_play=self.auto_play, include_plotlyjs=include_plotlyjs, include_mathjax=include_mathjax, post_script=post_script, full_html=self.full_html, animation_opts=self.animation_opts, default_width="100%", default_height=525, validate=False, ) return {"text/html": html} class NotebookRenderer(HtmlRenderer): """ Renderer to display interactive figures in the classic Jupyter Notebook. This renderer is also useful for notebooks that will be converted to HTML using nbconvert/nbviewer as it will produce standalone HTML files that include interactive figures. This renderer automatically performs global notebook initialization when activated. mime type: 'text/html' """ def __init__( self, connected=False, config=None, auto_play=False, post_script=None, animation_opts=None, ): super(NotebookRenderer, self).__init__( connected=connected, full_html=False, requirejs=True, global_init=True, config=config, auto_play=auto_play, post_script=post_script, animation_opts=animation_opts, ) class KaggleRenderer(HtmlRenderer): """ Renderer to display interactive figures in Kaggle Notebooks. Same as NotebookRenderer but with connected=True so that the plotly.js bundle is loaded from a CDN rather than being embedded in the notebook. This renderer is enabled by default when running in a Kaggle notebook. mime type: 'text/html' """ def __init__( self, config=None, auto_play=False, post_script=None, animation_opts=None ): super(KaggleRenderer, self).__init__( connected=True, full_html=False, requirejs=True, global_init=True, config=config, auto_play=auto_play, post_script=post_script, animation_opts=animation_opts, ) class AzureRenderer(HtmlRenderer): """ Renderer to display interactive figures in Azure Notebooks. Same as NotebookRenderer but with connected=True so that the plotly.js bundle is loaded from a CDN rather than being embedded in the notebook. This renderer is enabled by default when running in an Azure notebook. mime type: 'text/html' """ def __init__( self, config=None, auto_play=False, post_script=None, animation_opts=None ): super(AzureRenderer, self).__init__( connected=True, full_html=False, requirejs=True, global_init=True, config=config, auto_play=auto_play, post_script=post_script, animation_opts=animation_opts, ) class ColabRenderer(HtmlRenderer): """ Renderer to display interactive figures in Google Colab Notebooks. This renderer is enabled by default when running in a Colab notebook. mime type: 'text/html' """ def __init__( self, config=None, auto_play=False, post_script=None, animation_opts=None ): super(ColabRenderer, self).__init__( connected=True, full_html=True, requirejs=False, global_init=False, config=config, auto_play=auto_play, post_script=post_script, animation_opts=animation_opts, ) class IFrameRenderer(MimetypeRenderer): """ Renderer to display interactive figures using an IFrame. HTML representations of Figures are saved to an `iframe_figures/` directory and iframe HTML elements that reference these files are inserted into the notebook. With this approach, neither plotly.js nor the figure data are embedded in the notebook, so this is a good choice for notebooks that contain so many large figures that basic operations (like saving and opening) become very slow. Notebooks using this renderer will display properly when exported to HTML as long as the `iframe_figures/` directory is placed in the same directory as the exported html file. Note that the HTML files in `iframe_figures/` are numbered according to the IPython cell execution count and so they will start being overwritten each time the kernel is restarted. This directory may be deleted whenever the kernel is restarted and it will be automatically recreated. mime type: 'text/html' """ def __init__( self, config=None, auto_play=False, post_script=None, animation_opts=None, include_plotlyjs=True, html_directory="iframe_figures", ): self.config = config self.auto_play = auto_play self.post_script = post_script self.animation_opts = animation_opts self.include_plotlyjs = include_plotlyjs self.html_directory = html_directory def to_mimebundle(self, fig_dict): from plotly.io import write_html # Make iframe size slightly larger than figure size to avoid # having iframe have its own scroll bar. iframe_buffer = 20 layout = fig_dict.get("layout", {}) if layout.get("width", False): iframe_width = str(layout["width"] + iframe_buffer) + "px" else: iframe_width = "100%" if layout.get("height", False): iframe_height = layout["height"] + iframe_buffer else: iframe_height = str(525 + iframe_buffer) + "px" # Build filename using ipython cell number filename = self.build_filename() # Make directory for try: os.makedirs(self.html_directory) except OSError as error: if not isdir(self.html_directory): raise write_html( fig_dict, filename, config=self.config, auto_play=self.auto_play, include_plotlyjs=self.include_plotlyjs, include_mathjax="cdn", auto_open=False, post_script=self.post_script, animation_opts=self.animation_opts, default_width="100%", default_height=525, validate=False, ) # Build IFrame iframe_html = """\ """.format( width=iframe_width, height=iframe_height, src=self.build_url(filename) ) return {"text/html": iframe_html} def build_filename(self): ip = IPython.get_ipython() if IPython else None try: cell_number = list(ip.history_manager.get_tail(1))[0][1] + 1 if ip else 0 except Exception: cell_number = 0 return "{dirname}/figure_{cell_number}.html".format( dirname=self.html_directory, cell_number=cell_number ) def build_url(self, filename): return filename class CoCalcRenderer(IFrameRenderer): _render_count = 0 def build_filename(self): filename = "{dirname}/figure_{render_count}.html".format( dirname=self.html_directory, render_count=CoCalcRenderer._render_count ) CoCalcRenderer._render_count += 1 return filename def build_url(self, filename): return "{filename}?fullscreen=kiosk".format(filename=filename) class ExternalRenderer(BaseRenderer): """ Base class for external renderers. ExternalRenderer subclasses do not display figures inline in a notebook environment, but render figures by some external means (e.g. a separate browser tab). Unlike MimetypeRenderer subclasses, ExternalRenderer subclasses are not invoked when a figure is asked to display itself in the notebook. Instead, they are invoked when the plotly.io.show function is called on a figure. """ def render(self, fig): raise NotImplementedError() def open_html_in_browser(html, using=None, new=0, autoraise=True): """ Display html in a web browser without creating a temp file. Instantiates a trivial http server and uses the webbrowser module to open a URL to retrieve html from that server. Parameters ---------- html: str HTML string to display using, new, autoraise: See docstrings in webbrowser.get and webbrowser.open """ if isinstance(html, str): html = html.encode("utf8") browser = None if using is None: browser = webbrowser.get(None) else: if not isinstance(using, tuple): using = (using,) for browser_key in using: try: browser = webbrowser.get(browser_key) if browser is not None: break except webbrowser.Error: pass if browser is None: raise ValueError("Can't locate a browser with key in " + str(using)) class OneShotRequestHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() bufferSize = 1024 * 1024 for i in range(0, len(html), bufferSize): self.wfile.write(html[i : i + bufferSize]) def log_message(self, format, *args): # Silence stderr logging pass server = HTTPServer(("127.0.0.1", 0), OneShotRequestHandler) browser.open( "http://127.0.0.1:%s" % server.server_port, new=new, autoraise=autoraise ) server.handle_request() class BrowserRenderer(ExternalRenderer): """ Renderer to display interactive figures in an external web browser. This renderer will open a new browser window or tab when the plotly.io.show function is called on a figure. This renderer has no ipython/jupyter dependencies and is a good choice for use in environments that do not support the inline display of interactive figures. mime type: 'text/html' """ def __init__( self, config=None, auto_play=False, using=None, new=0, autoraise=True, post_script=None, animation_opts=None, ): self.config = config self.auto_play = auto_play self.using = using self.new = new self.autoraise = autoraise self.post_script = post_script self.animation_opts = animation_opts def render(self, fig_dict): from plotly.io import to_html html = to_html( fig_dict, config=self.config, auto_play=self.auto_play, include_plotlyjs=True, include_mathjax="cdn", post_script=self.post_script, full_html=True, animation_opts=self.animation_opts, default_width="100%", default_height="100%", validate=False, ) open_html_in_browser(html, self.using, self.new, self.autoraise) class DatabricksRenderer(ExternalRenderer): def __init__( self, config=None, auto_play=False, post_script=None, animation_opts=None, include_plotlyjs="cdn", ): self.config = config self.auto_play = auto_play self.post_script = post_script self.animation_opts = animation_opts self.include_plotlyjs = include_plotlyjs self._displayHTML = None @property def displayHTML(self): import inspect if self._displayHTML is None: for frame in inspect.getouterframes(inspect.currentframe()): global_names = set(frame.frame.f_globals) # Check for displayHTML plus a few others to reduce chance of a false # hit. if all(v in global_names for v in ["displayHTML", "display", "spark"]): self._displayHTML = frame.frame.f_globals["displayHTML"] break if self._displayHTML is None: raise EnvironmentError( """ Unable to detect the Databricks displayHTML function. The 'databricks' renderer is only supported when called from within the Databricks notebook environment.""" ) return self._displayHTML def render(self, fig_dict): from plotly.io import to_html html = to_html( fig_dict, config=self.config, auto_play=self.auto_play, include_plotlyjs=self.include_plotlyjs, include_mathjax="cdn", post_script=self.post_script, full_html=True, animation_opts=self.animation_opts, default_width="100%", default_height="100%", validate=False, ) # displayHTML is a Databricks notebook built-in function self.displayHTML(html) class SphinxGalleryHtmlRenderer(HtmlRenderer): def __init__( self, connected=True, config=None, auto_play=False, post_script=None, animation_opts=None, ): super(SphinxGalleryHtmlRenderer, self).__init__( connected=connected, full_html=False, requirejs=False, global_init=False, config=config, auto_play=auto_play, post_script=post_script, animation_opts=animation_opts, ) def to_mimebundle(self, fig_dict): from plotly.io import to_html if self.requirejs: include_plotlyjs = "require" include_mathjax = False elif self.connected: include_plotlyjs = "cdn" include_mathjax = "cdn" else: include_plotlyjs = True include_mathjax = "cdn" html = to_html( fig_dict, config=self.config, auto_play=self.auto_play, include_plotlyjs=include_plotlyjs, include_mathjax=include_mathjax, full_html=self.full_html, animation_opts=self.animation_opts, default_width="100%", default_height=525, validate=False, ) return {"text/html": html} class SphinxGalleryOrcaRenderer(ExternalRenderer): def render(self, fig_dict): stack = inspect.stack() # Name of script from which plot function was called is retrieved try: filename = stack[3].filename # let's hope this is robust... except: # python 2 filename = stack[3][1] filename_root, _ = os.path.splitext(filename) filename_html = filename_root + ".html" filename_png = filename_root + ".png" figure = return_figure_from_figure_or_data(fig_dict, True) _ = write_html(fig_dict, file=filename_html, include_plotlyjs="cdn") try: write_image(figure, filename_png) except (ValueError, ImportError): raise ImportError( "orca and psutil are required to use the `sphinx-gallery-orca` renderer. " "See https://plotly.com/python/static-image-export/ for instructions on " "how to install orca. Alternatively, you can use the `sphinx-gallery` " "renderer (note that png thumbnails can only be generated with " "the `sphinx-gallery-orca` renderer)." ) plotly-5.15.0+dfsg1.orig/plotly/io/_html.py0000644000175000017500000005061714440365261020041 0ustar noahfxnoahfximport uuid import os from pathlib import Path import webbrowser from _plotly_utils.optional_imports import get_module from plotly.io._utils import validate_coerce_fig_to_dict, plotly_cdn_url from plotly.offline.offline import _get_jconfig, get_plotlyjs from plotly import utils _json = get_module("json") # Build script to set global PlotlyConfig object. This must execute before # plotly.js is loaded. _window_plotly_config = """\ """ _mathjax_config = """\ """ def to_html( fig, config=None, auto_play=True, include_plotlyjs=True, include_mathjax=False, post_script=None, full_html=True, animation_opts=None, default_width="100%", default_height="100%", validate=True, div_id=None, ): """ Convert a figure to an HTML string representation. Parameters ---------- fig: Figure object or dict representing a figure config: dict or None (default None) Plotly.js figure config options auto_play: bool (default=True) Whether to automatically start the animation sequence on page load if the figure contains frames. Has no effect if the figure does not contain frames. include_plotlyjs: bool or string (default True) Specifies how the plotly.js library is included/loaded in the output div string. If True, a script tag containing the plotly.js source code (~3MB) is included in the output. HTML files generated with this option are fully self-contained and can be used offline. If 'cdn', a script tag that references the plotly.js CDN is included in the output. The url used is versioned to match the bundled plotly.js. HTML files generated with this option are about 3MB smaller than those generated with include_plotlyjs=True, but they require an active internet connection in order to load the plotly.js library. If 'directory', a script tag is included that references an external plotly.min.js bundle that is assumed to reside in the same directory as the HTML file. If 'require', Plotly.js is loaded using require.js. This option assumes that require.js is globally available and that it has been globally configured to know how to find Plotly.js as 'plotly'. This option is not advised when full_html=True as it will result in a non-functional html file. If a string that ends in '.js', a script tag is included that references the specified path. This approach can be used to point the resulting HTML file to an alternative CDN or local bundle. If False, no script tag referencing plotly.js is included. This is useful when the resulting div string will be placed inside an HTML document that already loads plotly.js. This option is not advised when full_html=True as it will result in a non-functional html file. include_mathjax: bool or string (default False) Specifies how the MathJax.js library is included in the output html div string. MathJax is required in order to display labels with LaTeX typesetting. If False, no script tag referencing MathJax.js will be included in the output. If 'cdn', a script tag that references a MathJax CDN location will be included in the output. HTML div strings generated with this option will be able to display LaTeX typesetting as long as internet access is available. If a string that ends in '.js', a script tag is included that references the specified path. This approach can be used to point the resulting HTML div string to an alternative CDN. post_script: str or list or None (default None) JavaScript snippet(s) to be included in the resulting div just after plot creation. The string(s) may include '{plot_id}' placeholders that will then be replaced by the `id` of the div element that the plotly.js figure is associated with. One application for this script is to install custom plotly.js event handlers. full_html: bool (default True) If True, produce a string containing a complete HTML document starting with an tag. If False, produce a string containing a single