/**
 * # API Reference
 *
 * This package based on this paper: [Gorski (2005)](http://iopscience.iop.org/article/10.1086/427976/pdf).
 *
 * The key things to understand the implementation are:
 * - Spherical coordinates in different representations such as `(alpha, delta)`
 *   or `(theta, phi)` or `(X, Y, z)` are always normalised to `(z, a)`.
 * - The HEALPix spherical projection is used to map to `(t, u)` (see `za2tu` and `tu2za`).
 *   See Section 4.4 and Figure 5 in the paper, where `(t, u)` is called `(x_s, y_s)`.
 *
 * - A simple affine transformation is used to map to `(f, x, y)` (see `tu2fxy` and `fxy2tu`),
 *   where `f = {0 .. 11}` is the base pixel index and `(x, y)` is the position
 *   within the base pixel in the (north-east, north-west) direction
 *   and `(0, 0)` in the south corner.
 * - From `(f, x, y)`, the HEALPix pixel index in the "nested" scheme
 *   is related via `fxy2nest` and `nest2fxy`, and in the "ring" scheme
 *   via `fxy2ring` and `ring2fxy` in a relatively simple equations.
 *
 * To summarise: there are two geometrical transformations:
 * `(z, a)` <-> `(t, u)` is the HEALPix spherical projection,
 * and `(t, u)` <-> `(f, x, y)` is a 45 deg rotation and scaling for each
 * of the 12 base pixels, so that HEALPix pixels in `(x, y)` are unit squares,
 * and pixel index compuatations are relatively straightforward,
 * both in the "nested" and "ring" pixelisation scheme.
 *
 * ## Notations
 *
 * <pre>
 * theta :  colatitude (pi/2 - delta)                [0 , pi]
 * phi   :  longitude (alpha)                        [0, 2 pi)
 * t     :  coord. of x-axis in spherical projection [0, 2 pi)
 * u     :  coord. of y-axis in spherical projection [-pi/2, pi/2]
 * z     :  cos(theta)                               [-1, 1]
 * X     :  sin(theta) * cos(phi)                    [-1, 1]
 * Y     :  sin(theta) * sin(phi)                    [-1, 1]
 * a     :  phi                                      [0, 2 pi)
 * f     :  base pixel index                         {0 .. 11}
 * x     :  north-east index in base pixel           [0, nside)
 * y     :  north-west index in base pixel           [0, nside)
 * p     :  north-east axis in base pixel            [0, 1)
 * q     :  north-west axis in base pixel            [0, 1)
 * j     :  pixel-in-ring index                      polar cap: {1 .. 4 i}
 *                                                   equatorial belt: {1 .. 4 nside}
 * i     :  ring index                               {1 .. 4 nside - 1}
 * </pre>
 */
/**
 * 3D Vector
 */
export declare type V3 = [number, number, number];
export declare function order2nside(order: number): number;
export declare function nside2order(nside: number): number;
export declare function nside2npix(nside: number): number;
export declare function vec2pix_nest(nside: number, v: V3): number;
export declare function vec2pix_ring(nside: number, v: V3): number;
export declare function ang2pix_nest(nside: number, theta: number, phi: number): number;
export declare function ang2pix_ring(nside: number, theta: number, phi: number): number;
export declare function nest2ring(nside: number, ipix: number): number;
export declare function ring2nest(nside: number, ipix: number): number;
export declare function ring2fxy(nside: number, ipix: number): {
    f: number;
    x: number;
    y: number;
};
export declare function pix2vec_nest(nside: number, ipix: number): V3;
export declare function pix2ang_nest(nside: number, ipix: number): {
    theta: number;
    phi: number;
};
export declare function pix2vec_ring(nside: number, ipix: number): V3;
export declare function pix2ang_ring(nside: number, ipix: number): {
    theta: number;
    phi: number;
};
export declare function query_disc_inclusive_nest(nside: number, v: V3, radius: number, cb: (ipix: number) => void): void;
export declare function query_disc_inclusive_ring(nside: number, v: V3, radius: number, cb_ring: (ipix: number) => void): void;
export declare function max_pixrad(nside: number): number;
export declare type FXY = {
    f: number;
    x: number;
    y: number;
};
export declare function corners_nest(nside: number, ipix: number): V3[];
export declare function corners_ring(nside: number, ipix: number): V3[];
export declare function nside2pixarea(nside: number): number;
export declare function nside2resol(nside: number): number;
export declare function pixcoord2vec_nest(nside: number, ipix: number, ne: number, nw: number): V3;
export declare function pixcoord2vec_ring(nside: number, ipix: number, ne: number, nw: number): V3;
export declare function tu2fxy(nside: number, t: number, u: number): {
    f: number;
    x: number;
    y: number;
};
/**
 * HEALPix spherical projection.
 */
export declare function za2tu(z: number, a: number): {
    t: number;
    u: number;
};
/**
 * Inverse HEALPix spherical projection.
 */
export declare function tu2za(t: number, u: number): {
    z: number;
    a: number;
};
export declare function ang2vec(theta: number, phi: number): V3;
export declare function vec2ang(v: V3): {
    theta: number;
    phi: number;
};
export declare function fxy2nest(nside: number, f: number, x: number, y: number): number;
export declare function bit_combine(x: number, y: number): number;
export declare function bit_decombine(p: number): {
    x: number;
    y: number;
};
export declare function fxy2tu(nside: number, f: number, x: number, y: number): {
    t: number;
    u: number;
};
export declare function orderpix2uniq(order: number, ipix: number): number;
export declare function uniq2orderpix(uniq: number): {
    order: number;
    ipix: number;
};
