Skip to content

API Reference

This section provides comprehensive API documentation for PFB-Imaging, automatically generated from the source code docstrings.

Package Structure

PFB-Imaging is organized into several main modules:

Workers

CLI workers that implement the main processing pipeline:

Operators

Mathematical operators for radio interferometry:

Optimization

Optimization algorithms for image reconstruction:

Deconvolution

Deconvolution algorithms:

Utilities

Utility functions and helpers:

Usage Examples

Basic Function Usage

import numpy as np
from pfb.operators.gridding import GriddingOperator

# Create sample data
nvis = 1000
uvw = np.random.random((nvis, 3))
visibilities = np.random.complex128(nvis)

# Initialize gridding operator
op = GriddingOperator(uvw, nx=256, ny=256, cell_size=2.0)

# Grid visibilities
dirty_image = op(visibilities)

# Degrid (adjoint operation)
model_vis = op.adjoint(dirty_image)

Mathematical Operators

All operators follow a consistent interface:

class MyOperator:
    def __call__(self, x):
        """Forward operation."""
        return self.forward(x)

    def adjoint(self, x):
        """Adjoint operation."""
        return self.backward(x)

Optimization Algorithms

from pfb.opt.pcg import PCG
from pfb.operators.gridding import GriddingOperator

# Setup problem
A = GriddingOperator(uvw, nx, ny, cell_size)
b = visibilities

# Solve Ax = b
solver = PCG(A, tol=1e-6, maxiter=100)
x = solver.solve(b)

Function Categories

Core Functions

Functions that implement the main algorithmic components:

  • Gridding and degridding operations
  • FFT and convolution operations
  • Deconvolution algorithms
  • Optimization solvers

Utility Functions

Helper functions for common tasks:

  • FITS file I/O
  • Coordinate transformations
  • Array manipulation
  • Logging and progress tracking

Configuration Functions

Functions for handling configuration and parameters:

  • Schema validation
  • CLI parameter parsing
  • Configuration file loading

Type Annotations

All functions use type hints for better code documentation and IDE support:

from typing import Optional, Tuple, Union
import numpy as np

def my_function(
    data: np.ndarray,
    weights: Optional[np.ndarray] = None,
    threshold: float = 0.01
) -> Tuple[np.ndarray, float]:
    """
    Example function with type hints.

    Parameters
    ----------
    data : np.ndarray
        Input data array
    weights : np.ndarray, optional
        Optional weights array
    threshold : float
        Processing threshold

    Returns
    -------
    result : np.ndarray
        Processed data
    metric : float
        Quality metric
    """
    pass

Error Handling

All functions include proper error handling:

def safe_function(data: np.ndarray) -> np.ndarray:
    """
    Function with error handling.

    Raises
    ------
    ValueError
        If data is empty or has wrong shape
    TypeError
        If data is not a numpy array
    """
    if not isinstance(data, np.ndarray):
        raise TypeError("Data must be a numpy array")

    if data.size == 0:
        raise ValueError("Data cannot be empty")

    return process_data(data)

Performance Notes

Memory Usage

  • Functions use chunked arrays for large datasets
  • Memory-efficient algorithms are preferred
  • Automatic memory management with context managers

Parallel Processing

  • Thread-safe operations where applicable
  • Dask integration for distributed computing
  • Numba JIT compilation for performance-critical functions

Numerical Precision

  • Appropriate data types for different operations
  • Numerical stability considerations
  • Validation of results and convergence

See Also