# emacs: -*- mode: python-mode; py-indent-offset: 4; indent-tabs-mode: nil -*-
# vi: set ft=python sts=4 ts=4 sw=4 et:
### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ##
#
#   See COPYING file distributed along with the NiBabel package for the
#   copyright and license terms.
#
### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ##

from os.path import join as pjoin

import numpy as np

from .. import minc2
from ..minc2 import Minc2File, Minc2Image
from .._h5py_compat import h5py, have_h5py, setup_module

from nose.tools import (assert_true, assert_equal, assert_false, assert_raises)

from ..testing import data_path

from . import test_minc1 as tm2

# Example images in format expected for ``test_image_api``, adding ``zooms``
# item.
EXAMPLE_IMAGES = [
    dict(
        fname=pjoin(data_path, 'small.mnc'),
        shape=(18, 28, 29),
        dtype=np.int16,
        affine=np.array([[0, 0, 7.0, -98],
                         [0, 8.0, 0, -134],
                         [9.0, 0, 0, -72],
                         [0, 0, 0, 1]]),
        zooms=(9., 8., 7.),
        # These values from mincstats
        data_summary=dict(
            min=0.1185331417,
            max=92.87690699,
            mean=31.2127952),
        is_proxy=True),
    dict(
        fname=pjoin(data_path, 'minc2_1_scale.mnc'),
        shape=(10, 20, 20),
        dtype=np.uint8,
        affine=np.array([[0, 0, 2.0, -20],
                         [0, 2.0, 0, -20],
                         [2.0, 0, 0, -10],
                         [0, 0, 0, 1]]),
        zooms=(2., 2., 2.),
        # These values from mincstats
        data_summary=dict(
            min=0.2082842439,
            max=0.2094327615,
            mean=0.2091292083),
        is_proxy=True),
    dict(
        fname=pjoin(data_path, 'minc2_4d.mnc'),
        shape=(2, 10, 20, 20),
        dtype=np.uint8,
        affine=np.array([[0, 0, 2.0, -20],
                         [0, 2.0, 0, -20],
                         [2.0, 0, 0, -10],
                         [0, 0, 0, 1]]),
        zooms=(1., 2., 2., 2.),
        # These values from mincstats
        data_summary=dict(
            min=0.2078431373,
            max=1.498039216,
            mean=0.9090422837),
        is_proxy=True),
    dict(
        fname=pjoin(data_path, 'minc2-no-att.mnc'),
        shape=(10, 20, 20),
        dtype=np.uint8,
        affine=np.array([[0, 0, 1.0, 0],
                         [0, 1.0, 0, 0],
                         [1.0, 0, 0, 0],
                         [0, 0, 0, 1]]),
        zooms=(1., 1., 1.),
        # These values from SPM2/mincstats
        data_summary=dict(
            min=0.20784314,
            max=0.74901961,
            mean=0.6061103),
        is_proxy=True),
    dict(
        fname=pjoin(data_path, 'minc2-4d-d.mnc'),
        shape=(5, 16, 16, 16),
        dtype=np.float64,
        affine=np.array([[1., 0., 0.,  -6.96 ],
                         [0., 1., 0., -12.453],
                         [0., 0., 1.,  -9.48 ],
                         [0., 0., 0., 1.]]),
        zooms=(1., 1., 1., 1.),
        # These values from mincstats
        data_summary=dict(
            min=0.0,
            max=5.0,
            mean=2.00078125),
        is_proxy=True),
]

if have_h5py:
    class TestMinc2File(tm2._TestMincFile):
        module = minc2
        file_class = Minc2File
        opener = h5py.File
        test_files = EXAMPLE_IMAGES

    class TestMinc2Image(tm2.TestMinc1Image):
        image_class = Minc2Image
        eg_images = (pjoin(data_path, 'small.mnc'),)
        module = minc2
