from _typeshed import Incomplete
from astropy.convolution import Kernel
from nexusformat.nexus import NXdata

__all__ = ['Symmetrizer2D', 'Symmetrizer3D', 'Puncher', 'Interpolator', 'fourier_transform_nxdata', 'Gaussian3DKernel', 'DeltaPDF', 'generate_gaussian']

class Symmetrizer2D:
    symmetrization_mask: NXdata
    mirror_axis: Incomplete
    symmetrized: Incomplete
    rotations: Incomplete
    transform: Incomplete
    mirror: Incomplete
    skew_angle: Incomplete
    theta_max: Incomplete
    theta_min: Incomplete
    wedge: Incomplete
    def __init__(self, **kwargs) -> None: ...
    transformer: Incomplete
    wedges: Incomplete
    def set_parameters(self, theta_min, theta_max, lattice_angle: int = 90, mirror: bool = True, mirror_axis=None) -> None: ...
    def symmetrize_2d(self, data): ...
    def test(self, data, **kwargs): ...

class Symmetrizer3D:
    lattice_params: Incomplete
    reciprocal_lattice_params: Incomplete
    symmetrized: Incomplete
    data: Incomplete
    plane1symmetrizer: Incomplete
    plane2symmetrizer: Incomplete
    plane3symmetrizer: Incomplete
    q1: Incomplete
    q2: Incomplete
    q3: Incomplete
    plane1: Incomplete
    plane2: Incomplete
    plane3: Incomplete
    def __init__(self, data=None) -> None: ...
    def set_data(self, data) -> None: ...
    def set_lattice_params(self, lattice_params) -> None: ...
    def symmetrize(self, positive_values: bool = True): ...
    def save(self, fout_name=None) -> None: ...

def generate_gaussian(H, K, L, amp, stddev, lattice_params, coeffs=None, center=None): ...

class Puncher:
    punched: Incomplete
    data: Incomplete
    mask: Incomplete
    reciprocal_lattice_params: Incomplete
    lattice_params: Incomplete
    def __init__(self) -> None: ...
    def set_data(self, data) -> None: ...
    def set_lattice_params(self, lattice_params) -> None: ...
    def add_mask(self, maskaddition) -> None: ...
    def subtract_mask(self, masksubtraction) -> None: ...
    def generate_bragg_mask(self, punch_radius, coeffs=None, thresh=None): ...
    def generate_intensity_mask(self, thresh, radius, verbose: bool = True): ...
    def generate_mask_at_coord(self, coordinate, punch_radius, coeffs=None, thresh=None): ...
    def punch(self) -> None: ...

class Gaussian2DKernel(Kernel):
    def __init__(self, stddev, size, coeffs=None) -> None: ...

class Gaussian3DKernel(Kernel):
    def __init__(self, stddev, size, coeffs=None) -> None: ...

class Interpolator:
    interp_time: Incomplete
    window: Incomplete
    interpolated: Incomplete
    data: Incomplete
    kernel: Incomplete
    tapered: Incomplete
    def __init__(self) -> None: ...
    def set_data(self, data) -> None: ...
    def set_kernel(self, kernel) -> None: ...
    def interpolate(self, verbose: bool = True, positive_values: bool = True) -> None: ...
    def set_tukey_window(self, tukey_alphas=(1.0, 1.0, 1.0)) -> None: ...
    def set_hexagonal_tukey_window(self, tukey_alphas=(1.0, 1.0, 1.0, 1.0)) -> None: ...
    def set_ellipsoidal_tukey_window(self, tukey_alpha: float = 1.0, coeffs=None) -> None: ...
    def set_window(self, window) -> None: ...
    def apply_window(self) -> None: ...

def fourier_transform_nxdata(data, is_2d: bool = False): ...

class DeltaPDF:
    reciprocal_lattice_params: Incomplete
    fft: Incomplete
    data: Incomplete
    lattice_params: Incomplete
    puncher: Incomplete
    interpolator: Incomplete
    padder: Incomplete
    mask: Incomplete
    kernel: Incomplete
    window: Incomplete
    padded: Incomplete
    tapered: Incomplete
    interpolated: Incomplete
    punched: Incomplete
    def __init__(self) -> None: ...
    def set_data(self, data) -> None: ...
    def set_lattice_params(self, lattice_params) -> None: ...
    def add_mask(self, maskaddition) -> None: ...
    def subtract_mask(self, masksubtraction) -> None: ...
    def generate_bragg_mask(self, punch_radius, coeffs=None, thresh=None): ...
    def generate_intensity_mask(self, thresh, radius, verbose: bool = True): ...
    def generate_mask_at_coord(self, coordinate, punch_radius, coeffs=None, thresh=None): ...
    def punch(self) -> None: ...
    def set_kernel(self, kernel) -> None: ...
    def interpolate(self, verbose: bool = True, positive_values: bool = True) -> None: ...
    def set_tukey_window(self, tukey_alphas=(1.0, 1.0, 1.0)) -> None: ...
    def set_hexagonal_tukey_window(self, tukey_alphas=(1.0, 1.0, 1.0, 1.0)) -> None: ...
    def set_ellipsoidal_tukey_window(self, tukey_alpha: float = 1.0, coeffs=None) -> None: ...
    def set_window(self, window) -> None: ...
    def apply_window(self) -> None: ...
    def pad(self, padding) -> None: ...
    def perform_fft(self, is_2d: bool = False) -> None: ...
