Files
kaipy/tests/conftest.py

104 lines
4.4 KiB
Python

import pytest
import numpy as np
import h5py
import datetime
from astropy.time import Time
from kaipy.gamera.magsphere import GamsphPipe
Ni = 32
Nj = 24
Nk = 48
Nlat = 44
Nlon = 360
def write_mix_h5(file_path,mjds=None):
lat = np.arange(Nlat+1)
long = np.arange(Nlon+1)
X = np.outer(np.sin(np.radians(lat)), np.cos(np.radians(long)))
Y = np.outer(np.sin(np.radians(lat)), np.sin(np.radians(long)))
if mjds is None:
mjds = []
suppliedMJDs = False
else:
suppliedMJDs = True
with h5py.File(file_path, 'w') as f:
f.create_dataset("X", data=X)
f.create_dataset("Y", data=Y)
for i in range(3):
grp = f.create_group("Step#{}".format(i))
grp.attrs['time'] = np.double(i)
if suppliedMJDs:
mjd = mjds[i]
else:
mjd = Time(datetime.datetime.now()).mjd
mjds.append(mjd)
grp.attrs['MJD'] = mjd
grp.attrs['timestep'] = i
grp.create_dataset("Potential NORTH", data=np.zeros((Nlat, Nlon)))
grp.create_dataset("Potential SOUTH", data=np.zeros((Nlat, Nlon)))
grp.create_dataset("Field-aligned current NORTH", data=np.zeros((Nlat, Nlon)))
grp.create_dataset("Field-aligned current SOUTH", data=np.zeros((Nlat, Nlon)))
grp.create_dataset("Pedersen conductance NORTH", data=np.zeros((Nlat, Nlon)))
grp.create_dataset("Pedersen conductance SOUTH", data=np.zeros((Nlat, Nlon)))
grp.create_dataset("Hall conductance NORTH", data=np.zeros((Nlat, Nlon)))
grp.create_dataset("Hall conductance SOUTH", data=np.zeros((Nlat, Nlon)))
grp.create_dataset("Average energy NORTH", data=np.zeros((Nlat, Nlon)))
grp.create_dataset("Average energy SOUTH", data=np.zeros((Nlat, Nlon)))
grp.create_dataset("Number flux NORTH", data=np.zeros((Nlat, Nlon)))
grp.create_dataset("Number flux SOUTH", data=np.zeros((Nlat, Nlon)))
return file_path
@pytest.fixture
def gamera_pipe(tmpdir):
# Create a temporary directory and file structure for testing
fdir = tmpdir.mkdir("data")
ftag = "test"
file_path = fdir.join("test.gam.h5")
print(f'file_path: {file_path}')
mjds = []
with h5py.File(file_path, 'w') as f:
f.create_dataset("X", data=np.linspace(-100, 100, Ni+1).reshape(Ni+1, 1, 1).repeat(Nj+1, axis=1).repeat(Nk+1, axis=2).T)
f.create_dataset("Y", data=np.linspace(-100, 100, Nj+1).reshape(1, Nj+1, 1).repeat(Ni+1, axis=0).repeat(Nk+1, axis=2).T)
f.create_dataset("Z", data=np.linspace(-100, 100, Nk+1).reshape(1, 1, Nk+1).repeat(Ni+1, axis=0).repeat(Nj+1, axis=1).T)
f.create_dataset("dV", data=np.zeros((Ni, Nj, Nk)).T)
for i in range(3):
grp = f.create_group("Step#{}".format(i))
grp.attrs['time'] = np.double(i)
mjd = Time(datetime.datetime.now()).mjd
grp.attrs['MJD'] = mjd
mjds.append(mjd)
grp.attrs['timestep'] = i
grp.create_dataset("D", data=np.zeros((Ni, Nj, Nk)).T)
grp.create_dataset("P", data=np.zeros((Ni, Nj, Nk)).T)
grp.create_dataset("Bx", data=np.zeros((Ni, Nj, Nk)).T)
grp.create_dataset("By", data=np.zeros((Ni, Nj, Nk)).T)
grp.create_dataset("Bz", data=np.zeros((Ni, Nj, Nk)).T)
grp.create_dataset("Vx", data=np.zeros((Ni, Nj, Nk)).T)
grp.create_dataset("Vy", data=np.zeros((Ni, Nj, Nk)).T)
grp.create_dataset("Vz", data=np.zeros((Ni, Nj, Nk)).T)
grp.create_dataset("Jx", data=np.zeros((Ni, Nj, Nk)).T)
grp.create_dataset("Jy", data=np.zeros((Ni, Nj, Nk)).T)
grp.create_dataset("Jz", data=np.zeros((Ni, Nj, Nk)).T)
file_path = fdir.join("test.mix.h5")
file_path = write_mix_h5(file_path)
return GamsphPipe(str(fdir), ftag, doFast=True, uID="Earth")
@pytest.fixture
def mix_file(tmpdir):
fdir = tmpdir.mkdir("data")
ftag = "test"
file_path = fdir.join("test.mix.h5")
file_path = write_mix_h5(file_path)
return file_path
def pytest_addoption(parser):
parser.addoption(
"--runslow", action="store_true", default=False, help="run tests marked as slow"
)
def pytest_runtest_setup(item):
if "slow" in item.keywords and not item.config.getoption("--runslow"):
pytest.skip("need --runslow option to run")