diff --git a/tests/test_kernel_execution.py b/tests/test_kernel_execution.py index b1991413..7781f780 100644 --- a/tests/test_kernel_execution.py +++ b/tests/test_kernel_execution.py @@ -1,9 +1,11 @@ import sys +from datetime import timedelta from os import path import numpy as np import pytest +import parcels from parcels import ( AdvectionRK4, FieldOutOfBoundError, @@ -354,3 +356,77 @@ def test_compilers(): params = param_class() # noqa print(CCompiler_SS()) + + +def test_explicit_ParcelsRandom(fieldset): + """ + Testing `from parcels import ParcelsRandom` in kernel code + """ + from parcels import ParcelsRandom + + def nudge_kernel(particle, fieldset, time): + dlat = ParcelsRandom.normalvariate(0.0, 1.0) + particle_dlat += dlat # noqa + + pset = ParticleSet(fieldset, pclass=parcels.JITParticle, lon=[0.5], lat=[0.5]) + pset.execute(nudge_kernel, runtime=timedelta(days=1), dt=timedelta(hours=1)) + + +def test_parcels_dot_ParcelsRandom(fieldset): + """ + Testing `parcels.ParcelsRandom` in kernel code + """ + pset = ParticleSet(fieldset, pclass=parcels.JITParticle, lon=[0.5], lat=[0.5]) + + def nudge_kernel(particle, fieldset, time): + dlat = parcels.ParcelsRandom.normalvariate(0.0, 1.0) + particle_dlat += dlat # noqa + + pset.execute(nudge_kernel, runtime=timedelta(days=1), dt=timedelta(hours=1)) + + +def test_parcels_dot_rng(fieldset): + """ + Testing `parcels.rng` in kernel code. + This should not work as parcels.rng is not imported in parcels/__init__.py + and is not supported in kernel conversion code. + """ + pset = ParticleSet(fieldset, pclass=parcels.JITParticle, lon=[0.5], lat=[0.5]) + + def nudge_kernel(particle, fieldset, time): + dlat = parcels.rng.normalvariate(0.0, 1.0) + particle_dlat += dlat # noqa + + try: + pset.execute(nudge_kernel, runtime=timedelta(days=1), dt=timedelta(hours=1)) + except: + pass # This test is expected to fail + else: + pytest.fail( + "Parcels uses function name to determine kernel support. " + "parcels.rng can't be used as it is unsupported." + ) + + +def test_custom_ParcelsRandom_alias(fieldset): + """ + Testing aliasing ParcelsRandom to another name. + """ + from parcels import ParcelsRandom as my_custom_name + + def nudge_kernel(particle, fieldset, time): + dlat = my_custom_name.normalvariate(0.0, 1.0) + particle_dlat += dlat # noqa + + pset = ParticleSet(fieldset, pclass=parcels.JITParticle, lon=[0.5], lat=[0.5]) + + try: + pset.execute(nudge_kernel, runtime=timedelta(days=1), dt=timedelta(hours=1)) + except Exception as e: + print(e) + pass # This test is expected to fail + else: + pytest.fail( + "Parcels uses function name to determine kernel support. " + "Aliasing ParcelsRandom to another name is not supported." + )