|
from __future__ import annotations |
|
|
|
from abc import ABC, abstractmethod |
|
from typing import TYPE_CHECKING, Any |
|
|
|
import numpy as np |
|
|
|
if TYPE_CHECKING: |
|
import io |
|
|
|
from numpy.typing import ArrayLike |
|
|
|
from contourpy._contourpy import CoordinateArray, FillReturn, FillType, LineReturn, LineType |
|
|
|
|
|
class Renderer(ABC): |
|
"""Abstract base class for renderers, defining the interface that they must implement.""" |
|
|
|
def _grid_as_2d(self, x: ArrayLike, y: ArrayLike) -> tuple[CoordinateArray, CoordinateArray]: |
|
x = np.asarray(x) |
|
y = np.asarray(y) |
|
if x.ndim == 1: |
|
x, y = np.meshgrid(x, y) |
|
return x, y |
|
|
|
x = np.asarray(x) |
|
y = np.asarray(y) |
|
if x.ndim == 1: |
|
x, y = np.meshgrid(x, y) |
|
return x, y |
|
|
|
@abstractmethod |
|
def filled( |
|
self, |
|
filled: FillReturn, |
|
fill_type: FillType | str, |
|
ax: Any = 0, |
|
color: str = "C0", |
|
alpha: float = 0.7, |
|
) -> None: |
|
pass |
|
|
|
@abstractmethod |
|
def grid( |
|
self, |
|
x: ArrayLike, |
|
y: ArrayLike, |
|
ax: Any = 0, |
|
color: str = "black", |
|
alpha: float = 0.1, |
|
point_color: str | None = None, |
|
quad_as_tri_alpha: float = 0, |
|
) -> None: |
|
pass |
|
|
|
@abstractmethod |
|
def lines( |
|
self, |
|
lines: LineReturn, |
|
line_type: LineType | str, |
|
ax: Any = 0, |
|
color: str = "C0", |
|
alpha: float = 1.0, |
|
linewidth: float = 1, |
|
) -> None: |
|
pass |
|
|
|
@abstractmethod |
|
def mask( |
|
self, |
|
x: ArrayLike, |
|
y: ArrayLike, |
|
z: ArrayLike | np.ma.MaskedArray[Any, Any], |
|
ax: Any = 0, |
|
color: str = "black", |
|
) -> None: |
|
pass |
|
|
|
@abstractmethod |
|
def save(self, filename: str, transparent: bool = False) -> None: |
|
pass |
|
|
|
@abstractmethod |
|
def save_to_buffer(self) -> io.BytesIO: |
|
pass |
|
|
|
@abstractmethod |
|
def show(self) -> None: |
|
pass |
|
|
|
@abstractmethod |
|
def title(self, title: str, ax: Any = 0, color: str | None = None) -> None: |
|
pass |
|
|
|
@abstractmethod |
|
def z_values( |
|
self, |
|
x: ArrayLike, |
|
y: ArrayLike, |
|
z: ArrayLike, |
|
ax: Any = 0, |
|
color: str = "green", |
|
fmt: str = ".1f", |
|
quad_as_tri: bool = False, |
|
) -> None: |
|
pass |
|
|