Skip to content

Roadmap

Organised by package layout (src/mayutils/*). Priority tags: #critical, #high, #medium, #low; difficulty tags: #hard.

core

Lazy imports (PEP 810)

Priority: #low

  • Adopt PEP 810 – Lazy imports once it lands in CPython. PEP 810 proposes a stdlib importlib.lazy mechanism (building on the earlier importlib.util.LazyLoader and the lazy-loader / slothy ecosystem) that defers execution of a module's body until one of its attributes is accessed. This would let mayutils drop the may_require_extras guard boilerplate for optional extras and instead rely on the interpreter to defer the import cost — only loading a heavy dependency (e.g. snowflake-connector, plotly) when the caller first touches it. Track the PEP status; revisit when the reference implementation ships.

data

Async reading and streaming

Priority: #low

  • AsyncQueryReader and AsyncQueryStreamer protocols in data/read.py — define the interface for native-async readers (e.g. Snowflake aio connector, asyncpg) so they can slot into async_read_query / async_stream_query without thread overhead. Until a real async driver exists, callers can use asyncio.to_thread(read_query, ...) instead.

environment

Logging

Priority: #critical

  • Classmethod / staticmethod to change the default logging level.
  • Re-add a file handler to the logger.
  • Surface logger.name in the rich handler output (rich#850).

interfaces.data

snowflake

Priority: #medium

  • Stream management via the Snowflake Python API (snowflake.core) — add the snowflake.core dependency to the snowflake extra (wired through may_require_extras), a to_root() adapter on SnowflakeConfig / SnowparkExtendedSession following the existing to_connection() / to_snowpark_session() pattern, and a thin streams helper module (build StreamSourceTable / StreamSourceView / StreamSourceStage + PointOfTime from plain typed arguments; resolve db.schema.name to StreamResource / StreamCollection with defaults from the config). Root also unlocks tasks, dynamic tables, warehouses, etc. for later.

dbt

Priority: #medium

interfaces.filetypes

Cross-format conversion

Priority: #high

  • docsdocx — round-trip between Google Docs and Word documents (via Drive export/import or a shared intermediate representation).
  • slidespptx — round-trip between Google Slides and PowerPoint decks.
  • sheetsxlsx — round-trip between Google Sheets and Excel workbooks (sheet-by-sheet, preserving formulas/formatting where feasible).

markdown

Priority: #high

  • Pandoc wrapper — shell out to pandoc for format conversion (md ↔ docx / pptx / pdf / html / latex) with a typed Python API.

latex

Priority: #medium

  • LaTeX wrapper — programmatic authoring of .tex documents with a fluent API (document class, preamble, sections, tables, figures) and a compile helper (pdflatex / tectonic) that mirrors the pptx → pdf LibreOffice pattern.

pptx

Priority: #critical

docx

Priority: #medium

  • Flesh out the python-docx façade (placeholder today) — document authoring, tables, images, styles.

docs

Priority: #medium

  • Flesh out the Google Docs v1 wrapper (placeholder today), mirroring the sheets / slides ergonomics.

visualisation.graphs.plotly

Priority: #critical

  • trace_info @property to infer colour / trace type from a trace, and refactor callers to consume it. #critical

  • Subplot.from_plots @classmethod using double-nested array notation for rows/columns. #critical

  • Error bounds #critical

    • Fan Chart — new Fan trace type

    • Scatter-style error bounds

      Python
      go.Scatter(
          x=[1, 2, 3, 4],
          y=[2, 1, 3, 4],
          error_y=dict(
              type="data",
              symmetric=False,
              array=[0.1, 0.2, 0.1, 0.1],
              arrayminus=[0.2, 0.4, 1, 0.2],
          ),
      )
      
  • Marginals and rugs #critical

  • 3D Histogram #critical #high — heatmap / contour alternative.

  • Categorical 3D axes #critical #medium (docs)

  • Animations #low

  • Subplot enlargement #low #hard

Classification plots

Priority: #low

Maps

Priority: #low

visualisation.notebook / tables

Priority: #low

objects.dataframes

Priority: #low

  • Polars functionality (wait until the surrounding code is more familiar with it).

objects (Pydantic, decorators, classes)

Priority: #low

  • Reference: model_construct
  • Reference: ecosystem
  • Set up a couple of things using pydantic.
  • Translate dataclasses to pydantic dataclasses where helpful.
  • Explore BaseModel.
  • Implement other broadly-useful decorators as they come up.
  • Add default class methods.

mathematics

Priority: #low

  • JIT compilation with numba.

interfaces.cloud / webdrivers

Priority: #low

  • Fix Chrome webdriver #hard — fix all Chromium variants.
  • Fix Firefox webdriver #hard.

interfaces.code.tui

Priority: #low

  • tuiplot fixes
    • App name sometimes obscured with a black bar when out of focus.
    • Ideally, half the Plotly chart wouldn't be squished.

Apps

Priority: #low

Research / understand

Priority: #low

Drawing

Writing