diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css new file mode 100644 index 000000000..9ffc70804 --- /dev/null +++ b/docs/source/_static/custom.css @@ -0,0 +1,158 @@ +/* from pyqtgraph*/ + +.bd-sidebar .nav li > a > code { + white-space: nowrap; +} + +.bd-sidebar .nav li > a > code:before { + content:'('; +} + +.bd-sidebar .nav li > a > code:after { + content:')'; +} + +.bd-sidebar .nav li > a { + font-family: "no-parens", sans-serif; +} + +/* Retrieved from https://codepen.io/jonneal/pen/bXLEdB (MIT) + It replaces (, ) with a zero-width font. This version is lighter than + the original font from Adobe. +*/ +@font-face { + font-family: no-parens; + src: url("data:application/x-font-woff;base64,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"); + unicode-range: U+0028, U+0029; +} + +/* Colors from: + +Wong, B. Points of view: Color blindness. +Nat Methods 8, 441 (2011). https://doi.org/10.1038/nmeth.1618 +*/ + +/* If the active version has the name "dev", style it orange */ +#version_switcher_button[data-active-version-name*="dev"] { + background-color: #E69F00; + border-color: #E69F00; + color: white; +} + +/* green for `stable` */ +#version_switcher_button[data-active-version-name*="stable"] { + background-color: #009E73; + border-color: #009E73; + color: white; +} + +/* red for `old` */ +#version_switcher_button:not([data-active-version-name*="stable"]):not([data-active-version-name*="dev"]):not([data-active-version-name*="pull"]) { + background-color: #980F0F; + border-color: #980F0F; + color: white; +} + +/* Main index page overview cards */ + +.sd-card { + background: #fff; + border-radius: 0; + padding: 30px 10px 20px 10px; + margin: 10px 0px; +} + +.sd-card .sd-card-header { + text-align: center; +} + +.sd-card .sd-card-header .sd-card-text { + margin: 0px; +} + +.sd-card .sd-card-img-top { + height: 52px; + width: 52px; + margin-left: auto; + margin-right: auto; +} + +.sd-card .sd-card-header { + border: none; + background-color:white; + color: #150458 !important; + font-size: var(--pst-font-size-h5); + font-weight: bold; + padding: 2.5rem 0rem 0.5rem 0rem; + border-bottom: none !important; +} + +.sd-card .sd-card-footer { + border: none; + background-color:white; + border-top: none !important; +} + +.sd-card .sd-card-footer .sd-card-text{ + max-width: 220px; + margin-left: auto; + margin-right: auto; +} + +.custom-button { + background-color:#DCDCDC; + border: none; + color: #484848; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 0.9rem; + border-radius: 0.5rem; + max-width: 120px; + padding: 0.5rem 0rem; +} + +.custom-button a { + color: #484848; +} + +.custom-button p { + margin-top: 0; + margin-bottom: 0rem; + color: #484848; +} + +/* Dark theme tweaking + +Matplotlib images are in png and inverted while other output +types are assumed to be normal images. + +*/ +html[data-theme=dark] img[src*='.svg']:not(.only-dark):not(.dark-light) { + filter: brightness(0.8) invert(0.82) contrast(1.2); + background: unset +} + +html[data-theme=dark] .MathJax_SVG * { + fill: var(--pst-color-text-base); +} + +/* Main index page overview cards */ + +html[data-theme=dark] .sd-card { + background-color:var(--pst-color-background); + border: none +} + +html[data-theme=dark] .sd-shadow-sm { + box-shadow: 0 .1rem 0.5rem rgba(250, 250, 250, .2) !important +} + +html[data-theme=dark] .sd-card .sd-card-header { + background-color:var(--pst-color-background); + color: #150458 !important; +} + +html[data-theme=dark] .sd-card .sd-card-footer { + background-color:var(--pst-color-background); +} diff --git a/docs/source/_static/dash.css b/docs/source/_static/dash.css new file mode 100644 index 000000000..3bd052e9f --- /dev/null +++ b/docs/source/_static/dash.css @@ -0,0 +1,25 @@ +/* from pyqtgraph*/ + +.bd-header { + display: none; +} + +.bd-sidebar-primary { + display: none; +} + +.bd-main .bd-content .bd-article-container { + flex-grow: 1; + max-width: 100%; +} + +.bd-container .bd-container__inner { + flex-grow: 1; + max-width: 100%; +} + +/* patching issue from pydata-sphinx-theme */ +div.viewcode-block:target { + display: block; +} + diff --git a/docs/source/_templates/.class_page_toc.html.swp b/docs/source/_templates/.class_page_toc.html.swp deleted file mode 100644 index d4ed35c1f..000000000 Binary files a/docs/source/_templates/.class_page_toc.html.swp and /dev/null differ diff --git a/docs/source/_templates/class_page_toc.html b/docs/source/_templates/class_page_toc.html deleted file mode 100644 index e8e4138da..000000000 --- a/docs/source/_templates/class_page_toc.html +++ /dev/null @@ -1,18 +0,0 @@ -{% set class_toc = get_class_toc() %} - - diff --git a/docs/source/api/graphic_features.rst b/docs/source/api/graphic_features.rst index 2fe60ce24..5930a2b57 100644 --- a/docs/source/api/graphic_features.rst +++ b/docs/source/api/graphic_features.rst @@ -3,6 +3,25 @@ Graphic Features **************** +FeatureEvent +############ + + Dataclass that holds feature event information. Has ``type`` and ``pick_info`` attributes. + + **Attributes** + + - type: ``str``, example "colors" + + - pick_info: ``dict`` in the form: + + ============== ============================================================================= + key value + ============== ============================================================================= + "index" indices where feature data was changed, ``range`` object or ``List[int]`` + "world_object" world object the feature belongs to + "new_data: the new data for this feature + ============== ============================================================================= + Image ##### @@ -36,13 +55,13 @@ Heatmap Line #### -.. autoclass:: fastplotlib.graphics.features.PositionsDataFeature +.. autoclass:: fastplotlib.graphics.features.PointsDataFeature :members: :inherited-members: :exclude-members: __init__ :no-undoc-members: -.. autoclass:: fastplotlib.graphics.features.ColorsFeature +.. autoclass:: fastplotlib.graphics.features.ColorFeature :members: :inherited-members: :exclude-members: __init__ @@ -57,13 +76,13 @@ Line Scatter ####### -.. autoclass:: fastplotlib.graphics.features.PositionsDataFeature +.. autoclass:: fastplotlib.graphics.features.PointsDataFeature :members: :inherited-members: :exclude-members: __init__ :no-undoc-members: -.. autoclass:: fastplotlib.graphics.features.ColorsFeature +.. autoclass:: fastplotlib.graphics.features.ColorFeature :members: :inherited-members: :exclude-members: __init__ diff --git a/docs/source/api/graphic_features/index.rst b/docs/source/api/graphic_features/index.rst new file mode 100644 index 000000000..e69de29bb diff --git a/docs/source/api/graphics.rst b/docs/source/api/graphics.rst index d38045dae..8b1378917 100644 --- a/docs/source/api/graphics.rst +++ b/docs/source/api/graphics.rst @@ -1,61 +1 @@ -.. _api_graphics: - -Graphics -******** - -Image -##### - -.. autoclass:: fastplotlib.graphics.image.ImageGraphic - :members: - :inherited-members: - -Line -#### - -.. autoclass:: fastplotlib.graphics.line.LineGraphic - :members: - :inherited-members: - -Line Collection -############### - -.. autoclass:: fastplotlib.graphics.line_collection.LineCollection - :members: - :inherited-members: - -Line Stack -########## - -.. autoclass:: fastplotlib.graphics.line_collection.LineStack - :members: - :inherited-members: - -Heatmap -####### - -.. autoclass:: fastplotlib.graphics.image.HeatmapGraphic - :members: - :inherited-members: - -Histogram -######### - -.. autoclass:: fastplotlib.graphics.histogram.HistogramGraphic - :members: - :inherited-members: - -Scatter -####### - -.. autoclass:: fastplotlib.graphics.scatter.ScatterGraphic - :members: - :inherited-members: - -Text -#### - -.. autoclass:: fastplotlib.graphics.text.TextGraphic - :members: - :inherited-members: diff --git a/docs/source/api/graphics/heatmap.rst b/docs/source/api/graphics/heatmap.rst new file mode 100644 index 000000000..09a50e60a --- /dev/null +++ b/docs/source/api/graphics/heatmap.rst @@ -0,0 +1,6 @@ +Heatmap +******* + +.. autoclass:: fastplotlib.graphics.HeatmapGraphic + :members: + :inherited-members: diff --git a/docs/source/api/graphics/image.rst b/docs/source/api/graphics/image.rst new file mode 100644 index 000000000..bc9a0bf2c --- /dev/null +++ b/docs/source/api/graphics/image.rst @@ -0,0 +1,7 @@ +Image +***** + +.. autoclass:: fastplotlib.graphics.ImageGraphic + :members: + :inherited-members: + diff --git a/docs/source/api/graphics/index.rst b/docs/source/api/graphics/index.rst new file mode 100644 index 000000000..7e38507b8 --- /dev/null +++ b/docs/source/api/graphics/index.rst @@ -0,0 +1,12 @@ +Graphics +******** + +.. toctree:: + :maxdepth: 1 + + Image + Heatmap + Line + Line Collections + Scatter + Text diff --git a/docs/source/api/graphics/line.rst b/docs/source/api/graphics/line.rst new file mode 100644 index 000000000..78afd6077 --- /dev/null +++ b/docs/source/api/graphics/line.rst @@ -0,0 +1,6 @@ +Line +#### + +.. autoclass:: fastplotlib.graphics.LineGraphic + :members: + :inherited-members: \ No newline at end of file diff --git a/docs/source/api/graphics/line_collection.rst b/docs/source/api/graphics/line_collection.rst new file mode 100644 index 000000000..f03d970bb --- /dev/null +++ b/docs/source/api/graphics/line_collection.rst @@ -0,0 +1,13 @@ +Line Collection +*************** + +.. autoclass:: fastplotlib.graphics.LineCollection + :members: + :inherited-members: + +Line Stack +********** + +.. autoclass:: fastplotlib.graphics.LineStack + :members: + :inherited-members: diff --git a/docs/source/api/graphics/scatter.rst b/docs/source/api/graphics/scatter.rst new file mode 100644 index 000000000..daabfb9d6 --- /dev/null +++ b/docs/source/api/graphics/scatter.rst @@ -0,0 +1,6 @@ +Scatter +******* + +.. autoclass:: fastplotlib.graphics.ScatterGraphic + :members: + :inherited-members: diff --git a/docs/source/api/graphics/text.rst b/docs/source/api/graphics/text.rst new file mode 100644 index 000000000..063985160 --- /dev/null +++ b/docs/source/api/graphics/text.rst @@ -0,0 +1,6 @@ +Text +#### + +.. autoclass:: fastplotlib.graphics.TextGraphic + :members: + :inherited-members: diff --git a/docs/source/api/plot_areas/index.rst b/docs/source/api/plot_areas/index.rst new file mode 100644 index 000000000..e69de29bb diff --git a/docs/source/api/selectors/index.rst b/docs/source/api/selectors/index.rst new file mode 100644 index 000000000..e69de29bb diff --git a/docs/source/api/widgets/index.rst b/docs/source/api/widgets/index.rst new file mode 100644 index 000000000..e69de29bb diff --git a/docs/source/conf.py b/docs/source/conf.py index 7be450060..1c9a31710 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -2,8 +2,8 @@ # # For the full list of built-in configuration values, see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html -from bs4 import BeautifulSoup -from typing import * +import os +import fastplotlib # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information @@ -11,7 +11,7 @@ project = 'fastplotlib' copyright = '2022, Kushal Kolar, Caitlin Lewis' author = 'Kushal Kolar, Caitlin Lewis' -release = 'v0.1.0.a6' +release = fastplotlib.__version__ # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration @@ -27,7 +27,7 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output html_theme = 'pydata_sphinx_theme' -html_theme_options = {"page_sidebar_items": ["class_page_toc"]} +# html_theme_options = {"page_sidebar_items": ["class_page_toc"]} html_static_path = ['_static'] @@ -37,47 +37,35 @@ autodoc_typehints = "description" autodoc_typehints_description_target = "documented_params" -def _setup_navbar_side_toctree(app: Any): - - def add_class_toctree_function(app: Any, pagename: Any, templatename: Any, context: Any, doctree: Any): - def get_class_toc() -> Any: - soup = BeautifulSoup(context["body"], "html.parser") - - matches = soup.find_all('dl') - if matches is None or len(matches) == 0: - return "" - items = [] - deeper_depth = matches[0].find('dt').get('id').count(".") - for match in matches: - match_dt = match.find('dt') - if match_dt is not None and match_dt.get('id') is not None: - current_title = match_dt.get('id') - current_depth = match_dt.get('id').count(".") - current_link = match.find(class_="headerlink") - if current_link is not None: - if deeper_depth > current_depth: - deeper_depth = current_depth - if deeper_depth == current_depth: - items.append({ - "title": current_title.split('.')[-1], - "link": current_link["href"], - "attributes_and_methods": [] - }) - if deeper_depth < current_depth: - items[-1]["attributes_and_methods"].append( - { - "title": current_title.split('.')[-1], - "link": current_link["href"], - } - ) - return items - context["get_class_toc"] = get_class_toc - - app.connect("html-page-context", add_class_toctree_function) - - -def setup(app: Any): - for setup_function in [ - _setup_navbar_side_toctree, - ]: - setup_function(app) + +intersphinx_mapping = { + 'python': ('https://docs.python.org/3', None), + 'numpy': ('https://numpy.org/doc/stable/', None), + 'pygfx': ('https://pygfx.readthedocs.io/en/latest', None) +} + + +html_theme_options = { + "show_toc_level": 3, + "github_url": "https://github.com/kushalkolar/fastplotlib", + "navbar_end": ["theme-switcher", "navbar-icon-links"], + "secondary_sidebar_items": ["page-toc"] +} + +if os.getenv("BUILD_DASH_DOCSET"): + html_theme_options |= { + 'secondary_sidebar_items': [], + "show_prev_next": False, + "collapse_navigation": True, + } + +# Custom sidebar templates, maps document names to template names. +if os.getenv("BUILD_DASH_DOCSET"): # used for building dash docsets + html_sidebars = { + "**": [] + } +else: + html_sidebars = { + "**": ["sidebar-nav-bs.html"], + 'index': [] # don't show sidebar on main landing page + } diff --git a/docs/source/index.rst b/docs/source/index.rst index 9a0723af7..0f509f8a5 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -13,7 +13,7 @@ Welcome to fastplotlib's documentation! Plot Subplot Gridplot - Graphics + Graphics Graphic Features Selectors Widgets diff --git a/fastplotlib/graphics/features/_colors.py b/fastplotlib/graphics/features/_colors.py index d607d6397..a2bd7f6ea 100644 --- a/fastplotlib/graphics/features/_colors.py +++ b/fastplotlib/graphics/features/_colors.py @@ -20,8 +20,8 @@ class ColorFeature(GraphicFeatureIndexable): "world_object" pygfx.WorldObject world object ==================== =============================== ========================================================================= - """ + @property def buffer(self): return self._parent.world_object.geometry.colors diff --git a/fastplotlib/graphics/features/_present.py b/fastplotlib/graphics/features/_present.py index 820c1d123..b13b82d9c 100644 --- a/fastplotlib/graphics/features/_present.py +++ b/fastplotlib/graphics/features/_present.py @@ -17,7 +17,8 @@ class PresentFeature(GraphicFeature): "new_data" ``bool`` new data, ``True`` or ``False`` "collection-index" int the index of the graphic within the collection that triggered the event "world_object" pygfx.WorldObject world object - ==================== ======================== ======================================================================== + ==================== ======================== ========================================================================= + """ def __init__(self, parent, present: bool = True, collection_index: int = False): self._scene = None diff --git a/fastplotlib/graphics/features/_thickness.py b/fastplotlib/graphics/features/_thickness.py index ce9c3cbc4..ae78c6ac8 100644 --- a/fastplotlib/graphics/features/_thickness.py +++ b/fastplotlib/graphics/features/_thickness.py @@ -7,14 +7,14 @@ class ThicknessFeature(GraphicFeature): **event pick info:** - ===================== ======================== ========================================================================= + ==================== ======================== ========================================================================= key type description ==================== ======================== ========================================================================= "index" ``None`` not used "new_data" ``float`` new thickness value "collection-index" int the index of the graphic within the collection that triggered the event "world_object" pygfx.WorldObject world object - ==================== ======================== ======================================================================== + ==================== ======================== ========================================================================= """ def __init__(self, parent, thickness: float): self._scene = None diff --git a/fastplotlib/graphics/selectors/_linear.py b/fastplotlib/graphics/selectors/_linear.py index 8899f03b1..71a5bf77f 100644 --- a/fastplotlib/graphics/selectors/_linear.py +++ b/fastplotlib/graphics/selectors/_linear.py @@ -137,7 +137,7 @@ def __init__( Features -------- - selection: :class:`LinearSelectionFeature` + selection: :class:`.LinearSelectionFeature` ``selection()`` returns the current slider position in world coordinates use ``selection.add_event_handler()`` to add callback functions that are called when the LinearSelector selection changes. See feaure class for event pick_info table