← GDG /

#061 gdtest_abstract_props

#061 gdtest_abstract_props OK INIT
ABC with abstract properties
ABC with abstract methods and @property decorators. Shape class has abstract area (property) and perimeter (property), plus concrete describe(). Circle subclass implements them. On the Reference page you should see both classes with property markers on the abstract properties.
View Site → Build Log ๐Ÿงช Test Coverage

Build Mode

○ No great-docs.yml

This package has no pre-supplied config. It tests the full great-docs initgreat-docs build pipeline from scratch, relying entirely on auto-detection of the package layout, docstring style, and exports.

Dimensions

A1 B1 C16 D1 E6 F6 G1 H7
A1Flat layoutlayout
B1Explicit __all__exports
C16Abstract propertiesobjects
D1NumPydocstrings
E6No directivesdirectives
F6No user guideuser_guide
G1README.mdlanding
H7No extrasextras

Source Files

๐Ÿ“ gdtest_abstract_props/
๐Ÿ“„ __init__.py
"""Package with abstract properties."""

from abc import ABC, abstractmethod
import math

__version__ = "0.1.0"
__all__ = ["Shape", "Circle"]


class Shape(ABC):
    """
    Abstract base class for geometric shapes.

    All shapes must implement area and perimeter properties.
    """

    @property
    @abstractmethod
    def area(self) -> float:
        """
        The area of the shape.

        Returns
        -------
        float
            Area value.
        """
        ...

    @property
    @abstractmethod
    def perimeter(self) -> float:
        """
        The perimeter of the shape.

        Returns
        -------
        float
            Perimeter value.
        """
        ...

    def describe(self) -> str:
        """
        Describe the shape.

        Returns
        -------
        str
            Human-readable description.
        """
        return f"Shape with area={self.area:.2f}, perimeter={self.perimeter:.2f}"


class Circle(Shape):
    """
    A circle shape.

    Parameters
    ----------
    radius
        The radius of the circle.
    """

    def __init__(self, radius: float):
        self.radius = radius

    @property
    def area(self) -> float:
        """
        Area of the circle (pi * r^2).

        Returns
        -------
        float
            Area value.
        """
        return math.pi * self.radius ** 2

    @property
    def perimeter(self) -> float:
        """
        Perimeter (circumference) of the circle (2 * pi * r).

        Returns
        -------
        float
            Perimeter value.
        """
        return 2 * math.pi * self.radius
๐Ÿ“„ README.md
# gdtest-abstract-props

Tests ABC with abstract properties and concrete subclass.
๐Ÿ“„ great-docs.yml generated
# Great Docs Configuration
# See https://posit-dev.github.io/great-docs/user-guide/configuration.html

# Module Name (optional)
# ----------------------
# Set this if your importable module name differs from the project name.
# Example: project 'py-yaml12' with module name 'yaml12'
# module: yaml12

# Docstring Parser
# ----------------
# The docstring format used in your package (numpy, google, or sphinx)
parser: numpy

# Dynamic Introspection
# ---------------------
# Use runtime introspection for more accurate documentation (default: true)
# Set to false if your package has cyclic alias issues (e.g., PyO3/Rust bindings)
dynamic: true

# API Discovery Settings
# ----------------------
# Exclude items from auto-documentation
# exclude:
#   - InternalClass
#   - helper_function

# Logo & Favicon
# ---------------
# Point to a single logo file (replaces the text title in the navbar):
# logo: assets/logo.svg
#
# For light/dark variants:
# logo:
#   light: assets/logo-light.svg
#   dark: assets/logo-dark.svg
#
# To show the text title alongside the logo, add: show_title: true

# Funding / Copyright Holder
# --------------------------
# Credit the organization that funds or holds copyright for this package.
# Displays in sidebar and footer. Homepage and ROR provide links.
# funding:
#   name: "Posit Software, PBC"
#   roles:
#     - Copyright holder
#     - funder
#   homepage: https://posit.co
#   ror: https://ror.org/03wc8by49

# API Reference Structure
# -----------------------
# Customize the sections below to organize your API documentation.
# - Reorder items within a section to change their display order
# - Move items between sections or create new sections
# - Use 'members: false' to exclude methods from documentation
# - Add 'desc:' to sections for descriptions

reference:
  - title: Classes
    desc: Main classes provided by the package
    contents:
      - Circle

  - title: Abstract Classes
    desc: Abstract base classes
    contents:
      - Shape  # 1 method(s)

# Site URL
# --------
# Canonical address of the deployed documentation site.
# Required for subdirectory deployments, skills page install commands,
# .well-known/ discovery, and sitemaps.
# site_url: "https://your-org.github.io/your-package/"

# Site Settings
# -------------
# site:
#   theme: flatly              # Quarto theme (default: flatly)
#   toc: true                  # Show table of contents (default: true)
#   toc-depth: 2               # TOC heading depth (default: 2)
#   toc-title: On this page    # TOC title (default: "On this page")

# Jupyter Kernel
# --------------
# Jupyter kernel to use for executing code cells in .qmd files.
# This is set at the project level so it applies to all pages, including
# auto-generated API reference pages. Can be overridden in individual .qmd
# file frontmatter if needed for special cases.
jupyter: python3

# CLI Documentation
# -----------------
# cli:
#   enabled: true              # Enable CLI documentation
#   module: my_package.cli     # Module containing Click commands
#   name: cli                  # Name of the Click command object