Skip to content

Profiler

provide.testkit.quality.profiling.profiler

Performance profiling implementation using memray and cProfile.

Classes

PerformanceProfiler

PerformanceProfiler(config: dict[str, Any] | None = None)

Performance profiler using memray, cProfile, and tracemalloc.

Provides high-level interface for performance analysis with automatic artifact management and integration with the quality framework.

Initialize performance profiler.

Parameters:

Name Type Description Default
config dict[str, Any] | None

Profiler configuration options

None
Source code in provide/testkit/quality/profiling/profiler.py
def __init__(self, config: dict[str, Any] | None = None) -> None:
    """Initialize performance profiler.

    Args:
        config: Profiler configuration options
    """
    self.config = config or {}
    self.artifact_dir: Path | None = None
Functions
generate_report
generate_report(
    result: QualityResult, format: str = "terminal"
) -> str

Generate profiling report.

Parameters:

Name Type Description Default
result QualityResult

Profiling result

required
format str

Report format

'terminal'

Returns:

Type Description
str

Formatted report

Source code in provide/testkit/quality/profiling/profiler.py
def generate_report(self, result: QualityResult, format: str = "terminal") -> str:
    """Generate profiling report.

    Args:
        result: Profiling result
        format: Report format

    Returns:
        Formatted report
    """
    if format == "terminal":
        return self._generate_text_report(result)
    elif format == "json":
        return json.dumps(
            {
                "tool": result.tool,
                "passed": result.passed,
                "score": result.score,
                "details": result.details,
            },
            indent=2,
        )
    else:
        return str(result.details)
profile_function
profile_function(
    func: Callable[..., Any], *args: Any, **kwargs: Any
) -> QualityResult

Profile a function's performance.

Parameters:

Name Type Description Default
func Callable[..., Any]

Function to profile

required
*args Any

Function arguments

()
**kwargs Any

Function keyword arguments

{}

Returns:

Type Description
QualityResult

QualityResult with profiling data

Source code in provide/testkit/quality/profiling/profiler.py
def profile_function(self, func: Callable[..., Any], *args: Any, **kwargs: Any) -> QualityResult:
    """Profile a function's performance.

    Args:
        func: Function to profile
        *args: Function arguments
        **kwargs: Function keyword arguments

    Returns:
        QualityResult with profiling data
    """
    start_time = time.time()

    try:
        # Configure profiling options
        profile_memory = self.config.get("profile_memory", True)
        profile_cpu = self.config.get("profile_cpu", True)
        use_memray = self.config.get("use_memray", MEMRAY_AVAILABLE)

        results = {}

        # Memory profiling
        if profile_memory:
            if use_memray and MEMRAY_AVAILABLE:
                memory_result = self._profile_memory_memray(func, *args, **kwargs)
            else:
                memory_result = self._profile_memory_tracemalloc(func, *args, **kwargs)
            results.update(memory_result)

        # CPU profiling
        if profile_cpu:
            cpu_result = self._profile_cpu(func, *args, **kwargs)
            results.update(cpu_result)

        # Analyze results
        return self._process_profiling_results(results, time.time() - start_time)

    except Exception as e:
        return QualityResult(
            tool="profiling",
            passed=False,
            details={"error": str(e), "error_type": type(e).__name__},
            execution_time=time.time() - start_time,
        )
report
report(
    result: QualityResult, format: str = "terminal"
) -> str

Generate report from QualityResult (implements QualityTool protocol).

Parameters:

Name Type Description Default
result QualityResult

Profiling result

required
format str

Report format

'terminal'

Returns:

Type Description
str

Formatted report

Source code in provide/testkit/quality/profiling/profiler.py
def report(self, result: QualityResult, format: str = "terminal") -> str:
    """Generate report from QualityResult (implements QualityTool protocol).

    Args:
        result: Profiling result
        format: Report format

    Returns:
        Formatted report
    """
    return self.generate_report(result, format)

Functions