import time
from agd.AutomaticDifferentiation.Optimization import norm_infinity
from packaging import version
from agd import AutomaticDifferentiation as ad

np.set_printoptions(edgeitems=30,
                    linewidth=100000,
                    formatter=dict(float=lambda x: "%5.3g" % x))

n = 200
hfmIn = HFMUtils.dictIn({
    'model': 'Isotropic2',
    'seeds': [[0., 0.]],
    'verbosity': 0,
    'exportGeodesicFlow': 1,
    'geodesic_hlen': 20,
    'array_float_caster': cp.asarray,
    'geodesic_traits': {
        'debug_print': 1,
    },
})
hfmIn.SetRect([[-1, 1], [-1, 1]], dimx=n + 1, sampleBoundary=True)
X = hfmIn.Grid()
hfmIn.update({
    'cost': np.prod(np.sin(2 * np.pi * X), axis=0) + 1.1,  # Non-constant cost
    'tips': hfmIn.Grid(dims=(5, 4)).reshape(2, -1).T
})
hfmIn['tips'] = hfmIn['tips'][:1, :]

gpuOut = hfmIn.RunGPU()
Example #2
0
hfmIn = HFMUtils.dictIn({
    'model': 'Isotropic2',
    'exportValues': 1,
    #    'order':2,
    #    'verbosity':1,
    'seeds': [[0, 0]],
    #    'kernel':"dummy",
    #    'solver':'AGSI',
    #    'solver':'global_iteration',
    'raiseOnNonConvergence': False,
    'nitermax_o': 8,
    #    'tol':1e-8,
    #    'multiprecision':True,
    #    'values_float64':True,

    #    'help':['nitermax_o','traits'],
    'dims': np.array((n, n)),
    'origin': [-0.5, -0.5],
    'gridScale': 1.,
    #	'order':2,
    #	'order2_threshold':0.3,
    #	'factoringRadius':10000,
    #	'seedRadius':2,
    #	'returns':'in_raw',
    #	'bound_active_blocks':True,
    'traits': {
        'niter_i': 8,
        'shape_i': (4, 4),
        #	'niter_i':1,'shape_i':(8,8),
        #	'niter_i':16,'shape_i':(8,8),
        #	'niter_i':32,'shape_i':(16,16),
        #	'niter_i':48,'shape_i':(24,24),
        #	'niter_i':64,'shape_i':(32,32),
        #   'debug_print':1,
        #    'niter_i':1,
        #    'strict_iter_i_macro':1,
        #	'pruning_macro':1,
        #	'strict_iter_o_macro':1,
    },
    'forwardAD_traits': {
        'debug_print': 1
    },
})
from packaging import version
from agd import AutomaticDifferentiation as ad

np.set_printoptions(edgeitems=30, linewidth=100000, 
    formatter=dict(float=lambda x: "%5.3g" % x))

n=201
hfmIn = HFMUtils.dictIn({
    'model':'Isotropic2',
    'seeds':[[0.,0.]],
    'exportValues':1,
    'cost':cp.array(1.,dtype=np.float32),
    'exportGeodesicFlow':1,
    'tips':[[1,1]],
    'traits':{
#    	'niter_i':16,'shape_i':(8,8),
 #   	'debug_print':1,
    },
    'geodesic_traits':{
#        'debug_print':1,
    },
#    'geodesic_typical_len':25,
#    'geodesic_max_len':40,
})
hfmIn.SetRect([[-1,1],[-1,1]],dimx=n+1,sampleBoundary=True)

gpuOut = hfmIn.RunGPU()

#print("flow",gpuOut['flow'])
print("geodesics : ",gpuOut['geodesics'])
print("stopping criteria : ",gpuOut['geodesic_stopping_criteria'])
HFMUtils.dictIn.RunSmart = cugen.cupy_get_args(HFMUtils.RunSmart,
                                               dtype64=True,
                                               iterables=(dict, Metrics.Base))

xp = cp
n = 7
hfmIn_Constant = HFMUtils.dictIn({
    'model': 'TTI2',
    'arrayOrdering': 'RowMajor',
    'exportValues': 1,
    'seeds': xp.array([[0., 0.]]),
    #    'factoringMethod':'Static',
    'nitermax_o': 1,
    'factoringRadius': 10,
    'nitermax_o': 1,
    #    'seedRadius':2,
    'order': 2,
    'traits': {
        'debug_print': 1,
        'nmix': 2,
    },
    'raiseOnNonConvergence': False
    #    'tips':[[x,y] for y in HFMUtils.CenteredLinspace(-1,1,6)
    #                    for x in HFMUtils.CenteredLinspace(-1,1,6)],
    #    'exportGeodesicFlow':1,
})

hfmIn_Constant.SetRect(sides=[[0, 1], [0, 1]], dimx=n + 1,
                       sampleBoundary=True)  # Define the domain
X = hfmIn_Constant.Grid()  # Horizontal and vertical axis

quad = xp.array([[0.5, 0.1], [0.1, -0.2]])
Example #5
0
hfmIn = HFMUtils.dictIn({
    'model': 'Riemann2',
    #    'verbosity':1,
    'arrayOrdering': 'RowMajor',
    'seeds': [[0, 0]],
    #    'solver':'AGSI',
    #    'solver':'global_iteration',
    'raiseOnNonConvergence': False,
    'nitermax_o': 200,
    'tol': 5 * 1e-7,
    'multiprecision': True,
    #    'values_float64':True,
    'exportValues': True,

    #    'help':['nitermax_o','traits'],
    'dims': np.array((n, n)),
    'origin': [-0.5, -0.5],
    'gridScale': 1.,
    #	'order':2,
    #	'order2_threshold':0.3,
    #	'factoringRadius':10000,
    #	'seedRadius':2,
    #	'returns':'in_raw',
    'traits': {
        'niter_i': 8,
        'shape_i': (4, 4),
        #	'niter_i':1,'shape_i':(8,8),
        #	'niter_i':16,'shape_i':(8,8),
        #	'niter_i':32,'shape_i':(16,16),
        #	'niter_i':48,'shape_i':(24,24),
        #	'niter_i':64,'shape_i':(32,32),
        #   'debug_print':1,
        #    'niter_i':1,
        'strict_iter_i_macro': 1,
        'pruning_macro': 0,
        'strict_iter_o_macro': 1,
    },
    #    'nonzero_untidy_kwargs':{'log2_size_i':8,'size2_i':256},
})
cp = ad.functional.decorate_module_functions(
    cp, cugen.set_output_dtype32
)  # Use float32 and int32 types in place of float64 and int64
plt = ad.functional.decorate_module_functions(plt, cugen.cupy_get_args)
HFMUtils.dictIn.RunSmart = cugen.cupy_get_args(HFMUtils.RunSmart,
                                               dtype64=True,
                                               iterables=(dict, Metrics.Base))

n = 7
hfmIn = HFMUtils.dictIn({
    'model': 'Isotropic2',
    'seeds': [[0., 0.]],
    'exportValues': 1,
    'cost': cp.array(1.),
    'exportGeodesicFlow': 1,
    'traits': {
        'debug_print': 1,
        'shape_i': (8, 8),
        'niter_i': 16,
    },
})
hfmIn.SetRect([[0, 1], [0, 1]], dimx=n + 1, sampleBoundary=True)
X = hfmIn.Grid()
hfmIn['tips'] = hfmIn.Grid(dims=(4, 4)).reshape(2, -1).T

walls = X[0] >= 0.5
hfmIn['walls'] = walls
hfmOut = hfmIn.RunGPU()

print(hfmOut['values'])
print(walls)
    def _solve_pde(self, image=None, vesselness=None, vesselMask=None):

        # TODO: Improve and validate seed-point selection
        # <axis>_seed_point -- traveses through slices in a direction perpendicular to the axis to find seed-point

        eff_vesselMask = vesselMask[:, :, :-10]

        if self.seed_point is None:
            z_seed_point = self._find_seed_point(vesselMask=eff_vesselMask,
                                                 binarize=False)

            print('Seed-point perpendicular to Z-axis = {}. {}, {}'.format(
                z_seed_point[1], z_seed_point[0], z_seed_point[2]))
            # Exchange X and Z axes of vessel mask
            x_seed_point = self._find_seed_point(
                vesselMask=eff_vesselMask.transpose((0, 2, 1)), binarize=False)
            # Swap it back to the right order
            x_seed_point_swapped = np.array(
                [x_seed_point[0], x_seed_point[2], x_seed_point[1]])

            print('Seed-point perpendicular to X-axis = {}, {}, {}'.format(
                x_seed_point_swapped[1], x_seed_point_swapped[0],
                x_seed_point_swapped[2]))

            # Exchange Y and Z axes of vessel mask
            y_seed_point = self._find_seed_point(
                vesselMask=eff_vesselMask.transpose((2, 1, 0)), binarize=False)
            # Swap it back to the right order
            y_seed_point_swapped = np.array(
                [y_seed_point[2], y_seed_point[1], y_seed_point[0]])

            print('Seed-point perpendicular to the Y-axis = {}, {}, {}'.format(
                y_seed_point_swapped[1], y_seed_point_swapped[0],
                y_seed_point_swapped[2]))

            seed_pts = np.array(
                [z_seed_point, x_seed_point_swapped, y_seed_point_swapped])
        else:
            print('User-defined seed-point at {}, {}, {}'.format(
                self.seed_point[1], self.seed_point[0], self.seed_point[2]))
            seed_pts = np.array(
                [[self.seed_point[1], self.seed_point[0], self.seed_point[2]]])

        if self.verbose is True:
            verbosity = 2
            showProgress = 1
        else:
            verbosity = 0
            showProgress = 0

        if self.model.lower() == 'isotropic':
            speed_function = 1 + self.lmbda * np.power(image, self.p)
            params = {
                'model': 'Isotropic3',
                'arrayOrdering': 'YXZ_RowMajor',
                'order': 2,
                'dims': [image.shape[0], image.shape[1], image.shape[2]],
                # size of a pixel (only for physical dimensions)
                'gridScale': 1.,
                'speed': speed_function,
                'seeds': seed_pts,
                'exportValues': self.get_distance_map,
                'exportGeodesicFlow': 1,
                'verbosity': verbosity,
                'showProgress': showProgress
            }

        else:  # self.model = 'riemann'
            if vesselness is None:
                raise RuntimeError(
                    'Riemannian metric tensor needs vesselness function to compute eigenvalues'
                )
            metric_tensor = self.create_riemannian_metric_tensor(
                hessian=image, vesselness=vesselness)

            params = {
                'model': 'Riemann3',
                'arrayOrdering': 'YXZ_RowMajor',
                'order': 2,
                'dims': [image.shape[0], image.shape[1], image.shape[2]],
                # size of a pixel (only for physical dimensions)
                'gridScale': 1.,
                'metric': metric_tensor,
                'seeds': seed_pts,
                'exportValues': 1,
                'verbosity': verbosity,
                'showProgress': showProgress
            }

        self.output = HFMUtils.Run(params)
        return seed_pts
Example #8
0
import cupy as cp
import numpy as np
import time
from agd.AutomaticDifferentiation.Optimization import norm_infinity
from agd import AutomaticDifferentiation as ad

np.set_printoptions(edgeitems=30,
                    linewidth=100000,
                    formatter=dict(float=lambda x: "%5.3g" % x))

#n=20; nTheta=60
n = 100
nTheta = 96
hfmIn = HFMUtils.dictIn({
    'model': 'Elastica2',
    'seeds': cp.array([[0., 0., np.pi]], dtype=np.float32),
    'exportValues': 1,
    'cost': 1,
    'xi': 0.4,
    #    'nitermax_o':1,
    'traits': {
        'OffsetT': np.int32,
        'merge_sort_macro': 1
    }
})
hfmIn.SetRect([[-1, 1], [-1, 1]], dimx=n + 1, sampleBoundary=True)
hfmIn['dims'] = np.append(hfmIn['dims'], nTheta)

hfmOut = hfmIn.RunGPU()
#print(hfmOut['scheme_offsets'][0])