From 94407526233e8144b9e0162ff48e391a28d78e4d Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Thu, 4 Jul 2024 16:47:59 +0200 Subject: [PATCH 01/39] fixing git workflow --- sympde/topology/.DS_Store | Bin 0 -> 6148 bytes sympde/topology/__init__.py | 4 +- sympde/topology/abstract_mapping.py | 55 ++++ ...ical_mapping.py => analytical_mappings.py} | 79 ++++-- sympde/topology/basic.py | 2 +- sympde/topology/callable_mapping.py | 95 ------- sympde/topology/derivatives.py | 6 +- sympde/topology/domain.py | 22 +- .../{mapping.py => symbolic_mapping.py} | 252 ++++++++++-------- 9 files changed, 273 insertions(+), 242 deletions(-) create mode 100644 sympde/topology/.DS_Store create mode 100644 sympde/topology/abstract_mapping.py rename sympde/topology/{analytical_mapping.py => analytical_mappings.py} (69%) delete mode 100644 sympde/topology/callable_mapping.py rename sympde/topology/{mapping.py => symbolic_mapping.py} (88%) diff --git a/sympde/topology/.DS_Store b/sympde/topology/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5005347ada1980709ce77ef55992cbdab5d87341 GIT binary patch literal 6148 zcmeHK!AiqG5S>jEh!mkm@gTYQ0R=xGmiPnq15%q7D>Nj~DtODM34$k2p8OXtzS$Yt zgtmegQJI0+x0#*UoxClX4iUN0{cK1yAfgz`7#v~PBfQSKBY|3Y(fK_Jx}ky=G^c#W z+YG;v0lvFFZY!sn9&vZu`^%TN!*NlSwNE>`dpPV_R#`S(R#SMy=kM!_=hK(Vue@j9 z@U9o_ES|6}MYP5*Y=v>v$+7o#++A(w6@9#(T?am|R(x4)bJ_3FIX|56`6kAIF<=b* zbp}wgS>nE+jmCg6U<_;+;O|2MWlR+tLI3H%;9CG-2(uT=xtHLWL@`xt1hE2f5(<=1 zr!9t)aM%;|OBEYI2`8t`htrdtb|}uDj{OtwPA(O+(HJlWx(xK>alrNe>Tv(x4YDU= zz!>;f47e~GXCu6l*4CYu<64_QCr}plYXmnTnD|l*UoOQbP%p42JOQSPjUX%#`y=3K Lu)!GkQ3gH%*(Ojw literal 0 HcmV?d00001 diff --git a/sympde/topology/__init__.py b/sympde/topology/__init__.py index de44bd3c..2af67729 100644 --- a/sympde/topology/__init__.py +++ b/sympde/topology/__init__.py @@ -2,8 +2,6 @@ from .derivatives import * from .datatype import * from .domain import * -from .mapping import * +from .symbolic_mapping import * from .measure import * from .space import * -from .analytical_mapping import * -from .callable_mapping import * diff --git a/sympde/topology/abstract_mapping.py b/sympde/topology/abstract_mapping.py new file mode 100644 index 00000000..7293f2df --- /dev/null +++ b/sympde/topology/abstract_mapping.py @@ -0,0 +1,55 @@ +from abc import ABC, ABCMeta, abstractmethod +from sympy import IndexedBase + +__all__ = ( + 'MappingMeta', + 'AbstractMapping', +) + +class MappingMeta(ABCMeta,type(IndexedBase)): + pass + +#============================================================================== +class AbstractMapping(ABC,metaclass=MappingMeta): + """ + Transformation of coordinates, which can be evaluated. + + F: R^l -> R^p + F(eta) = x + + with l <= p + """ + @abstractmethod + def __call__(self, *args): + """ Evaluate mapping at either a list of nd-arrays or the full domain.""" + + @abstractmethod + def jacobian_eval( self, *args ): + """ Compute Jacobian matrix at the list of nd-arrays. """ + + @abstractmethod + def jacobian_inv_eval( self, *args ): + """ Compute inverse Jacobian matrix at the list of nd-arrays. + An exception should be raised if the matrix is singular. + """ + + @abstractmethod + def metric_eval( self, *args ): + """ Compute components of metric tensor at list of nd-arrays. """ + + @abstractmethod + def metric_det_eval( self, *args ): + """ Compute determinant of metric tensor at the list of nd-arrays. """ + + @property + @abstractmethod + def ldim( self ): + """ Number of logical/parametric dimensions in mapping + (= number of eta components). + """ + + @property + @abstractmethod + def pdim( self ): + """ Number of physical dimensions in mapping + (= number of x components).""" \ No newline at end of file diff --git a/sympde/topology/analytical_mapping.py b/sympde/topology/analytical_mappings.py similarity index 69% rename from sympde/topology/analytical_mapping.py rename to sympde/topology/analytical_mappings.py index 05b9760b..cc96e289 100644 --- a/sympde/topology/analytical_mapping.py +++ b/sympde/topology/analytical_mappings.py @@ -1,8 +1,8 @@ -from .mapping import Mapping +from .symbolic_mapping import AnalyticMapping -class IdentityMapping(Mapping): +class IdentityMapping(AnalyticMapping): """ - Represents an identity 1D/2D/3D Mapping object. + Represents an identity 1D/2D/3D AnalyticMapping object. Examples @@ -12,9 +12,9 @@ class IdentityMapping(Mapping): 'z': 'x3'} #============================================================================== -class AffineMapping(Mapping): +class AffineMapping(AnalyticMapping): """ - Represents a 1D/2D/3D Affine Mapping object. + Represents a 1D/2D/3D Affine AnalyticMapping object. Examples @@ -24,9 +24,9 @@ class AffineMapping(Mapping): 'z': 'c3 + a31*x1 + a32*x2 + a33*x3'} #============================================================================== -class PolarMapping(Mapping): +class PolarMapping(AnalyticMapping): """ - Represents a Polar 2D Mapping object (Annulus). + Represents a Polar 2D AnalyticMapping object (Annulus). Examples @@ -38,9 +38,9 @@ class PolarMapping(Mapping): _pdim = 2 #============================================================================== -class TargetMapping(Mapping): +class TargetMapping(AnalyticMapping): """ - Represents a Target 2D Mapping object. + Represents a Target 2D AnalyticMapping object. Examples @@ -52,9 +52,9 @@ class TargetMapping(Mapping): _pdim = 2 #============================================================================== -class CzarnyMapping(Mapping): +class CzarnyMapping(AnalyticMapping): """ - Represents a Czarny 2D Mapping object. + Represents a Czarny 2D AnalyticMapping object. Examples @@ -67,19 +67,15 @@ class CzarnyMapping(Mapping): _pdim = 2 #============================================================================== -class CollelaMapping2D(Mapping): - """ - Represents a Collela 2D Mapping object. - - """ - _expressions = {'x': '2.*(x1 + eps*sin(2.*pi*k1*x1)*sin(2.*pi*k2*x2)) - 1.', - 'y': '2.*(x2 + eps*sin(2.*pi*k1*x1)*sin(2.*pi*k2*x2)) - 1.'} +class CollelaMapping2D(AnalyticMapping): - _ldim = 2 - _pdim = 2 + _ldim = 2 + _pdim = 2 + _expressions = {'x': 'a * (x1 + eps / (2*pi) * sin(2*pi*x1) * sin(2*pi*x2))', + 'y': 'b * (x2 + eps / (2*pi) * sin(2*pi*x1) * sin(2*pi*x2))'} #============================================================================== -class TorusMapping(Mapping): +class TorusMapping(AnalyticMapping): """ Parametrization of a torus (or a portion of it) of major radius R0, using toroidal coordinates (x1, x2, x3) = (r, theta, phi), where: @@ -98,7 +94,7 @@ class TorusMapping(Mapping): #============================================================================== # TODO [YG, 07.10.2022]: add test in sympde/topology/tests/test_logical_expr.py -class TorusSurfaceMapping(Mapping): +class TorusSurfaceMapping(AnalyticMapping): """ 3D surface obtained by "slicing" the torus above at r = a. The parametrization uses the coordinates (x1, x2) = (theta, phi), where: @@ -116,7 +112,7 @@ class TorusSurfaceMapping(Mapping): #============================================================================== # TODO [YG, 07.10.2022]: add test in sympde/topology/tests/test_logical_expr.py -class TwistedTargetSurfaceMapping(Mapping): +class TwistedTargetSurfaceMapping(AnalyticMapping): """ 3D surface obtained by "twisting" the TargetMapping out of the (x, y) plane @@ -129,7 +125,7 @@ class TwistedTargetSurfaceMapping(Mapping): _pdim = 3 #============================================================================== -class TwistedTargetMapping(Mapping): +class TwistedTargetMapping(AnalyticMapping): """ 3D volume obtained by "extruding" the TwistedTargetSurfaceMapping along z. @@ -142,7 +138,7 @@ class TwistedTargetMapping(Mapping): _pdim = 3 #============================================================================== -class SphericalMapping(Mapping): +class SphericalMapping(AnalyticMapping): """ Parametrization of a sphere (or a portion of it) using spherical coordinates (x1, x2, x3) = (r, theta, phi), where: @@ -158,3 +154,36 @@ class SphericalMapping(Mapping): _ldim = 3 _pdim = 3 + +class Collela3D( AnalyticMapping ): + + _expressions = {'x':'2.*(x1 + 0.1*sin(2.*pi*x1)*sin(2.*pi*x2)) - 1.', + 'y':'2.*(x2 + 0.1*sin(2.*pi*x1)*sin(2.*pi*x2)) - 1.', + 'z':'2.*x3 - 1.'} + + +class TransposedPolarMapping( AnalyticMapping ): + """ + Represents a Transposed (x1 <> x2) Polar 2D Mapping object (Annulus). + + Examples + + """ + _expressions = {'x': 'c1 + (rmin*(1-x2)+rmax*x2)*cos(x1)', + 'y': 'c2 + (rmin*(1-x2)+rmax*x2)*sin(x1)'} + + _ldim = 2 + _pdim = 2 + +class TransposedPolarMapping( AnalyticMapping ): + """ + Represents a Transposed (x1 <> x2) Polar 2D Mapping object (Annulus). + + Examples + + """ + _expressions = {'x': 'c1 + (rmin*(1-x2)+rmax*x2)*cos(x1)', + 'y': 'c2 + (rmin*(1-x2)+rmax*x2)*sin(x1)'} + + _ldim = 2 + _pdim = 2 \ No newline at end of file diff --git a/sympde/topology/basic.py b/sympde/topology/basic.py index 07050c61..60939e57 100644 --- a/sympde/topology/basic.py +++ b/sympde/topology/basic.py @@ -324,7 +324,7 @@ def rotate(self, *directions): raise NotImplementedError('only 2d case is available') def join(self, boundary, ornt=None): - from sympde.topology.mapping import InterfaceMapping + from sympde.topology.symbolic_mapping import InterfaceMapping # TODO be careful with '|' in psydac if self.mapping and boundary.mapping: int_map = InterfaceMapping(self.mapping , boundary.mapping) diff --git a/sympde/topology/callable_mapping.py b/sympde/topology/callable_mapping.py deleted file mode 100644 index f1f4d60f..00000000 --- a/sympde/topology/callable_mapping.py +++ /dev/null @@ -1,95 +0,0 @@ -from sympy import Symbol - -from sympde.utilities.utils import lambdify_sympde -from .mapping import Mapping, BasicCallableMapping - -__all__ = ('CallableMapping',) - -#============================================================================== -class CallableMapping(BasicCallableMapping): - - def __init__( self, mapping, **kwargs ): - - # Extract information from class - assert isinstance(mapping, Mapping) - - variables = mapping.logical_coordinates - expressions = mapping.expressions - - jac = mapping.jacobian_expr - inv_jac = mapping.jacobian_inv_expr - - metric = mapping.metric_expr - metric_det = mapping.metric_det_expr - - constants = mapping.constants - params = {a.name:a for a in constants} - params.update( kwargs ) - for p in params.values(): - assert not isinstance(p, Symbol) - - if params: - subs = {a:params[a.name] for a in constants} - expressions = expressions.subs(subs) - jac = jac.subs(subs) - inv_jac = inv_jac.subs(subs) - metric = metric.subs(subs) - metric_det = metric_det.subs(subs) - - # Callable function: __call__ - self._func_eval = tuple(lambdify_sympde( variables, expr) for expr in expressions) - - # Callable function: jac_mat - self._jacobian = lambdify_sympde( variables, jac) - - # Callable function: jac_mat_inv - self._jacobian_inv = lambdify_sympde( variables, inv_jac) - - # Callable function: metric - self._metric = lambdify_sympde( variables, metric) - - # Callable function: metric_det - self._metric_det = lambdify_sympde( variables, metric_det) - - # Symbolic information - self._params = params - self._symbolic_mapping = mapping - - #-------------------------------------------------------------------------- - # Abstract interface - #-------------------------------------------------------------------------- - def __call__(self, *eta): - return tuple( f( *eta ) for f in self._func_eval) - - def jacobian(self, *eta): - return self._jacobian( *eta ) - - def jacobian_inv(self, *eta): - """ Compute the inverse Jacobian matrix, if possible.""" - return self._jacobian_inv(*eta) - - def metric(self, *eta): - return self._metric( *eta ) - - def metric_det(self, *eta): - return self._metric_det( *eta ) - - @property - def ldim(self): - return self.symbolic_mapping.ldim - - @property - def pdim(self): - return self.symbolic_mapping.pdim - - #-------------------------------------------------------------------------- - # Symbolic information - #-------------------------------------------------------------------------- - @property - def params( self ): - return self._params - - @property - def symbolic_mapping( self ): - return self._symbolic_mapping - diff --git a/sympde/topology/derivatives.py b/sympde/topology/derivatives.py index f5d3537a..c672fd26 100644 --- a/sympde/topology/derivatives.py +++ b/sympde/topology/derivatives.py @@ -29,6 +29,8 @@ from .space import ScalarFunction, VectorFunction, IndexedVectorFunction +from .symbolic_mapping import AnalyticMapping, Jacobian + #============================================================================== class DifferentialOperator(LinearOperator): """ @@ -106,7 +108,7 @@ def eval(cls, expr): elif isinstance(expr, Expr): x = Symbol(cls.coordinate) if cls.logical: - M = expr.atoms(Mapping) + M = expr.atoms(AnalyticMapping) if len(M)>0: M = list(M)[0] expr_primes = [diff(expr, M[i]) for i in range(M.pdim)] @@ -1288,5 +1290,5 @@ def get_max_logical_partial_derivatives(expr, F=None): if v > d[k]: d[k] = v return d -from .mapping import Mapping, Jacobian + diff --git a/sympde/topology/domain.py b/sympde/topology/domain.py index e2cccd92..c761b5bd 100644 --- a/sympde/topology/domain.py +++ b/sympde/topology/domain.py @@ -23,11 +23,11 @@ from .basic import BasicDomain, InteriorDomain, Boundary, Union, Connectivity from .basic import Interval, Interface, CornerBoundary, CornerInterface from .basic import ProductDomain - +from sympde.topology.abstract_mapping import AbstractMapping # TODO fix circular dependency between domain and mapping -if TYPE_CHECKING: - from sympde.topology.mapping import Mapping -# TODO add pdim +'''if TYPE_CHECKING: + from sympde.topology.abstract_mapping import AbstractMapping +# TODO add pdim''' iterable_types = (tuple, list, Tuple, Union) @@ -46,7 +46,7 @@ def __new__(cls, name : str, *, boundaries : TypeUnion[Iterable[Boundary], Boundary, None] = None, dim : Optional[int] = None, connectivity : Optional[Connectivity] = None, - mapping : Optional[Mapping] = None, + mapping : Optional[AbstractMapping] = None, logical_domain : Optional[Domain] = None): """ Interiors or connectivity must be given. When the mapping is given @@ -176,7 +176,7 @@ def boundary(self) -> TypeUnion[Union, Boundary]: return self.args[2] @property - def mapping(self) -> Optional[Mapping]: + def mapping(self) -> Optional[AbstractMapping]: """The mapping that maps the logical domain to the physical domain""" return self.args[3] @@ -337,7 +337,7 @@ def from_file( cls, filename ): if not(ext == '.h5'): raise ValueError('> Only h5 files are supported') # ... - from sympde.topology.mapping import Mapping, MultiPatchMapping + from sympde.topology.symbolic_mapping import AnalyticMapping, MultiPatchMapping h5 = h5py.File( filename, mode='r' ) yml = yaml.load( h5['topology.yml'][()], Loader=yaml.SafeLoader ) @@ -348,7 +348,7 @@ def from_file( cls, filename ): d_interior = yml['interior'] d_boundary = yml['boundary'] d_connectivity = yml['connectivity'] - + if dtype == 'None': dtype = None assert dtype is not None @@ -356,10 +356,10 @@ def from_file( cls, filename ): if isinstance(d_interior, dict): d_interior = [d_interior] dtype = [dtype] - + constructors = [globals()[dt['type']] for dt in dtype] interiors = [cs(i['name'], **dt['parameters']) for cs,i,dt in zip(constructors, d_interior, dtype)] - mappings = [Mapping(I['mapping'], dim=dim) if I.get('mapping', "None") != "None" else None for I in d_interior] + mappings = [AnalyticMapping(I['mapping'], dim=dim) if I.get('mapping', "None") != "None" else None for I in d_interior] domains = [mapping(i) if mapping else i for i,mapping in zip(interiors, mappings)] patch_index = {I.name:ind for ind,I in enumerate(interiors)} @@ -403,7 +403,7 @@ def join(cls, patches, connectivity, name): assert all(p.dim==patches[0].dim for p in patches) dim = int(patches[0].dim) - from sympde.topology.mapping import MultiPatchMapping + from sympde.topology.symbolic_mapping import MultiPatchMapping # ... connectivity interfaces = {} boundaries = [] diff --git a/sympde/topology/mapping.py b/sympde/topology/symbolic_mapping.py similarity index 88% rename from sympde/topology/mapping.py rename to sympde/topology/symbolic_mapping.py index 5c8b6589..d4a399ae 100644 --- a/sympde/topology/mapping.py +++ b/sympde/topology/symbolic_mapping.py @@ -1,5 +1,6 @@ # coding: utf-8 -from abc import ABC, abstractmethod +import numpy as np + from sympy import Indexed, IndexedBase, Idx from sympy import Matrix, ImmutableDenseMatrix from sympy import Function, Expr @@ -28,8 +29,8 @@ from .basic import BasicDomain, Union, InteriorDomain from .basic import Boundary, Connectivity, Interface -from .domain import Domain, NCubeInterior -from .domain import NormalVector +from .domain import Domain, NCubeInterior +from .domain import NormalVector from .space import ScalarFunction, VectorFunction, IndexedVectorFunction from .space import Trace from .datatype import HcurlSpaceType, H1SpaceType, L2SpaceType, HdivSpaceType, UndefinedSpaceType @@ -39,12 +40,18 @@ from .derivatives import _logical_partial_derivatives from .derivatives import get_atom_logical_derivatives, get_index_logical_derivatives_atom from .derivatives import LogicalGrad_1d, LogicalGrad_2d, LogicalGrad_3d +import itertools as it +from sympy import lambdify + +from .abstract_mapping import AbstractMapping + +from sympde.utilities.utils import lambdify_sympde # TODO fix circular dependency between sympde.topology.domain and sympde.topology.mapping # TODO fix circular dependency between sympde.expr.evaluation and sympde.topology.mapping __all__ = ( - 'BasicCallableMapping', + 'AnalyticMapping', 'Contravariant', 'Covariant', 'InterfaceMapping', @@ -85,55 +92,9 @@ def get_logical_test_function(u): return el #============================================================================== -class BasicCallableMapping(ABC): +class AnalyticMapping(BasicMapping,AbstractMapping): """ - Transformation of coordinates, which can be evaluated. - - F: R^l -> R^p - F(eta) = x - - with l <= p - """ - @abstractmethod - def __call__(self, *eta): - """ Evaluate mapping at location eta. """ - - @abstractmethod - def jacobian(self, *eta): - """ Compute Jacobian matrix at location eta. """ - - @abstractmethod - def jacobian_inv(self, *eta): - """ Compute inverse Jacobian matrix at location eta. - An exception should be raised if the matrix is singular. - """ - - @abstractmethod - def metric(self, *eta): - """ Compute components of metric tensor at location eta. """ - - @abstractmethod - def metric_det(self, *eta): - """ Compute determinant of metric tensor at location eta. """ - - @property - @abstractmethod - def ldim(self): - """ Number of logical/parametric dimensions in mapping - (= number of eta components). - """ - - @property - @abstractmethod - def pdim(self): - """ Number of physical dimensions in mapping - (= number of x components). - """ - -#============================================================================== -class Mapping(BasicMapping): - """ - Represents a Mapping object. + Represents a AnalyticMapping object. Examples @@ -249,37 +210,28 @@ def __new__(cls, name, dim=None, **kwargs): else: obj._jac = Jacobian(obj) + obj._func_eval = None + obj._jac_eval = None + obj._inv_jac_eval = None + obj._metric_eval = None + obj._metric_det_eval = None obj._metric = obj._jac.T*obj._jac obj._metric_det = obj._metric.det() + if obj.expressions : + obj._func_eval = tuple(lambdify_sympde( obj._logical_coordinates, expr) for expr in obj._expressions) + obj._jac_eval = lambdify_sympde( obj._logical_coordinates, obj._jac) + obj._inv_jac_eval = lambdify_sympde( obj._logical_coordinates, obj._inv_jac) + obj._metric_eval = lambdify_sympde( obj._logical_coordinates, obj._metric) + obj._metric_det_eval = lambdify_sympde( obj._logical_coordinates, obj._metric_det) + return obj + #-------------------------------------------------------------------------- - # Callable mapping - #-------------------------------------------------------------------------- - def get_callable_mapping(self): - if self._callable_map is None: - if self._expressions is None: - msg = 'Cannot generate callable mapping without analytical expressions. '\ - 'A user-defined callable mapping of type `BasicCallableMapping` '\ - 'can be provided using the method `set_callable_mapping`.' - raise ValueError(msg) - - from sympde.topology.callable_mapping import CallableMapping - self._callable_map = CallableMapping(self) - - return self._callable_map - - def set_callable_mapping(self, F): - - if not isinstance(F, BasicCallableMapping): - raise TypeError( - f'F must be a BasicCallableMapping, got {type(F)} instead') - - self._callable_map = F - - #-------------------------------------------------------------------------- + #Abstract Interface : + @property def name( self ): return self._name @@ -291,6 +243,99 @@ def ldim( self ): @property def pdim( self ): return self._pdim + + def _evaluate_domain( self, domain ): + assert(isinstance(domain, BasicDomain)) + return MappedDomain(self, domain) + + def _evaluate( self, *Xs ): + #int, float or numpy arrays + if self._func_eval is None : + raise TypeError("not a callable object") + else : + assert len(Xs)==self.ldim + Xshape = np.shape(Xs[0]) + for X in Xs: + assert np.shape(X) == Xshape + return tuple( f( *Xs ) for f in self._func_eval) + + def _jacobian_evaluate( self, *Xs ): + #int, float or numpy arrays + if self._jac_eval is None: + raise TypeError("not a callable object") + else : + assert len(Xs)==self.ldim + Xshape = np.shape(Xs[0]) + for X in Xs: + assert np.shape(X) == Xshape + return self._jac_eval( *Xs ) + + def _jacobian_inv_evaluate( self, *Xs ): + #int, float or numpy arrays + if self._inv_jac_eval is None: + raise TypeError("not a callable object") + else : + assert len(Xs)==self.ldim + Xshape = np.shape(Xs[0]) + for X in Xs: + assert np.shape(X) == Xshape + return self._inv_jac_eval( *Xs ) + + def _metric_evaluate( self, *Xs ): + if self._metric_eval is None: + raise TypeError("not a callable object") + else : + assert len(Xs)==self.ldim + Xshape = np.shape(Xs[0]) + for X in Xs: + assert np.shape(X) == Xshape + return self._metric_eval( *Xs ) + + def _metric_det_evaluate( self, *Xs ): + if self._metric_det_eval is None: + raise TypeError("not a callable object") + else : + assert len(Xs)==self.ldim + Xshape = np.shape(Xs[0]) + for X in Xs: + assert np.shape(X) == Xshape + return self._metric_det_eval( *Xs ) + + def __call__( self, *args ): + if len(args) == 1 and isinstance(args[0], BasicDomain): + return self._evaluate_domain(args[0]) + elif all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): + return self._evaluate(*args) + else: + raise TypeError("Invalid arguments for __call__") + + + def jacobian_eval( self, *args ): + if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): + return self._jacobian_evaluate(*args) + else: + raise TypeError("Invalid arguments for jacobian_eval") + + def jacobian_inv_eval( self, *args ): + if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): + return self._jacobian_evaluate(*args) + else: + raise TypeError("Invalid arguments for jacobian_inv_eval") + + def metric_eval( self, *args ): + if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): + return self._metric_evaluate(*args) + else: + raise TypeError("Invalid arguments for metric_eval") + + + def metric_det_eval( self, *args ): + if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): + return self._metric_det_evaluate(*args) + else: + raise TypeError("Invalid arguments for metric_det_eval") + +#-------------------------------------------------------------------------- @property def coordinates( self ): @@ -306,10 +351,6 @@ def logical_coordinates( self ): else: return self._logical_coordinates - def __call__(self, domain): - assert(isinstance(domain, BasicDomain)) - return MappedDomain(self, domain) - @property def jacobian( self ): return self._jacobian @@ -365,7 +406,7 @@ def set_plus_minus( self, **kwargs): self._is_minus = minus def copy(self): - obj = Mapping(self.name, + obj = AnalyticMapping(self.name, ldim=self.ldim, pdim=self.pdim, evaluate=False) @@ -398,23 +439,24 @@ def _eval_subs(self, old, new): def _sympystr(self, printer): sstr = printer.doprint return sstr(self.name) - + + #============================================================================== -class InverseMapping(Mapping): +class InverseMapping(AnalyticMapping): def __new__(cls, mapping): - assert isinstance(mapping, Mapping) + assert isinstance(mapping, AnalyticMapping) name = mapping.name ldim = mapping.ldim pdim = mapping.pdim coords = mapping.logical_coordinates jacobian = mapping.jacobian.inv() - return Mapping.__new__(cls, name, ldim=ldim, pdim=pdim, coordinates=coords, jacobian=jacobian) + return AnalyticMapping.__new__(cls, name, ldim=ldim, pdim=pdim, coordinates=coords, jacobian=jacobian) #============================================================================== class JacobianSymbol(MatrixSymbolicExpr): _axis = None def __new__(cls, mapping, axis=None): - assert isinstance(mapping, Mapping) + assert isinstance(mapping, AnalyticMapping) if axis is not None: assert isinstance(axis, (int, Integer)) obj = MatrixSymbolicExpr.__new__(cls, mapping) @@ -442,7 +484,7 @@ def __hash__(self): return hash(self._hashable_content()) def _eval_subs(self, old, new): - if isinstance(new, Mapping): + if isinstance(new, AnalyticMapping): if self.axis is not None: obj = JacobianSymbol(new, self.axis) else: @@ -461,7 +503,7 @@ class JacobianInverseSymbol(MatrixSymbolicExpr): _axis = None is_Matrix = False def __new__(cls, mapping, axis=None): - assert isinstance(mapping, Mapping) + assert isinstance(mapping, AnalyticMapping) if axis is not None: assert isinstance(axis, int) obj = MatrixSymbolicExpr.__new__(cls, mapping) @@ -493,21 +535,21 @@ def _sympystr(self, printer): return 'Jacobian({})**(-1)'.format(sstr(self.mapping.name)) #============================================================================== -class InterfaceMapping(Mapping): +class InterfaceMapping(AnalyticMapping): """ InterfaceMapping is used to represent a mapping in the interface. Attributes ---------- - minus : Mapping + minus : AnalyticMapping the mapping on the negative direction of the interface - plus : Mapping + plus : AnalyticMapping the mapping on the positive direction of the interface """ def __new__(cls, minus, plus): - assert isinstance(minus, Mapping) - assert isinstance(plus, Mapping) + assert isinstance(minus, AnalyticMapping) + assert isinstance(plus, AnalyticMapping) minus = minus.copy() plus = plus.copy() @@ -515,7 +557,7 @@ def __new__(cls, minus, plus): plus.set_plus_minus(plus=True) name = '{}|{}'.format(str(minus.name), str(plus.name)) - obj = Mapping.__new__(cls, name, ldim=minus.ldim, pdim=minus.pdim) + obj = AnalyticMapping.__new__(cls, name, ldim=minus.ldim, pdim=minus.pdim) obj._minus = minus obj._plus = plus return obj @@ -541,7 +583,7 @@ def _eval_simplify(self, **kwargs): return self #============================================================================== -class MultiPatchMapping(Mapping): +class MultiPatchMapping(AnalyticMapping): def __new__(cls, dic): assert isinstance( dic, dict) @@ -587,7 +629,7 @@ class MappedDomain(BasicDomain): @cacheit def __new__(cls, mapping, logical_domain): - assert(isinstance(mapping, Mapping)) + assert(isinstance(mapping,AbstractMapping)) assert(isinstance(logical_domain, BasicDomain)) if isinstance(logical_domain, Domain): kwargs = dict( @@ -737,7 +779,7 @@ def eval(cls, F): Parameters: ---------- - F: Mapping + F: AnalyticMapping mapping object Returns: @@ -746,8 +788,8 @@ def eval(cls, F): the jacobian matrix """ - if not isinstance(F, Mapping): - raise TypeError('> Expecting a Mapping object') + if not isinstance(F, AnalyticMapping): + raise TypeError('> Expecting a AnalyticMapping object') if F.jacobian_expr is not None: return F.jacobian_expr @@ -785,7 +827,7 @@ def eval(cls, F, v): Parameters: ---------- - F: Mapping + F: AnalyticMapping mapping object v: @@ -834,7 +876,7 @@ def eval(cls, F, v): Parameters: ---------- - F: Mapping + F: AnalyticMapping mapping object v: @@ -846,8 +888,8 @@ def eval(cls, F, v): the contravariant transformation """ - if not isinstance(F, Mapping): - raise TypeError('> Expecting a Mapping') + if not isinstance(F, AnalyticMapping): + raise TypeError('> Expecting a AnalyticMapping') if not isinstance(v, (tuple, list, Tuple, ImmutableDenseMatrix, Matrix)): raise TypeError('> Expecting a tuple, list, Tuple, Matrix') @@ -1339,7 +1381,7 @@ def eval(cls, *_args, **kwargs): elif isinstance(expr, Indexed): base = expr.base - if isinstance(base, Mapping): + if isinstance(base, AnalyticMapping): if expr.indices[0] == 0: name = 'x' elif expr.indices[0] == 1: @@ -1384,7 +1426,7 @@ def eval(cls, *_args, **kwargs): code += k*n return cls.eval(atom, code=code) - elif isinstance(expr, Mapping): + elif isinstance(expr, AnalyticMapping): return Symbol(expr.name) # ... this must be done here, otherwise codegen for FEM will not work From 4ebd475d613cae632d7f8ea6b362ae8c23cbb5a9 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Thu, 4 Jul 2024 17:46:40 +0200 Subject: [PATCH 02/39] fixing the workflow so psydac runs --- sympde/expr/evaluation.py | 4 +- sympde/topology/derivatives.py | 4 +- sympde/topology/symbolic_mapping.py | 82 ++++++++++++++++++++++++++++- sympde/utilities/utils.py | 81 +--------------------------- 4 files changed, 87 insertions(+), 84 deletions(-) diff --git a/sympde/expr/evaluation.py b/sympde/expr/evaluation.py index e75189be..8e9bc549 100644 --- a/sympde/expr/evaluation.py +++ b/sympde/expr/evaluation.py @@ -31,8 +31,8 @@ from sympde.topology.basic import Boundary, Interface from sympde.topology.basic import InteriorDomain from sympde.topology.domain import NormalVector, TangentVector, NCube, NCubeInterior -from sympde.topology.mapping import JacobianSymbol, InterfaceMapping, MultiPatchMapping, JacobianInverseSymbol -from sympde.topology.mapping import LogicalExpr, PullBack +from sympde.topology.symbolic_mapping import JacobianSymbol, InterfaceMapping, MultiPatchMapping, JacobianInverseSymbol +from sympde.topology.symbolic_mapping import LogicalExpr, PullBack # TODO fix circular dependency between sympde.expr.evaluation and sympde.topology.mapping diff --git a/sympde/topology/derivatives.py b/sympde/topology/derivatives.py index c672fd26..59dd01cc 100644 --- a/sympde/topology/derivatives.py +++ b/sympde/topology/derivatives.py @@ -29,7 +29,7 @@ from .space import ScalarFunction, VectorFunction, IndexedVectorFunction -from .symbolic_mapping import AnalyticMapping, Jacobian + #============================================================================== class DifferentialOperator(LinearOperator): @@ -1291,4 +1291,4 @@ def get_max_logical_partial_derivatives(expr, F=None): return d - +from .symbolic_mapping import AnalyticMapping, Jacobian diff --git a/sympde/topology/symbolic_mapping.py b/sympde/topology/symbolic_mapping.py index d4a399ae..8bd512ef 100644 --- a/sympde/topology/symbolic_mapping.py +++ b/sympde/topology/symbolic_mapping.py @@ -45,7 +45,6 @@ from .abstract_mapping import AbstractMapping -from sympde.utilities.utils import lambdify_sympde # TODO fix circular dependency between sympde.topology.domain and sympde.topology.mapping # TODO fix circular dependency between sympde.expr.evaluation and sympde.topology.mapping @@ -67,6 +66,7 @@ 'SymbolicExpr', 'SymbolicWeightedVolume', 'get_logical_test_function', + 'lambdify_sympde', ) #============================================================================== @@ -91,6 +91,86 @@ def get_logical_test_function(u): el = l_space.element(u.name) return el + +def lambdify_sympde(variables, expr): + """ + Custom lambify function that covers the + shortcomings of sympy's lambdify. Most notably, + this function uses numpy broadcasting rules to + compute the shape of the output. + + Parameters + ---------- + variables : sympy.core.symbol.Symbol or list of sympy.core.symbol.Symbol + variables that appear in the expression + expr : + Sympy expression + + Returns + ------- + lambda_f : callable + Lambdified function built using numpy. + + Notes + ----- + Compared to Sympy's lambdify, this function + is capable of properly handling constant values, + and array_like structures where not all components + depend on all variables. See below. + + Examples + -------- + >>> import numpy as np + >>> from sympy import symbols, Matrix + >>> from sympde.utilities.utils import lambdify_sympde + >>> x, y = symbols("x,y") + >>> expr = Matrix([[x, x + y], [0, y]]) + >>> f = lambdify_sympde([x,y], expr) + >>> f(np.array([[0, 1]]), np.array([[2], [3]])) + array([[[[0., 1.], + [0., 1.]], + + [[2., 3.], + [3., 4.]]], + + + [[[0., 0.], + [0., 0.]], + + [[2., 2.], + [3., 3.]]]]) + """ + array_expr = np.asarray(expr) + scalar_shape = array_expr.shape + if scalar_shape == (): + f = lambdify(variables, expr, 'numpy') + def f_vec_sc(*XYZ): + b = np.broadcast(*XYZ) + if b.ndim == 0: + return f(*XYZ) + temp = np.asarray(f(*XYZ)) + if b.shape == temp.shape: + return temp + + result = np.zeros(b.shape) + result[...] = temp + return result + return f_vec_sc + + else: + scalar_functions = {} + for multi_index in it.product(*tuple(range(s) for s in scalar_shape)): + scalar_functions[multi_index] = lambdify(variables, array_expr[multi_index], 'numpy') + + def f_vec_v(*XYZ): + b = np.broadcast(*XYZ) + result = np.zeros(scalar_shape + b.shape) + for multi_index in it.product(*tuple(range(s) for s in scalar_shape)): + result[multi_index] = scalar_functions[multi_index](*XYZ) + return result + return f_vec_v + + #============================================================================== class AnalyticMapping(BasicMapping,AbstractMapping): """ diff --git a/sympde/utilities/utils.py b/sympde/utilities/utils.py index 3496a1df..abec7b8b 100644 --- a/sympde/utilities/utils.py +++ b/sympde/utilities/utils.py @@ -5,86 +5,9 @@ from mpl_toolkits.mplot3d import * import matplotlib.pyplot as plt -from sympde.topology import IdentityMapping, InteriorDomain, MultiPatchMapping -from sympde.topology.analytical_mapping import TorusMapping +from sympde.topology import InteriorDomain, MultiPatchMapping +from sympde.topology.analytical_mappings import TorusMapping, IdentityMapping -def lambdify_sympde(variables, expr): - """ - Custom lambify function that covers the - shortcomings of sympy's lambdify. Most notably, - this function uses numpy broadcasting rules to - compute the shape of the output. - - Parameters - ---------- - variables : sympy.core.symbol.Symbol or list of sympy.core.symbol.Symbol - variables that appear in the expression - expr : - Sympy expression - - Returns - ------- - lambda_f : callable - Lambdified function built using numpy. - - Notes - ----- - Compared to Sympy's lambdify, this function - is capable of properly handling constant values, - and array_like structures where not all components - depend on all variables. See below. - - Examples - -------- - >>> import numpy as np - >>> from sympy import symbols, Matrix - >>> from sympde.utilities.utils import lambdify_sympde - >>> x, y = symbols("x,y") - >>> expr = Matrix([[x, x + y], [0, y]]) - >>> f = lambdify_sympde([x,y], expr) - >>> f(np.array([[0, 1]]), np.array([[2], [3]])) - array([[[[0., 1.], - [0., 1.]], - - [[2., 3.], - [3., 4.]]], - - - [[[0., 0.], - [0., 0.]], - - [[2., 2.], - [3., 3.]]]]) - """ - array_expr = np.asarray(expr) - scalar_shape = array_expr.shape - if scalar_shape == (): - f = lambdify(variables, expr, 'numpy') - def f_vec_sc(*XYZ): - b = np.broadcast(*XYZ) - if b.ndim == 0: - return f(*XYZ) - temp = np.asarray(f(*XYZ)) - if b.shape == temp.shape: - return temp - - result = np.zeros(b.shape) - result[...] = temp - return result - return f_vec_sc - - else: - scalar_functions = {} - for multi_index in it.product(*tuple(range(s) for s in scalar_shape)): - scalar_functions[multi_index] = lambdify(variables, array_expr[multi_index], 'numpy') - - def f_vec_v(*XYZ): - b = np.broadcast(*XYZ) - result = np.zeros(scalar_shape + b.shape) - for multi_index in it.product(*tuple(range(s) for s in scalar_shape)): - result[multi_index] = scalar_functions[multi_index](*XYZ) - return result - return f_vec_v def plot_domain(domain, draw=True, isolines=False, refinement=None): From 6b6a14aa9ca543cf05e214178ba9b72958690590 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Fri, 5 Jul 2024 18:13:00 +0200 Subject: [PATCH 03/39] rectifying error of jacobian_inv_eval method --- .DS_Store | Bin 0 -> 8196 bytes sympde/topology/symbolic_mapping.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1b40271ff946e9a375f1f93764cd53af6f5155e4 GIT binary patch literal 8196 zcmeHMJ#Q016r4Rhm&>r9)Q^ z<2N71GaJ7{F_xX@Pi;C(=1@m&WpCyV3sr((qjvn-tw{Z(Q^^*UI1A z*t>l3!_7E8I5a*T1r8V~9jp@yfg2G9E!tcC;UnG}_h)G31pA4PWBde%l#WYs)op znNB@s9!rOA0oV0k+|Z^D9G?RXN8OSA|E=ZE|Bp|gGOGjXz#n(OG`kyJ`B~wX<~m=( usg!+_U7F;T4s8hsNs)QG9VgEJFywLSW0}X&AtP-1L%`aggF5h69ry) Date: Mon, 8 Jul 2024 10:50:44 +0200 Subject: [PATCH 04/39] add AnalytciMapping to sympde/topology/__init__.py --- sympde/topology/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sympde/topology/__init__.py b/sympde/topology/__init__.py index 2af67729..8649ebb6 100644 --- a/sympde/topology/__init__.py +++ b/sympde/topology/__init__.py @@ -3,5 +3,6 @@ from .datatype import * from .domain import * from .symbolic_mapping import * +from .analytical_mappings import * from .measure import * from .space import * From b7a7d07225d7138919a341542a5749ce99017e2c Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Thu, 11 Jul 2024 09:43:22 +0200 Subject: [PATCH 05/39] changes mapping class names and files, tests not made yet --- sympde/expr/evaluation.py | 4 +- sympde/topology/__init__.py | 4 +- ...tical_mappings.py => analytic_mappings.py} | 40 ++++++------- ...ic_mapping.py => base_analytic_mapping.py} | 59 +++++++++++-------- sympde/topology/basic.py | 2 +- sympde/topology/derivatives.py | 4 +- sympde/topology/domain.py | 6 +- sympde/utilities/utils.py | 2 +- 8 files changed, 64 insertions(+), 57 deletions(-) rename sympde/topology/{analytical_mappings.py => analytic_mappings.py} (83%) rename sympde/topology/{symbolic_mapping.py => base_analytic_mapping.py} (96%) diff --git a/sympde/expr/evaluation.py b/sympde/expr/evaluation.py index 8e9bc549..344f6fe4 100644 --- a/sympde/expr/evaluation.py +++ b/sympde/expr/evaluation.py @@ -31,8 +31,8 @@ from sympde.topology.basic import Boundary, Interface from sympde.topology.basic import InteriorDomain from sympde.topology.domain import NormalVector, TangentVector, NCube, NCubeInterior -from sympde.topology.symbolic_mapping import JacobianSymbol, InterfaceMapping, MultiPatchMapping, JacobianInverseSymbol -from sympde.topology.symbolic_mapping import LogicalExpr, PullBack +from sympde.topology.base_analytic_mapping import JacobianSymbol, InterfaceMapping, MultiPatchMapping, JacobianInverseSymbol, LogicalExpr, PullBack + # TODO fix circular dependency between sympde.expr.evaluation and sympde.topology.mapping diff --git a/sympde/topology/__init__.py b/sympde/topology/__init__.py index 8649ebb6..fde7fa56 100644 --- a/sympde/topology/__init__.py +++ b/sympde/topology/__init__.py @@ -2,7 +2,7 @@ from .derivatives import * from .datatype import * from .domain import * -from .symbolic_mapping import * -from .analytical_mappings import * +from .base_analytic_mapping import * +from .analytic_mappings import * from .measure import * from .space import * diff --git a/sympde/topology/analytical_mappings.py b/sympde/topology/analytic_mappings.py similarity index 83% rename from sympde/topology/analytical_mappings.py rename to sympde/topology/analytic_mappings.py index cc96e289..0773ec1b 100644 --- a/sympde/topology/analytical_mappings.py +++ b/sympde/topology/analytic_mappings.py @@ -1,8 +1,8 @@ -from .symbolic_mapping import AnalyticMapping +from .base_analytic_mapping import BaseAnalyticMapping -class IdentityMapping(AnalyticMapping): +class IdentityMapping(BaseAnalyticMapping): """ - Represents an identity 1D/2D/3D AnalyticMapping object. + Represents an identity 1D/2D/3D BaseAnalyticMapping object. Examples @@ -12,9 +12,9 @@ class IdentityMapping(AnalyticMapping): 'z': 'x3'} #============================================================================== -class AffineMapping(AnalyticMapping): +class AffineMapping(BaseAnalyticMapping): """ - Represents a 1D/2D/3D Affine AnalyticMapping object. + Represents a 1D/2D/3D Affine BaseAnalyticMapping object. Examples @@ -24,9 +24,9 @@ class AffineMapping(AnalyticMapping): 'z': 'c3 + a31*x1 + a32*x2 + a33*x3'} #============================================================================== -class PolarMapping(AnalyticMapping): +class PolarMapping(BaseAnalyticMapping): """ - Represents a Polar 2D AnalyticMapping object (Annulus). + Represents a Polar 2D BaseAnalyticMapping object (Annulus). Examples @@ -38,9 +38,9 @@ class PolarMapping(AnalyticMapping): _pdim = 2 #============================================================================== -class TargetMapping(AnalyticMapping): +class TargetMapping(BaseAnalyticMapping): """ - Represents a Target 2D AnalyticMapping object. + Represents a Target 2D BaseAnalyticMapping object. Examples @@ -52,9 +52,9 @@ class TargetMapping(AnalyticMapping): _pdim = 2 #============================================================================== -class CzarnyMapping(AnalyticMapping): +class CzarnyMapping(BaseAnalyticMapping): """ - Represents a Czarny 2D AnalyticMapping object. + Represents a Czarny 2D BaseAnalyticMapping object. Examples @@ -67,7 +67,7 @@ class CzarnyMapping(AnalyticMapping): _pdim = 2 #============================================================================== -class CollelaMapping2D(AnalyticMapping): +class CollelaMapping2D(BaseAnalyticMapping): _ldim = 2 _pdim = 2 @@ -75,7 +75,7 @@ class CollelaMapping2D(AnalyticMapping): 'y': 'b * (x2 + eps / (2*pi) * sin(2*pi*x1) * sin(2*pi*x2))'} #============================================================================== -class TorusMapping(AnalyticMapping): +class TorusMapping(BaseAnalyticMapping): """ Parametrization of a torus (or a portion of it) of major radius R0, using toroidal coordinates (x1, x2, x3) = (r, theta, phi), where: @@ -94,7 +94,7 @@ class TorusMapping(AnalyticMapping): #============================================================================== # TODO [YG, 07.10.2022]: add test in sympde/topology/tests/test_logical_expr.py -class TorusSurfaceMapping(AnalyticMapping): +class TorusSurfaceMapping(BaseAnalyticMapping): """ 3D surface obtained by "slicing" the torus above at r = a. The parametrization uses the coordinates (x1, x2) = (theta, phi), where: @@ -112,7 +112,7 @@ class TorusSurfaceMapping(AnalyticMapping): #============================================================================== # TODO [YG, 07.10.2022]: add test in sympde/topology/tests/test_logical_expr.py -class TwistedTargetSurfaceMapping(AnalyticMapping): +class TwistedTargetSurfaceMapping(BaseAnalyticMapping): """ 3D surface obtained by "twisting" the TargetMapping out of the (x, y) plane @@ -125,7 +125,7 @@ class TwistedTargetSurfaceMapping(AnalyticMapping): _pdim = 3 #============================================================================== -class TwistedTargetMapping(AnalyticMapping): +class TwistedTargetMapping(BaseAnalyticMapping): """ 3D volume obtained by "extruding" the TwistedTargetSurfaceMapping along z. @@ -138,7 +138,7 @@ class TwistedTargetMapping(AnalyticMapping): _pdim = 3 #============================================================================== -class SphericalMapping(AnalyticMapping): +class SphericalMapping(BaseAnalyticMapping): """ Parametrization of a sphere (or a portion of it) using spherical coordinates (x1, x2, x3) = (r, theta, phi), where: @@ -155,14 +155,14 @@ class SphericalMapping(AnalyticMapping): _ldim = 3 _pdim = 3 -class Collela3D( AnalyticMapping ): +class Collela3D( BaseAnalyticMapping ): _expressions = {'x':'2.*(x1 + 0.1*sin(2.*pi*x1)*sin(2.*pi*x2)) - 1.', 'y':'2.*(x2 + 0.1*sin(2.*pi*x1)*sin(2.*pi*x2)) - 1.', 'z':'2.*x3 - 1.'} -class TransposedPolarMapping( AnalyticMapping ): +class TransposedPolarMapping( BaseAnalyticMapping ): """ Represents a Transposed (x1 <> x2) Polar 2D Mapping object (Annulus). @@ -175,7 +175,7 @@ class TransposedPolarMapping( AnalyticMapping ): _ldim = 2 _pdim = 2 -class TransposedPolarMapping( AnalyticMapping ): +class TransposedPolarMapping( BaseAnalyticMapping ): """ Represents a Transposed (x1 <> x2) Polar 2D Mapping object (Annulus). diff --git a/sympde/topology/symbolic_mapping.py b/sympde/topology/base_analytic_mapping.py similarity index 96% rename from sympde/topology/symbolic_mapping.py rename to sympde/topology/base_analytic_mapping.py index 06a451f1..4b2a285f 100644 --- a/sympde/topology/symbolic_mapping.py +++ b/sympde/topology/base_analytic_mapping.py @@ -50,7 +50,7 @@ # TODO fix circular dependency between sympde.expr.evaluation and sympde.topology.mapping __all__ = ( - 'AnalyticMapping', + 'BaseAnalyticMapping', 'Contravariant', 'Covariant', 'InterfaceMapping', @@ -172,9 +172,9 @@ def f_vec_v(*XYZ): #============================================================================== -class AnalyticMapping(BasicMapping,AbstractMapping): +class BaseAnalyticMapping(BasicMapping,AbstractMapping): """ - Represents a AnalyticMapping object. + Represents a BaseAnalyticMapping object. Examples @@ -486,7 +486,7 @@ def set_plus_minus( self, **kwargs): self._is_minus = minus def copy(self): - obj = AnalyticMapping(self.name, + obj = BaseAnalyticMapping(self.name, ldim=self.ldim, pdim=self.pdim, evaluate=False) @@ -522,21 +522,21 @@ def _sympystr(self, printer): #============================================================================== -class InverseMapping(AnalyticMapping): +class InverseMapping(BaseAnalyticMapping): def __new__(cls, mapping): - assert isinstance(mapping, AnalyticMapping) + assert isinstance(mapping, BaseAnalyticMapping) name = mapping.name ldim = mapping.ldim pdim = mapping.pdim coords = mapping.logical_coordinates jacobian = mapping.jacobian.inv() - return AnalyticMapping.__new__(cls, name, ldim=ldim, pdim=pdim, coordinates=coords, jacobian=jacobian) + return BaseAnalyticMapping.__new__(cls, name, ldim=ldim, pdim=pdim, coordinates=coords, jacobian=jacobian) #============================================================================== class JacobianSymbol(MatrixSymbolicExpr): _axis = None def __new__(cls, mapping, axis=None): - assert isinstance(mapping, AnalyticMapping) + assert isinstance(mapping, BaseAnalyticMapping) if axis is not None: assert isinstance(axis, (int, Integer)) obj = MatrixSymbolicExpr.__new__(cls, mapping) @@ -564,7 +564,7 @@ def __hash__(self): return hash(self._hashable_content()) def _eval_subs(self, old, new): - if isinstance(new, AnalyticMapping): + if isinstance(new, BaseAnalyticMapping): if self.axis is not None: obj = JacobianSymbol(new, self.axis) else: @@ -583,7 +583,7 @@ class JacobianInverseSymbol(MatrixSymbolicExpr): _axis = None is_Matrix = False def __new__(cls, mapping, axis=None): - assert isinstance(mapping, AnalyticMapping) + assert isinstance(mapping, BaseAnalyticMapping) if axis is not None: assert isinstance(axis, int) obj = MatrixSymbolicExpr.__new__(cls, mapping) @@ -615,21 +615,21 @@ def _sympystr(self, printer): return 'Jacobian({})**(-1)'.format(sstr(self.mapping.name)) #============================================================================== -class InterfaceMapping(AnalyticMapping): +class InterfaceMapping(BaseAnalyticMapping): """ InterfaceMapping is used to represent a mapping in the interface. Attributes ---------- - minus : AnalyticMapping + minus : BaseAnalyticMapping the mapping on the negative direction of the interface - plus : AnalyticMapping + plus : BaseAnalyticMapping the mapping on the positive direction of the interface """ def __new__(cls, minus, plus): - assert isinstance(minus, AnalyticMapping) - assert isinstance(plus, AnalyticMapping) + assert isinstance(minus, BaseAnalyticMapping) + assert isinstance(plus, BaseAnalyticMapping) minus = minus.copy() plus = plus.copy() @@ -637,7 +637,7 @@ def __new__(cls, minus, plus): plus.set_plus_minus(plus=True) name = '{}|{}'.format(str(minus.name), str(plus.name)) - obj = AnalyticMapping.__new__(cls, name, ldim=minus.ldim, pdim=minus.pdim) + obj = BaseAnalyticMapping.__new__(cls, name, ldim=minus.ldim, pdim=minus.pdim) obj._minus = minus obj._plus = plus return obj @@ -663,7 +663,7 @@ def _eval_simplify(self, **kwargs): return self #============================================================================== -class MultiPatchMapping(AnalyticMapping): +class MultiPatchMapping(BaseAnalyticMapping): def __new__(cls, dic): assert isinstance( dic, dict) @@ -712,25 +712,31 @@ def __new__(cls, mapping, logical_domain): assert(isinstance(mapping,AbstractMapping)) assert(isinstance(logical_domain, BasicDomain)) if isinstance(logical_domain, Domain): + print("logical_domain=Domain") kwargs = dict( dim = logical_domain._dim, mapping = mapping, logical_domain = logical_domain) boundaries = logical_domain.boundary interiors = logical_domain.interior + print("logical_domain.interior :", logical_domain.interior) + print("type(logical_domain.interior)", type(logical_domain.interior)) if isinstance(interiors, Union): + print("interiors = Union") kwargs['interiors'] = Union(*[mapping(a) for a in interiors.args]) else: kwargs['interiors'] = mapping(interiors) if isinstance(boundaries, Union): + print("interiors = Union") kwargs['boundaries'] = [mapping(a) for a in boundaries.args] elif boundaries: kwargs['boundaries'] = mapping(boundaries) interfaces = logical_domain.connectivity.interfaces if interfaces: + print("interfaces") if isinstance(interfaces, Union): interfaces = interfaces.args else: @@ -741,6 +747,7 @@ def __new__(cls, mapping, logical_domain): kwargs['connectivity'] = Connectivity(connectivity) name = '{}({})'.format(str(mapping.name), str(logical_domain.name)) + print("return Domain(name,**kwargs)") return Domain(name, **kwargs) elif isinstance(logical_domain, NCubeInterior): @@ -859,7 +866,7 @@ def eval(cls, F): Parameters: ---------- - F: AnalyticMapping + F: BaseAnalyticMapping mapping object Returns: @@ -868,8 +875,8 @@ def eval(cls, F): the jacobian matrix """ - if not isinstance(F, AnalyticMapping): - raise TypeError('> Expecting a AnalyticMapping object') + if not isinstance(F, BaseAnalyticMapping): + raise TypeError('> Expecting a BaseAnalyticMapping object') if F.jacobian_expr is not None: return F.jacobian_expr @@ -907,7 +914,7 @@ def eval(cls, F, v): Parameters: ---------- - F: AnalyticMapping + F: BaseAnalyticMapping mapping object v: @@ -956,7 +963,7 @@ def eval(cls, F, v): Parameters: ---------- - F: AnalyticMapping + F: BaseAnalyticMapping mapping object v: @@ -968,8 +975,8 @@ def eval(cls, F, v): the contravariant transformation """ - if not isinstance(F, AnalyticMapping): - raise TypeError('> Expecting a AnalyticMapping') + if not isinstance(F, BaseAnalyticMapping): + raise TypeError('> Expecting a BaseAnalyticMapping') if not isinstance(v, (tuple, list, Tuple, ImmutableDenseMatrix, Matrix)): raise TypeError('> Expecting a tuple, list, Tuple, Matrix') @@ -1461,7 +1468,7 @@ def eval(cls, *_args, **kwargs): elif isinstance(expr, Indexed): base = expr.base - if isinstance(base, AnalyticMapping): + if isinstance(base, BaseAnalyticMapping): if expr.indices[0] == 0: name = 'x' elif expr.indices[0] == 1: @@ -1506,7 +1513,7 @@ def eval(cls, *_args, **kwargs): code += k*n return cls.eval(atom, code=code) - elif isinstance(expr, AnalyticMapping): + elif isinstance(expr, BaseAnalyticMapping): return Symbol(expr.name) # ... this must be done here, otherwise codegen for FEM will not work diff --git a/sympde/topology/basic.py b/sympde/topology/basic.py index 60939e57..03e8636e 100644 --- a/sympde/topology/basic.py +++ b/sympde/topology/basic.py @@ -324,7 +324,7 @@ def rotate(self, *directions): raise NotImplementedError('only 2d case is available') def join(self, boundary, ornt=None): - from sympde.topology.symbolic_mapping import InterfaceMapping + from sympde.sympde.topology.base_analytic_mapping import InterfaceMapping # TODO be careful with '|' in psydac if self.mapping and boundary.mapping: int_map = InterfaceMapping(self.mapping , boundary.mapping) diff --git a/sympde/topology/derivatives.py b/sympde/topology/derivatives.py index 59dd01cc..29acdf51 100644 --- a/sympde/topology/derivatives.py +++ b/sympde/topology/derivatives.py @@ -108,7 +108,7 @@ def eval(cls, expr): elif isinstance(expr, Expr): x = Symbol(cls.coordinate) if cls.logical: - M = expr.atoms(AnalyticMapping) + M = expr.atoms(BaseAnalyticMapping) if len(M)>0: M = list(M)[0] expr_primes = [diff(expr, M[i]) for i in range(M.pdim)] @@ -1291,4 +1291,4 @@ def get_max_logical_partial_derivatives(expr, F=None): return d -from .symbolic_mapping import AnalyticMapping, Jacobian +from .base_analytic_mapping import BaseAnalyticMapping, Jacobian diff --git a/sympde/topology/domain.py b/sympde/topology/domain.py index c761b5bd..a8942d47 100644 --- a/sympde/topology/domain.py +++ b/sympde/topology/domain.py @@ -337,7 +337,7 @@ def from_file( cls, filename ): if not(ext == '.h5'): raise ValueError('> Only h5 files are supported') # ... - from sympde.topology.symbolic_mapping import AnalyticMapping, MultiPatchMapping + from sympde.topology import BaseAnalyticMapping, MultiPatchMapping h5 = h5py.File( filename, mode='r' ) yml = yaml.load( h5['topology.yml'][()], Loader=yaml.SafeLoader ) @@ -359,7 +359,7 @@ def from_file( cls, filename ): constructors = [globals()[dt['type']] for dt in dtype] interiors = [cs(i['name'], **dt['parameters']) for cs,i,dt in zip(constructors, d_interior, dtype)] - mappings = [AnalyticMapping(I['mapping'], dim=dim) if I.get('mapping', "None") != "None" else None for I in d_interior] + mappings = [BaseAnalyticMapping(I['mapping'], dim=dim) if I.get('mapping', "None") != "None" else None for I in d_interior] domains = [mapping(i) if mapping else i for i,mapping in zip(interiors, mappings)] patch_index = {I.name:ind for ind,I in enumerate(interiors)} @@ -403,7 +403,7 @@ def join(cls, patches, connectivity, name): assert all(p.dim==patches[0].dim for p in patches) dim = int(patches[0].dim) - from sympde.topology.symbolic_mapping import MultiPatchMapping + from sympde.sympde.topology.base_analytic_mapping import MultiPatchMapping # ... connectivity interfaces = {} boundaries = [] diff --git a/sympde/utilities/utils.py b/sympde/utilities/utils.py index abec7b8b..895ef050 100644 --- a/sympde/utilities/utils.py +++ b/sympde/utilities/utils.py @@ -6,7 +6,7 @@ import matplotlib.pyplot as plt from sympde.topology import InteriorDomain, MultiPatchMapping -from sympde.topology.analytical_mappings import TorusMapping, IdentityMapping +from sympde.topology.analytic_mappings import TorusMapping, IdentityMapping From 565cd1750cbd90b1ff77fb2daaee9516d351bb3b Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Thu, 11 Jul 2024 16:10:07 +0200 Subject: [PATCH 06/39] deleting prints in base_analytic_mapping --- sympde/topology/base_analytic_mapping.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/sympde/topology/base_analytic_mapping.py b/sympde/topology/base_analytic_mapping.py index 4b2a285f..17f81231 100644 --- a/sympde/topology/base_analytic_mapping.py +++ b/sympde/topology/base_analytic_mapping.py @@ -712,24 +712,19 @@ def __new__(cls, mapping, logical_domain): assert(isinstance(mapping,AbstractMapping)) assert(isinstance(logical_domain, BasicDomain)) if isinstance(logical_domain, Domain): - print("logical_domain=Domain") kwargs = dict( dim = logical_domain._dim, mapping = mapping, logical_domain = logical_domain) boundaries = logical_domain.boundary interiors = logical_domain.interior - print("logical_domain.interior :", logical_domain.interior) - print("type(logical_domain.interior)", type(logical_domain.interior)) if isinstance(interiors, Union): - print("interiors = Union") kwargs['interiors'] = Union(*[mapping(a) for a in interiors.args]) else: kwargs['interiors'] = mapping(interiors) if isinstance(boundaries, Union): - print("interiors = Union") kwargs['boundaries'] = [mapping(a) for a in boundaries.args] elif boundaries: kwargs['boundaries'] = mapping(boundaries) From 6dfd68229b6e9213d42008063d55f69b95663afa Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Fri, 12 Jul 2024 13:39:24 +0200 Subject: [PATCH 07/39] changing AbstractMapping to BaseMapping to keep domain undefined Mapping --- sympde/topology/abstract_mapping.py | 4 ++-- sympde/topology/base_analytic_mapping.py | 6 +++--- sympde/topology/domain.py | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sympde/topology/abstract_mapping.py b/sympde/topology/abstract_mapping.py index 7293f2df..9e50f8ca 100644 --- a/sympde/topology/abstract_mapping.py +++ b/sympde/topology/abstract_mapping.py @@ -3,14 +3,14 @@ __all__ = ( 'MappingMeta', - 'AbstractMapping', + 'BaseMapping', ) class MappingMeta(ABCMeta,type(IndexedBase)): pass #============================================================================== -class AbstractMapping(ABC,metaclass=MappingMeta): +class BaseMapping(IndexedBase): """ Transformation of coordinates, which can be evaluated. diff --git a/sympde/topology/base_analytic_mapping.py b/sympde/topology/base_analytic_mapping.py index 17f81231..e0fd38ef 100644 --- a/sympde/topology/base_analytic_mapping.py +++ b/sympde/topology/base_analytic_mapping.py @@ -43,7 +43,7 @@ import itertools as it from sympy import lambdify -from .abstract_mapping import AbstractMapping +from .abstract_mapping import BaseMapping # TODO fix circular dependency between sympde.topology.domain and sympde.topology.mapping @@ -172,7 +172,7 @@ def f_vec_v(*XYZ): #============================================================================== -class BaseAnalyticMapping(BasicMapping,AbstractMapping): +class BaseAnalyticMapping(BasicMapping,BaseMapping): """ Represents a BaseAnalyticMapping object. @@ -709,7 +709,7 @@ class MappedDomain(BasicDomain): @cacheit def __new__(cls, mapping, logical_domain): - assert(isinstance(mapping,AbstractMapping)) + assert(isinstance(mapping,BaseMapping)) assert(isinstance(logical_domain, BasicDomain)) if isinstance(logical_domain, Domain): kwargs = dict( diff --git a/sympde/topology/domain.py b/sympde/topology/domain.py index a8942d47..1ab3ff12 100644 --- a/sympde/topology/domain.py +++ b/sympde/topology/domain.py @@ -23,10 +23,10 @@ from .basic import BasicDomain, InteriorDomain, Boundary, Union, Connectivity from .basic import Interval, Interface, CornerBoundary, CornerInterface from .basic import ProductDomain -from sympde.topology.abstract_mapping import AbstractMapping +from sympde.topology.abstract_mapping import BaseMapping # TODO fix circular dependency between domain and mapping '''if TYPE_CHECKING: - from sympde.topology.abstract_mapping import AbstractMapping + from sympde.topology.abstract_mapping import BaseMapping # TODO add pdim''' iterable_types = (tuple, list, Tuple, Union) @@ -46,7 +46,7 @@ def __new__(cls, name : str, *, boundaries : TypeUnion[Iterable[Boundary], Boundary, None] = None, dim : Optional[int] = None, connectivity : Optional[Connectivity] = None, - mapping : Optional[AbstractMapping] = None, + mapping : Optional[BaseMapping] = None, logical_domain : Optional[Domain] = None): """ Interiors or connectivity must be given. When the mapping is given @@ -176,7 +176,7 @@ def boundary(self) -> TypeUnion[Union, Boundary]: return self.args[2] @property - def mapping(self) -> Optional[AbstractMapping]: + def mapping(self) -> Optional[BaseMapping]: """The mapping that maps the logical domain to the physical domain""" return self.args[3] From 9674c41e1f0b41b7db0b01c3f964f811b98452a3 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Fri, 12 Jul 2024 15:00:23 +0200 Subject: [PATCH 08/39] trying to add mapping undefined domain --- .../__epyccel__/.lock_acquisition.lock | 0 .../__pyccel__/.lock_acquisition.lock | 0 ...d_c_dependencies_e0el77nq_mx2lvwh9fed2.f90 | 520 +++++++++++ ...ependencies_e0el77nq_mx2lvwh9fed2.f90.lock | 0 ...d_c_dependencies_e0el77nq_mx2lvwh9fed2.mod | Bin 0 -> 3277 bytes ...ind_c_dependencies_e0el77nq_mx2lvwh9fed2.o | Bin 0 -> 10152 bytes ..._dependencies_e0el77nq_mx2lvwh9fed2.o.lock | 0 ...d_c_dependencies_vga8r193_6xftl47r79t3.f90 | 181 ++++ ...ependencies_vga8r193_6xftl47r79t3.f90.lock | 0 ...d_c_dependencies_vga8r193_6xftl47r79t3.mod | Bin 0 -> 2334 bytes ...ind_c_dependencies_vga8r193_6xftl47r79t3.o | Bin 0 -> 5176 bytes ..._dependencies_vga8r193_6xftl47r79t3.o.lock | 0 ...d_c_dependencies_wti60kr7_6feykyplisif.f90 | 248 ++++++ ...ependencies_wti60kr7_6feykyplisif.f90.lock | 0 ...d_c_dependencies_wti60kr7_6feykyplisif.mod | Bin 0 -> 2336 bytes ...ind_c_dependencies_wti60kr7_6feykyplisif.o | Bin 0 -> 5320 bytes ..._dependencies_wti60kr7_6feykyplisif.o.lock | 0 .../__epyccel__/__pyccel__/cwrapper.lock | 0 .../__pyccel__/cwrapper/cwrapper.c | 136 +++ .../__pyccel__/cwrapper/cwrapper.c.lock | 0 .../__pyccel__/cwrapper/cwrapper.h | 200 +++++ .../__pyccel__/cwrapper/cwrapper.o | Bin 0 -> 24568 bytes .../__pyccel__/cwrapper/cwrapper.o.lock | 0 .../__pyccel__/cwrapper/numpy_version.h | 3 + .../__pyccel__/cwrapper_ndarrays.lock | 0 .../cwrapper_ndarrays/cwrapper_ndarrays.c | 509 +++++++++++ .../cwrapper_ndarrays.c.lock | 0 .../cwrapper_ndarrays/cwrapper_ndarrays.h | 55 ++ .../cwrapper_ndarrays/cwrapper_ndarrays.o | Bin 0 -> 33208 bytes .../cwrapper_ndarrays.o.lock | 0 .../dependencies_e0el77nq_mx2lvwh9fed2.f90 | 464 ++++++++++ ...ependencies_e0el77nq_mx2lvwh9fed2.f90.lock | 0 .../dependencies_e0el77nq_mx2lvwh9fed2.mod | Bin 0 -> 959 bytes .../dependencies_e0el77nq_mx2lvwh9fed2.o | Bin 0 -> 26272 bytes .../dependencies_e0el77nq_mx2lvwh9fed2.o.lock | 0 ...pendencies_e0el77nq_mx2lvwh9fed2_wrapper.c | 739 ++++++++++++++++ ...ncies_e0el77nq_mx2lvwh9fed2_wrapper.c.lock | 0 ...pendencies_e0el77nq_mx2lvwh9fed2_wrapper.h | 35 + ...pendencies_e0el77nq_mx2lvwh9fed2_wrapper.o | Bin 0 -> 71312 bytes ...ncies_e0el77nq_mx2lvwh9fed2_wrapper.o.lock | 0 .../dependencies_vga8r193_6xftl47r79t3.f90 | 218 +++++ ...ependencies_vga8r193_6xftl47r79t3.f90.lock | 0 .../dependencies_vga8r193_6xftl47r79t3.mod | Bin 0 -> 836 bytes .../dependencies_vga8r193_6xftl47r79t3.o | Bin 0 -> 78272 bytes .../dependencies_vga8r193_6xftl47r79t3.o.lock | 0 ...pendencies_vga8r193_6xftl47r79t3_wrapper.c | 581 +++++++++++++ ...ncies_vga8r193_6xftl47r79t3_wrapper.c.lock | 0 ...pendencies_vga8r193_6xftl47r79t3_wrapper.h | 35 + ...pendencies_vga8r193_6xftl47r79t3_wrapper.o | Bin 0 -> 56288 bytes ...ncies_vga8r193_6xftl47r79t3_wrapper.o.lock | 0 .../dependencies_wti60kr7_6feykyplisif.f90 | 160 ++++ ...ependencies_wti60kr7_6feykyplisif.f90.lock | 0 .../dependencies_wti60kr7_6feykyplisif.mod | Bin 0 -> 809 bytes .../dependencies_wti60kr7_6feykyplisif.o | Bin 0 -> 8296 bytes .../dependencies_wti60kr7_6feykyplisif.o.lock | 0 ...pendencies_wti60kr7_6feykyplisif_wrapper.c | 436 ++++++++++ ...ncies_wti60kr7_6feykyplisif_wrapper.c.lock | 0 ...pendencies_wti60kr7_6feykyplisif_wrapper.h | 35 + ...ncies_wti60kr7_6feykyplisif_wrapper.o.lock | 0 .../__epyccel__/__pyccel__/ndarrays.lock | 0 .../__pyccel__/ndarrays/ndarrays.c | 822 ++++++++++++++++++ .../__pyccel__/ndarrays/ndarrays.c.lock | 0 .../__pyccel__/ndarrays/ndarrays.h | 194 +++++ .../__pyccel__/ndarrays/ndarrays.o | Bin 0 -> 74392 bytes .../__pyccel__/ndarrays/ndarrays.o.lock | 0 .../dependencies_e0el77nq_mx2lvwh9fed2.lock | 0 .../dependencies_e0el77nq_mx2lvwh9fed2.py | 170 ++++ .../dependencies_vga8r193_6xftl47r79t3.lock | 0 .../dependencies_vga8r193_6xftl47r79t3.py | 136 +++ .../dependencies_wti60kr7_6feykyplisif.lock | 0 .../dependencies_wti60kr7_6feykyplisif.py | 53 ++ __psydac__/__init__.py | 0 __psydac__/dependencies_e0el77nq.py | 170 ++++ __psydac__/dependencies_vga8r193.py | 136 +++ __psydac__/dependencies_wti60kr7.py | 53 ++ sympde/topology/base_analytic_mapping.py | 2 +- .../{abstract_mapping.py => base_mapping.py} | 31 +- sympde/topology/basic.py | 5 + sympde/topology/domain.py | 14 +- 79 files changed, 6324 insertions(+), 17 deletions(-) create mode 100644 __gpyccel__/__epyccel__/.lock_acquisition.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/.lock_acquisition.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.f90 create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.f90.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.mod create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.o create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.o.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.f90 create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.f90.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.mod create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.o create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.o.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.f90 create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.f90.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.mod create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.o create mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.o.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.c create mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.c.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.h create mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.o create mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.o.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper/numpy_version.h create mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.c create mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.c.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.h create mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.o create mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.o.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.f90 create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.f90.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.mod create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.o create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.o.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.c create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.c.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.h create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.o create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.o.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.f90 create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.f90.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.mod create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.o create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.o.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.c create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.c.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.h create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.o create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.o.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.f90 create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.f90.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.mod create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.o create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.o.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.c create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.c.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.h create mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.o.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/ndarrays.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.c create mode 100644 __gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.c.lock create mode 100644 __gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.h create mode 100644 __gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.o create mode 100644 __gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.o.lock create mode 100644 __gpyccel__/__epyccel__/dependencies_e0el77nq_mx2lvwh9fed2.lock create mode 100644 __gpyccel__/__epyccel__/dependencies_e0el77nq_mx2lvwh9fed2.py create mode 100644 __gpyccel__/__epyccel__/dependencies_vga8r193_6xftl47r79t3.lock create mode 100644 __gpyccel__/__epyccel__/dependencies_vga8r193_6xftl47r79t3.py create mode 100644 __gpyccel__/__epyccel__/dependencies_wti60kr7_6feykyplisif.lock create mode 100644 __gpyccel__/__epyccel__/dependencies_wti60kr7_6feykyplisif.py create mode 100644 __psydac__/__init__.py create mode 100644 __psydac__/dependencies_e0el77nq.py create mode 100644 __psydac__/dependencies_vga8r193.py create mode 100644 __psydac__/dependencies_wti60kr7.py rename sympde/topology/{abstract_mapping.py => base_mapping.py} (82%) diff --git a/__gpyccel__/__epyccel__/.lock_acquisition.lock b/__gpyccel__/__epyccel__/.lock_acquisition.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/.lock_acquisition.lock b/__gpyccel__/__epyccel__/__pyccel__/.lock_acquisition.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.f90 b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.f90 new file mode 100644 index 00000000..83553c6a --- /dev/null +++ b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.f90 @@ -0,0 +1,520 @@ +module bind_c_dependencies_e0el77nq_mx2lvwh9fed2 + + use dependencies_e0el77nq_mx2lvwh9fed2 + + use, intrinsic :: ISO_C_Binding, only : f64 => C_DOUBLE , i64 => & + C_INT64_T , C_F_Pointer , c_ptr + implicit none + + contains + + !........................................ + subroutine bind_c_assemble_matrix_e0el77nq( & + bound_global_test_basis_v1_0_1, & + bound_global_test_basis_v1_0_1_shape_1, & + bound_global_test_basis_v1_0_1_shape_2, & + bound_global_test_basis_v1_0_1_shape_3, & + bound_global_test_basis_v1_0_1_shape_4, & + bound_global_test_basis_v1_0_1_stride_1, & + bound_global_test_basis_v1_0_1_stride_2, & + bound_global_test_basis_v1_0_1_stride_3, & + bound_global_test_basis_v1_0_1_stride_4, & + bound_global_test_basis_v1_0_2, & + bound_global_test_basis_v1_0_2_shape_1, & + bound_global_test_basis_v1_0_2_shape_2, & + bound_global_test_basis_v1_0_2_shape_3, & + bound_global_test_basis_v1_0_2_shape_4, & + bound_global_test_basis_v1_0_2_stride_1, & + bound_global_test_basis_v1_0_2_stride_2, & + bound_global_test_basis_v1_0_2_stride_3, & + bound_global_test_basis_v1_0_2_stride_4, & + bound_global_test_basis_v1_1_1, & + bound_global_test_basis_v1_1_1_shape_1, & + bound_global_test_basis_v1_1_1_shape_2, & + bound_global_test_basis_v1_1_1_shape_3, & + bound_global_test_basis_v1_1_1_shape_4, & + bound_global_test_basis_v1_1_1_stride_1, & + bound_global_test_basis_v1_1_1_stride_2, & + bound_global_test_basis_v1_1_1_stride_3, & + bound_global_test_basis_v1_1_1_stride_4, & + bound_global_test_basis_v1_1_2, & + bound_global_test_basis_v1_1_2_shape_1, & + bound_global_test_basis_v1_1_2_shape_2, & + bound_global_test_basis_v1_1_2_shape_3, & + bound_global_test_basis_v1_1_2_shape_4, & + bound_global_test_basis_v1_1_2_stride_1, & + bound_global_test_basis_v1_1_2_stride_2, & + bound_global_test_basis_v1_1_2_stride_3, & + bound_global_test_basis_v1_1_2_stride_4, & + bound_global_trial_basis_u1_0_1, & + bound_global_trial_basis_u1_0_1_shape_1, & + bound_global_trial_basis_u1_0_1_shape_2, & + bound_global_trial_basis_u1_0_1_shape_3, & + bound_global_trial_basis_u1_0_1_shape_4, & + bound_global_trial_basis_u1_0_1_stride_1, & + bound_global_trial_basis_u1_0_1_stride_2, & + bound_global_trial_basis_u1_0_1_stride_3, & + bound_global_trial_basis_u1_0_1_stride_4, & + bound_global_trial_basis_u1_0_2, & + bound_global_trial_basis_u1_0_2_shape_1, & + bound_global_trial_basis_u1_0_2_shape_2, & + bound_global_trial_basis_u1_0_2_shape_3, & + bound_global_trial_basis_u1_0_2_shape_4, & + bound_global_trial_basis_u1_0_2_stride_1, & + bound_global_trial_basis_u1_0_2_stride_2, & + bound_global_trial_basis_u1_0_2_stride_3, & + bound_global_trial_basis_u1_0_2_stride_4, & + bound_global_trial_basis_u1_1_1, & + bound_global_trial_basis_u1_1_1_shape_1, & + bound_global_trial_basis_u1_1_1_shape_2, & + bound_global_trial_basis_u1_1_1_shape_3, & + bound_global_trial_basis_u1_1_1_shape_4, & + bound_global_trial_basis_u1_1_1_stride_1, & + bound_global_trial_basis_u1_1_1_stride_2, & + bound_global_trial_basis_u1_1_1_stride_3, & + bound_global_trial_basis_u1_1_1_stride_4, & + bound_global_trial_basis_u1_1_2, & + bound_global_trial_basis_u1_1_2_shape_1, & + bound_global_trial_basis_u1_1_2_shape_2, & + bound_global_trial_basis_u1_1_2_shape_3, & + bound_global_trial_basis_u1_1_2_shape_4, & + bound_global_trial_basis_u1_1_2_stride_1, & + bound_global_trial_basis_u1_1_2_stride_2, & + bound_global_trial_basis_u1_1_2_stride_3, & + bound_global_trial_basis_u1_1_2_stride_4, & + bound_global_span_v1_0_1, bound_global_span_v1_0_1_shape_1, & + bound_global_span_v1_0_1_stride_1, bound_global_span_v1_0_2, & + bound_global_span_v1_0_2_shape_1, & + bound_global_span_v1_0_2_stride_1, bound_global_span_v1_1_1, & + bound_global_span_v1_1_1_shape_1, & + bound_global_span_v1_1_1_stride_1, bound_global_span_v1_1_2, & + bound_global_span_v1_1_2_shape_1, & + bound_global_span_v1_1_2_stride_1, bound_global_x1, & + bound_global_x1_shape_1, bound_global_x1_shape_2, & + bound_global_x1_stride_1, bound_global_x1_stride_2, & + bound_global_x2, bound_global_x2_shape_1, & + bound_global_x2_shape_2, bound_global_x2_stride_1, & + bound_global_x2_stride_2, test_v1_0_p1, test_v1_0_p2, & + test_v1_1_p1, test_v1_1_p2, trial_u1_0_p1, trial_u1_0_p2, & + trial_u1_1_p1, trial_u1_1_p2, n_element_1, n_element_2, k1, k2, & + pad1, pad2, bound_g_mat_u1_0_v1_0_e0el77nq, & + bound_g_mat_u1_0_v1_0_e0el77nq_shape_1, & + bound_g_mat_u1_0_v1_0_e0el77nq_shape_2, & + bound_g_mat_u1_0_v1_0_e0el77nq_shape_3, & + bound_g_mat_u1_0_v1_0_e0el77nq_shape_4, & + bound_g_mat_u1_0_v1_0_e0el77nq_stride_1, & + bound_g_mat_u1_0_v1_0_e0el77nq_stride_2, & + bound_g_mat_u1_0_v1_0_e0el77nq_stride_3, & + bound_g_mat_u1_0_v1_0_e0el77nq_stride_4, & + bound_g_mat_u1_1_v1_0_e0el77nq, & + bound_g_mat_u1_1_v1_0_e0el77nq_shape_1, & + bound_g_mat_u1_1_v1_0_e0el77nq_shape_2, & + bound_g_mat_u1_1_v1_0_e0el77nq_shape_3, & + bound_g_mat_u1_1_v1_0_e0el77nq_shape_4, & + bound_g_mat_u1_1_v1_0_e0el77nq_stride_1, & + bound_g_mat_u1_1_v1_0_e0el77nq_stride_2, & + bound_g_mat_u1_1_v1_0_e0el77nq_stride_3, & + bound_g_mat_u1_1_v1_0_e0el77nq_stride_4, & + bound_g_mat_u1_0_v1_1_e0el77nq, & + bound_g_mat_u1_0_v1_1_e0el77nq_shape_1, & + bound_g_mat_u1_0_v1_1_e0el77nq_shape_2, & + bound_g_mat_u1_0_v1_1_e0el77nq_shape_3, & + bound_g_mat_u1_0_v1_1_e0el77nq_shape_4, & + bound_g_mat_u1_0_v1_1_e0el77nq_stride_1, & + bound_g_mat_u1_0_v1_1_e0el77nq_stride_2, & + bound_g_mat_u1_0_v1_1_e0el77nq_stride_3, & + bound_g_mat_u1_0_v1_1_e0el77nq_stride_4, & + bound_g_mat_u1_1_v1_1_e0el77nq, & + bound_g_mat_u1_1_v1_1_e0el77nq_shape_1, & + bound_g_mat_u1_1_v1_1_e0el77nq_shape_2, & + bound_g_mat_u1_1_v1_1_e0el77nq_shape_3, & + bound_g_mat_u1_1_v1_1_e0el77nq_shape_4, & + bound_g_mat_u1_1_v1_1_e0el77nq_stride_1, & + bound_g_mat_u1_1_v1_1_e0el77nq_stride_2, & + bound_g_mat_u1_1_v1_1_e0el77nq_stride_3, & + bound_g_mat_u1_1_v1_1_e0el77nq_stride_4) bind(c) + + implicit none + + type(c_ptr), value :: bound_global_test_basis_v1_0_1 + integer(i64), value :: bound_global_test_basis_v1_0_1_shape_1 + integer(i64), value :: bound_global_test_basis_v1_0_1_shape_2 + integer(i64), value :: bound_global_test_basis_v1_0_1_shape_3 + integer(i64), value :: bound_global_test_basis_v1_0_1_shape_4 + integer(i64), value :: bound_global_test_basis_v1_0_1_stride_1 + integer(i64), value :: bound_global_test_basis_v1_0_1_stride_2 + integer(i64), value :: bound_global_test_basis_v1_0_1_stride_3 + integer(i64), value :: bound_global_test_basis_v1_0_1_stride_4 + type(c_ptr), value :: bound_global_test_basis_v1_0_2 + integer(i64), value :: bound_global_test_basis_v1_0_2_shape_1 + integer(i64), value :: bound_global_test_basis_v1_0_2_shape_2 + integer(i64), value :: bound_global_test_basis_v1_0_2_shape_3 + integer(i64), value :: bound_global_test_basis_v1_0_2_shape_4 + integer(i64), value :: bound_global_test_basis_v1_0_2_stride_1 + integer(i64), value :: bound_global_test_basis_v1_0_2_stride_2 + integer(i64), value :: bound_global_test_basis_v1_0_2_stride_3 + integer(i64), value :: bound_global_test_basis_v1_0_2_stride_4 + type(c_ptr), value :: bound_global_test_basis_v1_1_1 + integer(i64), value :: bound_global_test_basis_v1_1_1_shape_1 + integer(i64), value :: bound_global_test_basis_v1_1_1_shape_2 + integer(i64), value :: bound_global_test_basis_v1_1_1_shape_3 + integer(i64), value :: bound_global_test_basis_v1_1_1_shape_4 + integer(i64), value :: bound_global_test_basis_v1_1_1_stride_1 + integer(i64), value :: bound_global_test_basis_v1_1_1_stride_2 + integer(i64), value :: bound_global_test_basis_v1_1_1_stride_3 + integer(i64), value :: bound_global_test_basis_v1_1_1_stride_4 + type(c_ptr), value :: bound_global_test_basis_v1_1_2 + integer(i64), value :: bound_global_test_basis_v1_1_2_shape_1 + integer(i64), value :: bound_global_test_basis_v1_1_2_shape_2 + integer(i64), value :: bound_global_test_basis_v1_1_2_shape_3 + integer(i64), value :: bound_global_test_basis_v1_1_2_shape_4 + integer(i64), value :: bound_global_test_basis_v1_1_2_stride_1 + integer(i64), value :: bound_global_test_basis_v1_1_2_stride_2 + integer(i64), value :: bound_global_test_basis_v1_1_2_stride_3 + integer(i64), value :: bound_global_test_basis_v1_1_2_stride_4 + type(c_ptr), value :: bound_global_trial_basis_u1_0_1 + integer(i64), value :: bound_global_trial_basis_u1_0_1_shape_1 + integer(i64), value :: bound_global_trial_basis_u1_0_1_shape_2 + integer(i64), value :: bound_global_trial_basis_u1_0_1_shape_3 + integer(i64), value :: bound_global_trial_basis_u1_0_1_shape_4 + integer(i64), value :: bound_global_trial_basis_u1_0_1_stride_1 + integer(i64), value :: bound_global_trial_basis_u1_0_1_stride_2 + integer(i64), value :: bound_global_trial_basis_u1_0_1_stride_3 + integer(i64), value :: bound_global_trial_basis_u1_0_1_stride_4 + type(c_ptr), value :: bound_global_trial_basis_u1_0_2 + integer(i64), value :: bound_global_trial_basis_u1_0_2_shape_1 + integer(i64), value :: bound_global_trial_basis_u1_0_2_shape_2 + integer(i64), value :: bound_global_trial_basis_u1_0_2_shape_3 + integer(i64), value :: bound_global_trial_basis_u1_0_2_shape_4 + integer(i64), value :: bound_global_trial_basis_u1_0_2_stride_1 + integer(i64), value :: bound_global_trial_basis_u1_0_2_stride_2 + integer(i64), value :: bound_global_trial_basis_u1_0_2_stride_3 + integer(i64), value :: bound_global_trial_basis_u1_0_2_stride_4 + type(c_ptr), value :: bound_global_trial_basis_u1_1_1 + integer(i64), value :: bound_global_trial_basis_u1_1_1_shape_1 + integer(i64), value :: bound_global_trial_basis_u1_1_1_shape_2 + integer(i64), value :: bound_global_trial_basis_u1_1_1_shape_3 + integer(i64), value :: bound_global_trial_basis_u1_1_1_shape_4 + integer(i64), value :: bound_global_trial_basis_u1_1_1_stride_1 + integer(i64), value :: bound_global_trial_basis_u1_1_1_stride_2 + integer(i64), value :: bound_global_trial_basis_u1_1_1_stride_3 + integer(i64), value :: bound_global_trial_basis_u1_1_1_stride_4 + type(c_ptr), value :: bound_global_trial_basis_u1_1_2 + integer(i64), value :: bound_global_trial_basis_u1_1_2_shape_1 + integer(i64), value :: bound_global_trial_basis_u1_1_2_shape_2 + integer(i64), value :: bound_global_trial_basis_u1_1_2_shape_3 + integer(i64), value :: bound_global_trial_basis_u1_1_2_shape_4 + integer(i64), value :: bound_global_trial_basis_u1_1_2_stride_1 + integer(i64), value :: bound_global_trial_basis_u1_1_2_stride_2 + integer(i64), value :: bound_global_trial_basis_u1_1_2_stride_3 + integer(i64), value :: bound_global_trial_basis_u1_1_2_stride_4 + type(c_ptr), value :: bound_global_span_v1_0_1 + integer(i64), value :: bound_global_span_v1_0_1_shape_1 + integer(i64), value :: bound_global_span_v1_0_1_stride_1 + type(c_ptr), value :: bound_global_span_v1_0_2 + integer(i64), value :: bound_global_span_v1_0_2_shape_1 + integer(i64), value :: bound_global_span_v1_0_2_stride_1 + type(c_ptr), value :: bound_global_span_v1_1_1 + integer(i64), value :: bound_global_span_v1_1_1_shape_1 + integer(i64), value :: bound_global_span_v1_1_1_stride_1 + type(c_ptr), value :: bound_global_span_v1_1_2 + integer(i64), value :: bound_global_span_v1_1_2_shape_1 + integer(i64), value :: bound_global_span_v1_1_2_stride_1 + type(c_ptr), value :: bound_global_x1 + integer(i64), value :: bound_global_x1_shape_1 + integer(i64), value :: bound_global_x1_shape_2 + integer(i64), value :: bound_global_x1_stride_1 + integer(i64), value :: bound_global_x1_stride_2 + type(c_ptr), value :: bound_global_x2 + integer(i64), value :: bound_global_x2_shape_1 + integer(i64), value :: bound_global_x2_shape_2 + integer(i64), value :: bound_global_x2_stride_1 + integer(i64), value :: bound_global_x2_stride_2 + integer(i64), value :: test_v1_0_p1 + integer(i64), value :: test_v1_0_p2 + integer(i64), value :: test_v1_1_p1 + integer(i64), value :: test_v1_1_p2 + integer(i64), value :: trial_u1_0_p1 + integer(i64), value :: trial_u1_0_p2 + integer(i64), value :: trial_u1_1_p1 + integer(i64), value :: trial_u1_1_p2 + integer(i64), value :: n_element_1 + integer(i64), value :: n_element_2 + integer(i64), value :: k1 + integer(i64), value :: k2 + integer(i64), value :: pad1 + integer(i64), value :: pad2 + type(c_ptr), value :: bound_g_mat_u1_0_v1_0_e0el77nq + integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_shape_1 + integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_shape_2 + integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_shape_3 + integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_shape_4 + integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_stride_1 + integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_stride_2 + integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_stride_3 + integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_stride_4 + type(c_ptr), value :: bound_g_mat_u1_1_v1_0_e0el77nq + integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_shape_1 + integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_shape_2 + integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_shape_3 + integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_shape_4 + integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_stride_1 + integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_stride_2 + integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_stride_3 + integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_stride_4 + type(c_ptr), value :: bound_g_mat_u1_0_v1_1_e0el77nq + integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_shape_1 + integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_shape_2 + integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_shape_3 + integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_shape_4 + integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_stride_1 + integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_stride_2 + integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_stride_3 + integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_stride_4 + type(c_ptr), value :: bound_g_mat_u1_1_v1_1_e0el77nq + integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_shape_1 + integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_shape_2 + integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_shape_3 + integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_shape_4 + integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_stride_1 + integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_stride_2 + integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_stride_3 + integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_stride_4 + real(f64), pointer :: global_test_basis_v1_0_1(:,:,:,:) + real(f64), pointer :: global_test_basis_v1_0_2(:,:,:,:) + real(f64), pointer :: global_test_basis_v1_1_1(:,:,:,:) + real(f64), pointer :: global_test_basis_v1_1_2(:,:,:,:) + real(f64), pointer :: global_trial_basis_u1_0_1(:,:,:,:) + real(f64), pointer :: global_trial_basis_u1_0_2(:,:,:,:) + real(f64), pointer :: global_trial_basis_u1_1_1(:,:,:,:) + real(f64), pointer :: global_trial_basis_u1_1_2(:,:,:,:) + integer(i64), pointer :: global_span_v1_0_1(:) + integer(i64), pointer :: global_span_v1_0_2(:) + integer(i64), pointer :: global_span_v1_1_1(:) + integer(i64), pointer :: global_span_v1_1_2(:) + real(f64), pointer :: global_x1(:,:) + real(f64), pointer :: global_x2(:,:) + real(f64), pointer :: g_mat_u1_0_v1_0_e0el77nq(:,:,:,:) + real(f64), pointer :: g_mat_u1_1_v1_0_e0el77nq(:,:,:,:) + real(f64), pointer :: g_mat_u1_0_v1_1_e0el77nq(:,:,:,:) + real(f64), pointer :: g_mat_u1_1_v1_1_e0el77nq(:,:,:,:) + + call C_F_Pointer(bound_global_test_basis_v1_0_1, & + global_test_basis_v1_0_1, [ & + bound_global_test_basis_v1_0_1_shape_4 * & + bound_global_test_basis_v1_0_1_stride_4, & + bound_global_test_basis_v1_0_1_shape_3 * & + bound_global_test_basis_v1_0_1_stride_3, & + bound_global_test_basis_v1_0_1_shape_2 * & + bound_global_test_basis_v1_0_1_stride_2, & + bound_global_test_basis_v1_0_1_shape_1 * & + bound_global_test_basis_v1_0_1_stride_1]) + call C_F_Pointer(bound_global_test_basis_v1_0_2, & + global_test_basis_v1_0_2, [ & + bound_global_test_basis_v1_0_2_shape_4 * & + bound_global_test_basis_v1_0_2_stride_4, & + bound_global_test_basis_v1_0_2_shape_3 * & + bound_global_test_basis_v1_0_2_stride_3, & + bound_global_test_basis_v1_0_2_shape_2 * & + bound_global_test_basis_v1_0_2_stride_2, & + bound_global_test_basis_v1_0_2_shape_1 * & + bound_global_test_basis_v1_0_2_stride_1]) + call C_F_Pointer(bound_global_test_basis_v1_1_1, & + global_test_basis_v1_1_1, [ & + bound_global_test_basis_v1_1_1_shape_4 * & + bound_global_test_basis_v1_1_1_stride_4, & + bound_global_test_basis_v1_1_1_shape_3 * & + bound_global_test_basis_v1_1_1_stride_3, & + bound_global_test_basis_v1_1_1_shape_2 * & + bound_global_test_basis_v1_1_1_stride_2, & + bound_global_test_basis_v1_1_1_shape_1 * & + bound_global_test_basis_v1_1_1_stride_1]) + call C_F_Pointer(bound_global_test_basis_v1_1_2, & + global_test_basis_v1_1_2, [ & + bound_global_test_basis_v1_1_2_shape_4 * & + bound_global_test_basis_v1_1_2_stride_4, & + bound_global_test_basis_v1_1_2_shape_3 * & + bound_global_test_basis_v1_1_2_stride_3, & + bound_global_test_basis_v1_1_2_shape_2 * & + bound_global_test_basis_v1_1_2_stride_2, & + bound_global_test_basis_v1_1_2_shape_1 * & + bound_global_test_basis_v1_1_2_stride_1]) + call C_F_Pointer(bound_global_trial_basis_u1_0_1, & + global_trial_basis_u1_0_1, [ & + bound_global_trial_basis_u1_0_1_shape_4 * & + bound_global_trial_basis_u1_0_1_stride_4, & + bound_global_trial_basis_u1_0_1_shape_3 * & + bound_global_trial_basis_u1_0_1_stride_3, & + bound_global_trial_basis_u1_0_1_shape_2 * & + bound_global_trial_basis_u1_0_1_stride_2, & + bound_global_trial_basis_u1_0_1_shape_1 * & + bound_global_trial_basis_u1_0_1_stride_1]) + call C_F_Pointer(bound_global_trial_basis_u1_0_2, & + global_trial_basis_u1_0_2, [ & + bound_global_trial_basis_u1_0_2_shape_4 * & + bound_global_trial_basis_u1_0_2_stride_4, & + bound_global_trial_basis_u1_0_2_shape_3 * & + bound_global_trial_basis_u1_0_2_stride_3, & + bound_global_trial_basis_u1_0_2_shape_2 * & + bound_global_trial_basis_u1_0_2_stride_2, & + bound_global_trial_basis_u1_0_2_shape_1 * & + bound_global_trial_basis_u1_0_2_stride_1]) + call C_F_Pointer(bound_global_trial_basis_u1_1_1, & + global_trial_basis_u1_1_1, [ & + bound_global_trial_basis_u1_1_1_shape_4 * & + bound_global_trial_basis_u1_1_1_stride_4, & + bound_global_trial_basis_u1_1_1_shape_3 * & + bound_global_trial_basis_u1_1_1_stride_3, & + bound_global_trial_basis_u1_1_1_shape_2 * & + bound_global_trial_basis_u1_1_1_stride_2, & + bound_global_trial_basis_u1_1_1_shape_1 * & + bound_global_trial_basis_u1_1_1_stride_1]) + call C_F_Pointer(bound_global_trial_basis_u1_1_2, & + global_trial_basis_u1_1_2, [ & + bound_global_trial_basis_u1_1_2_shape_4 * & + bound_global_trial_basis_u1_1_2_stride_4, & + bound_global_trial_basis_u1_1_2_shape_3 * & + bound_global_trial_basis_u1_1_2_stride_3, & + bound_global_trial_basis_u1_1_2_shape_2 * & + bound_global_trial_basis_u1_1_2_stride_2, & + bound_global_trial_basis_u1_1_2_shape_1 * & + bound_global_trial_basis_u1_1_2_stride_1]) + call C_F_Pointer(bound_global_span_v1_0_1, global_span_v1_0_1, [ & + bound_global_span_v1_0_1_shape_1 * & + bound_global_span_v1_0_1_stride_1]) + call C_F_Pointer(bound_global_span_v1_0_2, global_span_v1_0_2, [ & + bound_global_span_v1_0_2_shape_1 * & + bound_global_span_v1_0_2_stride_1]) + call C_F_Pointer(bound_global_span_v1_1_1, global_span_v1_1_1, [ & + bound_global_span_v1_1_1_shape_1 * & + bound_global_span_v1_1_1_stride_1]) + call C_F_Pointer(bound_global_span_v1_1_2, global_span_v1_1_2, [ & + bound_global_span_v1_1_2_shape_1 * & + bound_global_span_v1_1_2_stride_1]) + call C_F_Pointer(bound_global_x1, global_x1, [ & + bound_global_x1_shape_2 * bound_global_x1_stride_2, & + bound_global_x1_shape_1 * bound_global_x1_stride_1]) + call C_F_Pointer(bound_global_x2, global_x2, [ & + bound_global_x2_shape_2 * bound_global_x2_stride_2, & + bound_global_x2_shape_1 * bound_global_x2_stride_1]) + call C_F_Pointer(bound_g_mat_u1_0_v1_0_e0el77nq, & + g_mat_u1_0_v1_0_e0el77nq, [ & + bound_g_mat_u1_0_v1_0_e0el77nq_shape_4 * & + bound_g_mat_u1_0_v1_0_e0el77nq_stride_4, & + bound_g_mat_u1_0_v1_0_e0el77nq_shape_3 * & + bound_g_mat_u1_0_v1_0_e0el77nq_stride_3, & + bound_g_mat_u1_0_v1_0_e0el77nq_shape_2 * & + bound_g_mat_u1_0_v1_0_e0el77nq_stride_2, & + bound_g_mat_u1_0_v1_0_e0el77nq_shape_1 * & + bound_g_mat_u1_0_v1_0_e0el77nq_stride_1]) + call C_F_Pointer(bound_g_mat_u1_1_v1_0_e0el77nq, & + g_mat_u1_1_v1_0_e0el77nq, [ & + bound_g_mat_u1_1_v1_0_e0el77nq_shape_4 * & + bound_g_mat_u1_1_v1_0_e0el77nq_stride_4, & + bound_g_mat_u1_1_v1_0_e0el77nq_shape_3 * & + bound_g_mat_u1_1_v1_0_e0el77nq_stride_3, & + bound_g_mat_u1_1_v1_0_e0el77nq_shape_2 * & + bound_g_mat_u1_1_v1_0_e0el77nq_stride_2, & + bound_g_mat_u1_1_v1_0_e0el77nq_shape_1 * & + bound_g_mat_u1_1_v1_0_e0el77nq_stride_1]) + call C_F_Pointer(bound_g_mat_u1_0_v1_1_e0el77nq, & + g_mat_u1_0_v1_1_e0el77nq, [ & + bound_g_mat_u1_0_v1_1_e0el77nq_shape_4 * & + bound_g_mat_u1_0_v1_1_e0el77nq_stride_4, & + bound_g_mat_u1_0_v1_1_e0el77nq_shape_3 * & + bound_g_mat_u1_0_v1_1_e0el77nq_stride_3, & + bound_g_mat_u1_0_v1_1_e0el77nq_shape_2 * & + bound_g_mat_u1_0_v1_1_e0el77nq_stride_2, & + bound_g_mat_u1_0_v1_1_e0el77nq_shape_1 * & + bound_g_mat_u1_0_v1_1_e0el77nq_stride_1]) + call C_F_Pointer(bound_g_mat_u1_1_v1_1_e0el77nq, & + g_mat_u1_1_v1_1_e0el77nq, [ & + bound_g_mat_u1_1_v1_1_e0el77nq_shape_4 * & + bound_g_mat_u1_1_v1_1_e0el77nq_stride_4, & + bound_g_mat_u1_1_v1_1_e0el77nq_shape_3 * & + bound_g_mat_u1_1_v1_1_e0el77nq_stride_3, & + bound_g_mat_u1_1_v1_1_e0el77nq_shape_2 * & + bound_g_mat_u1_1_v1_1_e0el77nq_stride_2, & + bound_g_mat_u1_1_v1_1_e0el77nq_shape_1 * & + bound_g_mat_u1_1_v1_1_e0el77nq_stride_1]) + call assemble_matrix_e0el77nq(global_test_basis_v1_0_1 = & + global_test_basis_v1_0_1(1_i64:: & + bound_global_test_basis_v1_0_1_stride_4, 1_i64:: & + bound_global_test_basis_v1_0_1_stride_3, 1_i64:: & + bound_global_test_basis_v1_0_1_stride_2, 1_i64:: & + bound_global_test_basis_v1_0_1_stride_1), & + global_test_basis_v1_0_2 = global_test_basis_v1_0_2(1_i64:: & + bound_global_test_basis_v1_0_2_stride_4, 1_i64:: & + bound_global_test_basis_v1_0_2_stride_3, 1_i64:: & + bound_global_test_basis_v1_0_2_stride_2, 1_i64:: & + bound_global_test_basis_v1_0_2_stride_1), & + global_test_basis_v1_1_1 = global_test_basis_v1_1_1(1_i64:: & + bound_global_test_basis_v1_1_1_stride_4, 1_i64:: & + bound_global_test_basis_v1_1_1_stride_3, 1_i64:: & + bound_global_test_basis_v1_1_1_stride_2, 1_i64:: & + bound_global_test_basis_v1_1_1_stride_1), & + global_test_basis_v1_1_2 = global_test_basis_v1_1_2(1_i64:: & + bound_global_test_basis_v1_1_2_stride_4, 1_i64:: & + bound_global_test_basis_v1_1_2_stride_3, 1_i64:: & + bound_global_test_basis_v1_1_2_stride_2, 1_i64:: & + bound_global_test_basis_v1_1_2_stride_1), & + global_trial_basis_u1_0_1 = global_trial_basis_u1_0_1(1_i64:: & + bound_global_trial_basis_u1_0_1_stride_4, 1_i64:: & + bound_global_trial_basis_u1_0_1_stride_3, 1_i64:: & + bound_global_trial_basis_u1_0_1_stride_2, 1_i64:: & + bound_global_trial_basis_u1_0_1_stride_1), & + global_trial_basis_u1_0_2 = global_trial_basis_u1_0_2(1_i64:: & + bound_global_trial_basis_u1_0_2_stride_4, 1_i64:: & + bound_global_trial_basis_u1_0_2_stride_3, 1_i64:: & + bound_global_trial_basis_u1_0_2_stride_2, 1_i64:: & + bound_global_trial_basis_u1_0_2_stride_1), & + global_trial_basis_u1_1_1 = global_trial_basis_u1_1_1(1_i64:: & + bound_global_trial_basis_u1_1_1_stride_4, 1_i64:: & + bound_global_trial_basis_u1_1_1_stride_3, 1_i64:: & + bound_global_trial_basis_u1_1_1_stride_2, 1_i64:: & + bound_global_trial_basis_u1_1_1_stride_1), & + global_trial_basis_u1_1_2 = global_trial_basis_u1_1_2(1_i64:: & + bound_global_trial_basis_u1_1_2_stride_4, 1_i64:: & + bound_global_trial_basis_u1_1_2_stride_3, 1_i64:: & + bound_global_trial_basis_u1_1_2_stride_2, 1_i64:: & + bound_global_trial_basis_u1_1_2_stride_1), global_span_v1_0_1 & + = global_span_v1_0_1(1_i64::bound_global_span_v1_0_1_stride_1 & + ), global_span_v1_0_2 = global_span_v1_0_2(1_i64:: & + bound_global_span_v1_0_2_stride_1), global_span_v1_1_1 = & + global_span_v1_1_1(1_i64::bound_global_span_v1_1_1_stride_1), & + global_span_v1_1_2 = global_span_v1_1_2(1_i64:: & + bound_global_span_v1_1_2_stride_1), global_x1 = global_x1( & + 1_i64::bound_global_x1_stride_2, 1_i64:: & + bound_global_x1_stride_1), global_x2 = global_x2(1_i64:: & + bound_global_x2_stride_2, 1_i64::bound_global_x2_stride_1), & + test_v1_0_p1 = test_v1_0_p1, test_v1_0_p2 = test_v1_0_p2, & + test_v1_1_p1 = test_v1_1_p1, test_v1_1_p2 = test_v1_1_p2, & + trial_u1_0_p1 = trial_u1_0_p1, trial_u1_0_p2 = trial_u1_0_p2, & + trial_u1_1_p1 = trial_u1_1_p1, trial_u1_1_p2 = trial_u1_1_p2, & + n_element_1 = n_element_1, n_element_2 = n_element_2, k1 = k1 & + , k2 = k2, pad1 = pad1, pad2 = pad2, g_mat_u1_0_v1_0_e0el77nq & + = g_mat_u1_0_v1_0_e0el77nq(1_i64:: & + bound_g_mat_u1_0_v1_0_e0el77nq_stride_4, 1_i64:: & + bound_g_mat_u1_0_v1_0_e0el77nq_stride_3, 1_i64:: & + bound_g_mat_u1_0_v1_0_e0el77nq_stride_2, 1_i64:: & + bound_g_mat_u1_0_v1_0_e0el77nq_stride_1), & + g_mat_u1_1_v1_0_e0el77nq = g_mat_u1_1_v1_0_e0el77nq(1_i64:: & + bound_g_mat_u1_1_v1_0_e0el77nq_stride_4, 1_i64:: & + bound_g_mat_u1_1_v1_0_e0el77nq_stride_3, 1_i64:: & + bound_g_mat_u1_1_v1_0_e0el77nq_stride_2, 1_i64:: & + bound_g_mat_u1_1_v1_0_e0el77nq_stride_1), & + g_mat_u1_0_v1_1_e0el77nq = g_mat_u1_0_v1_1_e0el77nq(1_i64:: & + bound_g_mat_u1_0_v1_1_e0el77nq_stride_4, 1_i64:: & + bound_g_mat_u1_0_v1_1_e0el77nq_stride_3, 1_i64:: & + bound_g_mat_u1_0_v1_1_e0el77nq_stride_2, 1_i64:: & + bound_g_mat_u1_0_v1_1_e0el77nq_stride_1), & + g_mat_u1_1_v1_1_e0el77nq = g_mat_u1_1_v1_1_e0el77nq(1_i64:: & + bound_g_mat_u1_1_v1_1_e0el77nq_stride_4, 1_i64:: & + bound_g_mat_u1_1_v1_1_e0el77nq_stride_3, 1_i64:: & + bound_g_mat_u1_1_v1_1_e0el77nq_stride_2, 1_i64:: & + bound_g_mat_u1_1_v1_1_e0el77nq_stride_1)) + + end subroutine bind_c_assemble_matrix_e0el77nq + !........................................ + +end module bind_c_dependencies_e0el77nq_mx2lvwh9fed2 diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.f90.lock b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.f90.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.mod b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.mod new file mode 100644 index 0000000000000000000000000000000000000000..d906d0f5809db0572d2d64617a662149cc7f20c5 GIT binary patch literal 3277 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 LDQh{PsGR@+M5%gx literal 0 HcmV?d00001 diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.o b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.o new file mode 100644 index 0000000000000000000000000000000000000000..538230ff04807cdabf8fab58a6cc3f1f6522836d GIT binary patch literal 10152 zcmcJVUufjlb;oCIt*xf1G!JV~p^yo^Et-dd?0tv|g^cK?{D%I7r?H#}Vtcgq%F%}X zBYQ=vlsqUzDH^0{=Rpq&=s^Kd^dMM0h@!S?I$G~~<+`>-OPkpwj;9TwZhC`dMG zrl0S*_s+<>YiLS4?CAbG_x$;ubMHO(&c5;Cd%t)%lR5QZhCh6J`1U@)pB!I4zs`3- z10VCL{iYun)Eqtwp$*TBzT&4(xjZvDJLBuVJ@&crv2Huo{_@klCVrZ`^;=#q8gr3G zWx0Ie{LJ}oPq}<nr>XD2FR0ojrdBRLclGk+t5;&@-Tb0my^(-Y zn8nYjSP5mhJULZ<{>Af`Cw)h`{84+4gMPIzG3PwLee{#vznaNRon-kKjRC$!e!8zS zBwN(qV%|fP$!}*e6A&>!Q{t&;Wz6-8 z>mY5o{)=f^qG7BORZz9pE3@l*MOL}wa?owNV=wlnNoCn(MN;{?%QA8-oo0=6#tlf9 zDQj%HgP_Z_7)y^88`yRG8W2h~bzoXfrGzZ_%C0L=Nh;^u5JudRVFN+rU|N}R!?I$> zCU3glPkJU>Hf7#5;4Yo&Y73)=2qkXNC^5y40Hq(h)1G49 zEvSOOCOl5Gg!hzGnvQITq%3$(XcUEZGzTrW)E1g^)Wt>)a-JI0zzy6`54O`!)TTmZ73)bFtHEVCXB+S{e_O8p& zHiQN=Ah%5T3Sr0yu4lr`$3 z)v0!Jd)^Jv*GpTJ!#3VZzO8{m960(w%@R!{Ws-0GJS===!g$KOpflT`yh0u`MqMt0~%;DU}(1M zY5rf+>SS96?9(ft)+p0T6Gk7Ti%WiYHPEz`rr?}2!d+KWng2l052`9W)3fLeU2*SS z9Mm*C_Y6-0@>m{ZIfx+XPxhqCF*Bu0vHkZ6@!Jq1k8X=6z)4m=AEZZhu-1{j4 z4!RLgtX?yRWjUIRp&~&+Y*Rf;9a}yIh{HpPA{K0CkFj749}DT?x+|Dif-KlD?*t@4 zX1WgsQN+c%n-D30Dn^V8P!2#)Z2tpj3gBKzHzbWV!lg!pOM8WdIbj$?h9eA-sn)cl z09y%OayjDODjvP5u8Gi9%)ciD|CZ6P=Gb_!bu@oV?j3@RS*u=Qa2S_b%%7$daHIJ* z)5@yLiLUx3LZhKoyCbwr`MP0ZzV?S^aqk^m(KxYo*ipqw;bYXqr6eo_3B~rl;%G{O zy<=u2tWx&^cDe$<+t6ttpl-gtsbESLQ_f2`u0@Xh$xWQSYUD}vYwf_dCJ~im_+rtV z8aP}hv&B+!HZ=Br#^UF=WUsU_9Dc(Gtv|PM_zj8M3F0iSHbiO;-}Ed2cS9oDuO*e1 zFk4Z}Ff&>oW9;pk$Oe{#4eX_8QZ`wfalHt8$&izKi9tgU;Z3;ND#yGOgy+PD{=?Yc zuCr$Uqj>Z~^(s4)H|6rW^r##c^FK`fhAxYWiyzZ8;U&QOUU{iqxY${n@L zE~EAS-*(pMBmadPyQ zsB`p2|2L%vTT=de#lP{gr~SH+8K4>bKd5TV%WC2oak9qUI3cnlx4I$K~x}rASoJh_8%bpACe;fkK z-q`<_T_S$)KKphz0v>E(xb9Jnr{|&yZ#>~dtz@t4E}GzPAIKF43r#~bd2UX{7Dtmhk3_c z|1a4U?LNzM(_hsI>2T2a==Uk`;9|@c%&+qU7HiA;?&C8#c!J4~uf$H9;(f+HnwNd;Y#i&HpSA z)d8p_5$#tK%plcoMiuWWG$sNXSDj2=>G}E?1m;QN|J>C^@7j|GBrAPHO^)kt-G4tD)o}o zk{d#(Ed)`78vC!TM+D|O9<)rz2OX*D=MEZN@ z;yLWoWfKHVHd}!~EmJ{OA%J`iWzCaW))#T~#Eo6Q~p2wgdnW>sJ8nceCn8zd6bXagF*3T~}>VxYpVcETj|}wpHu! z6;~p|HlU3#+d_Clq=2*_F@A?zp=wv&x?fF3;+GCLMlrfOi&m05rA%kSN1wMs(9}e3 z(I-gk95N0{c`@n$QE}A}kYF<*J-}wmN*%L#`guH88+aO~FR2}E!PHPcoSKvoo_ot*EjFzVJht!EB^-FN3NU-h<3WrADkF4( zr)CeWOK#ujc%9L<2d8@EB+#jM;8B97N%u)y_z?m!ElT4W&XiV|ZN~;Xh6H$E8dNz+ zJSz6=98VB6!Uc;As2M6B)m7ExREGg^7Lz5k?KQl>(ZQd4H@MgH1QAF>eGJtbP>fypEoDMJ^y$ z$A}Sx80h7fPpQLEVW+GZg&op(htoqp&IAD*&?X?fUXg~{7#p#Fi^1|-WJ(r8_`juJ zqiRBr)lhw$pH0~M^oy&1u*#_F6V@mtIZMK-M)!`~5~|t=I(Os^aSV6l;UE$B^8~1w z=6-&fR2_MP5OnXz109h@>yh&lyIZKvU<1FKmYWf_7cBYTm_W0snCaYb!$o)k0pKS! zNQ>_jxpZ+n*Xb%&pD_RmP}pVIE^Sk$5ZaRlNn=2qjx30Qsn9n^pS-1XX~-Bbn;3_0 zXA3ae&PA{2@lwnt=6>>4n6X0b8EYjlOxpG=GfOkLe?e7y#76#v2N2Jku!@|Vwty}_h3Yh9jH0*YcNIU$6qT+f` zWp&w=;EDf!oKW|#+jpb{r;bLFD%qP(`~2IA#slkOZL3T9g7ir9ucST?sB4&GVBE-f z4dexMv^WSd_}3B>=$BCW34FQOw)q}3&-{AuKmk}63F zwNgq&$>#_)tWj+&VZs14=z0D?$&oJ#s6;i4VI$*WuZcsHEx^ts-?*t?UcU77$WtRv zk32I{eo4I_{b2Sl^*Ix$AN-TgXHLy#Ph~&(aBq#3@Ei2&+tfQKAGG?&XAGL(qsN@i z_+NZF4EJDCrZ4;F5BSQ!pFQX+xoVHE3@)ASVREK#=uaQ=mEmtb+#~*dYiD}ClcU@? z(}SIvzO7L1oaw>UnZEiNPq!b+gHSd?*$ibXl!u`_4&~e&b z*JCG?^+&uO`=Nah%0}pKhIT8IhmZ6K!@l8QurCG!AORp>WPQ=Q29BpQnco2hZDoA} zlpxwypycyRfj@+MUyhQ`Gdccg zzx({;g~!UHkDr77xvSG(qqunODzh~C;*~F#f4@9E^Wy)8+l9&J%NMU)ocX`w_|=*7 t&wd=YVC(s7*CsDNdug(K`TWd_7iT->%7FhN4j;?nbBX^CWRD8+{|3H1F-ZUb literal 0 HcmV?d00001 diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.o.lock b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.o.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.f90 b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.f90 new file mode 100644 index 00000000..b12a9888 --- /dev/null +++ b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.f90 @@ -0,0 +1,181 @@ +module bind_c_dependencies_vga8r193_6xftl47r79t3 + + use dependencies_vga8r193_6xftl47r79t3 + + use, intrinsic :: ISO_C_Binding, only : f64 => C_DOUBLE , i64 => & + C_INT64_T , C_F_Pointer , c_ptr + implicit none + + contains + + !........................................ + subroutine bind_c_lo_dot_vga8r193(bound_mat00, bound_mat00_shape_1, & + bound_mat00_shape_2, bound_mat00_shape_3, bound_mat00_shape_4, & + bound_mat00_stride_1, bound_mat00_stride_2, & + bound_mat00_stride_3, bound_mat00_stride_4, bound_mat01, & + bound_mat01_shape_1, bound_mat01_shape_2, bound_mat01_shape_3, & + bound_mat01_shape_4, bound_mat01_stride_1, bound_mat01_stride_2 & + , bound_mat01_stride_3, bound_mat01_stride_4, bound_mat10, & + bound_mat10_shape_1, bound_mat10_shape_2, bound_mat10_shape_3, & + bound_mat10_shape_4, bound_mat10_stride_1, bound_mat10_stride_2 & + , bound_mat10_stride_3, bound_mat10_stride_4, bound_mat11, & + bound_mat11_shape_1, bound_mat11_shape_2, bound_mat11_shape_3, & + bound_mat11_shape_4, bound_mat11_stride_1, bound_mat11_stride_2 & + , bound_mat11_stride_3, bound_mat11_stride_4, bound_x0, & + bound_x0_shape_1, bound_x0_shape_2, bound_x0_stride_1, & + bound_x0_stride_2, bound_x1, bound_x1_shape_1, bound_x1_shape_2 & + , bound_x1_stride_1, bound_x1_stride_2, bound_out0, & + bound_out0_shape_1, bound_out0_shape_2, bound_out0_stride_1, & + bound_out0_stride_2, bound_out1, bound_out1_shape_1, & + bound_out1_shape_2, bound_out1_stride_1, bound_out1_stride_2, & + s00_1, s00_2, s01_1, s01_2, s10_1, s10_2, s11_1, s11_2, n00_1, & + n00_2, n01_1, n01_2, n10_1, n10_2, n11_1, n11_2, ne00_1, ne00_2 & + , ne01_1, ne01_2, ne10_1, ne10_2, ne11_1, ne11_2) bind(c) + + implicit none + + type(c_ptr), value :: bound_mat00 + integer(i64), value :: bound_mat00_shape_1 + integer(i64), value :: bound_mat00_shape_2 + integer(i64), value :: bound_mat00_shape_3 + integer(i64), value :: bound_mat00_shape_4 + integer(i64), value :: bound_mat00_stride_1 + integer(i64), value :: bound_mat00_stride_2 + integer(i64), value :: bound_mat00_stride_3 + integer(i64), value :: bound_mat00_stride_4 + type(c_ptr), value :: bound_mat01 + integer(i64), value :: bound_mat01_shape_1 + integer(i64), value :: bound_mat01_shape_2 + integer(i64), value :: bound_mat01_shape_3 + integer(i64), value :: bound_mat01_shape_4 + integer(i64), value :: bound_mat01_stride_1 + integer(i64), value :: bound_mat01_stride_2 + integer(i64), value :: bound_mat01_stride_3 + integer(i64), value :: bound_mat01_stride_4 + type(c_ptr), value :: bound_mat10 + integer(i64), value :: bound_mat10_shape_1 + integer(i64), value :: bound_mat10_shape_2 + integer(i64), value :: bound_mat10_shape_3 + integer(i64), value :: bound_mat10_shape_4 + integer(i64), value :: bound_mat10_stride_1 + integer(i64), value :: bound_mat10_stride_2 + integer(i64), value :: bound_mat10_stride_3 + integer(i64), value :: bound_mat10_stride_4 + type(c_ptr), value :: bound_mat11 + integer(i64), value :: bound_mat11_shape_1 + integer(i64), value :: bound_mat11_shape_2 + integer(i64), value :: bound_mat11_shape_3 + integer(i64), value :: bound_mat11_shape_4 + integer(i64), value :: bound_mat11_stride_1 + integer(i64), value :: bound_mat11_stride_2 + integer(i64), value :: bound_mat11_stride_3 + integer(i64), value :: bound_mat11_stride_4 + type(c_ptr), value :: bound_x0 + integer(i64), value :: bound_x0_shape_1 + integer(i64), value :: bound_x0_shape_2 + integer(i64), value :: bound_x0_stride_1 + integer(i64), value :: bound_x0_stride_2 + type(c_ptr), value :: bound_x1 + integer(i64), value :: bound_x1_shape_1 + integer(i64), value :: bound_x1_shape_2 + integer(i64), value :: bound_x1_stride_1 + integer(i64), value :: bound_x1_stride_2 + type(c_ptr), value :: bound_out0 + integer(i64), value :: bound_out0_shape_1 + integer(i64), value :: bound_out0_shape_2 + integer(i64), value :: bound_out0_stride_1 + integer(i64), value :: bound_out0_stride_2 + type(c_ptr), value :: bound_out1 + integer(i64), value :: bound_out1_shape_1 + integer(i64), value :: bound_out1_shape_2 + integer(i64), value :: bound_out1_stride_1 + integer(i64), value :: bound_out1_stride_2 + integer(i64), value :: s00_1 + integer(i64), value :: s00_2 + integer(i64), value :: s01_1 + integer(i64), value :: s01_2 + integer(i64), value :: s10_1 + integer(i64), value :: s10_2 + integer(i64), value :: s11_1 + integer(i64), value :: s11_2 + integer(i64), value :: n00_1 + integer(i64), value :: n00_2 + integer(i64), value :: n01_1 + integer(i64), value :: n01_2 + integer(i64), value :: n10_1 + integer(i64), value :: n10_2 + integer(i64), value :: n11_1 + integer(i64), value :: n11_2 + integer(i64), value :: ne00_1 + integer(i64), value :: ne00_2 + integer(i64), value :: ne01_1 + integer(i64), value :: ne01_2 + integer(i64), value :: ne10_1 + integer(i64), value :: ne10_2 + integer(i64), value :: ne11_1 + integer(i64), value :: ne11_2 + real(f64), pointer :: mat00(:,:,:,:) + real(f64), pointer :: mat01(:,:,:,:) + real(f64), pointer :: mat10(:,:,:,:) + real(f64), pointer :: mat11(:,:,:,:) + real(f64), pointer :: x0(:,:) + real(f64), pointer :: x1(:,:) + real(f64), pointer :: out0(:,:) + real(f64), pointer :: out1(:,:) + + call C_F_Pointer(bound_mat00, mat00, [bound_mat00_shape_4 * & + bound_mat00_stride_4,bound_mat00_shape_3 * & + bound_mat00_stride_3,bound_mat00_shape_2 * & + bound_mat00_stride_2,bound_mat00_shape_1 * & + bound_mat00_stride_1]) + call C_F_Pointer(bound_mat01, mat01, [bound_mat01_shape_4 * & + bound_mat01_stride_4,bound_mat01_shape_3 * & + bound_mat01_stride_3,bound_mat01_shape_2 * & + bound_mat01_stride_2,bound_mat01_shape_1 * & + bound_mat01_stride_1]) + call C_F_Pointer(bound_mat10, mat10, [bound_mat10_shape_4 * & + bound_mat10_stride_4,bound_mat10_shape_3 * & + bound_mat10_stride_3,bound_mat10_shape_2 * & + bound_mat10_stride_2,bound_mat10_shape_1 * & + bound_mat10_stride_1]) + call C_F_Pointer(bound_mat11, mat11, [bound_mat11_shape_4 * & + bound_mat11_stride_4,bound_mat11_shape_3 * & + bound_mat11_stride_3,bound_mat11_shape_2 * & + bound_mat11_stride_2,bound_mat11_shape_1 * & + bound_mat11_stride_1]) + call C_F_Pointer(bound_x0, x0, [bound_x0_shape_2 * bound_x0_stride_2 & + ,bound_x0_shape_1 * bound_x0_stride_1]) + call C_F_Pointer(bound_x1, x1, [bound_x1_shape_2 * bound_x1_stride_2 & + ,bound_x1_shape_1 * bound_x1_stride_1]) + call C_F_Pointer(bound_out0, out0, [bound_out0_shape_2 * & + bound_out0_stride_2,bound_out0_shape_1 * bound_out0_stride_1] & + ) + call C_F_Pointer(bound_out1, out1, [bound_out1_shape_2 * & + bound_out1_stride_2,bound_out1_shape_1 * bound_out1_stride_1] & + ) + call lo_dot_vga8r193(mat00 = mat00(1_i64::bound_mat00_stride_4, & + 1_i64::bound_mat00_stride_3, 1_i64::bound_mat00_stride_2, & + 1_i64::bound_mat00_stride_1), mat01 = mat01(1_i64:: & + bound_mat01_stride_4, 1_i64::bound_mat01_stride_3, 1_i64:: & + bound_mat01_stride_2, 1_i64::bound_mat01_stride_1), mat10 = & + mat10(1_i64::bound_mat10_stride_4, 1_i64:: & + bound_mat10_stride_3, 1_i64::bound_mat10_stride_2, 1_i64:: & + bound_mat10_stride_1), mat11 = mat11(1_i64:: & + bound_mat11_stride_4, 1_i64::bound_mat11_stride_3, 1_i64:: & + bound_mat11_stride_2, 1_i64::bound_mat11_stride_1), x0 = x0( & + 1_i64::bound_x0_stride_2, 1_i64::bound_x0_stride_1), x1 = x1( & + 1_i64::bound_x1_stride_2, 1_i64::bound_x1_stride_1), out0 = & + out0(1_i64::bound_out0_stride_2, 1_i64::bound_out0_stride_1), & + out1 = out1(1_i64::bound_out1_stride_2, 1_i64:: & + bound_out1_stride_1), s00_1 = s00_1, s00_2 = s00_2, s01_1 = & + s01_1, s01_2 = s01_2, s10_1 = s10_1, s10_2 = s10_2, s11_1 = & + s11_1, s11_2 = s11_2, n00_1 = n00_1, n00_2 = n00_2, n01_1 = & + n01_1, n01_2 = n01_2, n10_1 = n10_1, n10_2 = n10_2, n11_1 = & + n11_1, n11_2 = n11_2, ne00_1 = ne00_1, ne00_2 = ne00_2, & + ne01_1 = ne01_1, ne01_2 = ne01_2, ne10_1 = ne10_1, ne10_2 = & + ne10_2, ne11_1 = ne11_1, ne11_2 = ne11_2) + + end subroutine bind_c_lo_dot_vga8r193 + !........................................ + +end module bind_c_dependencies_vga8r193_6xftl47r79t3 diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.f90.lock b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.f90.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.mod b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.mod new file mode 100644 index 0000000000000000000000000000000000000000..343f9f5d7b43e1aa5aa8157a137d6c99132fb891 GIT binary patch literal 2334 zcmV+(3E}o1iwFP!000006YZSebK1HR$KUl=?3Lv8D`tJQbcsM3e`{o#0+_2A2L`t5!O-)9f2 z`EmgPMgiPD%x>1RDcn6Qzrd&YVp`l5)7jVAVme#g&S$IQ`yV&v0aI1Pk9X^PojfGz zTK(%TmEz*!5?RFJD|PG<}=ynSiNoheYb`sTrBWlU2XyF z9i0zbE5ou~6xaPuyKK~&Qnf0d07B4o;-%2mZPVFZF<;ErMa_dnRb)FomOZ3+bFxvOWtfa?!2e3vM!9X;fH)&MTu*peQiG*+>w@>~T#!vI?HYpRezIK03Q+2K`cH zT?RxE>=Y_EtpTsX;AqblM>sf?aEjaI*FOVyl%sNo`RlQaChvy*$+*+YA@Al_bWPS3 zgUK+5towWRaa830twt=^TNHKoJ++;+TKQ-M{p)-GV(VKL;r$J;{KAf-?PFQR6!*q6Yf4{t?TF7d_ zvo@E1mNswO&Nw$)INf^0Wbp!1E}?eOX+w^QwUuk6RMcFLU!vVF%d;o5t7Db$q##Uo zHr+3a>2kdz3|?gH!A-1L$6^91dn?1*d8;dq#Dl-+JhYoiOX1p$HXmGI3ZaA$Aq*i@ z5NZe`2xABn2n~cOCf`8sZ4z7~%wC191w8gajc8AyJTMNFqpLND@d4 zBqt>^TcH!$}*NS2|Al8SQ~(p!0I@|eO@YB>G?bQZZ!dfrcZt#PN{gAaL+ zGG`fPol(DNkq!^Dj|G{N4~up_$b0R)*ZSCW#5uNz&GUt|g|xNNnBuJ*lH~9%)~7lo z8)jEIx$Y%TnNQD_+s>$(cdJ8+8W`r3BW;$j&b}Ybi@ZtS!cQKfzvVLojbkk1!1&q0bqNZ)`awe&$Y zipaNvjJ=SJLh|h(6E9?=n0z}(<3gUVjXzYs_i_ue)NdtyjJ)()p^uT5eyh;O$V7DEy!2Z|UPxa0tzs`EFa1_-l0jbew=#QdJoP*EG4j%HEq#o<^jo8kk(Yk! zu*S$yzqRs0^3rduy^y^0TSs0xN+eT=;Pm`I0_S0+i&MPoTolF)<5tb^4)BFBM}XdfdpKT<|nN%;cLH5((( zQ+dZoTv46xs~<|0SSsY^D^pQ1^A#nD6>^I!BP%LizA|X3xW$zTD=KEbBHdrG(<`GZ zDrUZlEET)BiYqE+z9Ma3@Y5?(Q8DvXYN@!zRVphgUcO36+ZQu-f|Z6FEN0$PB^JBT z(i<#h-m>~WV<%c^yuo7Tt)#?a7h7h7#mifExm|EuEvBoeq;#=5Juiy;h$q@DI%582oD^K%rWN9C^{|A!a)1G{W6>-ze{w`al$9J{N) z{<0aFp4};(tGqX|3mF}ra)I17K(?#pb|jWE8;vGcdAk_>I~&+#)XYkcj97hL1Cv-7oh@-rh32X*+< z9PLY3RG~h;aisBb0M){KQ?+#$G%IBO?p{brFB}hqe})%KeX3>O4L_^Ww@b43CtG-M z+2z>#(=AN6us-3!ge$C1xiH~U^+^{dT)IB(!h|cTPrNYUitAG^Ot_NzrnQ=fie z!j;x1V0dsTS)YPo!iDuo7$#g{eHw-dm#R<1FyYb%Q!z}yqJzm8CSdWwbPN-)U6a}iqq)X{xym0?)KZg?InZ_HfpESv}YGTS?z#+VqZaOD9Yill^S1`q!kkPp5=x>&{JU&(Izxp1uF<_vTXk1tp_kX&7Mu E0QH}Q#{d8T literal 0 HcmV?d00001 diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.o b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.o new file mode 100644 index 0000000000000000000000000000000000000000..13977da22656939888b2ed006a91cb28a3324da5 GIT binary patch literal 5176 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 C_DOUBLE , i64 => & + C_INT64_T , C_F_Pointer , c_ptr + implicit none + + contains + + !........................................ + subroutine bind_c_assemble_matrix_wti60kr7( & + bound_global_test_basis_v2_1, & + bound_global_test_basis_v2_1_shape_1, & + bound_global_test_basis_v2_1_shape_2, & + bound_global_test_basis_v2_1_shape_3, & + bound_global_test_basis_v2_1_shape_4, & + bound_global_test_basis_v2_1_stride_1, & + bound_global_test_basis_v2_1_stride_2, & + bound_global_test_basis_v2_1_stride_3, & + bound_global_test_basis_v2_1_stride_4, & + bound_global_test_basis_v2_2, & + bound_global_test_basis_v2_2_shape_1, & + bound_global_test_basis_v2_2_shape_2, & + bound_global_test_basis_v2_2_shape_3, & + bound_global_test_basis_v2_2_shape_4, & + bound_global_test_basis_v2_2_stride_1, & + bound_global_test_basis_v2_2_stride_2, & + bound_global_test_basis_v2_2_stride_3, & + bound_global_test_basis_v2_2_stride_4, & + bound_global_trial_basis_u2_1, & + bound_global_trial_basis_u2_1_shape_1, & + bound_global_trial_basis_u2_1_shape_2, & + bound_global_trial_basis_u2_1_shape_3, & + bound_global_trial_basis_u2_1_shape_4, & + bound_global_trial_basis_u2_1_stride_1, & + bound_global_trial_basis_u2_1_stride_2, & + bound_global_trial_basis_u2_1_stride_3, & + bound_global_trial_basis_u2_1_stride_4, & + bound_global_trial_basis_u2_2, & + bound_global_trial_basis_u2_2_shape_1, & + bound_global_trial_basis_u2_2_shape_2, & + bound_global_trial_basis_u2_2_shape_3, & + bound_global_trial_basis_u2_2_shape_4, & + bound_global_trial_basis_u2_2_stride_1, & + bound_global_trial_basis_u2_2_stride_2, & + bound_global_trial_basis_u2_2_stride_3, & + bound_global_trial_basis_u2_2_stride_4, bound_global_span_v2_1, & + bound_global_span_v2_1_shape_1, bound_global_span_v2_1_stride_1 & + , bound_global_span_v2_2, bound_global_span_v2_2_shape_1, & + bound_global_span_v2_2_stride_1, bound_global_x1, & + bound_global_x1_shape_1, bound_global_x1_shape_2, & + bound_global_x1_stride_1, bound_global_x1_stride_2, & + bound_global_x2, bound_global_x2_shape_1, & + bound_global_x2_shape_2, bound_global_x2_stride_1, & + bound_global_x2_stride_2, test_v2_p1, test_v2_p2, trial_u2_p1, & + trial_u2_p2, n_element_1, n_element_2, k1, k2, pad1, pad2, & + bound_g_mat_u2_v2_wti60kr7, bound_g_mat_u2_v2_wti60kr7_shape_1, & + bound_g_mat_u2_v2_wti60kr7_shape_2, & + bound_g_mat_u2_v2_wti60kr7_shape_3, & + bound_g_mat_u2_v2_wti60kr7_shape_4, & + bound_g_mat_u2_v2_wti60kr7_stride_1, & + bound_g_mat_u2_v2_wti60kr7_stride_2, & + bound_g_mat_u2_v2_wti60kr7_stride_3, & + bound_g_mat_u2_v2_wti60kr7_stride_4) bind(c) + + implicit none + + type(c_ptr), value :: bound_global_test_basis_v2_1 + integer(i64), value :: bound_global_test_basis_v2_1_shape_1 + integer(i64), value :: bound_global_test_basis_v2_1_shape_2 + integer(i64), value :: bound_global_test_basis_v2_1_shape_3 + integer(i64), value :: bound_global_test_basis_v2_1_shape_4 + integer(i64), value :: bound_global_test_basis_v2_1_stride_1 + integer(i64), value :: bound_global_test_basis_v2_1_stride_2 + integer(i64), value :: bound_global_test_basis_v2_1_stride_3 + integer(i64), value :: bound_global_test_basis_v2_1_stride_4 + type(c_ptr), value :: bound_global_test_basis_v2_2 + integer(i64), value :: bound_global_test_basis_v2_2_shape_1 + integer(i64), value :: bound_global_test_basis_v2_2_shape_2 + integer(i64), value :: bound_global_test_basis_v2_2_shape_3 + integer(i64), value :: bound_global_test_basis_v2_2_shape_4 + integer(i64), value :: bound_global_test_basis_v2_2_stride_1 + integer(i64), value :: bound_global_test_basis_v2_2_stride_2 + integer(i64), value :: bound_global_test_basis_v2_2_stride_3 + integer(i64), value :: bound_global_test_basis_v2_2_stride_4 + type(c_ptr), value :: bound_global_trial_basis_u2_1 + integer(i64), value :: bound_global_trial_basis_u2_1_shape_1 + integer(i64), value :: bound_global_trial_basis_u2_1_shape_2 + integer(i64), value :: bound_global_trial_basis_u2_1_shape_3 + integer(i64), value :: bound_global_trial_basis_u2_1_shape_4 + integer(i64), value :: bound_global_trial_basis_u2_1_stride_1 + integer(i64), value :: bound_global_trial_basis_u2_1_stride_2 + integer(i64), value :: bound_global_trial_basis_u2_1_stride_3 + integer(i64), value :: bound_global_trial_basis_u2_1_stride_4 + type(c_ptr), value :: bound_global_trial_basis_u2_2 + integer(i64), value :: bound_global_trial_basis_u2_2_shape_1 + integer(i64), value :: bound_global_trial_basis_u2_2_shape_2 + integer(i64), value :: bound_global_trial_basis_u2_2_shape_3 + integer(i64), value :: bound_global_trial_basis_u2_2_shape_4 + integer(i64), value :: bound_global_trial_basis_u2_2_stride_1 + integer(i64), value :: bound_global_trial_basis_u2_2_stride_2 + integer(i64), value :: bound_global_trial_basis_u2_2_stride_3 + integer(i64), value :: bound_global_trial_basis_u2_2_stride_4 + type(c_ptr), value :: bound_global_span_v2_1 + integer(i64), value :: bound_global_span_v2_1_shape_1 + integer(i64), value :: bound_global_span_v2_1_stride_1 + type(c_ptr), value :: bound_global_span_v2_2 + integer(i64), value :: bound_global_span_v2_2_shape_1 + integer(i64), value :: bound_global_span_v2_2_stride_1 + type(c_ptr), value :: bound_global_x1 + integer(i64), value :: bound_global_x1_shape_1 + integer(i64), value :: bound_global_x1_shape_2 + integer(i64), value :: bound_global_x1_stride_1 + integer(i64), value :: bound_global_x1_stride_2 + type(c_ptr), value :: bound_global_x2 + integer(i64), value :: bound_global_x2_shape_1 + integer(i64), value :: bound_global_x2_shape_2 + integer(i64), value :: bound_global_x2_stride_1 + integer(i64), value :: bound_global_x2_stride_2 + integer(i64), value :: test_v2_p1 + integer(i64), value :: test_v2_p2 + integer(i64), value :: trial_u2_p1 + integer(i64), value :: trial_u2_p2 + integer(i64), value :: n_element_1 + integer(i64), value :: n_element_2 + integer(i64), value :: k1 + integer(i64), value :: k2 + integer(i64), value :: pad1 + integer(i64), value :: pad2 + type(c_ptr), value :: bound_g_mat_u2_v2_wti60kr7 + integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_shape_1 + integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_shape_2 + integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_shape_3 + integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_shape_4 + integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_stride_1 + integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_stride_2 + integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_stride_3 + integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_stride_4 + real(f64), pointer :: global_test_basis_v2_1(:,:,:,:) + real(f64), pointer :: global_test_basis_v2_2(:,:,:,:) + real(f64), pointer :: global_trial_basis_u2_1(:,:,:,:) + real(f64), pointer :: global_trial_basis_u2_2(:,:,:,:) + integer(i64), pointer :: global_span_v2_1(:) + integer(i64), pointer :: global_span_v2_2(:) + real(f64), pointer :: global_x1(:,:) + real(f64), pointer :: global_x2(:,:) + real(f64), pointer :: g_mat_u2_v2_wti60kr7(:,:,:,:) + + call C_F_Pointer(bound_global_test_basis_v2_1, & + global_test_basis_v2_1, [bound_global_test_basis_v2_1_shape_4 & + * bound_global_test_basis_v2_1_stride_4, & + bound_global_test_basis_v2_1_shape_3 * & + bound_global_test_basis_v2_1_stride_3, & + bound_global_test_basis_v2_1_shape_2 * & + bound_global_test_basis_v2_1_stride_2, & + bound_global_test_basis_v2_1_shape_1 * & + bound_global_test_basis_v2_1_stride_1]) + call C_F_Pointer(bound_global_test_basis_v2_2, & + global_test_basis_v2_2, [bound_global_test_basis_v2_2_shape_4 & + * bound_global_test_basis_v2_2_stride_4, & + bound_global_test_basis_v2_2_shape_3 * & + bound_global_test_basis_v2_2_stride_3, & + bound_global_test_basis_v2_2_shape_2 * & + bound_global_test_basis_v2_2_stride_2, & + bound_global_test_basis_v2_2_shape_1 * & + bound_global_test_basis_v2_2_stride_1]) + call C_F_Pointer(bound_global_trial_basis_u2_1, & + global_trial_basis_u2_1, [ & + bound_global_trial_basis_u2_1_shape_4 * & + bound_global_trial_basis_u2_1_stride_4, & + bound_global_trial_basis_u2_1_shape_3 * & + bound_global_trial_basis_u2_1_stride_3, & + bound_global_trial_basis_u2_1_shape_2 * & + bound_global_trial_basis_u2_1_stride_2, & + bound_global_trial_basis_u2_1_shape_1 * & + bound_global_trial_basis_u2_1_stride_1]) + call C_F_Pointer(bound_global_trial_basis_u2_2, & + global_trial_basis_u2_2, [ & + bound_global_trial_basis_u2_2_shape_4 * & + bound_global_trial_basis_u2_2_stride_4, & + bound_global_trial_basis_u2_2_shape_3 * & + bound_global_trial_basis_u2_2_stride_3, & + bound_global_trial_basis_u2_2_shape_2 * & + bound_global_trial_basis_u2_2_stride_2, & + bound_global_trial_basis_u2_2_shape_1 * & + bound_global_trial_basis_u2_2_stride_1]) + call C_F_Pointer(bound_global_span_v2_1, global_span_v2_1, [ & + bound_global_span_v2_1_shape_1 * & + bound_global_span_v2_1_stride_1]) + call C_F_Pointer(bound_global_span_v2_2, global_span_v2_2, [ & + bound_global_span_v2_2_shape_1 * & + bound_global_span_v2_2_stride_1]) + call C_F_Pointer(bound_global_x1, global_x1, [ & + bound_global_x1_shape_2 * bound_global_x1_stride_2, & + bound_global_x1_shape_1 * bound_global_x1_stride_1]) + call C_F_Pointer(bound_global_x2, global_x2, [ & + bound_global_x2_shape_2 * bound_global_x2_stride_2, & + bound_global_x2_shape_1 * bound_global_x2_stride_1]) + call C_F_Pointer(bound_g_mat_u2_v2_wti60kr7, g_mat_u2_v2_wti60kr7, [ & + bound_g_mat_u2_v2_wti60kr7_shape_4 * & + bound_g_mat_u2_v2_wti60kr7_stride_4, & + bound_g_mat_u2_v2_wti60kr7_shape_3 * & + bound_g_mat_u2_v2_wti60kr7_stride_3, & + bound_g_mat_u2_v2_wti60kr7_shape_2 * & + bound_g_mat_u2_v2_wti60kr7_stride_2, & + bound_g_mat_u2_v2_wti60kr7_shape_1 * & + bound_g_mat_u2_v2_wti60kr7_stride_1]) + call assemble_matrix_wti60kr7(global_test_basis_v2_1 = & + global_test_basis_v2_1(1_i64:: & + bound_global_test_basis_v2_1_stride_4, 1_i64:: & + bound_global_test_basis_v2_1_stride_3, 1_i64:: & + bound_global_test_basis_v2_1_stride_2, 1_i64:: & + bound_global_test_basis_v2_1_stride_1), & + global_test_basis_v2_2 = global_test_basis_v2_2(1_i64:: & + bound_global_test_basis_v2_2_stride_4, 1_i64:: & + bound_global_test_basis_v2_2_stride_3, 1_i64:: & + bound_global_test_basis_v2_2_stride_2, 1_i64:: & + bound_global_test_basis_v2_2_stride_1), & + global_trial_basis_u2_1 = global_trial_basis_u2_1(1_i64:: & + bound_global_trial_basis_u2_1_stride_4, 1_i64:: & + bound_global_trial_basis_u2_1_stride_3, 1_i64:: & + bound_global_trial_basis_u2_1_stride_2, 1_i64:: & + bound_global_trial_basis_u2_1_stride_1), & + global_trial_basis_u2_2 = global_trial_basis_u2_2(1_i64:: & + bound_global_trial_basis_u2_2_stride_4, 1_i64:: & + bound_global_trial_basis_u2_2_stride_3, 1_i64:: & + bound_global_trial_basis_u2_2_stride_2, 1_i64:: & + bound_global_trial_basis_u2_2_stride_1), global_span_v2_1 = & + global_span_v2_1(1_i64::bound_global_span_v2_1_stride_1), & + global_span_v2_2 = global_span_v2_2(1_i64:: & + bound_global_span_v2_2_stride_1), global_x1 = global_x1(1_i64 & + ::bound_global_x1_stride_2, 1_i64::bound_global_x1_stride_1), & + global_x2 = global_x2(1_i64::bound_global_x2_stride_2, 1_i64 & + ::bound_global_x2_stride_1), test_v2_p1 = test_v2_p1, & + test_v2_p2 = test_v2_p2, trial_u2_p1 = trial_u2_p1, & + trial_u2_p2 = trial_u2_p2, n_element_1 = n_element_1, & + n_element_2 = n_element_2, k1 = k1, k2 = k2, pad1 = pad1, & + pad2 = pad2, g_mat_u2_v2_wti60kr7 = g_mat_u2_v2_wti60kr7( & + 1_i64::bound_g_mat_u2_v2_wti60kr7_stride_4, 1_i64:: & + bound_g_mat_u2_v2_wti60kr7_stride_3, 1_i64:: & + bound_g_mat_u2_v2_wti60kr7_stride_2, 1_i64:: & + bound_g_mat_u2_v2_wti60kr7_stride_1)) + + end subroutine bind_c_assemble_matrix_wti60kr7 + !........................................ + +end module bind_c_dependencies_wti60kr7_6feykyplisif diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.f90.lock b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.f90.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.mod b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.mod new file mode 100644 index 0000000000000000000000000000000000000000..92f03123c32a2a26e362c32a70f0de46e7d44e01 GIT binary patch literal 2336 zcmV+*3E%b~iwFP!000006YX40lcG!#zSpnF8}{Mdpb9A9$S5;wtgQxWzdI+wZgIvK zTaDJ4b@tb976>91A3F9}u`yxO0R|sWW@YA+Sr+-};~*FZULRi9v+v6YenfBE#d-xA zwKRBni>AA12J^S|D?Be&v+yOHMVn|fi&ig-XdC`#x8VA>H#_9>=;ybeo8@A=nEzw$ z>ZH|rfLr{LbmxKKE^aODCEV=ZG|<9uv0Wn~0c^4Qq5;cJN;d{tyXBj4&H%^yBv;DzMRzQ!$0;4ut**jNMJpr0K^@02dR`S zel8_XgKj5&s1PN2s(u8(z{C?Dh$+-Ii{{~Cwb+FP4TgzkiPqRKGMztpLD&1x^GSu$ zGpV|d!(O-D9sf1*p8OcE7mT|f@hh(fV=wsRj}t4&%P2nSajBR>U&NA`MwziZ4my*b zf9arzQ4YHOQMY|Eya$+idMc?H4+P2utRK7SvpNHjXdj-&-iHJ#Np)^tGzNAe+RsgN zL)i|GZX{ZMM4rZ57YA3@f2Ad*?Fxu~MM7G+||72q?)6vBvGaSTGHjjZ)qGb_E ztBwIT!H|nRDIAi6gM<^ltT#Wkyq8lW@8-9|GMan{29t5O?}Oj-AMqNmM~0KY2e0?H z_jwfh|4uv>#4W<2`i{@`+HHR{g29s?1l>*?5QZLpF&g@9AuSAtZQ)kBKu!fK%onTa zQY#H*M;S?_U)0J-^7@tw(Vz5s)j;$(eW;KYDx?+sFpH+k<@yD4ArT8|Wsd&@TE8O( z<5ITB4Qq+Wi$|VFwYVQ{FTd9FH)Llsidm!@sHMF2ZL$FKBaKY5Uq#{=|4KPhG zEigHlHkb~WE?7EPlvoTb11u9P3oH(n4VD9z3tR_IfivI+a1*!%oCCLkJHTDAb+9Se z3~U2z6Kspv9BdnG2W%G{9UKY{1IGZz1jho0gJXl^fa8LzgG<3>;2PkX;9B5vaBXlM za9t!V6iCM$SZBByxS6xo5E>m;dExKTCH(mhLt*U6d9z!Dk z?$#!CPwC7|y8UH?b~4d)g{O%6q#)35vU-UHTSqNiHn{&+TEJ2;&Kc0eHzmf{Py}B}JzX&PaB?1ysidHkch9DI! zXY3k+RJ5M4YY0-+g2t|4NL4EuyM`fEEotl;hE%ntv5O3OwyH@9im{7?n8B>%mS2Zk z&?;%D)gmM2;8ul;yWuTT;o0ghHLRdWeHlz8t-vW#UJkB`R^Sx5Zr=#sNwAW>t57%m zl9#__FN-)uPTQ;L{Z5g?_SKUXcf(oati7V)$tjZ5zNS#V8_*(6?Hl3yeI8WgrM;q& zv&cvL>SF9}IE#d|S2VP{MJn3Y6aaSvN@eSE8#_;W@E(iDTqawWs|GYfx-M4@Y^HQw zt{T`Z>AGAsuyN_STs5%S`E|J$L&~82BBXRzEP{2N{JLBW5EtXUxOnF@Vj>A7A!< zN!j!BDiWXcxDEwIq&V#Sf))lt(c8xB$+%wr(n%>C@&5Yu?Ii;fcm22sOs?0*MROvu zERBj+x@X&6DV#=wbW22{A8p!=RtMIgwJM%wN}9~*Nzc-XR-kwxuWPA^=h&p8jT`zS zukUMyry2G|4Po%UqKno^!zu9{C212Uam1UokrSudhgL&k-$^?25V7w*kpBT_fL3_j GSO5SoX?-dH literal 0 HcmV?d00001 diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.o b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.o new file mode 100644 index 0000000000000000000000000000000000000000..a0f59e0b28355dc097b0be81747ba1f2a9375ff6 GIT binary patch literal 5320 zcmb_gPi$OA8Q&yMvI)q$1rCdZ#2)70MMByTsjLuEy&{$7Nn_PemspVG*@@R(tBJEp z40TWsuIeH`t+)8#gCqH1Bp-Z;WFLGmXhFM8QoCwNw&lQ9QHgK3G@*-xWETX>@Au7& zHv~nZz?0w3%r`T?@BcUBclWOk|8X=HJ8&q5AG}?7;|KAR#*636cxO2Agl8>jCwjOC z&x#uZGsc&Ae8O;|FgaoSc0BOx;6P{Wd*4df9`U%h@dYav22*|w+b|p%o*3>>!thjn zAm17HI-Hy%6`zX54x`@$o)fjR7`-sOaQV`u%j2H-IG)!l?iZk?&HVGYiNdf@3`egF zUnt9 zURH5%(a|evQb%`nd0LUHF5gi7Y!j=$HRx-h&8ltgO{`9E1m zwZP2~YL4yZv}(W{^eX1p)sRfis~K(pXs?L2#t~$uh5MqL+_l}=RaF}fss$pAD3^@#_LP}s79KjSzLOrE4WnbZd2B@J! zCOyHg>6R{pkVw2G^mWyQIDM5;n|N6YQUd?m?DU(crLXJVPxb5XPaF?U+zIM`dd6g0 z`t@3{`Boc`j%L*k_6G_5mTupr)~pOvP`7J3npS)0>u8TK&ho%Y=#y?x|Ku5+*#n^7 z+$3OMkUH=$T zHpPl{TG5oxs6m5>APU5+Q@#Z!M$mqTfRkiv4LU>YsA(B9#{}J+T$F?hfNlicJH7mh ziW70oBf=1H(y}bqm6zKNcZn<*LMB>Pa~vQBn2%2Sbvtl2Msa8{GZ|b?3#29@OQhd& zyb!vJDoKoXO#(ykV8#vNx8KoGlg3@)NDL`!y|rZUxV3cUN3a;`0WC$-Im*G*>AMC+=blQ2aIYS1)$ z7(7S$Bje7B&l7mN2Ei1z3r>~z&ksOc^gF04V5MnXehOk(leMiaKXeAASb-{D+z+C zSIP)@4LV*DRD)ax*;%>;5Bg{<2-@$OXj?~Bl_NKCwyd@MmK6s<{Q-h^TT(+RR$t{b zoNb^JgSLDM<-0s<4GYFoKoZ9y7_;OH+MK6}v$tHfFM;ZvJ%qlA8anfl{#D1>I`b)O z%C>X%2H{|u87@w&&Wd;@^EQ*bA2cbY-r45lyqp+8{f`j8AvtlAnXO@_BF_fG!CZ3C zYGvrK*yFt-b~Zuyb(6E#U&S8x9mqZXw9;8gNblHei0k z1vPaOJQ9Q-HQ zo`J$BwN@5dwM3>6rG-|KKEtDURyDAMNxXoa)Md#dFrh_05Z6Ftv;=MVdkY28Ciylo zktW1oAWw2^!`A`_P{&Z68)}l&cgdu;8YKG9m?PK#i+@0ZuVdig~(2((XOV z)&SkrEe(}cFr-R6t#tc0EEH2h+M$(a*uBoMY_bP21qm?Q7z+&gE%YT1tQQ=+`a^hO zN5p;8THmNNok9r6{H8&Iu}?=dNs}shkhZN{YddEo0qn#z5NL;DK*l|^hF1!@rA8uT z<5h|#+>*&hB$=svMxZv572L~Hrac;M061lF?BvNjLW93D;9hJb! z87A1h$K!%}(Kh{PSrxAbnU7g*dP#?QcwwXs<1&xnCml*np%oM4&sJEh@Yz2lR^H%{y{d*j3dGh|W9<(#4HSu9Q_-vVX8~edn&_NDoVl2 zxXb)y892N1zY#m<=_G|OtK0jIOYqJb&ZDu9TvI_T0u1R%fVfL0| zNth#_3eIH~1YWT#^X?$M5BALa82MD}UCLxc>nV`r8YRq7o^6pWaV0DfmmO8PQR~+p z#7zbNg@TqJXyeQT!~d}{khg{?$$!^WsuE85)1+k?SQT3-cNnz#)mw4o_YcqJ&*abM z&*j6Lq;?+0?`L_wgNv$C&?` z``!@i!Zjq;o&4EB+ey7~$ad0|F5BsuJ>127=+6H1i0$NFJK9D3?#8jMH}L79yLqhZ zILF(^EPcndE!Xb3cIvpDpKP z6Iaj^_Wybs`=CX43N1A5?nR5|TrYkQ7u{*Jc+REq!*$Q|2NV9g3@wo0k9(d&n?S(& z??6B27{LBJ( +# include +# include +# include "numpy_version.h" + +# define NO_IMPORT_ARRAY +# define PY_ARRAY_UNIQUE_SYMBOL CWRAPPER_ARRAY_API +# include "numpy/arrayobject.h" + +extern const char* dataTypes[17]; + +/* + * Functions : Cast functions + * -------------------------- + * All functions listed down are based on C/python api + * with more tolerance to different precision + * Convert python type object to the desired C type + * Parameters : + * object : the python object + * Returns : + * The desired C type, an error may be raised by c/python converter + * so one should call PyErr_Occurred() to check for errors after the + * calling a cast function + * + * Reference of the used c python api function + * -------------------------------------------- + * https://docs.python.org/3/c-api/float.html#c.PyFloat_AsDouble + * https://docs.python.org/3/c-api/long.html#c.PyLong_AsLong + * https://docs.python.org/3/c-api/long.html#c.PyLong_AsLongLong + */ +float complex PyComplex_to_Complex64(PyObject *o) ; +double complex PyComplex_to_Complex128(PyObject *o); + +//-----------------------------------------------------// +static inline int64_t PyInt64_to_Int64(PyObject *object) +{ + return (int64_t)PyLong_AsLongLong(object); +} +//-----------------------------------------------------// +static inline int32_t PyInt32_to_Int32(PyObject *object) +{ + return (int32_t)PyLong_AsLong(object); +} +//-----------------------------------------------------// +static inline int16_t PyInt16_to_Int16(PyObject *object) +{ + return (int16_t)PyLong_AsLong(object); +} +//-----------------------------------------------------// +static inline int8_t PyInt8_to_Int8(PyObject *object) +{ + return (int8_t)PyLong_AsLong(object); +} +//-----------------------------------------------------// +static inline bool PyBool_to_Bool(PyObject *object) +{ + return object == Py_True; +} +//-----------------------------------------------------// +static inline float PyFloat_to_Float(PyObject *object) +{ + return (float)PyFloat_AsDouble(object); +} +//-----------------------------------------------------// +static inline double PyDouble_to_Double(PyObject *object) +{ + return PyFloat_AsDouble(object); +} + + +/* + * Functions : Cast functions + * --------------------------- + * Some of the function used below are based on C/python api + * with more tolerance to different precisions and complex type. + * Collect the python object from the C object + * Parameters : + * object : the C object + * + * Returns : + * boolean : python object + */ +PyObject *Complex128_to_PyComplex(double complex *c); +PyObject *Complex128_to_NumpyComplex(double complex *c); +PyObject *Complex64_to_NumpyComplex(float complex *c); + +PyObject *Bool_to_PyBool(bool *b); + +PyObject *Int64_to_PyLong(int64_t *i); +PyObject *Int32_to_PyLong(int32_t *i); +PyObject *Int64_to_NumpyLong(int64_t *i); +PyObject *Int32_to_NumpyLong(int32_t *i); +PyObject *Int16_to_NumpyLong(int16_t *i); +PyObject *Int8_to_NumpyLong(int8_t *i); + +PyObject *Double_to_PyDouble(double *d); +PyObject *Double_to_NumpyDouble(double *d); +PyObject *Float_to_NumpyDouble(float *d); + +/* + * Functions : Type check functions + * --------------------------- + * Some of the function used below are based on C/python api and numpy/c api with + * more tolerance to different precisions, different system architectures and complex type. + * Check the C data type ob a python object + * Parameters : + * object : the python object + * + * Returns : + * boolean : logic statement responsible for checking python data type + * + * Reference of the used c/python api function + * --------------------------------------------------- + * https://docs.python.org/3/c-api/long.html#c.PyLong_Check + * https://docs.python.org/3/c-api/complex.html#c.PyComplex_Check + * https://docs.python.org/3/c-api/float.html#c.PyFloat_Check + * https://docs.python.org/3/c-api/bool.html#c.PyBool_Check + * https://numpy.org/doc/1.17/reference/c-api.array.html#c.PyArray_IsScalar + */ +//--------------------------------------------------------// +static inline bool PyIs_NativeInt(PyObject *o) +{ + return PyLong_CheckExact(o); +} +//--------------------------------------------------------// +static inline bool PyIs_Int8(PyObject *o) +{ + return PyArray_IsScalar(o, Int8); +} +//--------------------------------------------------------// +static inline bool PyIs_Int16(PyObject *o) +{ + return PyArray_IsScalar(o, Int16); +} +//--------------------------------------------------------// +static inline bool PyIs_Int32(PyObject *o) +{ + return PyArray_IsScalar(o, Int32); +} +//--------------------------------------------------------// +static inline bool PyIs_Int64(PyObject *o) +{ + return PyArray_IsScalar(o, Int64); +} +//--------------------------------------------------------// +static inline bool PyIs_NativeFloat(PyObject *o) +{ + return PyFloat_Check(o); +} +//--------------------------------------------------------// +static inline bool PyIs_Float(PyObject *o) +{ + return PyArray_IsScalar(o, Float32); +} +//--------------------------------------------------------// +static inline bool PyIs_Double(PyObject *o) +{ + return PyArray_IsScalar(o, Float64); +} +//--------------------------------------------------------// +static inline bool PyIs_Bool(PyObject *o) +{ + return PyBool_Check(o) || PyArray_IsScalar(o, Bool); +} +//--------------------------------------------------------// +static inline bool PyIs_NativeComplex(PyObject *o) +{ + return PyComplex_Check(o); +} +//--------------------------------------------------------// +static inline bool PyIs_Complex128(PyObject *o) +{ + return PyArray_IsScalar(o, Complex128); +} +//--------------------------------------------------------// +static inline bool PyIs_Complex64(PyObject *o) +{ + return PyArray_IsScalar(o, Complex64); +} + + +#endif diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.o b/__gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.o new file mode 100644 index 0000000000000000000000000000000000000000..3bb6cd2654f9abbb01794e27bde461436f1327d0 GIT binary patch literal 24568 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 SJaH72$heSWW*{0xi2nof;t4MR literal 0 HcmV?d00001 diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.o.lock b/__gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.o.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper/numpy_version.h b/__gpyccel__/__epyccel__/__pyccel__/cwrapper/numpy_version.h new file mode 100644 index 00000000..77602060 --- /dev/null +++ b/__gpyccel__/__epyccel__/__pyccel__/cwrapper/numpy_version.h @@ -0,0 +1,3 @@ +#ifndef NPY_NO_DEPRECATED_API +# define NPY_NO_DEPRECATED_API NPY_1_19_API_VERSION +#endif \ No newline at end of file diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays.lock b/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.c b/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.c new file mode 100644 index 00000000..e2d43d95 --- /dev/null +++ b/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.c @@ -0,0 +1,509 @@ +/* -------------------------------------------------------------------------------------- */ +/* This file is part of Pyccel which is released under MIT License. See the LICENSE file */ +/* or go to https://github.com/pyccel/pyccel/blob/devel/LICENSE for full license details. */ +/* -------------------------------------------------------------------------------------- */ + +#include +#include "cwrapper_ndarrays.h" + +/* + * Function : _numpy_to_ndarray_strides + * -------------------- + * Convert numpy strides to nd_array strides, and return it in a new array, to + * avoid the problem of different implementations of strides in numpy and ndarray. + * Parameters : + * np_strides : npy_intp array + * type_size : data type enum + * nd : size of the array + * + * Returns : + * ndarray_strides : a new array with new strides values + */ +static int64_t *_numpy_to_ndarray_strides(npy_intp *np_strides, int type_size, int nd) +{ + int64_t *ndarray_strides; + + ndarray_strides = (int64_t*)malloc(sizeof(int64_t) * nd); + for (int i = 0; i < nd; i++) + ndarray_strides[i] = (int64_t) np_strides[i] / type_size; + + return ndarray_strides; +} + +static npy_intp *_ndarray_to_numpy_strides(int64_t *nd_strides, int32_t type_size, int nd) +{ + npy_intp *numpy_strides; + + numpy_strides = (npy_intp*)malloc(sizeof(npy_intp) * nd); + for (int i = 0; i < nd; i++) + numpy_strides[i] = (npy_intp) nd_strides[i] * type_size; + + return numpy_strides; +} + + +/* + * Function : _numpy_to_ndarray_shape + * -------------------- + * Copy numpy shape to nd_array shape, and return it in a new array, to + * avoid the problem of variation of system architecture because numpy shape + * is not saved in fixed length type. + * Parameters : + * np_shape : npy_intp array + * nd : size of the array + * + * Returns : + * ndarray_strides : new array +*/ +static int64_t *_numpy_to_ndarray_shape(npy_intp *np_shape, int nd) +{ + int64_t *nd_shape; + + nd_shape = (int64_t*)malloc(sizeof(int64_t) * nd); + for (int i = 0; i < nd; i++) + nd_shape[i] = (int64_t) np_shape[i]; + return nd_shape; +} + +static npy_intp *_ndarray_to_numpy_shape(int64_t *nd_shape, int nd) +{ + npy_intp *np_shape; + + np_shape = (npy_intp*)malloc(sizeof(npy_intp) * nd); + for (int i = 0; i < nd; i++) + np_shape[i] = (npy_intp) nd_shape[i]; + return np_shape; +} + +/* + * Function: _check_pyarray_dtype + * -------------------- + * Check Python Object DataType: + * + * Parameters : + * a : python array object + * dtype : desired data type enum + * Returns : + * return NULL if no error occurred otherwise it will return the + * message to be reported in a TypeError exception + * reference of the used c/python api function + * ------------------------------------------- + * https://numpy.org/doc/stable/reference/c-api/array.html#c.PyArray_TYPE + */ +static char* _check_pyarray_dtype(PyArrayObject *a, int dtype) +{ + int current_dtype; + + if (dtype == NO_TYPE_CHECK) + return NULL; + + current_dtype = PyArray_TYPE(a); + if (current_dtype != dtype) + { + char* error = (char *)malloc(200); + sprintf(error, "argument dtype must be %s, not %s", + dataTypes[dtype], + dataTypes[current_dtype]); + return error; + } + + return NULL; +} + +/* + * Function: _check_pyarray_rank + * -------------------- + * Check Python Object Rank: + * + * Parameters : + * a : python array object + * rank : desired rank + * Returns : + * return NULL if no error occurred otherwise it will return the + * message to be reported in a TypeError exception + * reference of the used c/python api function + * ------------------------------------------- + * https://numpy.org/doc/stable/reference/c-api/array.html#c.PyArray_NDIM + */ +static char* _check_pyarray_rank(PyArrayObject *a, int rank) +{ + int current_rank; + + current_rank = PyArray_NDIM(a); + if (current_rank != rank) + { + char* error = (char *)malloc(200); + sprintf(error, "argument rank must be %d, not %d", + rank, + current_rank); + return error; + } + + return NULL; +} + +/* + * Function: _check_pyarray_order + * -------------------- + * Check Python Object Order: + * + * Parameters : + * a : python array object + * flag : desired order + * Returns : + * return NULL if no error occurred otherwise it will return the + * message to be reported in a TypeError exception + * reference of the used c/python api function + * ------------------------------------------- + * https://numpy.org/doc/stable/reference/c-api/array.html#c.PyArray_CHKFLAGS + */ +static char* _check_pyarray_order(PyArrayObject *a, int flag) +{ + + if (flag == NO_ORDER_CHECK) + return NULL; + + if (!PyArray_CHKFLAGS(a, flag)) + { + char order = (flag == NPY_ARRAY_C_CONTIGUOUS ? 'C' : (flag == NPY_ARRAY_F_CONTIGUOUS ? 'F' : '?')); + char* error = (char *)malloc(200); + sprintf(error, "argument does not have the expected ordering (%c)", order); + return error; + } + + return NULL; +} + + +/* + * Function: _check_pyarray_type + * -------------------- + * Check if Python Object is ArrayType: + * + * Parameters : + * a : python array object + * + * Returns : + * return NULL if no error occurred otherwise it will return the + * message to be reported in a TypeError exception + * reference of the used c/python api function + * ------------------------------------------- + * https://numpy.org/doc/stable/reference/c-api/array.html#c.PyArray_Check + */ +static char* _check_pyarray_type(PyObject *a) +{ + if (!PyArray_Check(a)) + { + char* error = (char *)malloc(200); + sprintf(error, "argument must be numpy.ndarray, not %s", + a == Py_None ? "None" : Py_TYPE(a)->tp_name); + return error; + } + + return NULL; +} + +enum NPY_TYPES get_numpy_type(t_ndarray o) +{ + enum e_types nd_type = o.type; + enum NPY_TYPES npy_type; + switch (nd_type) + { + case nd_bool: + npy_type = NPY_BOOL; + break; + case nd_int8: + npy_type = NPY_INT8; + break; + case nd_int16: + npy_type = NPY_INT16; + break; + case nd_int32: + npy_type = NPY_INT32; + break; + case nd_int64: + npy_type = NPY_INT64; + break; + case nd_float: + npy_type = NPY_FLOAT; + break; + case nd_double: + npy_type = NPY_DOUBLE; + break; + case nd_cfloat: + npy_type = NPY_CFLOAT; + break; + case nd_cdouble: + npy_type = NPY_CDOUBLE; + break; + default: + printf("Unknown data type\n"); + exit(1); + } + return npy_type; +} + +enum e_types get_ndarray_type(PyArrayObject *a) +{ + enum NPY_TYPES npy_type = PyArray_TYPE(a); + enum e_types nd_type; + switch (npy_type) + { + case NPY_BOOL: + nd_type = nd_bool; + break; + case NPY_INT8: + nd_type = nd_int8; + break; + case NPY_INT16: + nd_type = nd_int16; + break; + case NPY_INT32: + nd_type = nd_int32; + break; + case NPY_INT64: + nd_type = nd_int64; + break; + case NPY_FLOAT: + nd_type = nd_float; + break; + case NPY_DOUBLE: + nd_type = nd_double; + break; + case NPY_CFLOAT: + nd_type = nd_cfloat; + break; + case NPY_CDOUBLE: + nd_type = nd_cdouble; + break; + default: + printf("Unknown data type\n"); + exit(1); + } + return nd_type; +} + +/* converting numpy array to c nd array*/ +t_ndarray pyarray_to_ndarray(PyObject *o) +{ + PyArrayObject* a = (PyArrayObject*) o; + t_ndarray array; + + array.nd = PyArray_NDIM(a); + array.raw_data = PyArray_DATA(a); + array.type_size = PyArray_ITEMSIZE(a); + array.type = get_ndarray_type(a); + array.length = PyArray_SIZE(a); + array.buffer_size = PyArray_NBYTES(a); + array.shape = _numpy_to_ndarray_shape(PyArray_SHAPE(a), array.nd); + array.strides = _numpy_to_ndarray_strides(PyArray_STRIDES(a), array.type_size, array.nd); + array.order = PyArray_CHKFLAGS(a, NPY_ARRAY_C_CONTIGUOUS) ? order_c : order_f; + + array.is_view = 1; + + return array; +} + +PyObject* ndarray_to_pyarray(t_ndarray o) +{ + int FLAGS; + if (o.nd == 1) { + FLAGS = NPY_ARRAY_F_CONTIGUOUS | NPY_ARRAY_C_CONTIGUOUS | NPY_ARRAY_WRITEABLE; + } + else if (o.order == order_c) { + FLAGS = NPY_ARRAY_C_CONTIGUOUS | NPY_ARRAY_WRITEABLE; + } + else if (o.order == order_f) { + FLAGS = NPY_ARRAY_C_CONTIGUOUS | NPY_ARRAY_WRITEABLE; + } + else { + FLAGS = NPY_ARRAY_WRITEABLE; + } + + enum NPY_TYPES npy_type = get_numpy_type(o); + + return PyArray_NewFromDescr(&PyArray_Type, PyArray_DescrFromType(npy_type), + o.nd, _ndarray_to_numpy_shape(o.shape, o.nd), + _ndarray_to_numpy_strides(o.strides, o.type_size, o.nd), + o.raw_data, FLAGS, NULL); +} + +/* + * Function: pyarray_check + * -------------------- + * Check Python Object (DataType, Rank, Order): + * + * Parameters : + * a : python array object + * dtype : desired data type enum + * rank : desired rank + * flag : desired order flag + * Returns : + * return true if no error occurred otherwise it will return false + */ +bool pyarray_check(PyObject *o, int dtype, int rank, int flag) +{ + char* array_type = _check_pyarray_type(o); + if (array_type != NULL) { + PyErr_Format(PyExc_TypeError, array_type); + free(array_type); + return false; + } + + PyArrayObject* a = (PyArrayObject*)o; + + char error[600]; + error[0] = '\0'; + + // check array element type / rank / order + char* array_dtype = _check_pyarray_dtype(a, dtype); + if (array_dtype != NULL) { + strcat(error, array_dtype); + free(array_dtype); + } + + char* array_rank = _check_pyarray_rank(a, rank); + if (array_rank != NULL) { + strcat(error, array_rank); + free(array_rank); + } + + if (rank > 1) { + char* array_order = _check_pyarray_order(a, flag); + if (array_order != NULL) { + strcat(error, array_order); + free(array_order); + } + } + + if (error[0] != '\0') { + PyErr_Format(PyExc_TypeError, error); + return false; + } + else { + return true; + } +} + +bool is_numpy_array(PyObject *o, int dtype, int rank, int flag) +{ + char* array_type = _check_pyarray_type(o); + if (array_type != NULL) { + free(array_type); + return false; + } + + PyArrayObject* a = (PyArrayObject*)o; + + // check array element type / rank / order + char* array_dtype = _check_pyarray_dtype(a, dtype); + if(array_dtype != NULL) { + free(array_dtype); + return false; + } + + char* array_rank = _check_pyarray_rank(a, rank); + if(array_rank != NULL) { + free(array_rank); + return false; + } + + if (rank > 1) { + char* array_order = _check_pyarray_order(a, flag); + if(array_order != NULL) { + free(array_order); + return false; + } + } + + return true; +} + +/* + * Function: nd_ndim + * -------------------- + * Return the shape in the n dimension. + * + * Parameters : + * a : python array object + * index : dimension index + * Returns : + * return 0 if object is NULL or shape at indexed dimension + * reference of the used c/numpy api function + * ------------------------------------------- + * https://numpy.org/doc/1.17/reference/c-api.array.html#c.PyArray_DIM + */ +int nd_ndim(t_ndarray *a, int n) +{ + if (a == NULL) + return 0; + + return a->shape[n]; +} + + +/* + * Function: nd_data + * -------------------- + * Return data pointed by array + * + * Parameters : + * a : python array object + * Returns : + * return NULL if object is NULL or the data of the array + * reference of the used c/numpy api function + * ------------------------------------------- + * https://numpy.org/doc/1.17/reference/c-api.array.html#c.PyArray_DIM + */ +void *nd_data(t_ndarray *a) +{ + if (a == NULL) + return NULL; + + return a->raw_data; +} + +/* + * Function: nd_step_C + * -------------------- + * Return the step in the nth dimension for a C-ordered array (decreasing strides) + * + * Parameters : + * a : python array object + * index : dimension index + * Returns : + * return 1 if object is NULL or the step along the indexed dimension + */ +int nd_nstep_C(t_ndarray *a, int n) +{ + if (a == NULL || a->length == 0) + return 1; + + int step = a->strides[n]; + for (int i = n+1; ind; ++i) { + step /= a->shape[i]; + } + return step > 0 ? step : 1; +} +/* + * Function: nd_step_F + * -------------------- + * Return the step in the nth dimension for a F-ordered array (increasing strides) + * + * Parameters : + * a : python array object + * index : dimension index + * Returns : + * return 1 if object is NULL or the step along the indexed dimension + */ +int nd_nstep_F(t_ndarray *a, int n) +{ + if (a == NULL || a->length == 0) + return 1; + + int step = a->strides[n]; + for (int i = 0; ishape[i]; + } + return step > 0 ? step : 1; +} diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.c.lock b/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.c.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.h b/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.h new file mode 100644 index 00000000..05799a24 --- /dev/null +++ b/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.h @@ -0,0 +1,55 @@ +/* -------------------------------------------------------------------------------------- */ +/* This file is part of Pyccel which is released under MIT License. See the LICENSE file */ +/* or go to https://github.com/pyccel/pyccel/blob/devel/LICENSE for full license details. */ +/* -------------------------------------------------------------------------------------- */ + +/* + * File containing functions useful for the cwrapper which require ndarrays. + * There are 2 types of functions: + * - Functions converting PythonObjects to standard C types + * - Functions converting standard C types to PythonObjects (TODO: issue #537) + */ + +#ifndef CWRAPPER_NDARRAYS_H +# define CWRAPPER_NDARRAYS_H + +# include "cwrapper.h" +# include "ndarrays.h" + +# define NO_TYPE_CHECK -1 +# define NO_ORDER_CHECK -1 + +/* + * Function: pyarray_to_ndarray + * ---------------------------- + * A Cast function that convert numpy array variable into ndarray variable, + * by copying its information and data to a new variable of type ndarray struct + * and return this variable to be used inside c code. + * Parameters : + * o : python array object + * + * Returns : + * array : c ndarray + * + * reference of the used c/numpy api function + * ------------------------------------------- + * https://numpy.org/doc/stable/reference/c-api/array.html + */ +enum NPY_TYPES get_numpy_type(t_ndarray o); +enum e_types get_ndarray_type(PyArrayObject *a); +t_ndarray pyarray_to_ndarray(PyObject *o); +PyObject* ndarray_to_pyarray(t_ndarray o); +PyObject* c_ndarray_to_pyarray(t_ndarray o); +PyObject* fortran_ndarray_to_pyarray(t_ndarray o); + + +/* arrays checkers and helpers */ +bool pyarray_check(PyObject *o, int dtype, int rank, int flag); +bool is_numpy_array(PyObject *o, int dtype, int rank, int flag); + +void *nd_data(t_ndarray *a); +int nd_ndim(t_ndarray *a, int n); +int nd_nstep_C(t_ndarray *a, int n); +int nd_nstep_F(t_ndarray *a, int n); + +#endif diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.o b/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.o new file mode 100644 index 0000000000000000000000000000000000000000..e21dbf9a4b3645f24b077c759c1497f69bcab695 GIT binary patch literal 33208 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 F{ujeEA7ual literal 0 HcmV?d00001 diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.o.lock b/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.o.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.f90 b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.f90 new file mode 100644 index 00000000..f5925b09 --- /dev/null +++ b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.f90 @@ -0,0 +1,464 @@ +module dependencies_e0el77nq_mx2lvwh9fed2 + + + use, intrinsic :: ISO_C_Binding, only : f64 => C_DOUBLE , i64 => & + C_INT64_T + implicit none + + contains + + !........................................ + subroutine assemble_matrix_e0el77nq(global_test_basis_v1_0_1, & + global_test_basis_v1_0_2, global_test_basis_v1_1_1, & + global_test_basis_v1_1_2, global_trial_basis_u1_0_1, & + global_trial_basis_u1_0_2, global_trial_basis_u1_1_1, & + global_trial_basis_u1_1_2, global_span_v1_0_1, & + global_span_v1_0_2, global_span_v1_1_1, global_span_v1_1_2, & + global_x1, global_x2, test_v1_0_p1, test_v1_0_p2, test_v1_1_p1, & + test_v1_1_p2, trial_u1_0_p1, trial_u1_0_p2, trial_u1_1_p1, & + trial_u1_1_p2, n_element_1, n_element_2, k1, k2, pad1, pad2, & + g_mat_u1_0_v1_0_e0el77nq, g_mat_u1_1_v1_0_e0el77nq, & + g_mat_u1_0_v1_1_e0el77nq, g_mat_u1_1_v1_1_e0el77nq) + + implicit none + + real(f64), intent(in) :: global_test_basis_v1_0_1(0:,0:,0:,0:) + real(f64), intent(in) :: global_test_basis_v1_0_2(0:,0:,0:,0:) + real(f64), intent(in) :: global_test_basis_v1_1_1(0:,0:,0:,0:) + real(f64), intent(in) :: global_test_basis_v1_1_2(0:,0:,0:,0:) + real(f64), intent(in) :: global_trial_basis_u1_0_1(0:,0:,0:,0:) + real(f64), intent(in) :: global_trial_basis_u1_0_2(0:,0:,0:,0:) + real(f64), intent(in) :: global_trial_basis_u1_1_1(0:,0:,0:,0:) + real(f64), intent(in) :: global_trial_basis_u1_1_2(0:,0:,0:,0:) + integer(i64), intent(in) :: global_span_v1_0_1(0:) + integer(i64), intent(in) :: global_span_v1_0_2(0:) + integer(i64), intent(in) :: global_span_v1_1_1(0:) + integer(i64), intent(in) :: global_span_v1_1_2(0:) + real(f64), intent(in) :: global_x1(0:,0:) + real(f64), intent(in) :: global_x2(0:,0:) + integer(i64), value :: test_v1_0_p1 + integer(i64), value :: test_v1_0_p2 + integer(i64), value :: test_v1_1_p1 + integer(i64), value :: test_v1_1_p2 + integer(i64), value :: trial_u1_0_p1 + integer(i64), value :: trial_u1_0_p2 + integer(i64), value :: trial_u1_1_p1 + integer(i64), value :: trial_u1_1_p2 + integer(i64), value :: n_element_1 + integer(i64), value :: n_element_2 + integer(i64), value :: k1 + integer(i64), value :: k2 + integer(i64), value :: pad1 + integer(i64), value :: pad2 + real(f64), intent(inout) :: g_mat_u1_0_v1_0_e0el77nq(0:,0:,0:,0:) + real(f64), intent(inout) :: g_mat_u1_1_v1_0_e0el77nq(0:,0:,0:,0:) + real(f64), intent(inout) :: g_mat_u1_0_v1_1_e0el77nq(0:,0:,0:,0:) + real(f64), intent(inout) :: g_mat_u1_1_v1_1_e0el77nq(0:,0:,0:,0:) + real(f64), allocatable :: local_x1(:) + real(f64), allocatable :: local_x2(:) + real(f64), allocatable :: l_mat_u1_0_v1_0_e0el77nq(:,:,:,:) + real(f64), allocatable :: l_mat_u1_0_v1_1_e0el77nq(:,:,:,:) + real(f64), allocatable :: l_mat_u1_1_v1_0_e0el77nq(:,:,:,:) + real(f64), allocatable :: l_mat_u1_1_v1_1_e0el77nq(:,:,:,:) + integer(i64) :: i_element_1 + integer(i64) :: span_v1_0_1 + integer(i64) :: span_v1_1_1 + integer(i64) :: i_element_2 + integer(i64) :: span_v1_0_2 + integer(i64) :: span_v1_1_2 + integer(i64) :: i_quad_1 + real(f64) :: x1 + integer(i64) :: i_quad_2 + real(f64) :: x2 + integer(i64) :: i_basis_1 + integer(i64) :: i_basis_2 + integer(i64) :: j_basis_1 + real(f64) :: v1_0_1 + real(f64) :: v1_0_1_x1 + real(f64) :: u1_0_1 + real(f64) :: u1_0_1_x1 + integer(i64) :: j_basis_2 + real(f64) :: v1_0_2 + real(f64) :: v1_0_2_x2 + real(f64) :: u1_0_2 + real(f64) :: u1_0_2_x2 + real(f64) :: v1_0 + real(f64) :: v1_0_x2 + real(f64) :: v1_0_x1 + real(f64) :: u1_0 + real(f64) :: u1_0_x2 + real(f64) :: u1_0_x1 + real(f64) :: temp_v1_0_u1_0_0 + real(f64) :: temp_v1_0_u1_0_1 + real(f64) :: temp_v1_0_u1_0_2 + real(f64) :: temp_v1_0_u1_0_3 + real(f64) :: temp_v1_0_u1_0_4 + real(f64) :: temp_v1_0_u1_0_5 + real(f64) :: temp_v1_0_u1_0_6 + real(f64) :: temp_v1_0_u1_0_7 + real(f64) :: temp_v1_0_u1_0_8 + real(f64) :: contribution_v1_0_u1_0_e0el77nq + real(f64) :: u1_1_1 + real(f64) :: u1_1_1_x1 + real(f64) :: u1_1_2 + real(f64) :: u1_1_2_x2 + real(f64) :: u1_1 + real(f64) :: u1_1_x2 + real(f64) :: u1_1_x1 + real(f64) :: temp_v1_0_u1_1_0 + real(f64) :: temp_v1_0_u1_1_1 + real(f64) :: temp_v1_0_u1_1_2 + real(f64) :: temp_v1_0_u1_1_3 + real(f64) :: temp_v1_0_u1_1_4 + real(f64) :: temp_v1_0_u1_1_5 + real(f64) :: temp_v1_0_u1_1_6 + real(f64) :: temp_v1_0_u1_1_7 + real(f64) :: temp_v1_0_u1_1_8 + real(f64) :: temp_v1_0_u1_1_9 + real(f64) :: contribution_v1_0_u1_1_e0el77nq + real(f64) :: v1_1_1 + real(f64) :: v1_1_1_x1 + real(f64) :: v1_1_2 + real(f64) :: v1_1_2_x2 + real(f64) :: v1_1 + real(f64) :: v1_1_x2 + real(f64) :: v1_1_x1 + real(f64) :: temp_v1_1_u1_0_0 + real(f64) :: temp_v1_1_u1_0_1 + real(f64) :: temp_v1_1_u1_0_2 + real(f64) :: temp_v1_1_u1_0_3 + real(f64) :: temp_v1_1_u1_0_4 + real(f64) :: temp_v1_1_u1_0_5 + real(f64) :: temp_v1_1_u1_0_6 + real(f64) :: temp_v1_1_u1_0_7 + real(f64) :: temp_v1_1_u1_0_8 + real(f64) :: temp_v1_1_u1_0_9 + real(f64) :: contribution_v1_1_u1_0_e0el77nq + real(f64) :: temp_v1_1_u1_1_0 + real(f64) :: temp_v1_1_u1_1_1 + real(f64) :: temp_v1_1_u1_1_2 + real(f64) :: temp_v1_1_u1_1_3 + real(f64) :: temp_v1_1_u1_1_4 + real(f64) :: temp_v1_1_u1_1_5 + real(f64) :: temp_v1_1_u1_1_6 + real(f64) :: temp_v1_1_u1_1_7 + real(f64) :: temp_v1_1_u1_1_8 + real(f64) :: contribution_v1_1_u1_1_e0el77nq + + allocate(local_x1(0:size(global_x1, 1_i64, i64) - 1_i64)) + local_x1 = 0.0_f64 + allocate(local_x2(0:size(global_x2, 1_i64, i64) - 1_i64)) + local_x2 = 0.0_f64 + allocate(l_mat_u1_0_v1_0_e0el77nq(0:6_i64, 0:4_i64, 0:3_i64, 0:2_i64 & + )) + l_mat_u1_0_v1_0_e0el77nq = 0.0_f64 + allocate(l_mat_u1_0_v1_1_e0el77nq(0:6_i64, 0:6_i64, 0:2_i64, 0:3_i64 & + )) + l_mat_u1_0_v1_1_e0el77nq = 0.0_f64 + allocate(l_mat_u1_1_v1_0_e0el77nq(0:6_i64, 0:6_i64, 0:3_i64, 0:2_i64 & + )) + l_mat_u1_1_v1_0_e0el77nq = 0.0_f64 + allocate(l_mat_u1_1_v1_1_e0el77nq(0:4_i64, 0:6_i64, 0:2_i64, 0:3_i64 & + )) + l_mat_u1_1_v1_1_e0el77nq = 0.0_f64 + do i_element_1 = 0_i64, n_element_1 - 1_i64 + local_x1(:) = global_x1(:, i_element_1) + span_v1_0_1 = global_span_v1_0_1(i_element_1) + span_v1_1_1 = global_span_v1_1_1(i_element_1) + do i_element_2 = 0_i64, n_element_2 - 1_i64 + local_x2(:) = global_x2(:, i_element_2) + span_v1_0_2 = global_span_v1_0_2(i_element_2) + span_v1_1_2 = global_span_v1_1_2(i_element_2) + l_mat_u1_0_v1_0_e0el77nq(:, :, :, :) = 0.0_f64 + l_mat_u1_1_v1_0_e0el77nq(:, :, :, :) = 0.0_f64 + l_mat_u1_0_v1_1_e0el77nq(:, :, :, :) = 0.0_f64 + l_mat_u1_1_v1_1_e0el77nq(:, :, :, :) = 0.0_f64 + do i_quad_1 = 0_i64, 3_i64 + x1 = local_x1(i_quad_1) + do i_quad_2 = 0_i64, 3_i64 + x2 = local_x2(i_quad_2) + do i_basis_1 = 0_i64, 2_i64 + do i_basis_2 = 0_i64, 3_i64 + do j_basis_1 = 0_i64, 2_i64 + v1_0_1 = global_test_basis_v1_0_1(i_quad_1, 0_i64, & + i_basis_1, i_element_1) + v1_0_1_x1 = global_test_basis_v1_0_1(i_quad_1, 1_i64, & + i_basis_1, i_element_1) + u1_0_1 = global_trial_basis_u1_0_1(i_quad_1, 0_i64, & + j_basis_1, i_element_1) + u1_0_1_x1 = global_trial_basis_u1_0_1(i_quad_1, 1_i64, & + j_basis_1, i_element_1) + do j_basis_2 = 0_i64, 3_i64 + v1_0_2 = global_test_basis_v1_0_2(i_quad_2, 0_i64, & + i_basis_2, i_element_2) + v1_0_2_x2 = global_test_basis_v1_0_2(i_quad_2, 1_i64 & + , i_basis_2, i_element_2) + u1_0_2 = global_trial_basis_u1_0_2(i_quad_2, 0_i64, & + j_basis_2, i_element_2) + u1_0_2_x2 = global_trial_basis_u1_0_2(i_quad_2, & + 1_i64, j_basis_2, i_element_2) + v1_0 = v1_0_1 * v1_0_2 + v1_0_x2 = v1_0_1 * v1_0_2_x2 + v1_0_x1 = v1_0_1_x1 * v1_0_2 + u1_0 = u1_0_1 * u1_0_2 + u1_0_x2 = u1_0_1 * u1_0_2_x2 + u1_0_x1 = u1_0_1_x1 * u1_0_2 + temp_v1_0_u1_0_0 = 2_i64 * 3.141592653589793_f64 + temp_v1_0_u1_0_1 = temp_v1_0_u1_0_0 * x2 + temp_v1_0_u1_0_2 = temp_v1_0_u1_0_0 * x1 + temp_v1_0_u1_0_3 = 0.25_f64 * sin(temp_v1_0_u1_0_1) & + * cos(temp_v1_0_u1_0_2) + temp_v1_0_u1_0_4 = sin(temp_v1_0_u1_0_2) + temp_v1_0_u1_0_5 = cos(temp_v1_0_u1_0_1) + temp_v1_0_u1_0_6 = 0.25_f64 * temp_v1_0_u1_0_4 * & + temp_v1_0_u1_0_5 + temp_v1_0_u1_0_7 = temp_v1_0_u1_0_6 + 1.0_f64 + temp_v1_0_u1_0_8 = u1_0 * v1_0 / (temp_v1_0_u1_0_3 + & + temp_v1_0_u1_0_6 + 1_i64) ** 2_i64 + contribution_v1_0_u1_0_e0el77nq = 4.0_f64 * ( & + 0.015625_f64 * (temp_v1_0_u1_0_4 * & + temp_v1_0_u1_0_4) * (temp_v1_0_u1_0_5 * & + temp_v1_0_u1_0_5) * temp_v1_0_u1_0_8 + & + 0.25_f64 * (temp_v1_0_u1_0_7 * & + temp_v1_0_u1_0_7) * temp_v1_0_u1_0_8) * abs(( & + temp_v1_0_u1_0_3 + temp_v1_0_u1_0_7)) + l_mat_u1_0_v1_0_e0el77nq(3_i64 - i_basis_2 + & + j_basis_2, 2_i64 - i_basis_1 + j_basis_1, & + i_basis_2, i_basis_1) = & + l_mat_u1_0_v1_0_e0el77nq(3_i64 - i_basis_2 + & + j_basis_2, 2_i64 - i_basis_1 + j_basis_1, & + i_basis_2, i_basis_1) + & + contribution_v1_0_u1_0_e0el77nq + end do + end do + end do + end do + do i_basis_1 = 0_i64, 2_i64 + do i_basis_2 = 0_i64, 3_i64 + do j_basis_1 = 0_i64, 3_i64 + v1_0_1 = global_test_basis_v1_0_1(i_quad_1, 0_i64, & + i_basis_1, i_element_1) + v1_0_1_x1 = global_test_basis_v1_0_1(i_quad_1, 1_i64, & + i_basis_1, i_element_1) + u1_1_1 = global_trial_basis_u1_1_1(i_quad_1, 0_i64, & + j_basis_1, i_element_1) + u1_1_1_x1 = global_trial_basis_u1_1_1(i_quad_1, 1_i64, & + j_basis_1, i_element_1) + do j_basis_2 = 0_i64, 2_i64 + v1_0_2 = global_test_basis_v1_0_2(i_quad_2, 0_i64, & + i_basis_2, i_element_2) + v1_0_2_x2 = global_test_basis_v1_0_2(i_quad_2, 1_i64 & + , i_basis_2, i_element_2) + u1_1_2 = global_trial_basis_u1_1_2(i_quad_2, 0_i64, & + j_basis_2, i_element_2) + u1_1_2_x2 = global_trial_basis_u1_1_2(i_quad_2, & + 1_i64, j_basis_2, i_element_2) + v1_0 = v1_0_1 * v1_0_2 + v1_0_x2 = v1_0_1 * v1_0_2_x2 + v1_0_x1 = v1_0_1_x1 * v1_0_2 + u1_1 = u1_1_1 * u1_1_2 + u1_1_x2 = u1_1_1 * u1_1_2_x2 + u1_1_x1 = u1_1_1_x1 * u1_1_2 + temp_v1_0_u1_1_0 = 2_i64 * 3.141592653589793_f64 + temp_v1_0_u1_1_1 = temp_v1_0_u1_1_0 * x1 + temp_v1_0_u1_1_2 = temp_v1_0_u1_1_0 * x2 + temp_v1_0_u1_1_3 = sin(temp_v1_0_u1_1_2) * cos( & + temp_v1_0_u1_1_1) + temp_v1_0_u1_1_4 = sin(temp_v1_0_u1_1_1) * cos( & + temp_v1_0_u1_1_2) + temp_v1_0_u1_1_5 = 0.25_f64 * temp_v1_0_u1_1_4 + temp_v1_0_u1_1_6 = temp_v1_0_u1_1_5 + 1.0_f64 + temp_v1_0_u1_1_7 = 0.5_f64 * temp_v1_0_u1_1_3 + temp_v1_0_u1_1_8 = temp_v1_0_u1_1_7 + 2.0_f64 + temp_v1_0_u1_1_9 = u1_1 * v1_0 / ((0.5_f64 * & + temp_v1_0_u1_1_4 + temp_v1_0_u1_1_8) * ( & + 1.0_f64 * temp_v1_0_u1_1_3 + 1.0_f64 * & + temp_v1_0_u1_1_4 + 4.0_f64)) + contribution_v1_0_u1_1_e0el77nq = 4.0_f64 * (( & + -temp_v1_0_u1_1_5) * temp_v1_0_u1_1_8 * & + temp_v1_0_u1_1_9 - temp_v1_0_u1_1_6 * & + temp_v1_0_u1_1_7 * temp_v1_0_u1_1_9) * abs(( & + 0.25_f64 * temp_v1_0_u1_1_3 + & + temp_v1_0_u1_1_6)) + l_mat_u1_1_v1_0_e0el77nq(3_i64 - i_basis_2 + & + j_basis_2, 3_i64 - i_basis_1 + j_basis_1, & + i_basis_2, i_basis_1) = & + l_mat_u1_1_v1_0_e0el77nq(3_i64 - i_basis_2 + & + j_basis_2, 3_i64 - i_basis_1 + j_basis_1, & + i_basis_2, i_basis_1) + & + contribution_v1_0_u1_1_e0el77nq + end do + end do + end do + end do + do i_basis_1 = 0_i64, 3_i64 + do i_basis_2 = 0_i64, 2_i64 + do j_basis_1 = 0_i64, 2_i64 + v1_1_1 = global_test_basis_v1_1_1(i_quad_1, 0_i64, & + i_basis_1, i_element_1) + v1_1_1_x1 = global_test_basis_v1_1_1(i_quad_1, 1_i64, & + i_basis_1, i_element_1) + u1_0_1 = global_trial_basis_u1_0_1(i_quad_1, 0_i64, & + j_basis_1, i_element_1) + u1_0_1_x1 = global_trial_basis_u1_0_1(i_quad_1, 1_i64, & + j_basis_1, i_element_1) + do j_basis_2 = 0_i64, 3_i64 + v1_1_2 = global_test_basis_v1_1_2(i_quad_2, 0_i64, & + i_basis_2, i_element_2) + v1_1_2_x2 = global_test_basis_v1_1_2(i_quad_2, 1_i64 & + , i_basis_2, i_element_2) + u1_0_2 = global_trial_basis_u1_0_2(i_quad_2, 0_i64, & + j_basis_2, i_element_2) + u1_0_2_x2 = global_trial_basis_u1_0_2(i_quad_2, & + 1_i64, j_basis_2, i_element_2) + v1_1 = v1_1_1 * v1_1_2 + v1_1_x2 = v1_1_1 * v1_1_2_x2 + v1_1_x1 = v1_1_1_x1 * v1_1_2 + u1_0 = u1_0_1 * u1_0_2 + u1_0_x2 = u1_0_1 * u1_0_2_x2 + u1_0_x1 = u1_0_1_x1 * u1_0_2 + temp_v1_1_u1_0_0 = 2_i64 * 3.141592653589793_f64 + temp_v1_1_u1_0_1 = temp_v1_1_u1_0_0 * x1 + temp_v1_1_u1_0_2 = temp_v1_1_u1_0_0 * x2 + temp_v1_1_u1_0_3 = sin(temp_v1_1_u1_0_2) * cos( & + temp_v1_1_u1_0_1) + temp_v1_1_u1_0_4 = sin(temp_v1_1_u1_0_1) * cos( & + temp_v1_1_u1_0_2) + temp_v1_1_u1_0_5 = 0.25_f64 * temp_v1_1_u1_0_4 + temp_v1_1_u1_0_6 = temp_v1_1_u1_0_5 + 1.0_f64 + temp_v1_1_u1_0_7 = 0.5_f64 * temp_v1_1_u1_0_3 + temp_v1_1_u1_0_8 = temp_v1_1_u1_0_7 + 2.0_f64 + temp_v1_1_u1_0_9 = u1_0 * v1_1 / ((0.5_f64 * & + temp_v1_1_u1_0_4 + temp_v1_1_u1_0_8) * ( & + 1.0_f64 * temp_v1_1_u1_0_3 + 1.0_f64 * & + temp_v1_1_u1_0_4 + 4.0_f64)) + contribution_v1_1_u1_0_e0el77nq = 4.0_f64 * (( & + -temp_v1_1_u1_0_5) * temp_v1_1_u1_0_8 * & + temp_v1_1_u1_0_9 - temp_v1_1_u1_0_6 * & + temp_v1_1_u1_0_7 * temp_v1_1_u1_0_9) * abs(( & + 0.25_f64 * temp_v1_1_u1_0_3 + & + temp_v1_1_u1_0_6)) + l_mat_u1_0_v1_1_e0el77nq(3_i64 - i_basis_2 + & + j_basis_2, 3_i64 - i_basis_1 + j_basis_1, & + i_basis_2, i_basis_1) = & + l_mat_u1_0_v1_1_e0el77nq(3_i64 - i_basis_2 + & + j_basis_2, 3_i64 - i_basis_1 + j_basis_1, & + i_basis_2, i_basis_1) + & + contribution_v1_1_u1_0_e0el77nq + end do + end do + end do + end do + do i_basis_1 = 0_i64, 3_i64 + do i_basis_2 = 0_i64, 2_i64 + do j_basis_1 = 0_i64, 3_i64 + v1_1_1 = global_test_basis_v1_1_1(i_quad_1, 0_i64, & + i_basis_1, i_element_1) + v1_1_1_x1 = global_test_basis_v1_1_1(i_quad_1, 1_i64, & + i_basis_1, i_element_1) + u1_1_1 = global_trial_basis_u1_1_1(i_quad_1, 0_i64, & + j_basis_1, i_element_1) + u1_1_1_x1 = global_trial_basis_u1_1_1(i_quad_1, 1_i64, & + j_basis_1, i_element_1) + do j_basis_2 = 0_i64, 2_i64 + v1_1_2 = global_test_basis_v1_1_2(i_quad_2, 0_i64, & + i_basis_2, i_element_2) + v1_1_2_x2 = global_test_basis_v1_1_2(i_quad_2, 1_i64 & + , i_basis_2, i_element_2) + u1_1_2 = global_trial_basis_u1_1_2(i_quad_2, 0_i64, & + j_basis_2, i_element_2) + u1_1_2_x2 = global_trial_basis_u1_1_2(i_quad_2, & + 1_i64, j_basis_2, i_element_2) + v1_1 = v1_1_1 * v1_1_2 + v1_1_x2 = v1_1_1 * v1_1_2_x2 + v1_1_x1 = v1_1_1_x1 * v1_1_2 + u1_1 = u1_1_1 * u1_1_2 + u1_1_x2 = u1_1_1 * u1_1_2_x2 + u1_1_x1 = u1_1_1_x1 * u1_1_2 + temp_v1_1_u1_1_0 = 2_i64 * 3.141592653589793_f64 + temp_v1_1_u1_1_1 = temp_v1_1_u1_1_0 * x1 + temp_v1_1_u1_1_2 = temp_v1_1_u1_1_0 * x2 + temp_v1_1_u1_1_3 = 0.25_f64 * sin(temp_v1_1_u1_1_1) & + * cos(temp_v1_1_u1_1_2) + temp_v1_1_u1_1_4 = sin(temp_v1_1_u1_1_2) + temp_v1_1_u1_1_5 = cos(temp_v1_1_u1_1_1) + temp_v1_1_u1_1_6 = 0.25_f64 * temp_v1_1_u1_1_4 * & + temp_v1_1_u1_1_5 + temp_v1_1_u1_1_7 = temp_v1_1_u1_1_6 + 1_i64 + temp_v1_1_u1_1_8 = u1_1 * v1_1 / (temp_v1_1_u1_1_3 + & + temp_v1_1_u1_1_7) ** 2_i64 + contribution_v1_1_u1_1_e0el77nq = 4.0_f64 * ( & + 0.015625_f64 * (temp_v1_1_u1_1_4 * & + temp_v1_1_u1_1_4) * (temp_v1_1_u1_1_5 * & + temp_v1_1_u1_1_5) * temp_v1_1_u1_1_8 + & + 0.25_f64 * (temp_v1_1_u1_1_7 * & + temp_v1_1_u1_1_7) * temp_v1_1_u1_1_8) * abs(( & + temp_v1_1_u1_1_3 + temp_v1_1_u1_1_6 + 1.0_f64 & + )) + l_mat_u1_1_v1_1_e0el77nq(2_i64 - i_basis_2 + & + j_basis_2, 3_i64 - i_basis_1 + j_basis_1, & + i_basis_2, i_basis_1) = & + l_mat_u1_1_v1_1_e0el77nq(2_i64 - i_basis_2 + & + j_basis_2, 3_i64 - i_basis_1 + j_basis_1, & + i_basis_2, i_basis_1) + & + contribution_v1_1_u1_1_e0el77nq + end do + end do + end do + end do + end do + end do + g_mat_u1_0_v1_0_e0el77nq(:, :, pad2 + span_v1_0_2 - test_v1_0_p2 & + :1_i64 + pad2 + span_v1_0_2 - 1_i64, pad1 + span_v1_0_1 - & + test_v1_0_p1:1_i64 + pad1 + span_v1_0_1 - 1_i64) = & + g_mat_u1_0_v1_0_e0el77nq(:, :, pad2 + span_v1_0_2 - & + test_v1_0_p2:1_i64 + pad2 + span_v1_0_2 - 1_i64, pad1 + & + span_v1_0_1 - test_v1_0_p1:1_i64 + pad1 + span_v1_0_1 - & + 1_i64) + l_mat_u1_0_v1_0_e0el77nq(:, :, :, :) + g_mat_u1_1_v1_0_e0el77nq(:, :, pad2 + span_v1_0_2 - test_v1_0_p2 & + :1_i64 + pad2 + span_v1_0_2 - 1_i64, pad1 + span_v1_0_1 - & + test_v1_0_p1:1_i64 + pad1 + span_v1_0_1 - 1_i64) = & + g_mat_u1_1_v1_0_e0el77nq(:, :, pad2 + span_v1_0_2 - & + test_v1_0_p2:1_i64 + pad2 + span_v1_0_2 - 1_i64, pad1 + & + span_v1_0_1 - test_v1_0_p1:1_i64 + pad1 + span_v1_0_1 - & + 1_i64) + l_mat_u1_1_v1_0_e0el77nq(:, :, :, :) + g_mat_u1_0_v1_1_e0el77nq(:, :, pad2 + span_v1_1_2 - test_v1_1_p2 & + :1_i64 + pad2 + span_v1_1_2 - 1_i64, pad1 + span_v1_1_1 - & + test_v1_1_p1:1_i64 + pad1 + span_v1_1_1 - 1_i64) = & + g_mat_u1_0_v1_1_e0el77nq(:, :, pad2 + span_v1_1_2 - & + test_v1_1_p2:1_i64 + pad2 + span_v1_1_2 - 1_i64, pad1 + & + span_v1_1_1 - test_v1_1_p1:1_i64 + pad1 + span_v1_1_1 - & + 1_i64) + l_mat_u1_0_v1_1_e0el77nq(:, :, :, :) + g_mat_u1_1_v1_1_e0el77nq(:, :, pad2 + span_v1_1_2 - test_v1_1_p2 & + :1_i64 + pad2 + span_v1_1_2 - 1_i64, pad1 + span_v1_1_1 - & + test_v1_1_p1:1_i64 + pad1 + span_v1_1_1 - 1_i64) = & + g_mat_u1_1_v1_1_e0el77nq(:, :, pad2 + span_v1_1_2 - & + test_v1_1_p2:1_i64 + pad2 + span_v1_1_2 - 1_i64, pad1 + & + span_v1_1_1 - test_v1_1_p1:1_i64 + pad1 + span_v1_1_1 - & + 1_i64) + l_mat_u1_1_v1_1_e0el77nq(:, :, :, :) + end do + end do + if (allocated(l_mat_u1_0_v1_0_e0el77nq)) then + deallocate(l_mat_u1_0_v1_0_e0el77nq) + end if + if (allocated(local_x1)) then + deallocate(local_x1) + end if + if (allocated(l_mat_u1_0_v1_1_e0el77nq)) then + deallocate(l_mat_u1_0_v1_1_e0el77nq) + end if + if (allocated(l_mat_u1_1_v1_0_e0el77nq)) then + deallocate(l_mat_u1_1_v1_0_e0el77nq) + end if + if (allocated(l_mat_u1_1_v1_1_e0el77nq)) then + deallocate(l_mat_u1_1_v1_1_e0el77nq) + end if + if (allocated(local_x2)) then + deallocate(local_x2) + end if + return + + end subroutine assemble_matrix_e0el77nq + !........................................ + +end module dependencies_e0el77nq_mx2lvwh9fed2 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.f90.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.f90.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.mod b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.mod new file mode 100644 index 0000000000000000000000000000000000000000..23fc2639d957433a0616778f44eb6455b3fe7a91 GIT binary patch literal 959 zcmV;w13>&AiwFP!000006YZK^bDBUDhVS=RoICWQ9d`K;FNxBYse%KNv{ySOZd#^_ zshHHC-vvZb*F^Cv(=wW5Q3&t*oWt3J?&nXg*Y`{Z#*^Xmh`|e+#^EFa32PEOOxa+@ zhVVF@jA6*0STtnOL&##vWHxFvqTh5pC!?1?KbwziNIpI`WmK!x;S^7l59){y1wRBN zO2c?UALxA;4a4Y%Bzi>x47FOv^r*AoZlyCMtx0S!Q{44VZ-_Nrh z-)?1Eif<*4#WvSdPq#D4^2!DQxsDW&264>B_ajEfgV{8kFY$4GZ)43(pjx8SY6sq? z5yW+m40I&Yk()r`ES#$8OpES6wCOK~3CfphE);Xabf2W55Jq z1+WTO1FQpX05$+Ofyh8G5CTL2q5{!?=s+4k3?NNVWKb|D1QZ1n6%-8=J&kgKmz?ry z>_r6~fUacx-{zA=UFgC9=}}i-$;qDSnO&=Id7IHJ%0j}l^l6JGJ9};~*|2?=E>bjk z^)vsMN#J;-z_ZLwdJ*OM*>WAfZ}PKj?YizuGNg30keO@ zevBsfgAtvvct-CBaTwDVOl68wgZ!y-kGH00n>ReGYzIV{go?J>cGu#C#C4z@bi3cP z6Q;p2Qho9=Qp-xhg(K7VgRa%4{ui@n?Q*xMR5^>poxF5cLuC#U9D_<6BRUUS9kYGa z=sVGq3jKM}H+G=MRo0&yy|EL0mGx&v-&~=ehWvNN{<$jl7huo3$(```N_=4hQ35_n zwEuVX@h|qoxZZ9A3qJEvo!a)nwKtFtl4@lmvF+K ztAsew=fy-_7k4nZvx?IS;>x7lS;gt=;@%fIKHEiw#W*T_KKNCd(ODGnS>S0fJem?ZGH&@0C7MX8>1a+T)s)=pC11Q|g*Bbe z3*WzrIxjcaqd-*m+WXyWD{6s1uJ~V^zqXnGxZ;0F{`zMASNt!@KUpiZy-q;}^4hW- h8I=9jm+&1Mi-jJ1Xe`!6@L{u#{sP(uHGNzq000AO;DZ1F literal 0 HcmV?d00001 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.o b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.o new file mode 100644 index 0000000000000000000000000000000000000000..3d49e22c5500390ebc6419ea879423ff819fa7c8 GIT binary patch literal 26272 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

w@u8%j*0Ti~ySV!Ti&u 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 literal 0 HcmV?d00001 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.o.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.o.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.c b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.c new file mode 100644 index 00000000..328648ab --- /dev/null +++ b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.c @@ -0,0 +1,739 @@ +#define PY_ARRAY_UNIQUE_SYMBOL CWRAPPER_ARRAY_API +#define DEPENDENCIES_E0EL77NQ_MX2LVWH9FED2_WRAPPER + +#include "dependencies_e0el77nq_mx2lvwh9fed2_wrapper.h" +#include +#include +#include "ndarrays.h" + + +/*........................................*/ + + +/*........................................*/ + +/*........................................*/ +static PyObject* bind_c_assemble_matrix_e0el77nq_wrapper(PyObject* self, PyObject* args, PyObject* kwargs) +{ + PyObject* global_test_basis_v1_0_1_obj; + PyObject* global_test_basis_v1_0_2_obj; + PyObject* global_test_basis_v1_1_1_obj; + PyObject* global_test_basis_v1_1_2_obj; + PyObject* global_trial_basis_u1_0_1_obj; + PyObject* global_trial_basis_u1_0_2_obj; + PyObject* global_trial_basis_u1_1_1_obj; + PyObject* global_trial_basis_u1_1_2_obj; + PyObject* global_span_v1_0_1_obj; + PyObject* global_span_v1_0_2_obj; + PyObject* global_span_v1_1_1_obj; + PyObject* global_span_v1_1_2_obj; + PyObject* global_x1_obj; + PyObject* global_x2_obj; + PyObject* test_v1_0_p1_obj; + PyObject* test_v1_0_p2_obj; + PyObject* test_v1_1_p1_obj; + PyObject* test_v1_1_p2_obj; + PyObject* trial_u1_0_p1_obj; + PyObject* trial_u1_0_p2_obj; + PyObject* trial_u1_1_p1_obj; + PyObject* trial_u1_1_p2_obj; + PyObject* n_element_1_obj; + PyObject* n_element_2_obj; + PyObject* k1_obj; + PyObject* k2_obj; + PyObject* pad1_obj; + PyObject* pad2_obj; + PyObject* g_mat_u1_0_v1_0_e0el77nq_obj; + PyObject* g_mat_u1_1_v1_0_e0el77nq_obj; + PyObject* g_mat_u1_0_v1_1_e0el77nq_obj; + PyObject* g_mat_u1_1_v1_1_e0el77nq_obj; + t_ndarray global_test_basis_v1_0_1 = {.shape = NULL}; + void* bound_global_test_basis_v1_0_1; + int64_t bound_global_test_basis_v1_0_1_shape_1; + int64_t bound_global_test_basis_v1_0_1_shape_2; + int64_t bound_global_test_basis_v1_0_1_shape_3; + int64_t bound_global_test_basis_v1_0_1_shape_4; + int64_t bound_global_test_basis_v1_0_1_stride_1; + int64_t bound_global_test_basis_v1_0_1_stride_2; + int64_t bound_global_test_basis_v1_0_1_stride_3; + int64_t bound_global_test_basis_v1_0_1_stride_4; + t_ndarray global_test_basis_v1_0_2 = {.shape = NULL}; + void* bound_global_test_basis_v1_0_2; + int64_t bound_global_test_basis_v1_0_2_shape_1; + int64_t bound_global_test_basis_v1_0_2_shape_2; + int64_t bound_global_test_basis_v1_0_2_shape_3; + int64_t bound_global_test_basis_v1_0_2_shape_4; + int64_t bound_global_test_basis_v1_0_2_stride_1; + int64_t bound_global_test_basis_v1_0_2_stride_2; + int64_t bound_global_test_basis_v1_0_2_stride_3; + int64_t bound_global_test_basis_v1_0_2_stride_4; + t_ndarray global_test_basis_v1_1_1 = {.shape = NULL}; + void* bound_global_test_basis_v1_1_1; + int64_t bound_global_test_basis_v1_1_1_shape_1; + int64_t bound_global_test_basis_v1_1_1_shape_2; + int64_t bound_global_test_basis_v1_1_1_shape_3; + int64_t bound_global_test_basis_v1_1_1_shape_4; + int64_t bound_global_test_basis_v1_1_1_stride_1; + int64_t bound_global_test_basis_v1_1_1_stride_2; + int64_t bound_global_test_basis_v1_1_1_stride_3; + int64_t bound_global_test_basis_v1_1_1_stride_4; + t_ndarray global_test_basis_v1_1_2 = {.shape = NULL}; + void* bound_global_test_basis_v1_1_2; + int64_t bound_global_test_basis_v1_1_2_shape_1; + int64_t bound_global_test_basis_v1_1_2_shape_2; + int64_t bound_global_test_basis_v1_1_2_shape_3; + int64_t bound_global_test_basis_v1_1_2_shape_4; + int64_t bound_global_test_basis_v1_1_2_stride_1; + int64_t bound_global_test_basis_v1_1_2_stride_2; + int64_t bound_global_test_basis_v1_1_2_stride_3; + int64_t bound_global_test_basis_v1_1_2_stride_4; + t_ndarray global_trial_basis_u1_0_1 = {.shape = NULL}; + void* bound_global_trial_basis_u1_0_1; + int64_t bound_global_trial_basis_u1_0_1_shape_1; + int64_t bound_global_trial_basis_u1_0_1_shape_2; + int64_t bound_global_trial_basis_u1_0_1_shape_3; + int64_t bound_global_trial_basis_u1_0_1_shape_4; + int64_t bound_global_trial_basis_u1_0_1_stride_1; + int64_t bound_global_trial_basis_u1_0_1_stride_2; + int64_t bound_global_trial_basis_u1_0_1_stride_3; + int64_t bound_global_trial_basis_u1_0_1_stride_4; + t_ndarray global_trial_basis_u1_0_2 = {.shape = NULL}; + void* bound_global_trial_basis_u1_0_2; + int64_t bound_global_trial_basis_u1_0_2_shape_1; + int64_t bound_global_trial_basis_u1_0_2_shape_2; + int64_t bound_global_trial_basis_u1_0_2_shape_3; + int64_t bound_global_trial_basis_u1_0_2_shape_4; + int64_t bound_global_trial_basis_u1_0_2_stride_1; + int64_t bound_global_trial_basis_u1_0_2_stride_2; + int64_t bound_global_trial_basis_u1_0_2_stride_3; + int64_t bound_global_trial_basis_u1_0_2_stride_4; + t_ndarray global_trial_basis_u1_1_1 = {.shape = NULL}; + void* bound_global_trial_basis_u1_1_1; + int64_t bound_global_trial_basis_u1_1_1_shape_1; + int64_t bound_global_trial_basis_u1_1_1_shape_2; + int64_t bound_global_trial_basis_u1_1_1_shape_3; + int64_t bound_global_trial_basis_u1_1_1_shape_4; + int64_t bound_global_trial_basis_u1_1_1_stride_1; + int64_t bound_global_trial_basis_u1_1_1_stride_2; + int64_t bound_global_trial_basis_u1_1_1_stride_3; + int64_t bound_global_trial_basis_u1_1_1_stride_4; + t_ndarray global_trial_basis_u1_1_2 = {.shape = NULL}; + void* bound_global_trial_basis_u1_1_2; + int64_t bound_global_trial_basis_u1_1_2_shape_1; + int64_t bound_global_trial_basis_u1_1_2_shape_2; + int64_t bound_global_trial_basis_u1_1_2_shape_3; + int64_t bound_global_trial_basis_u1_1_2_shape_4; + int64_t bound_global_trial_basis_u1_1_2_stride_1; + int64_t bound_global_trial_basis_u1_1_2_stride_2; + int64_t bound_global_trial_basis_u1_1_2_stride_3; + int64_t bound_global_trial_basis_u1_1_2_stride_4; + t_ndarray global_span_v1_0_1 = {.shape = NULL}; + void* bound_global_span_v1_0_1; + int64_t bound_global_span_v1_0_1_shape_1; + int64_t bound_global_span_v1_0_1_stride_1; + t_ndarray global_span_v1_0_2 = {.shape = NULL}; + void* bound_global_span_v1_0_2; + int64_t bound_global_span_v1_0_2_shape_1; + int64_t bound_global_span_v1_0_2_stride_1; + t_ndarray global_span_v1_1_1 = {.shape = NULL}; + void* bound_global_span_v1_1_1; + int64_t bound_global_span_v1_1_1_shape_1; + int64_t bound_global_span_v1_1_1_stride_1; + t_ndarray global_span_v1_1_2 = {.shape = NULL}; + void* bound_global_span_v1_1_2; + int64_t bound_global_span_v1_1_2_shape_1; + int64_t bound_global_span_v1_1_2_stride_1; + t_ndarray global_x1 = {.shape = NULL}; + void* bound_global_x1; + int64_t bound_global_x1_shape_1; + int64_t bound_global_x1_shape_2; + int64_t bound_global_x1_stride_1; + int64_t bound_global_x1_stride_2; + t_ndarray global_x2 = {.shape = NULL}; + void* bound_global_x2; + int64_t bound_global_x2_shape_1; + int64_t bound_global_x2_shape_2; + int64_t bound_global_x2_stride_1; + int64_t bound_global_x2_stride_2; + int64_t test_v1_0_p1; + int64_t test_v1_0_p2; + int64_t test_v1_1_p1; + int64_t test_v1_1_p2; + int64_t trial_u1_0_p1; + int64_t trial_u1_0_p2; + int64_t trial_u1_1_p1; + int64_t trial_u1_1_p2; + int64_t n_element_1; + int64_t n_element_2; + int64_t k1; + int64_t k2; + int64_t pad1; + int64_t pad2; + t_ndarray g_mat_u1_0_v1_0_e0el77nq = {.shape = NULL}; + void* bound_g_mat_u1_0_v1_0_e0el77nq; + int64_t bound_g_mat_u1_0_v1_0_e0el77nq_shape_1; + int64_t bound_g_mat_u1_0_v1_0_e0el77nq_shape_2; + int64_t bound_g_mat_u1_0_v1_0_e0el77nq_shape_3; + int64_t bound_g_mat_u1_0_v1_0_e0el77nq_shape_4; + int64_t bound_g_mat_u1_0_v1_0_e0el77nq_stride_1; + int64_t bound_g_mat_u1_0_v1_0_e0el77nq_stride_2; + int64_t bound_g_mat_u1_0_v1_0_e0el77nq_stride_3; + int64_t bound_g_mat_u1_0_v1_0_e0el77nq_stride_4; + t_ndarray g_mat_u1_1_v1_0_e0el77nq = {.shape = NULL}; + void* bound_g_mat_u1_1_v1_0_e0el77nq; + int64_t bound_g_mat_u1_1_v1_0_e0el77nq_shape_1; + int64_t bound_g_mat_u1_1_v1_0_e0el77nq_shape_2; + int64_t bound_g_mat_u1_1_v1_0_e0el77nq_shape_3; + int64_t bound_g_mat_u1_1_v1_0_e0el77nq_shape_4; + int64_t bound_g_mat_u1_1_v1_0_e0el77nq_stride_1; + int64_t bound_g_mat_u1_1_v1_0_e0el77nq_stride_2; + int64_t bound_g_mat_u1_1_v1_0_e0el77nq_stride_3; + int64_t bound_g_mat_u1_1_v1_0_e0el77nq_stride_4; + t_ndarray g_mat_u1_0_v1_1_e0el77nq = {.shape = NULL}; + void* bound_g_mat_u1_0_v1_1_e0el77nq; + int64_t bound_g_mat_u1_0_v1_1_e0el77nq_shape_1; + int64_t bound_g_mat_u1_0_v1_1_e0el77nq_shape_2; + int64_t bound_g_mat_u1_0_v1_1_e0el77nq_shape_3; + int64_t bound_g_mat_u1_0_v1_1_e0el77nq_shape_4; + int64_t bound_g_mat_u1_0_v1_1_e0el77nq_stride_1; + int64_t bound_g_mat_u1_0_v1_1_e0el77nq_stride_2; + int64_t bound_g_mat_u1_0_v1_1_e0el77nq_stride_3; + int64_t bound_g_mat_u1_0_v1_1_e0el77nq_stride_4; + t_ndarray g_mat_u1_1_v1_1_e0el77nq = {.shape = NULL}; + void* bound_g_mat_u1_1_v1_1_e0el77nq; + int64_t bound_g_mat_u1_1_v1_1_e0el77nq_shape_1; + int64_t bound_g_mat_u1_1_v1_1_e0el77nq_shape_2; + int64_t bound_g_mat_u1_1_v1_1_e0el77nq_shape_3; + int64_t bound_g_mat_u1_1_v1_1_e0el77nq_shape_4; + int64_t bound_g_mat_u1_1_v1_1_e0el77nq_stride_1; + int64_t bound_g_mat_u1_1_v1_1_e0el77nq_stride_2; + int64_t bound_g_mat_u1_1_v1_1_e0el77nq_stride_3; + int64_t bound_g_mat_u1_1_v1_1_e0el77nq_stride_4; + static char *kwlist[] = { + "global_test_basis_v1_0_1", + "global_test_basis_v1_0_2", + "global_test_basis_v1_1_1", + "global_test_basis_v1_1_2", + "global_trial_basis_u1_0_1", + "global_trial_basis_u1_0_2", + "global_trial_basis_u1_1_1", + "global_trial_basis_u1_1_2", + "global_span_v1_0_1", + "global_span_v1_0_2", + "global_span_v1_1_1", + "global_span_v1_1_2", + "global_x1", + "global_x2", + "test_v1_0_p1", + "test_v1_0_p2", + "test_v1_1_p1", + "test_v1_1_p2", + "trial_u1_0_p1", + "trial_u1_0_p2", + "trial_u1_1_p1", + "trial_u1_1_p2", + "n_element_1", + "n_element_2", + "k1", + "k2", + "pad1", + "pad2", + "g_mat_u1_0_v1_0_e0el77nq", + "g_mat_u1_1_v1_0_e0el77nq", + "g_mat_u1_0_v1_1_e0el77nq", + "g_mat_u1_1_v1_1_e0el77nq", + NULL + }; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", kwlist, &global_test_basis_v1_0_1_obj, &global_test_basis_v1_0_2_obj, &global_test_basis_v1_1_1_obj, &global_test_basis_v1_1_2_obj, &global_trial_basis_u1_0_1_obj, &global_trial_basis_u1_0_2_obj, &global_trial_basis_u1_1_1_obj, &global_trial_basis_u1_1_2_obj, &global_span_v1_0_1_obj, &global_span_v1_0_2_obj, &global_span_v1_1_1_obj, &global_span_v1_1_2_obj, &global_x1_obj, &global_x2_obj, &test_v1_0_p1_obj, &test_v1_0_p2_obj, &test_v1_1_p1_obj, &test_v1_1_p2_obj, &trial_u1_0_p1_obj, &trial_u1_0_p2_obj, &trial_u1_1_p1_obj, &trial_u1_1_p2_obj, &n_element_1_obj, &n_element_2_obj, &k1_obj, &k2_obj, &pad1_obj, &pad2_obj, &g_mat_u1_0_v1_0_e0el77nq_obj, &g_mat_u1_1_v1_0_e0el77nq_obj, &g_mat_u1_0_v1_1_e0el77nq_obj, &g_mat_u1_1_v1_1_e0el77nq_obj)) + { + return NULL; + } + if (pyarray_check(global_test_basis_v1_0_1_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + global_test_basis_v1_0_1 = pyarray_to_ndarray(global_test_basis_v1_0_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_test_basis_v1_0_1"); + return NULL; + } + bound_global_test_basis_v1_0_1 = nd_data(&global_test_basis_v1_0_1); + bound_global_test_basis_v1_0_1_shape_1 = nd_ndim(&global_test_basis_v1_0_1, INT64_C(0)); + bound_global_test_basis_v1_0_1_shape_2 = nd_ndim(&global_test_basis_v1_0_1, INT64_C(1)); + bound_global_test_basis_v1_0_1_shape_3 = nd_ndim(&global_test_basis_v1_0_1, INT64_C(2)); + bound_global_test_basis_v1_0_1_shape_4 = nd_ndim(&global_test_basis_v1_0_1, INT64_C(3)); + bound_global_test_basis_v1_0_1_stride_1 = nd_nstep_C(&global_test_basis_v1_0_1, INT64_C(0)); + bound_global_test_basis_v1_0_1_stride_2 = nd_nstep_C(&global_test_basis_v1_0_1, INT64_C(1)); + bound_global_test_basis_v1_0_1_stride_3 = nd_nstep_C(&global_test_basis_v1_0_1, INT64_C(2)); + bound_global_test_basis_v1_0_1_stride_4 = nd_nstep_C(&global_test_basis_v1_0_1, INT64_C(3)); + if (pyarray_check(global_test_basis_v1_0_2_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + global_test_basis_v1_0_2 = pyarray_to_ndarray(global_test_basis_v1_0_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_test_basis_v1_0_2"); + return NULL; + } + bound_global_test_basis_v1_0_2 = nd_data(&global_test_basis_v1_0_2); + bound_global_test_basis_v1_0_2_shape_1 = nd_ndim(&global_test_basis_v1_0_2, INT64_C(0)); + bound_global_test_basis_v1_0_2_shape_2 = nd_ndim(&global_test_basis_v1_0_2, INT64_C(1)); + bound_global_test_basis_v1_0_2_shape_3 = nd_ndim(&global_test_basis_v1_0_2, INT64_C(2)); + bound_global_test_basis_v1_0_2_shape_4 = nd_ndim(&global_test_basis_v1_0_2, INT64_C(3)); + bound_global_test_basis_v1_0_2_stride_1 = nd_nstep_C(&global_test_basis_v1_0_2, INT64_C(0)); + bound_global_test_basis_v1_0_2_stride_2 = nd_nstep_C(&global_test_basis_v1_0_2, INT64_C(1)); + bound_global_test_basis_v1_0_2_stride_3 = nd_nstep_C(&global_test_basis_v1_0_2, INT64_C(2)); + bound_global_test_basis_v1_0_2_stride_4 = nd_nstep_C(&global_test_basis_v1_0_2, INT64_C(3)); + if (pyarray_check(global_test_basis_v1_1_1_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + global_test_basis_v1_1_1 = pyarray_to_ndarray(global_test_basis_v1_1_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_test_basis_v1_1_1"); + return NULL; + } + bound_global_test_basis_v1_1_1 = nd_data(&global_test_basis_v1_1_1); + bound_global_test_basis_v1_1_1_shape_1 = nd_ndim(&global_test_basis_v1_1_1, INT64_C(0)); + bound_global_test_basis_v1_1_1_shape_2 = nd_ndim(&global_test_basis_v1_1_1, INT64_C(1)); + bound_global_test_basis_v1_1_1_shape_3 = nd_ndim(&global_test_basis_v1_1_1, INT64_C(2)); + bound_global_test_basis_v1_1_1_shape_4 = nd_ndim(&global_test_basis_v1_1_1, INT64_C(3)); + bound_global_test_basis_v1_1_1_stride_1 = nd_nstep_C(&global_test_basis_v1_1_1, INT64_C(0)); + bound_global_test_basis_v1_1_1_stride_2 = nd_nstep_C(&global_test_basis_v1_1_1, INT64_C(1)); + bound_global_test_basis_v1_1_1_stride_3 = nd_nstep_C(&global_test_basis_v1_1_1, INT64_C(2)); + bound_global_test_basis_v1_1_1_stride_4 = nd_nstep_C(&global_test_basis_v1_1_1, INT64_C(3)); + if (pyarray_check(global_test_basis_v1_1_2_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + global_test_basis_v1_1_2 = pyarray_to_ndarray(global_test_basis_v1_1_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_test_basis_v1_1_2"); + return NULL; + } + bound_global_test_basis_v1_1_2 = nd_data(&global_test_basis_v1_1_2); + bound_global_test_basis_v1_1_2_shape_1 = nd_ndim(&global_test_basis_v1_1_2, INT64_C(0)); + bound_global_test_basis_v1_1_2_shape_2 = nd_ndim(&global_test_basis_v1_1_2, INT64_C(1)); + bound_global_test_basis_v1_1_2_shape_3 = nd_ndim(&global_test_basis_v1_1_2, INT64_C(2)); + bound_global_test_basis_v1_1_2_shape_4 = nd_ndim(&global_test_basis_v1_1_2, INT64_C(3)); + bound_global_test_basis_v1_1_2_stride_1 = nd_nstep_C(&global_test_basis_v1_1_2, INT64_C(0)); + bound_global_test_basis_v1_1_2_stride_2 = nd_nstep_C(&global_test_basis_v1_1_2, INT64_C(1)); + bound_global_test_basis_v1_1_2_stride_3 = nd_nstep_C(&global_test_basis_v1_1_2, INT64_C(2)); + bound_global_test_basis_v1_1_2_stride_4 = nd_nstep_C(&global_test_basis_v1_1_2, INT64_C(3)); + if (pyarray_check(global_trial_basis_u1_0_1_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + global_trial_basis_u1_0_1 = pyarray_to_ndarray(global_trial_basis_u1_0_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_trial_basis_u1_0_1"); + return NULL; + } + bound_global_trial_basis_u1_0_1 = nd_data(&global_trial_basis_u1_0_1); + bound_global_trial_basis_u1_0_1_shape_1 = nd_ndim(&global_trial_basis_u1_0_1, INT64_C(0)); + bound_global_trial_basis_u1_0_1_shape_2 = nd_ndim(&global_trial_basis_u1_0_1, INT64_C(1)); + bound_global_trial_basis_u1_0_1_shape_3 = nd_ndim(&global_trial_basis_u1_0_1, INT64_C(2)); + bound_global_trial_basis_u1_0_1_shape_4 = nd_ndim(&global_trial_basis_u1_0_1, INT64_C(3)); + bound_global_trial_basis_u1_0_1_stride_1 = nd_nstep_C(&global_trial_basis_u1_0_1, INT64_C(0)); + bound_global_trial_basis_u1_0_1_stride_2 = nd_nstep_C(&global_trial_basis_u1_0_1, INT64_C(1)); + bound_global_trial_basis_u1_0_1_stride_3 = nd_nstep_C(&global_trial_basis_u1_0_1, INT64_C(2)); + bound_global_trial_basis_u1_0_1_stride_4 = nd_nstep_C(&global_trial_basis_u1_0_1, INT64_C(3)); + if (pyarray_check(global_trial_basis_u1_0_2_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + global_trial_basis_u1_0_2 = pyarray_to_ndarray(global_trial_basis_u1_0_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_trial_basis_u1_0_2"); + return NULL; + } + bound_global_trial_basis_u1_0_2 = nd_data(&global_trial_basis_u1_0_2); + bound_global_trial_basis_u1_0_2_shape_1 = nd_ndim(&global_trial_basis_u1_0_2, INT64_C(0)); + bound_global_trial_basis_u1_0_2_shape_2 = nd_ndim(&global_trial_basis_u1_0_2, INT64_C(1)); + bound_global_trial_basis_u1_0_2_shape_3 = nd_ndim(&global_trial_basis_u1_0_2, INT64_C(2)); + bound_global_trial_basis_u1_0_2_shape_4 = nd_ndim(&global_trial_basis_u1_0_2, INT64_C(3)); + bound_global_trial_basis_u1_0_2_stride_1 = nd_nstep_C(&global_trial_basis_u1_0_2, INT64_C(0)); + bound_global_trial_basis_u1_0_2_stride_2 = nd_nstep_C(&global_trial_basis_u1_0_2, INT64_C(1)); + bound_global_trial_basis_u1_0_2_stride_3 = nd_nstep_C(&global_trial_basis_u1_0_2, INT64_C(2)); + bound_global_trial_basis_u1_0_2_stride_4 = nd_nstep_C(&global_trial_basis_u1_0_2, INT64_C(3)); + if (pyarray_check(global_trial_basis_u1_1_1_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + global_trial_basis_u1_1_1 = pyarray_to_ndarray(global_trial_basis_u1_1_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_trial_basis_u1_1_1"); + return NULL; + } + bound_global_trial_basis_u1_1_1 = nd_data(&global_trial_basis_u1_1_1); + bound_global_trial_basis_u1_1_1_shape_1 = nd_ndim(&global_trial_basis_u1_1_1, INT64_C(0)); + bound_global_trial_basis_u1_1_1_shape_2 = nd_ndim(&global_trial_basis_u1_1_1, INT64_C(1)); + bound_global_trial_basis_u1_1_1_shape_3 = nd_ndim(&global_trial_basis_u1_1_1, INT64_C(2)); + bound_global_trial_basis_u1_1_1_shape_4 = nd_ndim(&global_trial_basis_u1_1_1, INT64_C(3)); + bound_global_trial_basis_u1_1_1_stride_1 = nd_nstep_C(&global_trial_basis_u1_1_1, INT64_C(0)); + bound_global_trial_basis_u1_1_1_stride_2 = nd_nstep_C(&global_trial_basis_u1_1_1, INT64_C(1)); + bound_global_trial_basis_u1_1_1_stride_3 = nd_nstep_C(&global_trial_basis_u1_1_1, INT64_C(2)); + bound_global_trial_basis_u1_1_1_stride_4 = nd_nstep_C(&global_trial_basis_u1_1_1, INT64_C(3)); + if (pyarray_check(global_trial_basis_u1_1_2_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + global_trial_basis_u1_1_2 = pyarray_to_ndarray(global_trial_basis_u1_1_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_trial_basis_u1_1_2"); + return NULL; + } + bound_global_trial_basis_u1_1_2 = nd_data(&global_trial_basis_u1_1_2); + bound_global_trial_basis_u1_1_2_shape_1 = nd_ndim(&global_trial_basis_u1_1_2, INT64_C(0)); + bound_global_trial_basis_u1_1_2_shape_2 = nd_ndim(&global_trial_basis_u1_1_2, INT64_C(1)); + bound_global_trial_basis_u1_1_2_shape_3 = nd_ndim(&global_trial_basis_u1_1_2, INT64_C(2)); + bound_global_trial_basis_u1_1_2_shape_4 = nd_ndim(&global_trial_basis_u1_1_2, INT64_C(3)); + bound_global_trial_basis_u1_1_2_stride_1 = nd_nstep_C(&global_trial_basis_u1_1_2, INT64_C(0)); + bound_global_trial_basis_u1_1_2_stride_2 = nd_nstep_C(&global_trial_basis_u1_1_2, INT64_C(1)); + bound_global_trial_basis_u1_1_2_stride_3 = nd_nstep_C(&global_trial_basis_u1_1_2, INT64_C(2)); + bound_global_trial_basis_u1_1_2_stride_4 = nd_nstep_C(&global_trial_basis_u1_1_2, INT64_C(3)); + if (pyarray_check(global_span_v1_0_1_obj, NPY_LONG, INT64_C(1), NO_ORDER_CHECK)) + { + global_span_v1_0_1 = pyarray_to_ndarray(global_span_v1_0_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument global_span_v1_0_1"); + return NULL; + } + bound_global_span_v1_0_1 = nd_data(&global_span_v1_0_1); + bound_global_span_v1_0_1_shape_1 = nd_ndim(&global_span_v1_0_1, INT64_C(0)); + bound_global_span_v1_0_1_stride_1 = nd_nstep_F(&global_span_v1_0_1, INT64_C(0)); + if (pyarray_check(global_span_v1_0_2_obj, NPY_LONG, INT64_C(1), NO_ORDER_CHECK)) + { + global_span_v1_0_2 = pyarray_to_ndarray(global_span_v1_0_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument global_span_v1_0_2"); + return NULL; + } + bound_global_span_v1_0_2 = nd_data(&global_span_v1_0_2); + bound_global_span_v1_0_2_shape_1 = nd_ndim(&global_span_v1_0_2, INT64_C(0)); + bound_global_span_v1_0_2_stride_1 = nd_nstep_F(&global_span_v1_0_2, INT64_C(0)); + if (pyarray_check(global_span_v1_1_1_obj, NPY_LONG, INT64_C(1), NO_ORDER_CHECK)) + { + global_span_v1_1_1 = pyarray_to_ndarray(global_span_v1_1_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument global_span_v1_1_1"); + return NULL; + } + bound_global_span_v1_1_1 = nd_data(&global_span_v1_1_1); + bound_global_span_v1_1_1_shape_1 = nd_ndim(&global_span_v1_1_1, INT64_C(0)); + bound_global_span_v1_1_1_stride_1 = nd_nstep_F(&global_span_v1_1_1, INT64_C(0)); + if (pyarray_check(global_span_v1_1_2_obj, NPY_LONG, INT64_C(1), NO_ORDER_CHECK)) + { + global_span_v1_1_2 = pyarray_to_ndarray(global_span_v1_1_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument global_span_v1_1_2"); + return NULL; + } + bound_global_span_v1_1_2 = nd_data(&global_span_v1_1_2); + bound_global_span_v1_1_2_shape_1 = nd_ndim(&global_span_v1_1_2, INT64_C(0)); + bound_global_span_v1_1_2_stride_1 = nd_nstep_F(&global_span_v1_1_2, INT64_C(0)); + if (pyarray_check(global_x1_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) + { + global_x1 = pyarray_to_ndarray(global_x1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_x1"); + return NULL; + } + bound_global_x1 = nd_data(&global_x1); + bound_global_x1_shape_1 = nd_ndim(&global_x1, INT64_C(0)); + bound_global_x1_shape_2 = nd_ndim(&global_x1, INT64_C(1)); + bound_global_x1_stride_1 = nd_nstep_C(&global_x1, INT64_C(0)); + bound_global_x1_stride_2 = nd_nstep_C(&global_x1, INT64_C(1)); + if (pyarray_check(global_x2_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) + { + global_x2 = pyarray_to_ndarray(global_x2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_x2"); + return NULL; + } + bound_global_x2 = nd_data(&global_x2); + bound_global_x2_shape_1 = nd_ndim(&global_x2, INT64_C(0)); + bound_global_x2_shape_2 = nd_ndim(&global_x2, INT64_C(1)); + bound_global_x2_stride_1 = nd_nstep_C(&global_x2, INT64_C(0)); + bound_global_x2_stride_2 = nd_nstep_C(&global_x2, INT64_C(1)); + if (PyIs_Int64(test_v1_0_p1_obj)) + { + test_v1_0_p1 = PyInt64_to_Int64(test_v1_0_p1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument test_v1_0_p1"); + return NULL; + } + if (PyIs_Int64(test_v1_0_p2_obj)) + { + test_v1_0_p2 = PyInt64_to_Int64(test_v1_0_p2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument test_v1_0_p2"); + return NULL; + } + if (PyIs_Int64(test_v1_1_p1_obj)) + { + test_v1_1_p1 = PyInt64_to_Int64(test_v1_1_p1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument test_v1_1_p1"); + return NULL; + } + if (PyIs_Int64(test_v1_1_p2_obj)) + { + test_v1_1_p2 = PyInt64_to_Int64(test_v1_1_p2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument test_v1_1_p2"); + return NULL; + } + if (PyIs_Int64(trial_u1_0_p1_obj)) + { + trial_u1_0_p1 = PyInt64_to_Int64(trial_u1_0_p1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument trial_u1_0_p1"); + return NULL; + } + if (PyIs_Int64(trial_u1_0_p2_obj)) + { + trial_u1_0_p2 = PyInt64_to_Int64(trial_u1_0_p2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument trial_u1_0_p2"); + return NULL; + } + if (PyIs_Int64(trial_u1_1_p1_obj)) + { + trial_u1_1_p1 = PyInt64_to_Int64(trial_u1_1_p1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument trial_u1_1_p1"); + return NULL; + } + if (PyIs_Int64(trial_u1_1_p2_obj)) + { + trial_u1_1_p2 = PyInt64_to_Int64(trial_u1_1_p2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument trial_u1_1_p2"); + return NULL; + } + if (PyIs_Int64(n_element_1_obj)) + { + n_element_1 = PyInt64_to_Int64(n_element_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n_element_1"); + return NULL; + } + if (PyIs_Int64(n_element_2_obj)) + { + n_element_2 = PyInt64_to_Int64(n_element_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n_element_2"); + return NULL; + } + if (PyIs_Int64(k1_obj)) + { + k1 = PyInt64_to_Int64(k1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument k1"); + return NULL; + } + if (PyIs_Int64(k2_obj)) + { + k2 = PyInt64_to_Int64(k2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument k2"); + return NULL; + } + if (PyIs_Int64(pad1_obj)) + { + pad1 = PyInt64_to_Int64(pad1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument pad1"); + return NULL; + } + if (PyIs_Int64(pad2_obj)) + { + pad2 = PyInt64_to_Int64(pad2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument pad2"); + return NULL; + } + if (pyarray_check(g_mat_u1_0_v1_0_e0el77nq_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + g_mat_u1_0_v1_0_e0el77nq = pyarray_to_ndarray(g_mat_u1_0_v1_0_e0el77nq_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument g_mat_u1_0_v1_0_e0el77nq"); + return NULL; + } + bound_g_mat_u1_0_v1_0_e0el77nq = nd_data(&g_mat_u1_0_v1_0_e0el77nq); + bound_g_mat_u1_0_v1_0_e0el77nq_shape_1 = nd_ndim(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(0)); + bound_g_mat_u1_0_v1_0_e0el77nq_shape_2 = nd_ndim(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(1)); + bound_g_mat_u1_0_v1_0_e0el77nq_shape_3 = nd_ndim(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(2)); + bound_g_mat_u1_0_v1_0_e0el77nq_shape_4 = nd_ndim(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(3)); + bound_g_mat_u1_0_v1_0_e0el77nq_stride_1 = nd_nstep_C(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(0)); + bound_g_mat_u1_0_v1_0_e0el77nq_stride_2 = nd_nstep_C(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(1)); + bound_g_mat_u1_0_v1_0_e0el77nq_stride_3 = nd_nstep_C(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(2)); + bound_g_mat_u1_0_v1_0_e0el77nq_stride_4 = nd_nstep_C(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(3)); + if (pyarray_check(g_mat_u1_1_v1_0_e0el77nq_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + g_mat_u1_1_v1_0_e0el77nq = pyarray_to_ndarray(g_mat_u1_1_v1_0_e0el77nq_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument g_mat_u1_1_v1_0_e0el77nq"); + return NULL; + } + bound_g_mat_u1_1_v1_0_e0el77nq = nd_data(&g_mat_u1_1_v1_0_e0el77nq); + bound_g_mat_u1_1_v1_0_e0el77nq_shape_1 = nd_ndim(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(0)); + bound_g_mat_u1_1_v1_0_e0el77nq_shape_2 = nd_ndim(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(1)); + bound_g_mat_u1_1_v1_0_e0el77nq_shape_3 = nd_ndim(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(2)); + bound_g_mat_u1_1_v1_0_e0el77nq_shape_4 = nd_ndim(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(3)); + bound_g_mat_u1_1_v1_0_e0el77nq_stride_1 = nd_nstep_C(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(0)); + bound_g_mat_u1_1_v1_0_e0el77nq_stride_2 = nd_nstep_C(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(1)); + bound_g_mat_u1_1_v1_0_e0el77nq_stride_3 = nd_nstep_C(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(2)); + bound_g_mat_u1_1_v1_0_e0el77nq_stride_4 = nd_nstep_C(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(3)); + if (pyarray_check(g_mat_u1_0_v1_1_e0el77nq_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + g_mat_u1_0_v1_1_e0el77nq = pyarray_to_ndarray(g_mat_u1_0_v1_1_e0el77nq_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument g_mat_u1_0_v1_1_e0el77nq"); + return NULL; + } + bound_g_mat_u1_0_v1_1_e0el77nq = nd_data(&g_mat_u1_0_v1_1_e0el77nq); + bound_g_mat_u1_0_v1_1_e0el77nq_shape_1 = nd_ndim(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(0)); + bound_g_mat_u1_0_v1_1_e0el77nq_shape_2 = nd_ndim(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(1)); + bound_g_mat_u1_0_v1_1_e0el77nq_shape_3 = nd_ndim(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(2)); + bound_g_mat_u1_0_v1_1_e0el77nq_shape_4 = nd_ndim(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(3)); + bound_g_mat_u1_0_v1_1_e0el77nq_stride_1 = nd_nstep_C(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(0)); + bound_g_mat_u1_0_v1_1_e0el77nq_stride_2 = nd_nstep_C(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(1)); + bound_g_mat_u1_0_v1_1_e0el77nq_stride_3 = nd_nstep_C(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(2)); + bound_g_mat_u1_0_v1_1_e0el77nq_stride_4 = nd_nstep_C(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(3)); + if (pyarray_check(g_mat_u1_1_v1_1_e0el77nq_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + g_mat_u1_1_v1_1_e0el77nq = pyarray_to_ndarray(g_mat_u1_1_v1_1_e0el77nq_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument g_mat_u1_1_v1_1_e0el77nq"); + return NULL; + } + bound_g_mat_u1_1_v1_1_e0el77nq = nd_data(&g_mat_u1_1_v1_1_e0el77nq); + bound_g_mat_u1_1_v1_1_e0el77nq_shape_1 = nd_ndim(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(0)); + bound_g_mat_u1_1_v1_1_e0el77nq_shape_2 = nd_ndim(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(1)); + bound_g_mat_u1_1_v1_1_e0el77nq_shape_3 = nd_ndim(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(2)); + bound_g_mat_u1_1_v1_1_e0el77nq_shape_4 = nd_ndim(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(3)); + bound_g_mat_u1_1_v1_1_e0el77nq_stride_1 = nd_nstep_C(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(0)); + bound_g_mat_u1_1_v1_1_e0el77nq_stride_2 = nd_nstep_C(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(1)); + bound_g_mat_u1_1_v1_1_e0el77nq_stride_3 = nd_nstep_C(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(2)); + bound_g_mat_u1_1_v1_1_e0el77nq_stride_4 = nd_nstep_C(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(3)); + bind_c_assemble_matrix_e0el77nq(bound_global_test_basis_v1_0_1, bound_global_test_basis_v1_0_1_shape_1, bound_global_test_basis_v1_0_1_shape_2, bound_global_test_basis_v1_0_1_shape_3, bound_global_test_basis_v1_0_1_shape_4, bound_global_test_basis_v1_0_1_stride_1, bound_global_test_basis_v1_0_1_stride_2, bound_global_test_basis_v1_0_1_stride_3, bound_global_test_basis_v1_0_1_stride_4, bound_global_test_basis_v1_0_2, bound_global_test_basis_v1_0_2_shape_1, bound_global_test_basis_v1_0_2_shape_2, bound_global_test_basis_v1_0_2_shape_3, bound_global_test_basis_v1_0_2_shape_4, bound_global_test_basis_v1_0_2_stride_1, bound_global_test_basis_v1_0_2_stride_2, bound_global_test_basis_v1_0_2_stride_3, bound_global_test_basis_v1_0_2_stride_4, bound_global_test_basis_v1_1_1, bound_global_test_basis_v1_1_1_shape_1, bound_global_test_basis_v1_1_1_shape_2, bound_global_test_basis_v1_1_1_shape_3, bound_global_test_basis_v1_1_1_shape_4, bound_global_test_basis_v1_1_1_stride_1, bound_global_test_basis_v1_1_1_stride_2, bound_global_test_basis_v1_1_1_stride_3, bound_global_test_basis_v1_1_1_stride_4, bound_global_test_basis_v1_1_2, bound_global_test_basis_v1_1_2_shape_1, bound_global_test_basis_v1_1_2_shape_2, bound_global_test_basis_v1_1_2_shape_3, bound_global_test_basis_v1_1_2_shape_4, bound_global_test_basis_v1_1_2_stride_1, bound_global_test_basis_v1_1_2_stride_2, bound_global_test_basis_v1_1_2_stride_3, bound_global_test_basis_v1_1_2_stride_4, bound_global_trial_basis_u1_0_1, bound_global_trial_basis_u1_0_1_shape_1, bound_global_trial_basis_u1_0_1_shape_2, bound_global_trial_basis_u1_0_1_shape_3, bound_global_trial_basis_u1_0_1_shape_4, bound_global_trial_basis_u1_0_1_stride_1, bound_global_trial_basis_u1_0_1_stride_2, bound_global_trial_basis_u1_0_1_stride_3, bound_global_trial_basis_u1_0_1_stride_4, bound_global_trial_basis_u1_0_2, bound_global_trial_basis_u1_0_2_shape_1, bound_global_trial_basis_u1_0_2_shape_2, bound_global_trial_basis_u1_0_2_shape_3, bound_global_trial_basis_u1_0_2_shape_4, bound_global_trial_basis_u1_0_2_stride_1, bound_global_trial_basis_u1_0_2_stride_2, bound_global_trial_basis_u1_0_2_stride_3, bound_global_trial_basis_u1_0_2_stride_4, bound_global_trial_basis_u1_1_1, bound_global_trial_basis_u1_1_1_shape_1, bound_global_trial_basis_u1_1_1_shape_2, bound_global_trial_basis_u1_1_1_shape_3, bound_global_trial_basis_u1_1_1_shape_4, bound_global_trial_basis_u1_1_1_stride_1, bound_global_trial_basis_u1_1_1_stride_2, bound_global_trial_basis_u1_1_1_stride_3, bound_global_trial_basis_u1_1_1_stride_4, bound_global_trial_basis_u1_1_2, bound_global_trial_basis_u1_1_2_shape_1, bound_global_trial_basis_u1_1_2_shape_2, bound_global_trial_basis_u1_1_2_shape_3, bound_global_trial_basis_u1_1_2_shape_4, bound_global_trial_basis_u1_1_2_stride_1, bound_global_trial_basis_u1_1_2_stride_2, bound_global_trial_basis_u1_1_2_stride_3, bound_global_trial_basis_u1_1_2_stride_4, bound_global_span_v1_0_1, bound_global_span_v1_0_1_shape_1, bound_global_span_v1_0_1_stride_1, bound_global_span_v1_0_2, bound_global_span_v1_0_2_shape_1, bound_global_span_v1_0_2_stride_1, bound_global_span_v1_1_1, bound_global_span_v1_1_1_shape_1, bound_global_span_v1_1_1_stride_1, bound_global_span_v1_1_2, bound_global_span_v1_1_2_shape_1, bound_global_span_v1_1_2_stride_1, bound_global_x1, bound_global_x1_shape_1, bound_global_x1_shape_2, bound_global_x1_stride_1, bound_global_x1_stride_2, bound_global_x2, bound_global_x2_shape_1, bound_global_x2_shape_2, bound_global_x2_stride_1, bound_global_x2_stride_2, test_v1_0_p1, test_v1_0_p2, test_v1_1_p1, test_v1_1_p2, trial_u1_0_p1, trial_u1_0_p2, trial_u1_1_p1, trial_u1_1_p2, n_element_1, n_element_2, k1, k2, pad1, pad2, bound_g_mat_u1_0_v1_0_e0el77nq, bound_g_mat_u1_0_v1_0_e0el77nq_shape_1, bound_g_mat_u1_0_v1_0_e0el77nq_shape_2, bound_g_mat_u1_0_v1_0_e0el77nq_shape_3, bound_g_mat_u1_0_v1_0_e0el77nq_shape_4, bound_g_mat_u1_0_v1_0_e0el77nq_stride_1, bound_g_mat_u1_0_v1_0_e0el77nq_stride_2, bound_g_mat_u1_0_v1_0_e0el77nq_stride_3, bound_g_mat_u1_0_v1_0_e0el77nq_stride_4, bound_g_mat_u1_1_v1_0_e0el77nq, bound_g_mat_u1_1_v1_0_e0el77nq_shape_1, bound_g_mat_u1_1_v1_0_e0el77nq_shape_2, bound_g_mat_u1_1_v1_0_e0el77nq_shape_3, bound_g_mat_u1_1_v1_0_e0el77nq_shape_4, bound_g_mat_u1_1_v1_0_e0el77nq_stride_1, bound_g_mat_u1_1_v1_0_e0el77nq_stride_2, bound_g_mat_u1_1_v1_0_e0el77nq_stride_3, bound_g_mat_u1_1_v1_0_e0el77nq_stride_4, bound_g_mat_u1_0_v1_1_e0el77nq, bound_g_mat_u1_0_v1_1_e0el77nq_shape_1, bound_g_mat_u1_0_v1_1_e0el77nq_shape_2, bound_g_mat_u1_0_v1_1_e0el77nq_shape_3, bound_g_mat_u1_0_v1_1_e0el77nq_shape_4, bound_g_mat_u1_0_v1_1_e0el77nq_stride_1, bound_g_mat_u1_0_v1_1_e0el77nq_stride_2, bound_g_mat_u1_0_v1_1_e0el77nq_stride_3, bound_g_mat_u1_0_v1_1_e0el77nq_stride_4, bound_g_mat_u1_1_v1_1_e0el77nq, bound_g_mat_u1_1_v1_1_e0el77nq_shape_1, bound_g_mat_u1_1_v1_1_e0el77nq_shape_2, bound_g_mat_u1_1_v1_1_e0el77nq_shape_3, bound_g_mat_u1_1_v1_1_e0el77nq_shape_4, bound_g_mat_u1_1_v1_1_e0el77nq_stride_1, bound_g_mat_u1_1_v1_1_e0el77nq_stride_2, bound_g_mat_u1_1_v1_1_e0el77nq_stride_3, bound_g_mat_u1_1_v1_1_e0el77nq_stride_4); + free_pointer(&global_test_basis_v1_0_1); + free_pointer(&global_test_basis_v1_0_2); + free_pointer(&global_test_basis_v1_1_1); + free_pointer(&global_test_basis_v1_1_2); + free_pointer(&global_trial_basis_u1_0_1); + free_pointer(&global_trial_basis_u1_0_2); + free_pointer(&global_trial_basis_u1_1_1); + free_pointer(&global_trial_basis_u1_1_2); + free_pointer(&global_span_v1_0_1); + free_pointer(&global_span_v1_0_2); + free_pointer(&global_span_v1_1_1); + free_pointer(&global_span_v1_1_2); + free_pointer(&global_x1); + free_pointer(&global_x2); + free_pointer(&g_mat_u1_0_v1_0_e0el77nq); + free_pointer(&g_mat_u1_1_v1_0_e0el77nq); + free_pointer(&g_mat_u1_0_v1_1_e0el77nq); + free_pointer(&g_mat_u1_1_v1_1_e0el77nq); + Py_INCREF(Py_None); + return Py_None; +} +/*........................................*/ + +/*........................................*/ + +static PyMethodDef dependencies_e0el77nq_mx2lvwh9fed2_methods[] = { + { + "assemble_matrix_e0el77nq", + (PyCFunction)bind_c_assemble_matrix_e0el77nq_wrapper, + METH_VARARGS | METH_KEYWORDS, + "" + }, + { NULL, NULL, 0, NULL} +}; + +/*........................................*/ + +static struct PyModuleDef dependencies_e0el77nq_mx2lvwh9fed2_module = { + PyModuleDef_HEAD_INIT, + /* name of module */ + "dependencies_e0el77nq_mx2lvwh9fed2", + /* module documentation, may be NULL */ + NULL, + /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */ + 0, + dependencies_e0el77nq_mx2lvwh9fed2_methods, +}; + +/*........................................*/ + +PyMODINIT_FUNC PyInit_dependencies_e0el77nq_mx2lvwh9fed2(void) +{ + PyObject* mod; + static void* Pydependencies_e0el77nq_mx2lvwh9fed2_API[0]; + PyObject* c_api_object_0001; + mod = PyModule_Create(&dependencies_e0el77nq_mx2lvwh9fed2_module); + if (mod == NULL) + { + return NULL; + } + c_api_object_0001 = PyCapsule_New((void *)Pydependencies_e0el77nq_mx2lvwh9fed2_API, "dependencies_e0el77nq_mx2lvwh9fed2._C_API", NULL); + if (PyModule_AddObject(mod, "_C_API", c_api_object_0001) < INT64_C(0)) + { + Py_DECREF(mod); + return NULL; + } + Py_INCREF(c_api_object_0001); + import_array(); + return mod; +} diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.c.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.c.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.h b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.h new file mode 100644 index 00000000..399d4c53 --- /dev/null +++ b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.h @@ -0,0 +1,35 @@ +#ifndef DEPENDENCIES_E0EL77NQ_MX2LVWH9FED2_WRAPPER_H +#define DEPENDENCIES_E0EL77NQ_MX2LVWH9FED2_WRAPPER_H + +#include "numpy_version.h" +#include "numpy/arrayobject.h" +#include "cwrapper.h" +#include "cwrapper_ndarrays.h" + + +#ifdef DEPENDENCIES_E0EL77NQ_MX2LVWH9FED2_WRAPPER + +void bind_c_assemble_matrix_e0el77nq(void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, void*, int64_t, int64_t, void*, int64_t, int64_t, void*, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t); + +#else + +static void** Pydependencies_e0el77nq_mx2lvwh9fed2_API; + + +/*........................................*/ +static int dependencies_e0el77nq_mx2lvwh9fed2_import(void) +{ + PyObject* current_path; + PyObject* stash_path; + current_path = PySys_GetObject("path"); + stash_path = PyList_GetItem(current_path, 0); + Py_INCREF(stash_path); + PyList_SetItem(current_path, 0, PyUnicode_FromString("/Users/patricklagarrigue/psydac_workspace/sympde/__gpyccel__/__epyccel__")); + Pydependencies_e0el77nq_mx2lvwh9fed2_API = (void**)PyCapsule_Import("dependencies_e0el77nq_mx2lvwh9fed2._C_API", 0); + PyList_SetItem(current_path, 0, stash_path); + return Pydependencies_e0el77nq_mx2lvwh9fed2_API != NULL ? 0 : -1; +} +/*........................................*/ + +#endif +#endif // DEPENDENCIES_E0EL77NQ_MX2LVWH9FED2_WRAPPER_H diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.o b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.o new file mode 100644 index 0000000000000000000000000000000000000000..17f9a35e48e7854563ef275ec12e68832bf9acbf GIT binary patch literal 71312 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 aNi}2>dyvwyS{F~RJw=9_zjpm<#Qp&sT~p2g literal 0 HcmV?d00001 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.o.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.o.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.f90 b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.f90 new file mode 100644 index 00000000..aa8ae499 --- /dev/null +++ b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.f90 @@ -0,0 +1,218 @@ +module dependencies_vga8r193_6xftl47r79t3 + + + use, intrinsic :: ISO_C_Binding, only : f64 => C_DOUBLE , i64 => & + C_INT64_T + implicit none + + contains + + !........................................ + subroutine lo_dot_vga8r193(mat00, mat01, mat10, mat11, x0, x1, out0, & + out1, s00_1, s00_2, s01_1, s01_2, s10_1, s10_2, s11_1, s11_2, & + n00_1, n00_2, n01_1, n01_2, n10_1, n10_2, n11_1, n11_2, ne00_1, & + ne00_2, ne01_1, ne01_2, ne10_1, ne10_2, ne11_1, ne11_2) + + implicit none + + real(f64), intent(in) :: mat00(0:,0:,0:,0:) + real(f64), intent(in) :: mat01(0:,0:,0:,0:) + real(f64), intent(in) :: mat10(0:,0:,0:,0:) + real(f64), intent(in) :: mat11(0:,0:,0:,0:) + real(f64), intent(in) :: x0(0:,0:) + real(f64), intent(in) :: x1(0:,0:) + real(f64), intent(inout) :: out0(0:,0:) + real(f64), intent(inout) :: out1(0:,0:) + integer(i64), value :: s00_1 + integer(i64), value :: s00_2 + integer(i64), value :: s01_1 + integer(i64), value :: s01_2 + integer(i64), value :: s10_1 + integer(i64), value :: s10_2 + integer(i64), value :: s11_1 + integer(i64), value :: s11_2 + integer(i64), value :: n00_1 + integer(i64), value :: n00_2 + integer(i64), value :: n01_1 + integer(i64), value :: n01_2 + integer(i64), value :: n10_1 + integer(i64), value :: n10_2 + integer(i64), value :: n11_1 + integer(i64), value :: n11_2 + integer(i64), value :: ne00_1 + integer(i64), value :: ne00_2 + integer(i64), value :: ne01_1 + integer(i64), value :: ne01_2 + integer(i64), value :: ne10_1 + integer(i64), value :: ne10_2 + integer(i64), value :: ne11_1 + integer(i64), value :: ne11_2 + integer(i64) :: i1 + integer(i64) :: i2 + real(f64) :: v00 + integer(i64) :: k1 + integer(i64) :: k2 + real(f64) :: v11 + real(f64) :: v01 + real(f64) :: v10 + + do i1 = 0_i64, n00_1 - 1_i64 + do i2 = 0_i64, n00_2 - 1_i64 + v00 = 0.0_f64 + do k1 = 0_i64, 4_i64 + do k2 = 0_i64, 6_i64 + v00 = v00 + mat00(k2, k1, 3_i64 + i2, 3_i64 + i1) * x0(i2 + & + k2, 1_i64 + i1 + k1) + end do + end do + out0(3_i64 + i2, 3_i64 + i1) = v00 + end do + end do + do i1 = 0_i64, ne00_1 - 1_i64 + do i2 = 0_i64, n00_2 - 1_i64 + v00 = 0.0_f64 + do k1 = 0_i64, 4_i64 - i1 - 1_i64 + do k2 = 0_i64, 6_i64 + v00 = v00 + x0(i2 + k2, 1_i64 + i1 + k1 + n00_1) * mat00(k2, & + k1, 3_i64 + i2, 3_i64 + i1 + n00_1) + end do + end do + out0(3_i64 + i2, 3_i64 + i1 + n00_1) = v00 + end do + end do + do i1 = 0_i64, n00_1 + ne00_1 - 1_i64 + do i2 = 0_i64, ne00_2 - 1_i64 + v00 = 0.0_f64 + do k1 = 0_i64, 5_i64 - maxval([0_i64, i1 - n00_1 + 1_i64]) - & + 1_i64 + do k2 = 0_i64, 6_i64 - i2 - 1_i64 + v00 = v00 + x0(i2 + k2 + n00_2, 1_i64 + i1 + k1) * mat00(k2, & + k1, 3_i64 + i2 + n00_2, 3_i64 + i1) + end do + end do + out0(3_i64 + i2 + n00_2, 3_i64 + i1) = v00 + end do + end do + do i1 = 0_i64, n11_1 - 1_i64 + do i2 = 0_i64, n11_2 - 1_i64 + v11 = 0.0_f64 + do k1 = 0_i64, 6_i64 + do k2 = 0_i64, 4_i64 + v11 = v11 + mat11(k2, k1, 3_i64 + i2, 3_i64 + i1) * x1(1_i64 & + + i2 + k2, i1 + k1) + end do + end do + out1(3_i64 + i2, 3_i64 + i1) = v11 + end do + end do + do i1 = 0_i64, ne11_1 - 1_i64 + do i2 = 0_i64, n11_2 - 1_i64 + v11 = 0.0_f64 + do k1 = 0_i64, 6_i64 - i1 - 1_i64 + do k2 = 0_i64, 4_i64 + v11 = v11 + x1(1_i64 + i2 + k2, i1 + k1 + n11_1) * mat11(k2, & + k1, 3_i64 + i2, 3_i64 + i1 + n11_1) + end do + end do + out1(3_i64 + i2, 3_i64 + i1 + n11_1) = v11 + end do + end do + do i1 = 0_i64, n11_1 + ne11_1 - 1_i64 + do i2 = 0_i64, ne11_2 - 1_i64 + v11 = 0.0_f64 + do k1 = 0_i64, 7_i64 - maxval([0_i64, i1 - n11_1 + 1_i64]) - & + 1_i64 + do k2 = 0_i64, 4_i64 - i2 - 1_i64 + v11 = v11 + x1(1_i64 + i2 + k2 + n11_2, i1 + k1) * mat11(k2, & + k1, 3_i64 + i2 + n11_2, 3_i64 + i1) + end do + end do + out1(3_i64 + i2 + n11_2, 3_i64 + i1) = v11 + end do + end do + do i1 = 0_i64, n01_1 - 1_i64 + do i2 = 0_i64, n01_2 - 1_i64 + v01 = 0.0_f64 + do k1 = 0_i64, 6_i64 + do k2 = 0_i64, 6_i64 + v01 = v01 + mat01(k2, k1, 3_i64 + i2, 3_i64 + i1) * x1(i2 + & + k2, i1 + k1) + end do + end do + out0(3_i64 + i2, 3_i64 + i1) = out0(3_i64 + i2, 3_i64 + i1) + & + v01 + end do + end do + do i1 = 0_i64, ne01_1 - 1_i64 + do i2 = 0_i64, n01_2 - 1_i64 + v01 = 0.0_f64 + do k1 = 0_i64, 6_i64 - i1 - 1_i64 + do k2 = 0_i64, 6_i64 + v01 = v01 + x1(i2 + k2, i1 + k1 + n01_1) * mat01(k2, k1, & + 3_i64 + i2, 3_i64 + i1 + n01_1) + end do + end do + out0(3_i64 + i2, 3_i64 + i1 + n01_1) = out0(3_i64 + i2, 3_i64 + & + i1 + n01_1) + v01 + end do + end do + do i1 = 0_i64, n01_1 + ne01_1 - 1_i64 + do i2 = 0_i64, ne01_2 - 1_i64 + v01 = 0.0_f64 + do k1 = 0_i64, 7_i64 - maxval([0_i64, i1 - n01_1 + 1_i64]) - & + 1_i64 + do k2 = 0_i64, 6_i64 - i2 - 1_i64 + v01 = v01 + x1(i2 + k2 + n01_2, i1 + k1) * mat01(k2, k1, & + 3_i64 + i2 + n01_2, 3_i64 + i1) + end do + end do + out0(3_i64 + i2 + n01_2, 3_i64 + i1) = out0(3_i64 + i2 + n01_2, & + 3_i64 + i1) + v01 + end do + end do + do i1 = 0_i64, n10_1 - 1_i64 + do i2 = 0_i64, n10_2 - 1_i64 + v10 = 0.0_f64 + do k1 = 0_i64, 6_i64 + do k2 = 0_i64, 6_i64 + v10 = v10 + mat10(k2, k1, 3_i64 + i2, 3_i64 + i1) * x0(i2 + & + k2, i1 + k1) + end do + end do + out1(3_i64 + i2, 3_i64 + i1) = out1(3_i64 + i2, 3_i64 + i1) + & + v10 + end do + end do + do i1 = 0_i64, ne10_1 - 1_i64 + do i2 = 0_i64, n10_2 - 1_i64 + v10 = 0.0_f64 + do k1 = 0_i64, 6_i64 - i1 - 1_i64 + do k2 = 0_i64, 6_i64 + v10 = v10 + x0(i2 + k2, i1 + k1 + n10_1) * mat10(k2, k1, & + 3_i64 + i2, 3_i64 + i1 + n10_1) + end do + end do + out1(3_i64 + i2, 3_i64 + i1 + n10_1) = out1(3_i64 + i2, 3_i64 + & + i1 + n10_1) + v10 + end do + end do + do i1 = 0_i64, n10_1 + ne10_1 - 1_i64 + do i2 = 0_i64, ne10_2 - 1_i64 + v10 = 0.0_f64 + do k1 = 0_i64, 7_i64 - maxval([0_i64, i1 - n10_1 + 1_i64]) - & + 1_i64 + do k2 = 0_i64, 6_i64 - i2 - 1_i64 + v10 = v10 + x0(i2 + k2 + n10_2, i1 + k1) * mat10(k2, k1, & + 3_i64 + i2 + n10_2, 3_i64 + i1) + end do + end do + out1(3_i64 + i2 + n10_2, 3_i64 + i1) = out1(3_i64 + i2 + n10_2, & + 3_i64 + i1) + v10 + end do + end do + return + + end subroutine lo_dot_vga8r193 + !........................................ + +end module dependencies_vga8r193_6xftl47r79t3 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.f90.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.f90.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.mod b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.mod new file mode 100644 index 0000000000000000000000000000000000000000..eea057d525497dc53903742c825cb1155f8b7946 GIT binary patch literal 836 zcmV-K1H1emiwFP!000006YZH>Z`v>%#ozrY{%y)1_{cgU7w<^gbJw* z6VRz2e|BySG%bjh&C{xYh`}M}{Cw=#^7)rAN+LIa`{nH6E{9+FYQ0z%fT@AuW|d!W z@)^um%X^sRKl5Ui7dMN1o&CDKwpY~QnfW;1-09ZJayI<)+#zT%(BM5@s5#M)IPG~e zz*)9fFSDEM$D)`mid)?G4F(E>!6Y1|V-M2cTM%9bpZp;4f&?|iX%r5d-`Y_QT3N0nlP4Pth=w@e{p>J0q|)2$ylMiTOrUKO@=Bxwo}2nBgr{!g zPQ1j6c2q%E73zf?XTwZZj>4%d_;Hxkz~#5+;xBbkjfx}k+;JI+hW0QF;=~nqc~*7X z7PfJDw$nU_85%MGFaEx@ru?4nDASM$_->iamYX(G_@F#C=8-h#jnZg0Zcv4=O54aA zj<=l0=~)z}i63~#9bdXvaprxWj{TvZ>`$R3UD)6N6=sE729yKU5jB9CKrNs)PzM+R zMu9P49GDKw0A>QSfZ4zt-~>1Y&VX~^I&cHH3ETp1Bkt^?DkE+KzQ5iOQd$=;OSr#q zBi}s}UCj?*U-v>If8vS3A`D=ZP9|5?pO=xf%Vr~Oe%sMPwx=7%>BJjl@mF{1!2tEQ zdOaL98Ii3{+E(vN3OeGNzWbmfuIb#T<%}B6PQ{sia6T<((R(Cl`Vr_;gQgYek3^pu zw3zcf9vx?BDWiiav*(nbjG#ABuC76Q-M7yt@est1M`!GxcQ0n3%ZJTNtuN*pC+TKA z2>wtv>p@_Y2wsZ7e}Oh7AYo0DV8a*`YT1LMM^xa3f0Cbu|h6IsYS|^ zqEyS2Rf$rIlo-(q<;E$e5~UO=PNXQsGR0{nN-a`iL@#pH1}e^LRcf))OI51H%BWST z#Y&FqxoU$Iw`x^tv9e25s^!Y5RVl?vZu~vpry;-&+tVPx>wPRDceKiF9|A_t76}1U OL%#v@s(&CI9RL6(*pw0g literal 0 HcmV?d00001 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.o b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.o new file mode 100644 index 0000000000000000000000000000000000000000..9af7ee326d974e817f01c4a4e9338af7dbdb5351 GIT binary patch literal 78272 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 j82jDpZg|}rZn)_UH}4f_` +#include +#include "ndarrays.h" + + +/*........................................*/ + + +/*........................................*/ + +/*........................................*/ +static PyObject* bind_c_lo_dot_vga8r193_wrapper(PyObject* self, PyObject* args, PyObject* kwargs) +{ + PyObject* mat00_obj; + PyObject* mat01_obj; + PyObject* mat10_obj; + PyObject* mat11_obj; + PyObject* x0_obj; + PyObject* x1_obj; + PyObject* out0_obj; + PyObject* out1_obj; + PyObject* s00_1_obj; + PyObject* s00_2_obj; + PyObject* s01_1_obj; + PyObject* s01_2_obj; + PyObject* s10_1_obj; + PyObject* s10_2_obj; + PyObject* s11_1_obj; + PyObject* s11_2_obj; + PyObject* n00_1_obj; + PyObject* n00_2_obj; + PyObject* n01_1_obj; + PyObject* n01_2_obj; + PyObject* n10_1_obj; + PyObject* n10_2_obj; + PyObject* n11_1_obj; + PyObject* n11_2_obj; + PyObject* ne00_1_obj; + PyObject* ne00_2_obj; + PyObject* ne01_1_obj; + PyObject* ne01_2_obj; + PyObject* ne10_1_obj; + PyObject* ne10_2_obj; + PyObject* ne11_1_obj; + PyObject* ne11_2_obj; + t_ndarray mat00 = {.shape = NULL}; + void* bound_mat00; + int64_t bound_mat00_shape_1; + int64_t bound_mat00_shape_2; + int64_t bound_mat00_shape_3; + int64_t bound_mat00_shape_4; + int64_t bound_mat00_stride_1; + int64_t bound_mat00_stride_2; + int64_t bound_mat00_stride_3; + int64_t bound_mat00_stride_4; + t_ndarray mat01 = {.shape = NULL}; + void* bound_mat01; + int64_t bound_mat01_shape_1; + int64_t bound_mat01_shape_2; + int64_t bound_mat01_shape_3; + int64_t bound_mat01_shape_4; + int64_t bound_mat01_stride_1; + int64_t bound_mat01_stride_2; + int64_t bound_mat01_stride_3; + int64_t bound_mat01_stride_4; + t_ndarray mat10 = {.shape = NULL}; + void* bound_mat10; + int64_t bound_mat10_shape_1; + int64_t bound_mat10_shape_2; + int64_t bound_mat10_shape_3; + int64_t bound_mat10_shape_4; + int64_t bound_mat10_stride_1; + int64_t bound_mat10_stride_2; + int64_t bound_mat10_stride_3; + int64_t bound_mat10_stride_4; + t_ndarray mat11 = {.shape = NULL}; + void* bound_mat11; + int64_t bound_mat11_shape_1; + int64_t bound_mat11_shape_2; + int64_t bound_mat11_shape_3; + int64_t bound_mat11_shape_4; + int64_t bound_mat11_stride_1; + int64_t bound_mat11_stride_2; + int64_t bound_mat11_stride_3; + int64_t bound_mat11_stride_4; + t_ndarray x0 = {.shape = NULL}; + void* bound_x0; + int64_t bound_x0_shape_1; + int64_t bound_x0_shape_2; + int64_t bound_x0_stride_1; + int64_t bound_x0_stride_2; + t_ndarray x1 = {.shape = NULL}; + void* bound_x1; + int64_t bound_x1_shape_1; + int64_t bound_x1_shape_2; + int64_t bound_x1_stride_1; + int64_t bound_x1_stride_2; + t_ndarray out0 = {.shape = NULL}; + void* bound_out0; + int64_t bound_out0_shape_1; + int64_t bound_out0_shape_2; + int64_t bound_out0_stride_1; + int64_t bound_out0_stride_2; + t_ndarray out1 = {.shape = NULL}; + void* bound_out1; + int64_t bound_out1_shape_1; + int64_t bound_out1_shape_2; + int64_t bound_out1_stride_1; + int64_t bound_out1_stride_2; + int64_t s00_1; + int64_t s00_2; + int64_t s01_1; + int64_t s01_2; + int64_t s10_1; + int64_t s10_2; + int64_t s11_1; + int64_t s11_2; + int64_t n00_1; + int64_t n00_2; + int64_t n01_1; + int64_t n01_2; + int64_t n10_1; + int64_t n10_2; + int64_t n11_1; + int64_t n11_2; + int64_t ne00_1; + int64_t ne00_2; + int64_t ne01_1; + int64_t ne01_2; + int64_t ne10_1; + int64_t ne10_2; + int64_t ne11_1; + int64_t ne11_2; + static char *kwlist[] = { + "mat00", + "mat01", + "mat10", + "mat11", + "x0", + "x1", + "out0", + "out1", + "s00_1", + "s00_2", + "s01_1", + "s01_2", + "s10_1", + "s10_2", + "s11_1", + "s11_2", + "n00_1", + "n00_2", + "n01_1", + "n01_2", + "n10_1", + "n10_2", + "n11_1", + "n11_2", + "ne00_1", + "ne00_2", + "ne01_1", + "ne01_2", + "ne10_1", + "ne10_2", + "ne11_1", + "ne11_2", + NULL + }; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", kwlist, &mat00_obj, &mat01_obj, &mat10_obj, &mat11_obj, &x0_obj, &x1_obj, &out0_obj, &out1_obj, &s00_1_obj, &s00_2_obj, &s01_1_obj, &s01_2_obj, &s10_1_obj, &s10_2_obj, &s11_1_obj, &s11_2_obj, &n00_1_obj, &n00_2_obj, &n01_1_obj, &n01_2_obj, &n10_1_obj, &n10_2_obj, &n11_1_obj, &n11_2_obj, &ne00_1_obj, &ne00_2_obj, &ne01_1_obj, &ne01_2_obj, &ne10_1_obj, &ne10_2_obj, &ne11_1_obj, &ne11_2_obj)) + { + return NULL; + } + if (pyarray_check(mat00_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + mat00 = pyarray_to_ndarray(mat00_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument mat00"); + return NULL; + } + bound_mat00 = nd_data(&mat00); + bound_mat00_shape_1 = nd_ndim(&mat00, INT64_C(0)); + bound_mat00_shape_2 = nd_ndim(&mat00, INT64_C(1)); + bound_mat00_shape_3 = nd_ndim(&mat00, INT64_C(2)); + bound_mat00_shape_4 = nd_ndim(&mat00, INT64_C(3)); + bound_mat00_stride_1 = nd_nstep_C(&mat00, INT64_C(0)); + bound_mat00_stride_2 = nd_nstep_C(&mat00, INT64_C(1)); + bound_mat00_stride_3 = nd_nstep_C(&mat00, INT64_C(2)); + bound_mat00_stride_4 = nd_nstep_C(&mat00, INT64_C(3)); + if (pyarray_check(mat01_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + mat01 = pyarray_to_ndarray(mat01_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument mat01"); + return NULL; + } + bound_mat01 = nd_data(&mat01); + bound_mat01_shape_1 = nd_ndim(&mat01, INT64_C(0)); + bound_mat01_shape_2 = nd_ndim(&mat01, INT64_C(1)); + bound_mat01_shape_3 = nd_ndim(&mat01, INT64_C(2)); + bound_mat01_shape_4 = nd_ndim(&mat01, INT64_C(3)); + bound_mat01_stride_1 = nd_nstep_C(&mat01, INT64_C(0)); + bound_mat01_stride_2 = nd_nstep_C(&mat01, INT64_C(1)); + bound_mat01_stride_3 = nd_nstep_C(&mat01, INT64_C(2)); + bound_mat01_stride_4 = nd_nstep_C(&mat01, INT64_C(3)); + if (pyarray_check(mat10_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + mat10 = pyarray_to_ndarray(mat10_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument mat10"); + return NULL; + } + bound_mat10 = nd_data(&mat10); + bound_mat10_shape_1 = nd_ndim(&mat10, INT64_C(0)); + bound_mat10_shape_2 = nd_ndim(&mat10, INT64_C(1)); + bound_mat10_shape_3 = nd_ndim(&mat10, INT64_C(2)); + bound_mat10_shape_4 = nd_ndim(&mat10, INT64_C(3)); + bound_mat10_stride_1 = nd_nstep_C(&mat10, INT64_C(0)); + bound_mat10_stride_2 = nd_nstep_C(&mat10, INT64_C(1)); + bound_mat10_stride_3 = nd_nstep_C(&mat10, INT64_C(2)); + bound_mat10_stride_4 = nd_nstep_C(&mat10, INT64_C(3)); + if (pyarray_check(mat11_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + mat11 = pyarray_to_ndarray(mat11_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument mat11"); + return NULL; + } + bound_mat11 = nd_data(&mat11); + bound_mat11_shape_1 = nd_ndim(&mat11, INT64_C(0)); + bound_mat11_shape_2 = nd_ndim(&mat11, INT64_C(1)); + bound_mat11_shape_3 = nd_ndim(&mat11, INT64_C(2)); + bound_mat11_shape_4 = nd_ndim(&mat11, INT64_C(3)); + bound_mat11_stride_1 = nd_nstep_C(&mat11, INT64_C(0)); + bound_mat11_stride_2 = nd_nstep_C(&mat11, INT64_C(1)); + bound_mat11_stride_3 = nd_nstep_C(&mat11, INT64_C(2)); + bound_mat11_stride_4 = nd_nstep_C(&mat11, INT64_C(3)); + if (pyarray_check(x0_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) + { + x0 = pyarray_to_ndarray(x0_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument x0"); + return NULL; + } + bound_x0 = nd_data(&x0); + bound_x0_shape_1 = nd_ndim(&x0, INT64_C(0)); + bound_x0_shape_2 = nd_ndim(&x0, INT64_C(1)); + bound_x0_stride_1 = nd_nstep_C(&x0, INT64_C(0)); + bound_x0_stride_2 = nd_nstep_C(&x0, INT64_C(1)); + if (pyarray_check(x1_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) + { + x1 = pyarray_to_ndarray(x1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument x1"); + return NULL; + } + bound_x1 = nd_data(&x1); + bound_x1_shape_1 = nd_ndim(&x1, INT64_C(0)); + bound_x1_shape_2 = nd_ndim(&x1, INT64_C(1)); + bound_x1_stride_1 = nd_nstep_C(&x1, INT64_C(0)); + bound_x1_stride_2 = nd_nstep_C(&x1, INT64_C(1)); + if (pyarray_check(out0_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) + { + out0 = pyarray_to_ndarray(out0_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument out0"); + return NULL; + } + bound_out0 = nd_data(&out0); + bound_out0_shape_1 = nd_ndim(&out0, INT64_C(0)); + bound_out0_shape_2 = nd_ndim(&out0, INT64_C(1)); + bound_out0_stride_1 = nd_nstep_C(&out0, INT64_C(0)); + bound_out0_stride_2 = nd_nstep_C(&out0, INT64_C(1)); + if (pyarray_check(out1_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) + { + out1 = pyarray_to_ndarray(out1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument out1"); + return NULL; + } + bound_out1 = nd_data(&out1); + bound_out1_shape_1 = nd_ndim(&out1, INT64_C(0)); + bound_out1_shape_2 = nd_ndim(&out1, INT64_C(1)); + bound_out1_stride_1 = nd_nstep_C(&out1, INT64_C(0)); + bound_out1_stride_2 = nd_nstep_C(&out1, INT64_C(1)); + if (PyIs_Int64(s00_1_obj)) + { + s00_1 = PyInt64_to_Int64(s00_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s00_1"); + return NULL; + } + if (PyIs_Int64(s00_2_obj)) + { + s00_2 = PyInt64_to_Int64(s00_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s00_2"); + return NULL; + } + if (PyIs_Int64(s01_1_obj)) + { + s01_1 = PyInt64_to_Int64(s01_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s01_1"); + return NULL; + } + if (PyIs_Int64(s01_2_obj)) + { + s01_2 = PyInt64_to_Int64(s01_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s01_2"); + return NULL; + } + if (PyIs_Int64(s10_1_obj)) + { + s10_1 = PyInt64_to_Int64(s10_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s10_1"); + return NULL; + } + if (PyIs_Int64(s10_2_obj)) + { + s10_2 = PyInt64_to_Int64(s10_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s10_2"); + return NULL; + } + if (PyIs_Int64(s11_1_obj)) + { + s11_1 = PyInt64_to_Int64(s11_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s11_1"); + return NULL; + } + if (PyIs_Int64(s11_2_obj)) + { + s11_2 = PyInt64_to_Int64(s11_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s11_2"); + return NULL; + } + if (PyIs_Int64(n00_1_obj)) + { + n00_1 = PyInt64_to_Int64(n00_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n00_1"); + return NULL; + } + if (PyIs_Int64(n00_2_obj)) + { + n00_2 = PyInt64_to_Int64(n00_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n00_2"); + return NULL; + } + if (PyIs_Int64(n01_1_obj)) + { + n01_1 = PyInt64_to_Int64(n01_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n01_1"); + return NULL; + } + if (PyIs_Int64(n01_2_obj)) + { + n01_2 = PyInt64_to_Int64(n01_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n01_2"); + return NULL; + } + if (PyIs_Int64(n10_1_obj)) + { + n10_1 = PyInt64_to_Int64(n10_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n10_1"); + return NULL; + } + if (PyIs_Int64(n10_2_obj)) + { + n10_2 = PyInt64_to_Int64(n10_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n10_2"); + return NULL; + } + if (PyIs_Int64(n11_1_obj)) + { + n11_1 = PyInt64_to_Int64(n11_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n11_1"); + return NULL; + } + if (PyIs_Int64(n11_2_obj)) + { + n11_2 = PyInt64_to_Int64(n11_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n11_2"); + return NULL; + } + if (PyIs_Int64(ne00_1_obj)) + { + ne00_1 = PyInt64_to_Int64(ne00_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne00_1"); + return NULL; + } + if (PyIs_Int64(ne00_2_obj)) + { + ne00_2 = PyInt64_to_Int64(ne00_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne00_2"); + return NULL; + } + if (PyIs_Int64(ne01_1_obj)) + { + ne01_1 = PyInt64_to_Int64(ne01_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne01_1"); + return NULL; + } + if (PyIs_Int64(ne01_2_obj)) + { + ne01_2 = PyInt64_to_Int64(ne01_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne01_2"); + return NULL; + } + if (PyIs_Int64(ne10_1_obj)) + { + ne10_1 = PyInt64_to_Int64(ne10_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne10_1"); + return NULL; + } + if (PyIs_Int64(ne10_2_obj)) + { + ne10_2 = PyInt64_to_Int64(ne10_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne10_2"); + return NULL; + } + if (PyIs_Int64(ne11_1_obj)) + { + ne11_1 = PyInt64_to_Int64(ne11_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne11_1"); + return NULL; + } + if (PyIs_Int64(ne11_2_obj)) + { + ne11_2 = PyInt64_to_Int64(ne11_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne11_2"); + return NULL; + } + bind_c_lo_dot_vga8r193(bound_mat00, bound_mat00_shape_1, bound_mat00_shape_2, bound_mat00_shape_3, bound_mat00_shape_4, bound_mat00_stride_1, bound_mat00_stride_2, bound_mat00_stride_3, bound_mat00_stride_4, bound_mat01, bound_mat01_shape_1, bound_mat01_shape_2, bound_mat01_shape_3, bound_mat01_shape_4, bound_mat01_stride_1, bound_mat01_stride_2, bound_mat01_stride_3, bound_mat01_stride_4, bound_mat10, bound_mat10_shape_1, bound_mat10_shape_2, bound_mat10_shape_3, bound_mat10_shape_4, bound_mat10_stride_1, bound_mat10_stride_2, bound_mat10_stride_3, bound_mat10_stride_4, bound_mat11, bound_mat11_shape_1, bound_mat11_shape_2, bound_mat11_shape_3, bound_mat11_shape_4, bound_mat11_stride_1, bound_mat11_stride_2, bound_mat11_stride_3, bound_mat11_stride_4, bound_x0, bound_x0_shape_1, bound_x0_shape_2, bound_x0_stride_1, bound_x0_stride_2, bound_x1, bound_x1_shape_1, bound_x1_shape_2, bound_x1_stride_1, bound_x1_stride_2, bound_out0, bound_out0_shape_1, bound_out0_shape_2, bound_out0_stride_1, bound_out0_stride_2, bound_out1, bound_out1_shape_1, bound_out1_shape_2, bound_out1_stride_1, bound_out1_stride_2, s00_1, s00_2, s01_1, s01_2, s10_1, s10_2, s11_1, s11_2, n00_1, n00_2, n01_1, n01_2, n10_1, n10_2, n11_1, n11_2, ne00_1, ne00_2, ne01_1, ne01_2, ne10_1, ne10_2, ne11_1, ne11_2); + free_pointer(&mat00); + free_pointer(&mat01); + free_pointer(&mat10); + free_pointer(&mat11); + free_pointer(&x0); + free_pointer(&x1); + free_pointer(&out0); + free_pointer(&out1); + Py_INCREF(Py_None); + return Py_None; +} +/*........................................*/ + +/*........................................*/ + +static PyMethodDef dependencies_vga8r193_6xftl47r79t3_methods[] = { + { + "lo_dot_vga8r193", + (PyCFunction)bind_c_lo_dot_vga8r193_wrapper, + METH_VARARGS | METH_KEYWORDS, + "" + }, + { NULL, NULL, 0, NULL} +}; + +/*........................................*/ + +static struct PyModuleDef dependencies_vga8r193_6xftl47r79t3_module = { + PyModuleDef_HEAD_INIT, + /* name of module */ + "dependencies_vga8r193_6xftl47r79t3", + /* module documentation, may be NULL */ + NULL, + /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */ + 0, + dependencies_vga8r193_6xftl47r79t3_methods, +}; + +/*........................................*/ + +PyMODINIT_FUNC PyInit_dependencies_vga8r193_6xftl47r79t3(void) +{ + PyObject* mod; + static void* Pydependencies_vga8r193_6xftl47r79t3_API[0]; + PyObject* c_api_object_0001; + mod = PyModule_Create(&dependencies_vga8r193_6xftl47r79t3_module); + if (mod == NULL) + { + return NULL; + } + c_api_object_0001 = PyCapsule_New((void *)Pydependencies_vga8r193_6xftl47r79t3_API, "dependencies_vga8r193_6xftl47r79t3._C_API", NULL); + if (PyModule_AddObject(mod, "_C_API", c_api_object_0001) < INT64_C(0)) + { + Py_DECREF(mod); + return NULL; + } + Py_INCREF(c_api_object_0001); + import_array(); + return mod; +} diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.c.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.c.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.h b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.h new file mode 100644 index 00000000..0e9146f5 --- /dev/null +++ b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.h @@ -0,0 +1,35 @@ +#ifndef DEPENDENCIES_VGA8R193_6XFTL47R79T3_WRAPPER_H +#define DEPENDENCIES_VGA8R193_6XFTL47R79T3_WRAPPER_H + +#include "numpy_version.h" +#include "numpy/arrayobject.h" +#include "cwrapper.h" +#include "cwrapper_ndarrays.h" + + +#ifdef DEPENDENCIES_VGA8R193_6XFTL47R79T3_WRAPPER + +void bind_c_lo_dot_vga8r193(void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t); + +#else + +static void** Pydependencies_vga8r193_6xftl47r79t3_API; + + +/*........................................*/ +static int dependencies_vga8r193_6xftl47r79t3_import(void) +{ + PyObject* current_path; + PyObject* stash_path; + current_path = PySys_GetObject("path"); + stash_path = PyList_GetItem(current_path, 0); + Py_INCREF(stash_path); + PyList_SetItem(current_path, 0, PyUnicode_FromString("/Users/patricklagarrigue/psydac_workspace/sympde/__gpyccel__/__epyccel__")); + Pydependencies_vga8r193_6xftl47r79t3_API = (void**)PyCapsule_Import("dependencies_vga8r193_6xftl47r79t3._C_API", 0); + PyList_SetItem(current_path, 0, stash_path); + return Pydependencies_vga8r193_6xftl47r79t3_API != NULL ? 0 : -1; +} +/*........................................*/ + +#endif +#endif // DEPENDENCIES_VGA8R193_6XFTL47R79T3_WRAPPER_H diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.o b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.o new file mode 100644 index 0000000000000000000000000000000000000000..d2ef13681b4254d1b959d25af205f35c92696433 GIT binary patch literal 56288 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

?^a`FIl5K!eK^`0EmU6jca1n1 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 literal 0 HcmV?d00001 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.o.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.o.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.f90 b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.f90 new file mode 100644 index 00000000..93c7a93e --- /dev/null +++ b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.f90 @@ -0,0 +1,160 @@ +module dependencies_wti60kr7_6feykyplisif + + + use, intrinsic :: ISO_C_Binding, only : f64 => C_DOUBLE , i64 => & + C_INT64_T + implicit none + + contains + + !........................................ + subroutine assemble_matrix_wti60kr7(global_test_basis_v2_1, & + global_test_basis_v2_2, global_trial_basis_u2_1, & + global_trial_basis_u2_2, global_span_v2_1, global_span_v2_2, & + global_x1, global_x2, test_v2_p1, test_v2_p2, trial_u2_p1, & + trial_u2_p2, n_element_1, n_element_2, k1, k2, pad1, pad2, & + g_mat_u2_v2_wti60kr7) + + implicit none + + real(f64), intent(in) :: global_test_basis_v2_1(0:,0:,0:,0:) + real(f64), intent(in) :: global_test_basis_v2_2(0:,0:,0:,0:) + real(f64), intent(in) :: global_trial_basis_u2_1(0:,0:,0:,0:) + real(f64), intent(in) :: global_trial_basis_u2_2(0:,0:,0:,0:) + integer(i64), intent(in) :: global_span_v2_1(0:) + integer(i64), intent(in) :: global_span_v2_2(0:) + real(f64), intent(in) :: global_x1(0:,0:) + real(f64), intent(in) :: global_x2(0:,0:) + integer(i64), value :: test_v2_p1 + integer(i64), value :: test_v2_p2 + integer(i64), value :: trial_u2_p1 + integer(i64), value :: trial_u2_p2 + integer(i64), value :: n_element_1 + integer(i64), value :: n_element_2 + integer(i64), value :: k1 + integer(i64), value :: k2 + integer(i64), value :: pad1 + integer(i64), value :: pad2 + real(f64), intent(inout) :: g_mat_u2_v2_wti60kr7(0:,0:,0:,0:) + real(f64), allocatable :: local_x1(:) + real(f64), allocatable :: local_x2(:) + real(f64), allocatable :: l_mat_u2_v2_wti60kr7(:,:,:,:) + integer(i64) :: i_element_1 + integer(i64) :: span_v2_1 + integer(i64) :: i_element_2 + integer(i64) :: span_v2_2 + integer(i64) :: i_quad_1 + real(f64) :: x1 + integer(i64) :: i_quad_2 + real(f64) :: x2 + integer(i64) :: i_basis_1 + integer(i64) :: i_basis_2 + integer(i64) :: j_basis_1 + real(f64) :: v2_1 + real(f64) :: v2_1_x1 + real(f64) :: u2_1 + real(f64) :: u2_1_x1 + integer(i64) :: j_basis_2 + real(f64) :: v2_2 + real(f64) :: v2_2_x2 + real(f64) :: u2_2 + real(f64) :: u2_2_x2 + real(f64) :: v2 + real(f64) :: v2_x2 + real(f64) :: v2_x1 + real(f64) :: u2 + real(f64) :: u2_x2 + real(f64) :: u2_x1 + real(f64) :: temp_v2_u2_0 + real(f64) :: temp_v2_u2_1 + real(f64) :: temp_v2_u2_2 + real(f64) :: temp_v2_u2_3 + real(f64) :: contribution_v2_u2_wti60kr7 + + allocate(local_x1(0:size(global_x1, 1_i64, i64) - 1_i64)) + local_x1 = 0.0_f64 + allocate(local_x2(0:size(global_x2, 1_i64, i64) - 1_i64)) + local_x2 = 0.0_f64 + allocate(l_mat_u2_v2_wti60kr7(0:4_i64, 0:4_i64, 0:2_i64, 0:2_i64)) + l_mat_u2_v2_wti60kr7 = 0.0_f64 + do i_element_1 = 0_i64, n_element_1 - 1_i64 + local_x1(:) = global_x1(:, i_element_1) + span_v2_1 = global_span_v2_1(i_element_1) + do i_element_2 = 0_i64, n_element_2 - 1_i64 + local_x2(:) = global_x2(:, i_element_2) + span_v2_2 = global_span_v2_2(i_element_2) + l_mat_u2_v2_wti60kr7(:, :, :, :) = 0.0_f64 + do i_quad_1 = 0_i64, 3_i64 + x1 = local_x1(i_quad_1) + do i_quad_2 = 0_i64, 3_i64 + x2 = local_x2(i_quad_2) + do i_basis_1 = 0_i64, 2_i64 + do i_basis_2 = 0_i64, 2_i64 + do j_basis_1 = 0_i64, 2_i64 + v2_1 = global_test_basis_v2_1(i_quad_1, 0_i64, & + i_basis_1, i_element_1) + v2_1_x1 = global_test_basis_v2_1(i_quad_1, 1_i64, & + i_basis_1, i_element_1) + u2_1 = global_trial_basis_u2_1(i_quad_1, 0_i64, & + j_basis_1, i_element_1) + u2_1_x1 = global_trial_basis_u2_1(i_quad_1, 1_i64, & + j_basis_1, i_element_1) + do j_basis_2 = 0_i64, 2_i64 + v2_2 = global_test_basis_v2_2(i_quad_2, 0_i64, & + i_basis_2, i_element_2) + v2_2_x2 = global_test_basis_v2_2(i_quad_2, 1_i64, & + i_basis_2, i_element_2) + u2_2 = global_trial_basis_u2_2(i_quad_2, 0_i64, & + j_basis_2, i_element_2) + u2_2_x2 = global_trial_basis_u2_2(i_quad_2, 1_i64, & + j_basis_2, i_element_2) + v2 = v2_1 * v2_2 + v2_x2 = v2_1 * v2_2_x2 + v2_x1 = v2_1_x1 * v2_2 + u2 = u2_1 * u2_2 + u2_x2 = u2_1 * u2_2_x2 + u2_x1 = u2_1_x1 * u2_2 + temp_v2_u2_0 = 2_i64 * 3.141592653589793_f64 + temp_v2_u2_1 = temp_v2_u2_0 * x1 + temp_v2_u2_2 = temp_v2_u2_0 * x2 + temp_v2_u2_3 = (0.25_f64 * sin(temp_v2_u2_1) * cos( & + temp_v2_u2_2) + 0.25_f64 * sin(temp_v2_u2_2) & + * cos(temp_v2_u2_1) + 1.0_f64) ** 2_i64 + contribution_v2_u2_wti60kr7 = 0.25_f64 * u2 * v2 / & + sqrt(temp_v2_u2_3) + l_mat_u2_v2_wti60kr7(2_i64 - i_basis_2 + j_basis_2, & + 2_i64 - i_basis_1 + j_basis_1, i_basis_2, & + i_basis_1) = l_mat_u2_v2_wti60kr7(2_i64 - & + i_basis_2 + j_basis_2, 2_i64 - i_basis_1 + & + j_basis_1, i_basis_2, i_basis_1) + & + contribution_v2_u2_wti60kr7 + end do + end do + end do + end do + end do + end do + g_mat_u2_v2_wti60kr7(:, :, pad2 + span_v2_2 - test_v2_p2:1_i64 + & + pad2 + span_v2_2 - 1_i64, pad1 + span_v2_1 - test_v2_p1: & + 1_i64 + pad1 + span_v2_1 - 1_i64) = g_mat_u2_v2_wti60kr7( & + :, :, pad2 + span_v2_2 - test_v2_p2:1_i64 + pad2 + & + span_v2_2 - 1_i64, pad1 + span_v2_1 - test_v2_p1:1_i64 + & + pad1 + span_v2_1 - 1_i64) + l_mat_u2_v2_wti60kr7(:, :, :, & + :) + end do + end do + if (allocated(l_mat_u2_v2_wti60kr7)) then + deallocate(l_mat_u2_v2_wti60kr7) + end if + if (allocated(local_x2)) then + deallocate(local_x2) + end if + if (allocated(local_x1)) then + deallocate(local_x1) + end if + return + + end subroutine assemble_matrix_wti60kr7 + !........................................ + +end module dependencies_wti60kr7_6feykyplisif diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.f90.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.f90.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.mod b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.mod new file mode 100644 index 0000000000000000000000000000000000000000..3ce918e7e596e9ef29ba58b8a5d234e9ef6ede9b GIT binary patch literal 809 zcmV+^1J?W>iwFP!000006YW^Ra-u*Gz0X(l4L$4@Gb-wlD4V5L!2(G(rzwqNic--M zlTH498xTZAqo^Be%K~)<7$}76!@5igg(93|Cvl@lu$l2;AaU;c zQ~u2Rt~YSK7b)wA1QZH|w%K%A8aT!;!+bQp=|)#Gx+Ly)EVB`xOMYeC@H$I3Y`qa- zNuLU~Wgqbr!+r!=UeRD67fA`Ep6`oEe=PWIT==?%TRmsKD=lmj*uP@oDmr~{ROQlN~`63{Zx z3Qz@T6=)4;9heM^0%O2Rn?lHe5UhLU*#KvowhTT>1DO;DW^O9;( z*xGO^@;a*0D52~fBcjzhI zfGi)8G^wWE)-XSq1~i>^`zd-{7@As$PEO*KBnX5}RNHpiT9ey9)sD7{+cE*gN(9{G zgj<2+8I&=GRAd~KKVH_u;K`Ff(f zKkIo%=l4YVos!2;V%68_L~!UigfAvVNX!ijuuXDD`RTgJ(S+Q4u8;+{AvxX>EYo3w z&p&efwtFdCiI6L_|Ah$npDC;q(BHFcE9@yhGn40o+H$mGjh^Aratc{?e7*`9R=3eq z^LllnDQRfer5aX99v5RV5#D0QMDbP7YH4WKr5et$qugSxG8H)qQ95HVOemw=8eIet z&StaT;AEA^iE)dYB*4T%OegDfR!o@dUxJ0PAUR-GO|6Y(&3&eGfX#1}@97?#yia+#REEvUa%BmdN|F2phEuvXcNPEuEs%+* literal 0 HcmV?d00001 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.o b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.o new file mode 100644 index 0000000000000000000000000000000000000000..18995c699d3eb3f1d7fc9e2262aa4638bb8115b1 GIT binary patch literal 8296 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 +#include +#include "ndarrays.h" + + +/*........................................*/ + + +/*........................................*/ + +/*........................................*/ +static PyObject* bind_c_assemble_matrix_wti60kr7_wrapper(PyObject* self, PyObject* args, PyObject* kwargs) +{ + PyObject* global_test_basis_v2_1_obj; + PyObject* global_test_basis_v2_2_obj; + PyObject* global_trial_basis_u2_1_obj; + PyObject* global_trial_basis_u2_2_obj; + PyObject* global_span_v2_1_obj; + PyObject* global_span_v2_2_obj; + PyObject* global_x1_obj; + PyObject* global_x2_obj; + PyObject* test_v2_p1_obj; + PyObject* test_v2_p2_obj; + PyObject* trial_u2_p1_obj; + PyObject* trial_u2_p2_obj; + PyObject* n_element_1_obj; + PyObject* n_element_2_obj; + PyObject* k1_obj; + PyObject* k2_obj; + PyObject* pad1_obj; + PyObject* pad2_obj; + PyObject* g_mat_u2_v2_wti60kr7_obj; + t_ndarray global_test_basis_v2_1 = {.shape = NULL}; + void* bound_global_test_basis_v2_1; + int64_t bound_global_test_basis_v2_1_shape_1; + int64_t bound_global_test_basis_v2_1_shape_2; + int64_t bound_global_test_basis_v2_1_shape_3; + int64_t bound_global_test_basis_v2_1_shape_4; + int64_t bound_global_test_basis_v2_1_stride_1; + int64_t bound_global_test_basis_v2_1_stride_2; + int64_t bound_global_test_basis_v2_1_stride_3; + int64_t bound_global_test_basis_v2_1_stride_4; + t_ndarray global_test_basis_v2_2 = {.shape = NULL}; + void* bound_global_test_basis_v2_2; + int64_t bound_global_test_basis_v2_2_shape_1; + int64_t bound_global_test_basis_v2_2_shape_2; + int64_t bound_global_test_basis_v2_2_shape_3; + int64_t bound_global_test_basis_v2_2_shape_4; + int64_t bound_global_test_basis_v2_2_stride_1; + int64_t bound_global_test_basis_v2_2_stride_2; + int64_t bound_global_test_basis_v2_2_stride_3; + int64_t bound_global_test_basis_v2_2_stride_4; + t_ndarray global_trial_basis_u2_1 = {.shape = NULL}; + void* bound_global_trial_basis_u2_1; + int64_t bound_global_trial_basis_u2_1_shape_1; + int64_t bound_global_trial_basis_u2_1_shape_2; + int64_t bound_global_trial_basis_u2_1_shape_3; + int64_t bound_global_trial_basis_u2_1_shape_4; + int64_t bound_global_trial_basis_u2_1_stride_1; + int64_t bound_global_trial_basis_u2_1_stride_2; + int64_t bound_global_trial_basis_u2_1_stride_3; + int64_t bound_global_trial_basis_u2_1_stride_4; + t_ndarray global_trial_basis_u2_2 = {.shape = NULL}; + void* bound_global_trial_basis_u2_2; + int64_t bound_global_trial_basis_u2_2_shape_1; + int64_t bound_global_trial_basis_u2_2_shape_2; + int64_t bound_global_trial_basis_u2_2_shape_3; + int64_t bound_global_trial_basis_u2_2_shape_4; + int64_t bound_global_trial_basis_u2_2_stride_1; + int64_t bound_global_trial_basis_u2_2_stride_2; + int64_t bound_global_trial_basis_u2_2_stride_3; + int64_t bound_global_trial_basis_u2_2_stride_4; + t_ndarray global_span_v2_1 = {.shape = NULL}; + void* bound_global_span_v2_1; + int64_t bound_global_span_v2_1_shape_1; + int64_t bound_global_span_v2_1_stride_1; + t_ndarray global_span_v2_2 = {.shape = NULL}; + void* bound_global_span_v2_2; + int64_t bound_global_span_v2_2_shape_1; + int64_t bound_global_span_v2_2_stride_1; + t_ndarray global_x1 = {.shape = NULL}; + void* bound_global_x1; + int64_t bound_global_x1_shape_1; + int64_t bound_global_x1_shape_2; + int64_t bound_global_x1_stride_1; + int64_t bound_global_x1_stride_2; + t_ndarray global_x2 = {.shape = NULL}; + void* bound_global_x2; + int64_t bound_global_x2_shape_1; + int64_t bound_global_x2_shape_2; + int64_t bound_global_x2_stride_1; + int64_t bound_global_x2_stride_2; + int64_t test_v2_p1; + int64_t test_v2_p2; + int64_t trial_u2_p1; + int64_t trial_u2_p2; + int64_t n_element_1; + int64_t n_element_2; + int64_t k1; + int64_t k2; + int64_t pad1; + int64_t pad2; + t_ndarray g_mat_u2_v2_wti60kr7 = {.shape = NULL}; + void* bound_g_mat_u2_v2_wti60kr7; + int64_t bound_g_mat_u2_v2_wti60kr7_shape_1; + int64_t bound_g_mat_u2_v2_wti60kr7_shape_2; + int64_t bound_g_mat_u2_v2_wti60kr7_shape_3; + int64_t bound_g_mat_u2_v2_wti60kr7_shape_4; + int64_t bound_g_mat_u2_v2_wti60kr7_stride_1; + int64_t bound_g_mat_u2_v2_wti60kr7_stride_2; + int64_t bound_g_mat_u2_v2_wti60kr7_stride_3; + int64_t bound_g_mat_u2_v2_wti60kr7_stride_4; + static char *kwlist[] = { + "global_test_basis_v2_1", + "global_test_basis_v2_2", + "global_trial_basis_u2_1", + "global_trial_basis_u2_2", + "global_span_v2_1", + "global_span_v2_2", + "global_x1", + "global_x2", + "test_v2_p1", + "test_v2_p2", + "trial_u2_p1", + "trial_u2_p2", + "n_element_1", + "n_element_2", + "k1", + "k2", + "pad1", + "pad2", + "g_mat_u2_v2_wti60kr7", + NULL + }; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOOOOOOOOOOOOOOOOOO", kwlist, &global_test_basis_v2_1_obj, &global_test_basis_v2_2_obj, &global_trial_basis_u2_1_obj, &global_trial_basis_u2_2_obj, &global_span_v2_1_obj, &global_span_v2_2_obj, &global_x1_obj, &global_x2_obj, &test_v2_p1_obj, &test_v2_p2_obj, &trial_u2_p1_obj, &trial_u2_p2_obj, &n_element_1_obj, &n_element_2_obj, &k1_obj, &k2_obj, &pad1_obj, &pad2_obj, &g_mat_u2_v2_wti60kr7_obj)) + { + return NULL; + } + if (pyarray_check(global_test_basis_v2_1_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + global_test_basis_v2_1 = pyarray_to_ndarray(global_test_basis_v2_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_test_basis_v2_1"); + return NULL; + } + bound_global_test_basis_v2_1 = nd_data(&global_test_basis_v2_1); + bound_global_test_basis_v2_1_shape_1 = nd_ndim(&global_test_basis_v2_1, INT64_C(0)); + bound_global_test_basis_v2_1_shape_2 = nd_ndim(&global_test_basis_v2_1, INT64_C(1)); + bound_global_test_basis_v2_1_shape_3 = nd_ndim(&global_test_basis_v2_1, INT64_C(2)); + bound_global_test_basis_v2_1_shape_4 = nd_ndim(&global_test_basis_v2_1, INT64_C(3)); + bound_global_test_basis_v2_1_stride_1 = nd_nstep_C(&global_test_basis_v2_1, INT64_C(0)); + bound_global_test_basis_v2_1_stride_2 = nd_nstep_C(&global_test_basis_v2_1, INT64_C(1)); + bound_global_test_basis_v2_1_stride_3 = nd_nstep_C(&global_test_basis_v2_1, INT64_C(2)); + bound_global_test_basis_v2_1_stride_4 = nd_nstep_C(&global_test_basis_v2_1, INT64_C(3)); + if (pyarray_check(global_test_basis_v2_2_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + global_test_basis_v2_2 = pyarray_to_ndarray(global_test_basis_v2_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_test_basis_v2_2"); + return NULL; + } + bound_global_test_basis_v2_2 = nd_data(&global_test_basis_v2_2); + bound_global_test_basis_v2_2_shape_1 = nd_ndim(&global_test_basis_v2_2, INT64_C(0)); + bound_global_test_basis_v2_2_shape_2 = nd_ndim(&global_test_basis_v2_2, INT64_C(1)); + bound_global_test_basis_v2_2_shape_3 = nd_ndim(&global_test_basis_v2_2, INT64_C(2)); + bound_global_test_basis_v2_2_shape_4 = nd_ndim(&global_test_basis_v2_2, INT64_C(3)); + bound_global_test_basis_v2_2_stride_1 = nd_nstep_C(&global_test_basis_v2_2, INT64_C(0)); + bound_global_test_basis_v2_2_stride_2 = nd_nstep_C(&global_test_basis_v2_2, INT64_C(1)); + bound_global_test_basis_v2_2_stride_3 = nd_nstep_C(&global_test_basis_v2_2, INT64_C(2)); + bound_global_test_basis_v2_2_stride_4 = nd_nstep_C(&global_test_basis_v2_2, INT64_C(3)); + if (pyarray_check(global_trial_basis_u2_1_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + global_trial_basis_u2_1 = pyarray_to_ndarray(global_trial_basis_u2_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_trial_basis_u2_1"); + return NULL; + } + bound_global_trial_basis_u2_1 = nd_data(&global_trial_basis_u2_1); + bound_global_trial_basis_u2_1_shape_1 = nd_ndim(&global_trial_basis_u2_1, INT64_C(0)); + bound_global_trial_basis_u2_1_shape_2 = nd_ndim(&global_trial_basis_u2_1, INT64_C(1)); + bound_global_trial_basis_u2_1_shape_3 = nd_ndim(&global_trial_basis_u2_1, INT64_C(2)); + bound_global_trial_basis_u2_1_shape_4 = nd_ndim(&global_trial_basis_u2_1, INT64_C(3)); + bound_global_trial_basis_u2_1_stride_1 = nd_nstep_C(&global_trial_basis_u2_1, INT64_C(0)); + bound_global_trial_basis_u2_1_stride_2 = nd_nstep_C(&global_trial_basis_u2_1, INT64_C(1)); + bound_global_trial_basis_u2_1_stride_3 = nd_nstep_C(&global_trial_basis_u2_1, INT64_C(2)); + bound_global_trial_basis_u2_1_stride_4 = nd_nstep_C(&global_trial_basis_u2_1, INT64_C(3)); + if (pyarray_check(global_trial_basis_u2_2_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + global_trial_basis_u2_2 = pyarray_to_ndarray(global_trial_basis_u2_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_trial_basis_u2_2"); + return NULL; + } + bound_global_trial_basis_u2_2 = nd_data(&global_trial_basis_u2_2); + bound_global_trial_basis_u2_2_shape_1 = nd_ndim(&global_trial_basis_u2_2, INT64_C(0)); + bound_global_trial_basis_u2_2_shape_2 = nd_ndim(&global_trial_basis_u2_2, INT64_C(1)); + bound_global_trial_basis_u2_2_shape_3 = nd_ndim(&global_trial_basis_u2_2, INT64_C(2)); + bound_global_trial_basis_u2_2_shape_4 = nd_ndim(&global_trial_basis_u2_2, INT64_C(3)); + bound_global_trial_basis_u2_2_stride_1 = nd_nstep_C(&global_trial_basis_u2_2, INT64_C(0)); + bound_global_trial_basis_u2_2_stride_2 = nd_nstep_C(&global_trial_basis_u2_2, INT64_C(1)); + bound_global_trial_basis_u2_2_stride_3 = nd_nstep_C(&global_trial_basis_u2_2, INT64_C(2)); + bound_global_trial_basis_u2_2_stride_4 = nd_nstep_C(&global_trial_basis_u2_2, INT64_C(3)); + if (pyarray_check(global_span_v2_1_obj, NPY_LONG, INT64_C(1), NO_ORDER_CHECK)) + { + global_span_v2_1 = pyarray_to_ndarray(global_span_v2_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument global_span_v2_1"); + return NULL; + } + bound_global_span_v2_1 = nd_data(&global_span_v2_1); + bound_global_span_v2_1_shape_1 = nd_ndim(&global_span_v2_1, INT64_C(0)); + bound_global_span_v2_1_stride_1 = nd_nstep_F(&global_span_v2_1, INT64_C(0)); + if (pyarray_check(global_span_v2_2_obj, NPY_LONG, INT64_C(1), NO_ORDER_CHECK)) + { + global_span_v2_2 = pyarray_to_ndarray(global_span_v2_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument global_span_v2_2"); + return NULL; + } + bound_global_span_v2_2 = nd_data(&global_span_v2_2); + bound_global_span_v2_2_shape_1 = nd_ndim(&global_span_v2_2, INT64_C(0)); + bound_global_span_v2_2_stride_1 = nd_nstep_F(&global_span_v2_2, INT64_C(0)); + if (pyarray_check(global_x1_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) + { + global_x1 = pyarray_to_ndarray(global_x1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_x1"); + return NULL; + } + bound_global_x1 = nd_data(&global_x1); + bound_global_x1_shape_1 = nd_ndim(&global_x1, INT64_C(0)); + bound_global_x1_shape_2 = nd_ndim(&global_x1, INT64_C(1)); + bound_global_x1_stride_1 = nd_nstep_C(&global_x1, INT64_C(0)); + bound_global_x1_stride_2 = nd_nstep_C(&global_x1, INT64_C(1)); + if (pyarray_check(global_x2_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) + { + global_x2 = pyarray_to_ndarray(global_x2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_x2"); + return NULL; + } + bound_global_x2 = nd_data(&global_x2); + bound_global_x2_shape_1 = nd_ndim(&global_x2, INT64_C(0)); + bound_global_x2_shape_2 = nd_ndim(&global_x2, INT64_C(1)); + bound_global_x2_stride_1 = nd_nstep_C(&global_x2, INT64_C(0)); + bound_global_x2_stride_2 = nd_nstep_C(&global_x2, INT64_C(1)); + if (PyIs_Int64(test_v2_p1_obj)) + { + test_v2_p1 = PyInt64_to_Int64(test_v2_p1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument test_v2_p1"); + return NULL; + } + if (PyIs_Int64(test_v2_p2_obj)) + { + test_v2_p2 = PyInt64_to_Int64(test_v2_p2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument test_v2_p2"); + return NULL; + } + if (PyIs_Int64(trial_u2_p1_obj)) + { + trial_u2_p1 = PyInt64_to_Int64(trial_u2_p1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument trial_u2_p1"); + return NULL; + } + if (PyIs_Int64(trial_u2_p2_obj)) + { + trial_u2_p2 = PyInt64_to_Int64(trial_u2_p2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument trial_u2_p2"); + return NULL; + } + if (PyIs_Int64(n_element_1_obj)) + { + n_element_1 = PyInt64_to_Int64(n_element_1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n_element_1"); + return NULL; + } + if (PyIs_Int64(n_element_2_obj)) + { + n_element_2 = PyInt64_to_Int64(n_element_2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n_element_2"); + return NULL; + } + if (PyIs_Int64(k1_obj)) + { + k1 = PyInt64_to_Int64(k1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument k1"); + return NULL; + } + if (PyIs_Int64(k2_obj)) + { + k2 = PyInt64_to_Int64(k2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument k2"); + return NULL; + } + if (PyIs_Int64(pad1_obj)) + { + pad1 = PyInt64_to_Int64(pad1_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument pad1"); + return NULL; + } + if (PyIs_Int64(pad2_obj)) + { + pad2 = PyInt64_to_Int64(pad2_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument pad2"); + return NULL; + } + if (pyarray_check(g_mat_u2_v2_wti60kr7_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) + { + g_mat_u2_v2_wti60kr7 = pyarray_to_ndarray(g_mat_u2_v2_wti60kr7_obj); + } + else + { + PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument g_mat_u2_v2_wti60kr7"); + return NULL; + } + bound_g_mat_u2_v2_wti60kr7 = nd_data(&g_mat_u2_v2_wti60kr7); + bound_g_mat_u2_v2_wti60kr7_shape_1 = nd_ndim(&g_mat_u2_v2_wti60kr7, INT64_C(0)); + bound_g_mat_u2_v2_wti60kr7_shape_2 = nd_ndim(&g_mat_u2_v2_wti60kr7, INT64_C(1)); + bound_g_mat_u2_v2_wti60kr7_shape_3 = nd_ndim(&g_mat_u2_v2_wti60kr7, INT64_C(2)); + bound_g_mat_u2_v2_wti60kr7_shape_4 = nd_ndim(&g_mat_u2_v2_wti60kr7, INT64_C(3)); + bound_g_mat_u2_v2_wti60kr7_stride_1 = nd_nstep_C(&g_mat_u2_v2_wti60kr7, INT64_C(0)); + bound_g_mat_u2_v2_wti60kr7_stride_2 = nd_nstep_C(&g_mat_u2_v2_wti60kr7, INT64_C(1)); + bound_g_mat_u2_v2_wti60kr7_stride_3 = nd_nstep_C(&g_mat_u2_v2_wti60kr7, INT64_C(2)); + bound_g_mat_u2_v2_wti60kr7_stride_4 = nd_nstep_C(&g_mat_u2_v2_wti60kr7, INT64_C(3)); + bind_c_assemble_matrix_wti60kr7(bound_global_test_basis_v2_1, bound_global_test_basis_v2_1_shape_1, bound_global_test_basis_v2_1_shape_2, bound_global_test_basis_v2_1_shape_3, bound_global_test_basis_v2_1_shape_4, bound_global_test_basis_v2_1_stride_1, bound_global_test_basis_v2_1_stride_2, bound_global_test_basis_v2_1_stride_3, bound_global_test_basis_v2_1_stride_4, bound_global_test_basis_v2_2, bound_global_test_basis_v2_2_shape_1, bound_global_test_basis_v2_2_shape_2, bound_global_test_basis_v2_2_shape_3, bound_global_test_basis_v2_2_shape_4, bound_global_test_basis_v2_2_stride_1, bound_global_test_basis_v2_2_stride_2, bound_global_test_basis_v2_2_stride_3, bound_global_test_basis_v2_2_stride_4, bound_global_trial_basis_u2_1, bound_global_trial_basis_u2_1_shape_1, bound_global_trial_basis_u2_1_shape_2, bound_global_trial_basis_u2_1_shape_3, bound_global_trial_basis_u2_1_shape_4, bound_global_trial_basis_u2_1_stride_1, bound_global_trial_basis_u2_1_stride_2, bound_global_trial_basis_u2_1_stride_3, bound_global_trial_basis_u2_1_stride_4, bound_global_trial_basis_u2_2, bound_global_trial_basis_u2_2_shape_1, bound_global_trial_basis_u2_2_shape_2, bound_global_trial_basis_u2_2_shape_3, bound_global_trial_basis_u2_2_shape_4, bound_global_trial_basis_u2_2_stride_1, bound_global_trial_basis_u2_2_stride_2, bound_global_trial_basis_u2_2_stride_3, bound_global_trial_basis_u2_2_stride_4, bound_global_span_v2_1, bound_global_span_v2_1_shape_1, bound_global_span_v2_1_stride_1, bound_global_span_v2_2, bound_global_span_v2_2_shape_1, bound_global_span_v2_2_stride_1, bound_global_x1, bound_global_x1_shape_1, bound_global_x1_shape_2, bound_global_x1_stride_1, bound_global_x1_stride_2, bound_global_x2, bound_global_x2_shape_1, bound_global_x2_shape_2, bound_global_x2_stride_1, bound_global_x2_stride_2, test_v2_p1, test_v2_p2, trial_u2_p1, trial_u2_p2, n_element_1, n_element_2, k1, k2, pad1, pad2, bound_g_mat_u2_v2_wti60kr7, bound_g_mat_u2_v2_wti60kr7_shape_1, bound_g_mat_u2_v2_wti60kr7_shape_2, bound_g_mat_u2_v2_wti60kr7_shape_3, bound_g_mat_u2_v2_wti60kr7_shape_4, bound_g_mat_u2_v2_wti60kr7_stride_1, bound_g_mat_u2_v2_wti60kr7_stride_2, bound_g_mat_u2_v2_wti60kr7_stride_3, bound_g_mat_u2_v2_wti60kr7_stride_4); + free_pointer(&global_test_basis_v2_1); + free_pointer(&global_test_basis_v2_2); + free_pointer(&global_trial_basis_u2_1); + free_pointer(&global_trial_basis_u2_2); + free_pointer(&global_span_v2_1); + free_pointer(&global_span_v2_2); + free_pointer(&global_x1); + free_pointer(&global_x2); + free_pointer(&g_mat_u2_v2_wti60kr7); + Py_INCREF(Py_None); + return Py_None; +} +/*........................................*/ + +/*........................................*/ + +static PyMethodDef dependencies_wti60kr7_6feykyplisif_methods[] = { + { + "assemble_matrix_wti60kr7", + (PyCFunction)bind_c_assemble_matrix_wti60kr7_wrapper, + METH_VARARGS | METH_KEYWORDS, + "" + }, + { NULL, NULL, 0, NULL} +}; + +/*........................................*/ + +static struct PyModuleDef dependencies_wti60kr7_6feykyplisif_module = { + PyModuleDef_HEAD_INIT, + /* name of module */ + "dependencies_wti60kr7_6feykyplisif", + /* module documentation, may be NULL */ + NULL, + /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */ + 0, + dependencies_wti60kr7_6feykyplisif_methods, +}; + +/*........................................*/ + +PyMODINIT_FUNC PyInit_dependencies_wti60kr7_6feykyplisif(void) +{ + PyObject* mod; + static void* Pydependencies_wti60kr7_6feykyplisif_API[0]; + PyObject* c_api_object_0001; + mod = PyModule_Create(&dependencies_wti60kr7_6feykyplisif_module); + if (mod == NULL) + { + return NULL; + } + c_api_object_0001 = PyCapsule_New((void *)Pydependencies_wti60kr7_6feykyplisif_API, "dependencies_wti60kr7_6feykyplisif._C_API", NULL); + if (PyModule_AddObject(mod, "_C_API", c_api_object_0001) < INT64_C(0)) + { + Py_DECREF(mod); + return NULL; + } + Py_INCREF(c_api_object_0001); + import_array(); + return mod; +} diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.c.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.c.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.h b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.h new file mode 100644 index 00000000..33fb8c32 --- /dev/null +++ b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.h @@ -0,0 +1,35 @@ +#ifndef DEPENDENCIES_WTI60KR7_6FEYKYPLISIF_WRAPPER_H +#define DEPENDENCIES_WTI60KR7_6FEYKYPLISIF_WRAPPER_H + +#include "numpy_version.h" +#include "numpy/arrayobject.h" +#include "cwrapper.h" +#include "cwrapper_ndarrays.h" + + +#ifdef DEPENDENCIES_WTI60KR7_6FEYKYPLISIF_WRAPPER + +void bind_c_assemble_matrix_wti60kr7(void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, void*, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t); + +#else + +static void** Pydependencies_wti60kr7_6feykyplisif_API; + + +/*........................................*/ +static int dependencies_wti60kr7_6feykyplisif_import(void) +{ + PyObject* current_path; + PyObject* stash_path; + current_path = PySys_GetObject("path"); + stash_path = PyList_GetItem(current_path, 0); + Py_INCREF(stash_path); + PyList_SetItem(current_path, 0, PyUnicode_FromString("/Users/patricklagarrigue/psydac_workspace/sympde/__gpyccel__/__epyccel__")); + Pydependencies_wti60kr7_6feykyplisif_API = (void**)PyCapsule_Import("dependencies_wti60kr7_6feykyplisif._C_API", 0); + PyList_SetItem(current_path, 0, stash_path); + return Pydependencies_wti60kr7_6feykyplisif_API != NULL ? 0 : -1; +} +/*........................................*/ + +#endif +#endif // DEPENDENCIES_WTI60KR7_6FEYKYPLISIF_WRAPPER_H diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.o.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.o.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/ndarrays.lock b/__gpyccel__/__epyccel__/__pyccel__/ndarrays.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.c b/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.c new file mode 100644 index 00000000..bceaeea4 --- /dev/null +++ b/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.c @@ -0,0 +1,822 @@ +/* -------------------------------------------------------------------------------------- */ +/* This file is part of Pyccel which is released under MIT License. See the LICENSE file */ +/* or go to https://github.com/pyccel/pyccel/blob/devel/LICENSE for full license details. */ +/* -------------------------------------------------------------------------------------- */ + +# include "ndarrays.h" +# include +# include +# include +# include +# include +# include +# include +# include + +/* + * Takes an array, and prints its elements the way they are laid out in memory (similar to ravel) +*/ + +void print_ndarray_memory(t_ndarray nd) +{ + int i; + + for (i = 0; i < nd.length; ++i) + { + switch (nd.type) + { + case nd_int8: + printf("[%"PRId8"]", nd.nd_int8[i]); + break; + case nd_int16: + printf("[%"PRId16"]", nd.nd_int16[i]); + break; + case nd_int32: + printf("[%"PRId32"]", nd.nd_int32[i]); + break; + case nd_int64: + printf("[%"PRId64"]", nd.nd_int64[i]); + break; + case nd_float: + printf("[%f]", nd.nd_float[i]); + break; + case nd_double: + printf("[%lf]", nd.nd_double[i]); + break; + case nd_bool: + printf("[%d]", nd.nd_bool[i]); + break; + case nd_cfloat: + { + double real = creal(nd.nd_cfloat[i]); + double imag = cimag(nd.nd_cfloat[i]); + printf("[%lf%+lfj]", real, imag); + break; + } + case nd_cdouble: + { + double real = creal(nd.nd_cdouble[i]); + double imag = cimag(nd.nd_cdouble[i]); + printf("[%lf%+lfj]", real, imag); + break; + } + } + ++i; + } + if (i) + printf("\n"); +} + +/* +** allocation +*/ + +t_ndarray array_create(int32_t nd, int64_t *shape, + t_types type, bool is_view, t_order order) +{ + t_ndarray arr; + + arr.nd = nd; + arr.type = type; + arr.order = order; + switch (type) + { + case nd_int8: + arr.type_size = sizeof(int8_t); + break; + case nd_int16: + arr.type_size = sizeof(int16_t); + break; + case nd_int32: + arr.type_size = sizeof(int32_t); + break; + case nd_int64: + arr.type_size = sizeof(int64_t); + break; + case nd_float: + arr.type_size = sizeof(float); + break; + case nd_double: + arr.type_size = sizeof(double); + break; + case nd_bool: + arr.type_size = sizeof(bool); + break; + case nd_cfloat: + arr.type_size = sizeof(float complex); + break; + case nd_cdouble: + arr.type_size = sizeof(double complex); + break; + } + arr.is_view = is_view; + arr.length = 1; + arr.shape = malloc(arr.nd * sizeof(int64_t)); + for (int32_t i = 0; i < arr.nd; i++) + { + arr.length *= shape[i]; + arr.shape[i] = shape[i]; + } + arr.buffer_size = arr.length * arr.type_size; + arr.strides = malloc(nd * sizeof(int64_t)); + if (arr.order == order_c) + { + for (int32_t i = 0; i < arr.nd; i++) + { + arr.strides[i] = 1; + for (int32_t j = i + 1; j < arr.nd; j++) + arr.strides[i] *= arr.shape[j]; + } + } + else if (arr.order == order_f) + { + for (int32_t i = 0; i < arr.nd; i++) + { + arr.strides[i] = 1; + for (int32_t j = 0; j < i; j++) + arr.strides[i] *= arr.shape[j]; + } + } + if (!is_view) + arr.raw_data = malloc(arr.buffer_size); + return (arr); +} + +void stack_array_init(t_ndarray *arr) +{ + switch (arr->type) + { + case nd_int8: + arr->type_size = sizeof(int8_t); + break; + case nd_int16: + arr->type_size = sizeof(int16_t); + break; + case nd_int32: + arr->type_size = sizeof(int32_t); + break; + case nd_int64: + arr->type_size = sizeof(int64_t); + break; + case nd_float: + arr->type_size = sizeof(float); + break; + case nd_double: + arr->type_size = sizeof(double); + break; + case nd_bool: + arr->type_size = sizeof(bool); + break; + case nd_cfloat: + arr->type_size = sizeof(float complex); + break; + case nd_cdouble: + arr->type_size = sizeof(double complex); + break; + } + arr->length = 1; + for (int32_t i = 0; i < arr->nd; i++) + arr->length *= arr->shape[i]; + arr->buffer_size = arr->length * arr->type_size; + for (int32_t i = 0; i < arr->nd; i++) + { + arr->strides[i] = 1; + for (int32_t j = i + 1; j < arr->nd; j++) + arr->strides[i] *= arr->shape[j]; + } +} + +void _array_fill_int8(int8_t c, t_ndarray arr) +{ + if (c == 0) + memset(arr.raw_data, 0, arr.buffer_size); + else + for (int32_t i = 0; i < arr.length; i++) + arr.nd_int8[i] = c; +} + +void _array_fill_int16(int16_t c, t_ndarray arr) +{ + if (c == 0) + memset(arr.raw_data, 0, arr.buffer_size); + else + for (int32_t i = 0; i < arr.length; i++) + arr.nd_int16[i] = c; +} + +void _array_fill_int32(int32_t c, t_ndarray arr) +{ + if (c == 0) + memset(arr.raw_data, 0, arr.buffer_size); + else + for (int32_t i = 0; i < arr.length; i++) + arr.nd_int32[i] = c; +} + +void _array_fill_int64(int64_t c, t_ndarray arr) +{ + if (c == 0) + memset(arr.raw_data, 0, arr.buffer_size); + else + for (int32_t i = 0; i < arr.length; i++) + arr.nd_int64[i] = c; +} + +void _array_fill_bool(bool c, t_ndarray arr) +{ + if (c == 0) + memset(arr.raw_data, 0, arr.buffer_size); + else + for (int32_t i = 0; i < arr.length; i++) + arr.nd_bool[i] = c; +} + +void _array_fill_float(float c, t_ndarray arr) +{ + if (c == 0) + memset(arr.raw_data, 0, arr.buffer_size); + else + for (int32_t i = 0; i < arr.length; i++) + arr.nd_float[i] = c; +} + +void _array_fill_double(double c, t_ndarray arr) +{ + if (c == 0) + memset(arr.raw_data, 0, arr.buffer_size); + else + for (int32_t i = 0; i < arr.length; i++) + arr.nd_double[i] = c; +} + +void _array_fill_cfloat(float complex c, t_ndarray arr) +{ + if (c == 0) + memset(arr.raw_data, 0, arr.buffer_size); + else + for (int32_t i = 0; i < arr.length; i++) + arr.nd_cfloat[i] = c; +} + + +void _array_fill_cdouble(double complex c, t_ndarray arr) +{ + if (c == 0) + memset(arr.raw_data, 0, arr.buffer_size); + else + for (int32_t i = 0; i < arr.length; i++) + arr.nd_cdouble[i] = c; +} + +/* +** deallocation +*/ + +int32_t free_array(t_ndarray* arr) +{ + if (arr->shape == NULL) + return (0); + free(arr->raw_data); + arr->raw_data = NULL; + free(arr->shape); + arr->shape = NULL; + free(arr->strides); + arr->strides = NULL; + return (1); +} + + +int32_t free_pointer(t_ndarray* arr) +{ + if (arr->is_view == false || arr->shape == NULL) + return (0); + free(arr->shape); + arr->shape = NULL; + free(arr->strides); + arr->strides = NULL; + return (1); +} + +/* +** slices +*/ + +t_slice new_slice(int32_t start, int32_t end, int32_t step, t_slice_type type) +{ + t_slice slice; + + slice.start = start; + slice.end = end; + slice.step = step; + slice.type = type; + return (slice); +} + +t_ndarray array_slicing(t_ndarray arr, int n, ...) +{ + t_ndarray view; + va_list va; + t_slice slice; + int32_t start = 0; + int32_t j = 0; + t_order order = arr.order; + + view.nd = n; + view.type = arr.type; + view.type_size = arr.type_size; + view.shape = malloc(sizeof(int64_t) * view.nd); + view.strides = malloc(sizeof(int64_t) * view.nd); + view.order = order; + view.is_view = true; + + va_start(va, n); + for (int32_t i = 0; i < arr.nd; i++) + { + slice = va_arg(va, t_slice); + if (slice.type == RANGE) + { + view.shape[j] = (slice.end - slice.start + (slice.step - 1)) / slice.step; + view.strides[j] = arr.strides[i] * slice.step; + j++; + } + start += slice.start * arr.strides[i]; + } + va_end(va); + + view.raw_data = (unsigned char*)arr.raw_data + start * arr.type_size; + view.length = 1; + for (int32_t i = 0; i < view.nd; i++) + view.length *= view.shape[i]; + view.buffer_size = view.length * view.type_size; + + return (view); +} + +/* +** assigns +*/ + +void alias_assign(t_ndarray *dest, t_ndarray src) +{ + /* + ** copy src to dest + ** allocate new memory for shape and strides + ** setting is_view to true for the garbage collector to deallocate + */ + + *dest = src; + dest->shape = malloc(sizeof(int64_t) * src.nd); + memcpy(dest->shape, src.shape, sizeof(int64_t) * src.nd); + dest->strides = malloc(sizeof(int64_t) * src.nd); + memcpy(dest->strides, src.strides, sizeof(int64_t) * src.nd); + dest->is_view = true; +} + +void transpose_alias_assign(t_ndarray *dest, t_ndarray src) +{ + /* + ** copy src to dest + ** allocate new memory for shape and strides + ** setting is_view to true for the garbage collector to deallocate + */ + + *dest = src; + dest->shape = malloc(sizeof(int64_t) * src.nd); + dest->strides = malloc(sizeof(int64_t) * src.nd); + for (int32_t i = 0; i < src.nd; i++) + { + dest->shape[i] = src.shape[src.nd-1-i]; + dest->strides[i] = src.strides[src.nd-1-i]; + } + dest->is_view = true; +} + +/* +** indexing +*/ + +int64_t get_index(t_ndarray arr, ...) +{ + va_list va; + int32_t index; + + va_start(va, arr); + index = 0; + for (int32_t i = 0; i < arr.nd; i++) + { + index += va_arg(va, int64_t) * arr.strides[i]; + } + va_end(va); + return (index); +} + +/* +** convert numpy strides to nd_array strides, and return it in a new array, to +** avoid the problem of different implementations of strides in numpy and ndarray. +*/ +int64_t *numpy_to_ndarray_strides(int64_t *np_strides, int type_size, int32_t nd) +{ + int64_t *ndarray_strides; + + ndarray_strides = (int64_t*)malloc(sizeof(int64_t) * nd); + for (int i = 0; i < nd; i++) + ndarray_strides[i] = np_strides[i] / type_size; + return ndarray_strides; + +} + +/* +** copy numpy shape to nd_array shape, and return it in a new array, to +** avoid the problem of variation of system architecture because numpy shape +** is not saved in fixed length type. +*/ +int64_t *numpy_to_ndarray_shape(int64_t *np_shape, int32_t nd) +{ + int64_t *nd_shape; + + nd_shape = (int64_t*)malloc(sizeof(int64_t) * nd); + for (int i = 0; i < nd; i++) + nd_shape[i] = np_shape[i]; + return nd_shape; +} + +/** +** takes an array containing the shape of an array 'shape', number of a +** certain dimension 'nd', and the number of the array's dimensions +** returns the stride (number of single elements to jump in a dimension +** to get to this dimension's next element) of the 'nd`th dimension +*/ +int64_t get_dimension_stride(int64_t *shape, int32_t nd, int32_t max_nd) +{ + int64_t product = 1; + + for (int i = nd; i < max_nd; ++i) + product *= shape[i]; + return (product); +} + +/** +** arr : Takes an array needed to do the calculations +** flat_c_idx : An element number, representing an element's index if it were +** in a flattened (order_c/row major) array +** nd : representing the number of dimensions +** +** Returns the element's index depending on its required memory layout +** (order_f/column major or order_c/row major) +*/ +int64_t element_index(t_ndarray arr, int64_t flat_c_idx, int32_t nd) +{ + if (arr.order == order_c && !arr.is_view) + return flat_c_idx; + if (nd == 0) + return (0); + if (nd == arr.nd) + return (flat_c_idx % arr.shape[nd - 1]) * arr.strides[nd - 1] + element_index(arr, flat_c_idx, nd - 1); + int64_t true_index = (flat_c_idx / get_dimension_stride(arr.shape, nd, arr.nd)); + if (true_index >= arr.shape[nd - 1]) + true_index = true_index % arr.shape[nd - 1]; + return (true_index * arr.strides[nd - 1] + element_index(arr, flat_c_idx, nd - 1)); +} + +bool is_same_shape(t_ndarray a, t_ndarray b) +{ + if (a.nd != b.nd) + return (false); + for (int i = 0; i < a.nd; ++i) + { + if (a.shape[i] != b.shape[i]) + return (false); + } + return (true); +} + +#define COPY_DATA_FROM_(SRC_TYPE) \ + void copy_data_from_##SRC_TYPE(t_ndarray **ds, t_ndarray src, uint32_t offset, bool elem_wise_cp) \ + { \ + t_ndarray *dest = *ds; \ + switch(dest->type) \ + { \ + case nd_bool: \ + if(elem_wise_cp == false)\ + { \ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_bool[i + offset] = (bool)src.nd_##SRC_TYPE[i]; \ + }\ + else \ + {\ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_bool[element_index(*dest, i, dest->nd) + offset] = (bool)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ + }\ + break; \ + case nd_int8: \ + if(elem_wise_cp == false)\ + { \ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_int8[i + offset] = (int8_t)src.nd_##SRC_TYPE[i]; \ + }\ + else \ + {\ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_int8[element_index(*dest, i, dest->nd) + offset] = (int8_t)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ + }\ + break; \ + case nd_int16: \ + if(elem_wise_cp == false)\ + { \ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_int16[i + offset] = (int16_t)src.nd_##SRC_TYPE[i]; \ + }\ + else \ + {\ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_int16[element_index(*dest, i, dest->nd) + offset] = (int16_t)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ + }\ + break; \ + case nd_int32: \ + if(elem_wise_cp == false)\ + { \ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_int32[i + offset] = (int32_t)src.nd_##SRC_TYPE[i]; \ + }\ + else \ + {\ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_int32[element_index(*dest, i, dest->nd) + offset] = (int32_t)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ + }\ + break; \ + case nd_int64: \ + if(elem_wise_cp == false)\ + { \ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_int64[i + offset] = (int64_t)src.nd_##SRC_TYPE[i]; \ + }\ + else \ + {\ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_int64[element_index(*dest, i, dest->nd) + offset] = (int64_t)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ + }\ + break; \ + case nd_float: \ + if(elem_wise_cp == false)\ + { \ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_float[i + offset] = (float)src.nd_##SRC_TYPE[i]; \ + }\ + else \ + {\ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_float[element_index(*dest, i, dest->nd) + offset] = (float)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ + }\ + break; \ + case nd_double: \ + if(elem_wise_cp == false)\ + { \ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_double[i + offset] = (double)src.nd_##SRC_TYPE[i]; \ + }\ + else \ + {\ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_double[element_index(*dest, i, dest->nd) + offset] = (double)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ + }\ + break; \ + case nd_cfloat: \ + if(elem_wise_cp == false)\ + { \ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_cfloat[i + offset] = (float complex)src.nd_##SRC_TYPE[i]; \ + }\ + else \ + {\ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_cfloat[element_index(*dest, i, dest->nd) + offset] = (float complex)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ + }\ + break; \ + case nd_cdouble: \ + if(elem_wise_cp == false)\ + { \ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_cdouble[i + offset] = (double complex)src.nd_##SRC_TYPE[i]; \ + }\ + else \ + {\ + for(int64_t i = 0; i < src.length; i++) \ + dest->nd_cdouble[element_index(*dest, i, dest->nd) + offset] = (double complex)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ + }\ + break; \ + } \ + } + +COPY_DATA_FROM_(bool) +COPY_DATA_FROM_(int8) +COPY_DATA_FROM_(int16) +COPY_DATA_FROM_(int32) +COPY_DATA_FROM_(int64) +COPY_DATA_FROM_(float) +COPY_DATA_FROM_(double) +COPY_DATA_FROM_(cfloat) +COPY_DATA_FROM_(cdouble) + +void copy_data(t_ndarray **ds, t_ndarray src, uint32_t offset, bool elem_wise_cp) +{ + switch(src.type) + { + case nd_bool: + copy_data_from_bool(ds, src, offset, elem_wise_cp); + break; + + case nd_int8: + copy_data_from_int8(ds, src, offset, elem_wise_cp); + break; + + case nd_int16: + copy_data_from_int16(ds, src, offset, elem_wise_cp); + break; + + case nd_int32: + copy_data_from_int32(ds, src, offset, elem_wise_cp); + break; + + case nd_int64: + copy_data_from_int64(ds, src, offset, elem_wise_cp); + break; + + case nd_float: + copy_data_from_float(ds, src, offset, elem_wise_cp); + break; + + case nd_double: + copy_data_from_double(ds, src, offset, elem_wise_cp); + break; + + case nd_cfloat: + copy_data_from_cfloat(ds, src, offset, elem_wise_cp); + break; + + case nd_cdouble: + copy_data_from_cdouble(ds, src, offset, elem_wise_cp); + break; + } +} + +void array_copy_data(t_ndarray *dest, t_ndarray src, uint32_t offset) +{ + unsigned char *d = (unsigned char*)dest->raw_data; + unsigned char *s = (unsigned char*)src.raw_data; + + if (!src.is_view && dest->order == src.order + && (src.order == order_c + || (src.order == order_f && is_same_shape(*dest, src)))) + { + copy_data(&dest, src, offset, false); + } + else + { + copy_data(&dest, src, offset, true); + } +} + +/* +** sum of ndarray +*/ + +static int64_t get_index_from_array(t_ndarray arr, int64_t *nd_indices) +{ + /* + ** returns the one dimentional index equivalent to + ** the indices in each dimension stored in nd_indices + */ + int64_t idx = 0; + for (int64_t dim = 0; dim no carry +** iteration 1: +** nd_indices = [1, 0] -> no carry +** iteration 2: +** nd_indices = [2, 0] -> nd_indices[0] == shape[0] +** -> carry -> [0, 1] +** iteration 3: +** nd_indices = [1, 1] -> no carry +** iteration 4: +** nd_indices = [2, 1] -> nd_indices[0] == shape[0] +** -> carry -> [0, 2] +** iteration 5: +** nd_indices = [1, 2] -> no carry +*/ +#define NUMPY_SUM_(NAME, TYPE, CTYPE) \ + TYPE numpy_sum_##NAME(t_ndarray arr) \ + { \ + int64_t nd_indices[arr.nd]; \ + memset(nd_indices, 0, sizeof(int64_t) * arr.nd); \ + TYPE output = 0; \ + for (int32_t i = 0; i < arr.length; i++) \ + { \ + output += arr.nd_##CTYPE[get_index_from_array(arr, nd_indices)]; \ + nd_indices[0]++; \ + for (int32_t j = 0; j < arr.nd - 1; j++) \ + if (nd_indices[j] == arr.shape[j]) \ + { \ + nd_indices[j] = 0; \ + nd_indices[j + 1]++; \ + } \ + } \ + return output; \ + } + +NUMPY_SUM_(bool, int64_t, bool) +NUMPY_SUM_(int8, int64_t, int8) +NUMPY_SUM_(int16, int64_t, int16) +NUMPY_SUM_(int32, int64_t, int32) +NUMPY_SUM_(int64, int64_t, int64) +NUMPY_SUM_(float32, float, float) +NUMPY_SUM_(float64, double, double) +NUMPY_SUM_(complex64, float complex, cfloat) +NUMPY_SUM_(complex128, double complex, cdouble) + +#define NUMPY_AMAX_(NAME, TYPE, CTYPE) \ + TYPE numpy_amax_##NAME(t_ndarray arr) \ + { \ + int64_t nd_indices[arr.nd]; \ + memset(nd_indices, 0, sizeof(int64_t) * arr.nd); \ + TYPE output = arr.nd_##CTYPE[get_index_from_array(arr, nd_indices)]; \ + for (int32_t i = 0; i < arr.length; i++) \ + { \ + TYPE current_value = arr.nd_##CTYPE[get_index_from_array(arr, nd_indices)]; \ + if (creal(current_value) > creal(output) || \ + (creal(current_value) == creal(output) && cimag(current_value) > cimag(output))) \ + { \ + output = current_value; \ + } \ + nd_indices[0]++; \ + for (int32_t j = 0; j < arr.nd - 1; j++) \ + if (nd_indices[j] == arr.shape[j]) \ + { \ + nd_indices[j] = 0; \ + nd_indices[j + 1]++; \ + } \ + } \ + return output; \ + } + +NUMPY_AMAX_(bool, int64_t, bool) +NUMPY_AMAX_(int8, int64_t, int8) +NUMPY_AMAX_(int16, int64_t, int16) +NUMPY_AMAX_(int32, int64_t, int32) +NUMPY_AMAX_(int64, int64_t, int64) +NUMPY_AMAX_(float32, float, float) +NUMPY_AMAX_(float64, double, double) +NUMPY_AMAX_(complex64, float complex, cfloat) +NUMPY_AMAX_(complex128, double complex, cdouble) + +#define NUMPY_AMIN_(NAME, TYPE, CTYPE) \ + TYPE numpy_amin_##NAME(t_ndarray arr) \ + { \ + int64_t nd_indices[arr.nd]; \ + memset(nd_indices, 0, sizeof(int64_t) * arr.nd); \ + TYPE output = arr.nd_##CTYPE[get_index_from_array(arr, nd_indices)]; \ + for (int32_t i = 0; i < arr.length; i++) \ + { \ + TYPE current_value = arr.nd_##CTYPE[get_index_from_array(arr, nd_indices)]; \ + if (creal(current_value) < creal(output) || \ + (creal(current_value) == creal(output) && cimag(current_value) < cimag(output))) \ + { \ + output = current_value; \ + } \ + nd_indices[0]++; \ + for (int32_t j = 0; j < arr.nd - 1; j++) \ + if (nd_indices[j] == arr.shape[j]) \ + { \ + nd_indices[j] = 0; \ + nd_indices[j + 1]++; \ + } \ + } \ + return output; \ + } + +NUMPY_AMIN_(bool, int64_t, bool) +NUMPY_AMIN_(int8, int64_t, int8) +NUMPY_AMIN_(int16, int64_t, int16) +NUMPY_AMIN_(int32, int64_t, int32) +NUMPY_AMIN_(int64, int64_t, int64) +NUMPY_AMIN_(float32, float, float) +NUMPY_AMIN_(float64, double, double) +NUMPY_AMIN_(complex64, float complex, cfloat) +NUMPY_AMIN_(complex128, double complex, cdouble) + diff --git a/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.c.lock b/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.c.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.h b/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.h new file mode 100644 index 00000000..11bbfbf4 --- /dev/null +++ b/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.h @@ -0,0 +1,194 @@ +/* -------------------------------------------------------------------------------------- */ +/* This file is part of Pyccel which is released under MIT License. See the LICENSE file */ +/* or go to https://github.com/pyccel/pyccel/blob/devel/LICENSE for full license details. */ +/* -------------------------------------------------------------------------------------- */ + +#ifndef NDARRAYS_H +# define NDARRAYS_H + +# include +# include +# include +# include + +/* mapping the function array_fill to the correct type */ +# define array_fill(c, arr) _Generic((c), int64_t : _array_fill_int64,\ + int32_t : _array_fill_int32,\ + int16_t : _array_fill_int16,\ + int8_t : _array_fill_int8,\ + float : _array_fill_float,\ + double : _array_fill_double,\ + bool : _array_fill_bool,\ + float complex : _array_fill_cfloat,\ + double complex : _array_fill_cdouble)(c, arr) + +typedef enum e_slice_type { ELEMENT, RANGE } t_slice_type; + +typedef struct s_slice +{ + int32_t start; + int32_t end; + int32_t step; + t_slice_type type; +} t_slice; + +#define GET_INDEX_EXP1(t, arr, a) t(arr, 0, a) +#define GET_INDEX_EXP2(t, arr, a, b) GET_INDEX_EXP1(t, arr, a) + t(arr, 1, b) +#define GET_INDEX_EXP3(t, arr, a, b, c) GET_INDEX_EXP2(t, arr, a, b) + t(arr, 2, c) +#define GET_INDEX_EXP4(t, arr, a, b, c, d) GET_INDEX_EXP3(t, arr, a, b, c) + t(arr, 3, d) +#define GET_INDEX_EXP5(t, arr, a, b, c, d, e) GET_INDEX_EXP4(t, arr, a, b, c, d) + t(arr, 4, e) +#define GET_INDEX_EXP6(t, arr, a, b, c, d, e, f) GET_INDEX_EXP5(t, arr, a, b, c, d, e) + t(arr, 5, f) +#define GET_INDEX_EXP7(t, arr, a, b, c, d, e, f, g) GET_INDEX_EXP6(t, arr, a, b, c, d, e, f) + t(arr, 6, g) +#define GET_INDEX_EXP8(t, arr, a, b, c, d, e, f, g, h) GET_INDEX_EXP7(t, arr, a, b, c, d, e, f, g) + t(arr, 7, h) +#define GET_INDEX_EXP9(t, arr, a, b, c, d, e, f, g, h, i) GET_INDEX_EXP8(t, arr, a, b, c, d, e, f, g, h) + t(arr, 8, i) +#define GET_INDEX_EXP10(t, arr, a, b, c, d, e, f, g, h, i, j) GET_INDEX_EXP9(t, arr, a, b, c, d, e, f, g, h, i) + t(arr, 9, j) +#define GET_INDEX_EXP11(t, arr, a, b, c, d, e, f, g, h, i, j, k) GET_INDEX_EXP10(t, arr, a, b, c, d, e, f, g, h, i, j) + t(arr, 10, k) +#define GET_INDEX_EXP12(t, arr, a, b, c, d, e, f, g, h, i, j, k, l) GET_INDEX_EXP11(t, arr, a, b, c, d, e, f, g, h, i, j, k) + t(arr, 11, l) +#define GET_INDEX_EXP13(t, arr, a, b, c, d, e, f, g, h, i, j, k, l, m) GET_INDEX_EXP12(t, arr, a, b, c, d, e, f, g, h, i, j, k, l) + t(arr, 12, m) +#define GET_INDEX_EXP14(t, arr, a, b, c, d, e, f, g, h, i, j, k, l, m, n) GET_INDEX_EXP13(t, arr, a, b, c, d, e, f, g, h, i, j, k, l, m) + t(arr, 13, n) +#define GET_INDEX_EXP15(t, arr, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) GET_INDEX_EXP14(t, arr, a, b, c, d, e, f, g, h, i, j, k, l, m, n) + t(arr, 14, o) + +#define NUM_ARGS_H1(dummy, x15, x14, x13, x12, x11, x10, x9, x8, x7, x6, x5, x4, x3, x2, x1, x0, ...) x0 +#define NUM_ARGS(...) NUM_ARGS_H1(dummy, __VA_ARGS__, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) +#define GET_INDEX_FUNC_H2(t, arr, ndim, ...) GET_INDEX_EXP##ndim(t, arr, __VA_ARGS__) +#define GET_INDEX_FUNC(t, arr, ndim, ...) GET_INDEX_FUNC_H2(t, arr, ndim, __VA_ARGS__) + +#define GET_INDEX(arr, ...) GET_INDEX_FUNC(INDEX, arr, NUM_ARGS(__VA_ARGS__), __VA_ARGS__) +#define INDEX(arr, dim, a) (arr.strides[dim] * (a)) +#define GET_ELEMENT(arr, type, ...) arr.type[GET_INDEX(arr, __VA_ARGS__)] + +/* +** Map e_types enum to numpy NPY_TYPES enum +** ref: numpy_repo: numpy/numpy/core/include/numpy/ndarraytypes.h +*/ +typedef enum e_types +{ + nd_bool = 0, + nd_int8 = 1, + nd_int16 = 3, + nd_int32 = 5, + nd_int64 = 7, + nd_float = 11, + nd_double = 12, + nd_cfloat = 14, + nd_cdouble = 15 +} t_types; + +typedef enum e_order +{ + order_f, + order_c, +} t_order; + +typedef struct s_ndarray +{ + /* raw data buffer*/ + union { + void *raw_data; + int8_t *nd_int8; + int16_t *nd_int16; + int32_t *nd_int32; + int64_t *nd_int64; + float *nd_float; + double *nd_double; + bool *nd_bool; + double complex *nd_cdouble; + float complex *nd_cfloat; + }; + /* number of dimensions */ + int32_t nd; + /* shape 'size of each dimension' */ + int64_t *shape; + /* strides 'number of elements to skip to get the next element' */ + int64_t *strides; + /* type of the array elements */ + t_types type; + /* type size of the array elements */ + int32_t type_size; + /* number of element in the array */ + int32_t length; + /* size of the array */ + int32_t buffer_size; + /* True if the array does not own the data */ + bool is_view; + /* stores the order of the array: order_f or order_c */ + t_order order; +} t_ndarray; + +/* functions prototypes */ + +/* allocations */ +void stack_array_init(t_ndarray *arr); +t_ndarray array_create(int32_t nd, int64_t *shape, + t_types type, bool is_view, t_order order); +void _array_fill_int8(int8_t c, t_ndarray arr); +void _array_fill_int16(int16_t c, t_ndarray arr); +void _array_fill_int32(int32_t c, t_ndarray arr); +void _array_fill_int64(int64_t c, t_ndarray arr); +void _array_fill_float(float c, t_ndarray arr); +void _array_fill_double(double c, t_ndarray arr); +void _array_fill_bool(bool c, t_ndarray arr); +void _array_fill_cfloat(float complex c, t_ndarray arr); +void _array_fill_cdouble(double complex c, t_ndarray arr); + +/* slicing */ + /* creating a Slice object */ +t_slice new_slice(int32_t start, int32_t end, int32_t step, t_slice_type type); + /* creating an array view */ +t_ndarray array_slicing(t_ndarray arr, int n, ...); + +/* assigns */ +void alias_assign(t_ndarray *dest, t_ndarray src); +void transpose_alias_assign(t_ndarray *dest, t_ndarray src); + +/* free */ +int32_t free_array(t_ndarray* dump); +int32_t free_pointer(t_ndarray* dump); + +/* indexing */ +int64_t get_index(t_ndarray arr, ...); + +/* data converting between numpy and ndarray */ +int64_t *numpy_to_ndarray_strides(int64_t *np_strides, int type_size, int nd); +int64_t *numpy_to_ndarray_shape(int64_t *np_shape, int nd); +void print_ndarray_memory(t_ndarray nd); +/* copy data from ndarray */ +void array_copy_data(t_ndarray* dest, t_ndarray src, uint32_t offset); + +/* numpy sum */ + +int64_t numpy_sum_bool(t_ndarray arr); +int64_t numpy_sum_int8(t_ndarray arr); +int64_t numpy_sum_int16(t_ndarray arr); +int64_t numpy_sum_int32(t_ndarray arr); +int64_t numpy_sum_int64(t_ndarray arr); +float numpy_sum_float32(t_ndarray arr); +double numpy_sum_float64(t_ndarray arr); +float complex numpy_sum_complex64(t_ndarray arr); +double complex numpy_sum_complex128(t_ndarray arr); + +/*numpy max/amax */ + +int64_t numpy_amax_bool(t_ndarray arr); +int64_t numpy_amax_int8(t_ndarray arr); +int64_t numpy_amax_int16(t_ndarray arr); +int64_t numpy_amax_int32(t_ndarray arr); +int64_t numpy_amax_int64(t_ndarray arr); +float numpy_amax_float32(t_ndarray arr); +double numpy_amax_float64(t_ndarray arr); +float complex numpy_amax_complex64(t_ndarray arr); +double complex numpy_amax_complex128(t_ndarray arr); + +/* numpy min/amin */ + +int64_t numpy_amin_bool(t_ndarray arr); +int64_t numpy_amin_int8(t_ndarray arr); +int64_t numpy_amin_int16(t_ndarray arr); +int64_t numpy_amin_int32(t_ndarray arr); +int64_t numpy_amin_int64(t_ndarray arr); +float numpy_amin_float32(t_ndarray arr); +double numpy_amin_float64(t_ndarray arr); +float complex numpy_amin_complex64(t_ndarray arr); +double complex numpy_amin_complex128(t_ndarray arr); + +#endif diff --git a/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.o b/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.o new file mode 100644 index 0000000000000000000000000000000000000000..21197f922d406b79d63c2794477a0db7f8ed1d20 GIT binary patch literal 74392 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 literal 0 HcmV?d00001 diff --git a/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.o.lock b/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.o.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/dependencies_e0el77nq_mx2lvwh9fed2.lock b/__gpyccel__/__epyccel__/dependencies_e0el77nq_mx2lvwh9fed2.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/dependencies_e0el77nq_mx2lvwh9fed2.py b/__gpyccel__/__epyccel__/dependencies_e0el77nq_mx2lvwh9fed2.py new file mode 100644 index 00000000..71bf464c --- /dev/null +++ b/__gpyccel__/__epyccel__/dependencies_e0el77nq_mx2lvwh9fed2.py @@ -0,0 +1,170 @@ +def assemble_matrix_e0el77nq(global_test_basis_v1_0_1 : "float64[:,:,:,:]", global_test_basis_v1_0_2 : "float64[:,:,:,:]", global_test_basis_v1_1_1 : "float64[:,:,:,:]", global_test_basis_v1_1_2 : "float64[:,:,:,:]", global_trial_basis_u1_0_1 : "float64[:,:,:,:]", global_trial_basis_u1_0_2 : "float64[:,:,:,:]", global_trial_basis_u1_1_1 : "float64[:,:,:,:]", global_trial_basis_u1_1_2 : "float64[:,:,:,:]", global_span_v1_0_1 : "int64[:]", global_span_v1_0_2 : "int64[:]", global_span_v1_1_1 : "int64[:]", global_span_v1_1_2 : "int64[:]", global_x1 : "float64[:,:]", global_x2 : "float64[:,:]", test_v1_0_p1 : "int64", test_v1_0_p2 : "int64", test_v1_1_p1 : "int64", test_v1_1_p2 : "int64", trial_u1_0_p1 : "int64", trial_u1_0_p2 : "int64", trial_u1_1_p1 : "int64", trial_u1_1_p2 : "int64", n_element_1 : "int64", n_element_2 : "int64", k1 : "int64", k2 : "int64", pad1 : "int64", pad2 : "int64", g_mat_u1_0_v1_0_e0el77nq : "float64[:,:,:,:]", g_mat_u1_1_v1_0_e0el77nq : "float64[:,:,:,:]", g_mat_u1_0_v1_1_e0el77nq : "float64[:,:,:,:]", g_mat_u1_1_v1_1_e0el77nq : "float64[:,:,:,:]"): + + from numpy import array, zeros, zeros_like, floor + from math import cos, sqrt, sin, pi + local_x1 = zeros_like(global_x1[0,:]) + local_x2 = zeros_like(global_x2[0,:]) + + l_mat_u1_0_v1_0_e0el77nq = zeros((3, 4, 5, 7), dtype='float64') + l_mat_u1_0_v1_1_e0el77nq = zeros((4, 3, 7, 7), dtype='float64') + l_mat_u1_1_v1_0_e0el77nq = zeros((3, 4, 7, 7), dtype='float64') + l_mat_u1_1_v1_1_e0el77nq = zeros((4, 3, 7, 5), dtype='float64') + for i_element_1 in range(0, n_element_1, 1): + local_x1[:] = global_x1[i_element_1,:] + span_v1_0_1 = global_span_v1_0_1[i_element_1] + span_v1_1_1 = global_span_v1_1_1[i_element_1] + for i_element_2 in range(0, n_element_2, 1): + local_x2[:] = global_x2[i_element_2,:] + span_v1_0_2 = global_span_v1_0_2[i_element_2] + span_v1_1_2 = global_span_v1_1_2[i_element_2] + l_mat_u1_0_v1_0_e0el77nq[:,:,:,:] = 0.0 + l_mat_u1_1_v1_0_e0el77nq[:,:,:,:] = 0.0 + l_mat_u1_0_v1_1_e0el77nq[:,:,:,:] = 0.0 + l_mat_u1_1_v1_1_e0el77nq[:,:,:,:] = 0.0 + for i_quad_1 in range(0, 4, 1): + x1 = local_x1[i_quad_1] + for i_quad_2 in range(0, 4, 1): + x2 = local_x2[i_quad_2] + for i_basis_1 in range(0, 3, 1): + for i_basis_2 in range(0, 4, 1): + for j_basis_1 in range(0, 3, 1): + v1_0_1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,0,i_quad_1] + v1_0_1_x1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,1,i_quad_1] + u1_0_1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,0,i_quad_1] + u1_0_1_x1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,1,i_quad_1] + for j_basis_2 in range(0, 4, 1): + v1_0_2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,0,i_quad_2] + v1_0_2_x2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,1,i_quad_2] + u1_0_2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,0,i_quad_2] + u1_0_2_x2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,1,i_quad_2] + v1_0 = v1_0_1*v1_0_2 + v1_0_x2 = v1_0_1*v1_0_2_x2 + v1_0_x1 = v1_0_1_x1*v1_0_2 + u1_0 = u1_0_1*u1_0_2 + u1_0_x2 = u1_0_1*u1_0_2_x2 + u1_0_x1 = u1_0_1_x1*u1_0_2 + temp_v1_0_u1_0_0 = 2*pi + temp_v1_0_u1_0_1 = temp_v1_0_u1_0_0*x2 + temp_v1_0_u1_0_2 = temp_v1_0_u1_0_0*x1 + temp_v1_0_u1_0_3 = 0.25*sin(temp_v1_0_u1_0_1)*cos(temp_v1_0_u1_0_2) + temp_v1_0_u1_0_4 = sin(temp_v1_0_u1_0_2) + temp_v1_0_u1_0_5 = cos(temp_v1_0_u1_0_1) + temp_v1_0_u1_0_6 = 0.25*temp_v1_0_u1_0_4*temp_v1_0_u1_0_5 + temp_v1_0_u1_0_7 = temp_v1_0_u1_0_6 + 1.0 + temp_v1_0_u1_0_8 = u1_0*v1_0/(temp_v1_0_u1_0_3 + temp_v1_0_u1_0_6 + 1)**2 + contribution_v1_0_u1_0_e0el77nq = 4.0*(0.015625*temp_v1_0_u1_0_4**2*temp_v1_0_u1_0_5**2*temp_v1_0_u1_0_8 + 0.25*temp_v1_0_u1_0_7**2*temp_v1_0_u1_0_8)*sqrt((temp_v1_0_u1_0_3 + temp_v1_0_u1_0_7)**2) + l_mat_u1_0_v1_0_e0el77nq[i_basis_1,i_basis_2,2 - i_basis_1 + j_basis_1,3 - i_basis_2 + j_basis_2] += contribution_v1_0_u1_0_e0el77nq + + + + + for i_basis_1 in range(0, 3, 1): + for i_basis_2 in range(0, 4, 1): + for j_basis_1 in range(0, 4, 1): + v1_0_1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,0,i_quad_1] + v1_0_1_x1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,1,i_quad_1] + u1_1_1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,0,i_quad_1] + u1_1_1_x1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,1,i_quad_1] + for j_basis_2 in range(0, 3, 1): + v1_0_2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,0,i_quad_2] + v1_0_2_x2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,1,i_quad_2] + u1_1_2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,0,i_quad_2] + u1_1_2_x2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,1,i_quad_2] + v1_0 = v1_0_1*v1_0_2 + v1_0_x2 = v1_0_1*v1_0_2_x2 + v1_0_x1 = v1_0_1_x1*v1_0_2 + u1_1 = u1_1_1*u1_1_2 + u1_1_x2 = u1_1_1*u1_1_2_x2 + u1_1_x1 = u1_1_1_x1*u1_1_2 + temp_v1_0_u1_1_0 = 2*pi + temp_v1_0_u1_1_1 = temp_v1_0_u1_1_0*x1 + temp_v1_0_u1_1_2 = temp_v1_0_u1_1_0*x2 + temp_v1_0_u1_1_3 = sin(temp_v1_0_u1_1_2)*cos(temp_v1_0_u1_1_1) + temp_v1_0_u1_1_4 = sin(temp_v1_0_u1_1_1)*cos(temp_v1_0_u1_1_2) + temp_v1_0_u1_1_5 = 0.25*temp_v1_0_u1_1_4 + temp_v1_0_u1_1_6 = temp_v1_0_u1_1_5 + 1.0 + temp_v1_0_u1_1_7 = 0.5*temp_v1_0_u1_1_3 + temp_v1_0_u1_1_8 = temp_v1_0_u1_1_7 + 2.0 + temp_v1_0_u1_1_9 = u1_1*v1_0/((0.5*temp_v1_0_u1_1_4 + temp_v1_0_u1_1_8)*(1.0*temp_v1_0_u1_1_3 + 1.0*temp_v1_0_u1_1_4 + 4.0)) + contribution_v1_0_u1_1_e0el77nq = 4.0*(-temp_v1_0_u1_1_5*temp_v1_0_u1_1_8*temp_v1_0_u1_1_9 - temp_v1_0_u1_1_6*temp_v1_0_u1_1_7*temp_v1_0_u1_1_9)*sqrt((0.25*temp_v1_0_u1_1_3 + temp_v1_0_u1_1_6)**2) + l_mat_u1_1_v1_0_e0el77nq[i_basis_1,i_basis_2,3 - i_basis_1 + j_basis_1,3 - i_basis_2 + j_basis_2] += contribution_v1_0_u1_1_e0el77nq + + + + + for i_basis_1 in range(0, 4, 1): + for i_basis_2 in range(0, 3, 1): + for j_basis_1 in range(0, 3, 1): + v1_1_1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,0,i_quad_1] + v1_1_1_x1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,1,i_quad_1] + u1_0_1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,0,i_quad_1] + u1_0_1_x1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,1,i_quad_1] + for j_basis_2 in range(0, 4, 1): + v1_1_2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,0,i_quad_2] + v1_1_2_x2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,1,i_quad_2] + u1_0_2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,0,i_quad_2] + u1_0_2_x2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,1,i_quad_2] + v1_1 = v1_1_1*v1_1_2 + v1_1_x2 = v1_1_1*v1_1_2_x2 + v1_1_x1 = v1_1_1_x1*v1_1_2 + u1_0 = u1_0_1*u1_0_2 + u1_0_x2 = u1_0_1*u1_0_2_x2 + u1_0_x1 = u1_0_1_x1*u1_0_2 + temp_v1_1_u1_0_0 = 2*pi + temp_v1_1_u1_0_1 = temp_v1_1_u1_0_0*x1 + temp_v1_1_u1_0_2 = temp_v1_1_u1_0_0*x2 + temp_v1_1_u1_0_3 = sin(temp_v1_1_u1_0_2)*cos(temp_v1_1_u1_0_1) + temp_v1_1_u1_0_4 = sin(temp_v1_1_u1_0_1)*cos(temp_v1_1_u1_0_2) + temp_v1_1_u1_0_5 = 0.25*temp_v1_1_u1_0_4 + temp_v1_1_u1_0_6 = temp_v1_1_u1_0_5 + 1.0 + temp_v1_1_u1_0_7 = 0.5*temp_v1_1_u1_0_3 + temp_v1_1_u1_0_8 = temp_v1_1_u1_0_7 + 2.0 + temp_v1_1_u1_0_9 = u1_0*v1_1/((0.5*temp_v1_1_u1_0_4 + temp_v1_1_u1_0_8)*(1.0*temp_v1_1_u1_0_3 + 1.0*temp_v1_1_u1_0_4 + 4.0)) + contribution_v1_1_u1_0_e0el77nq = 4.0*(-temp_v1_1_u1_0_5*temp_v1_1_u1_0_8*temp_v1_1_u1_0_9 - temp_v1_1_u1_0_6*temp_v1_1_u1_0_7*temp_v1_1_u1_0_9)*sqrt((0.25*temp_v1_1_u1_0_3 + temp_v1_1_u1_0_6)**2) + l_mat_u1_0_v1_1_e0el77nq[i_basis_1,i_basis_2,3 - i_basis_1 + j_basis_1,3 - i_basis_2 + j_basis_2] += contribution_v1_1_u1_0_e0el77nq + + + + + for i_basis_1 in range(0, 4, 1): + for i_basis_2 in range(0, 3, 1): + for j_basis_1 in range(0, 4, 1): + v1_1_1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,0,i_quad_1] + v1_1_1_x1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,1,i_quad_1] + u1_1_1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,0,i_quad_1] + u1_1_1_x1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,1,i_quad_1] + for j_basis_2 in range(0, 3, 1): + v1_1_2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,0,i_quad_2] + v1_1_2_x2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,1,i_quad_2] + u1_1_2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,0,i_quad_2] + u1_1_2_x2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,1,i_quad_2] + v1_1 = v1_1_1*v1_1_2 + v1_1_x2 = v1_1_1*v1_1_2_x2 + v1_1_x1 = v1_1_1_x1*v1_1_2 + u1_1 = u1_1_1*u1_1_2 + u1_1_x2 = u1_1_1*u1_1_2_x2 + u1_1_x1 = u1_1_1_x1*u1_1_2 + temp_v1_1_u1_1_0 = 2*pi + temp_v1_1_u1_1_1 = temp_v1_1_u1_1_0*x1 + temp_v1_1_u1_1_2 = temp_v1_1_u1_1_0*x2 + temp_v1_1_u1_1_3 = 0.25*sin(temp_v1_1_u1_1_1)*cos(temp_v1_1_u1_1_2) + temp_v1_1_u1_1_4 = sin(temp_v1_1_u1_1_2) + temp_v1_1_u1_1_5 = cos(temp_v1_1_u1_1_1) + temp_v1_1_u1_1_6 = 0.25*temp_v1_1_u1_1_4*temp_v1_1_u1_1_5 + temp_v1_1_u1_1_7 = temp_v1_1_u1_1_6 + 1 + temp_v1_1_u1_1_8 = u1_1*v1_1/(temp_v1_1_u1_1_3 + temp_v1_1_u1_1_7)**2 + contribution_v1_1_u1_1_e0el77nq = 4.0*(0.015625*temp_v1_1_u1_1_4**2*temp_v1_1_u1_1_5**2*temp_v1_1_u1_1_8 + 0.25*temp_v1_1_u1_1_7**2*temp_v1_1_u1_1_8)*sqrt((temp_v1_1_u1_1_3 + temp_v1_1_u1_1_6 + 1.0)**2) + l_mat_u1_1_v1_1_e0el77nq[i_basis_1,i_basis_2,3 - i_basis_1 + j_basis_1,2 - i_basis_2 + j_basis_2] += contribution_v1_1_u1_1_e0el77nq + + + + + + + g_mat_u1_0_v1_0_e0el77nq[pad1 + span_v1_0_1 - test_v1_0_p1:1 + pad1 + span_v1_0_1,pad2 + span_v1_0_2 - test_v1_0_p2:1 + pad2 + span_v1_0_2,:,:] += l_mat_u1_0_v1_0_e0el77nq[:,:,:,:] + g_mat_u1_1_v1_0_e0el77nq[pad1 + span_v1_0_1 - test_v1_0_p1:1 + pad1 + span_v1_0_1,pad2 + span_v1_0_2 - test_v1_0_p2:1 + pad2 + span_v1_0_2,:,:] += l_mat_u1_1_v1_0_e0el77nq[:,:,:,:] + g_mat_u1_0_v1_1_e0el77nq[pad1 + span_v1_1_1 - test_v1_1_p1:1 + pad1 + span_v1_1_1,pad2 + span_v1_1_2 - test_v1_1_p2:1 + pad2 + span_v1_1_2,:,:] += l_mat_u1_0_v1_1_e0el77nq[:,:,:,:] + g_mat_u1_1_v1_1_e0el77nq[pad1 + span_v1_1_1 - test_v1_1_p1:1 + pad1 + span_v1_1_1,pad2 + span_v1_1_2 - test_v1_1_p2:1 + pad2 + span_v1_1_2,:,:] += l_mat_u1_1_v1_1_e0el77nq[:,:,:,:] + + + return diff --git a/__gpyccel__/__epyccel__/dependencies_vga8r193_6xftl47r79t3.lock b/__gpyccel__/__epyccel__/dependencies_vga8r193_6xftl47r79t3.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/dependencies_vga8r193_6xftl47r79t3.py b/__gpyccel__/__epyccel__/dependencies_vga8r193_6xftl47r79t3.py new file mode 100644 index 00000000..657eba4b --- /dev/null +++ b/__gpyccel__/__epyccel__/dependencies_vga8r193_6xftl47r79t3.py @@ -0,0 +1,136 @@ +def lo_dot_vga8r193(mat00 : "float64[:,:,:,:]", mat01 : "float64[:,:,:,:]", mat10 : "float64[:,:,:,:]", mat11 : "float64[:,:,:,:]", x0 : "float64[:,:]", x1 : "float64[:,:]", out0 : "float64[:,:]", out1 : "float64[:,:]", s00_1 : "int64", s00_2 : "int64", s01_1 : "int64", s01_2 : "int64", s10_1 : "int64", s10_2 : "int64", s11_1 : "int64", s11_2 : "int64", n00_1 : "int64", n00_2 : "int64", n01_1 : "int64", n01_2 : "int64", n10_1 : "int64", n10_2 : "int64", n11_1 : "int64", n11_2 : "int64", ne00_1 : "int64", ne00_2 : "int64", ne01_1 : "int64", ne01_2 : "int64", ne10_1 : "int64", ne10_2 : "int64", ne11_1 : "int64", ne11_2 : "int64"): + + + for i1 in range(0, n00_1, 1): + for i2 in range(0, n00_2, 1): + v00 = 0.0 + for k1 in range(0, 5, 1): + for k2 in range(0, 7, 1): + v00 += mat00[3 + i1,3 + i2,k1,k2]*x0[1 + i1 + k1,i2 + k2] + + + out0[3 + i1,3 + i2] = v00 + + + for i1 in range(0, ne00_1, 1): + for i2 in range(0, n00_2, 1): + v00 = 0.0 + for k1 in range(0, 4 - i1, 1): + for k2 in range(0, 7, 1): + v00 += x0[1 + i1 + k1 + n00_1,i2 + k2]*mat00[3 + i1 + n00_1,3 + i2,k1,k2] + + + out0[3 + i1 + n00_1,3 + i2] = v00 + + + for i1 in range(0, n00_1 + ne00_1, 1): + for i2 in range(0, ne00_2, 1): + v00 = 0.0 + for k1 in range(0, 5 - max(0, i1 - n00_1 + 1), 1): + for k2 in range(0, 6 - i2, 1): + v00 += x0[1 + i1 + k1,i2 + k2 + n00_2]*mat00[3 + i1,3 + i2 + n00_2,k1,k2] + + + out0[3 + i1,3 + i2 + n00_2] = v00 + + + for i1 in range(0, n11_1, 1): + for i2 in range(0, n11_2, 1): + v11 = 0.0 + for k1 in range(0, 7, 1): + for k2 in range(0, 5, 1): + v11 += mat11[3 + i1,3 + i2,k1,k2]*x1[i1 + k1,1 + i2 + k2] + + + out1[3 + i1,3 + i2] = v11 + + + for i1 in range(0, ne11_1, 1): + for i2 in range(0, n11_2, 1): + v11 = 0.0 + for k1 in range(0, 6 - i1, 1): + for k2 in range(0, 5, 1): + v11 += x1[i1 + k1 + n11_1,1 + i2 + k2]*mat11[3 + i1 + n11_1,3 + i2,k1,k2] + + + out1[3 + i1 + n11_1,3 + i2] = v11 + + + for i1 in range(0, n11_1 + ne11_1, 1): + for i2 in range(0, ne11_2, 1): + v11 = 0.0 + for k1 in range(0, 7 - max(0, i1 - n11_1 + 1), 1): + for k2 in range(0, 4 - i2, 1): + v11 += x1[i1 + k1,1 + i2 + k2 + n11_2]*mat11[3 + i1,3 + i2 + n11_2,k1,k2] + + + out1[3 + i1,3 + i2 + n11_2] = v11 + + + for i1 in range(0, n01_1, 1): + for i2 in range(0, n01_2, 1): + v01 = 0.0 + for k1 in range(0, 7, 1): + for k2 in range(0, 7, 1): + v01 += mat01[3 + i1,3 + i2,k1,k2]*x1[i1 + k1,i2 + k2] + + + out0[3 + i1,3 + i2] += v01 + + + for i1 in range(0, ne01_1, 1): + for i2 in range(0, n01_2, 1): + v01 = 0.0 + for k1 in range(0, 6 - i1, 1): + for k2 in range(0, 7, 1): + v01 += x1[i1 + k1 + n01_1,i2 + k2]*mat01[3 + i1 + n01_1,3 + i2,k1,k2] + + + out0[3 + i1 + n01_1,3 + i2] += v01 + + + for i1 in range(0, n01_1 + ne01_1, 1): + for i2 in range(0, ne01_2, 1): + v01 = 0.0 + for k1 in range(0, 7 - max(0, i1 - n01_1 + 1), 1): + for k2 in range(0, 6 - i2, 1): + v01 += x1[i1 + k1,i2 + k2 + n01_2]*mat01[3 + i1,3 + i2 + n01_2,k1,k2] + + + out0[3 + i1,3 + i2 + n01_2] += v01 + + + for i1 in range(0, n10_1, 1): + for i2 in range(0, n10_2, 1): + v10 = 0.0 + for k1 in range(0, 7, 1): + for k2 in range(0, 7, 1): + v10 += mat10[3 + i1,3 + i2,k1,k2]*x0[i1 + k1,i2 + k2] + + + out1[3 + i1,3 + i2] += v10 + + + for i1 in range(0, ne10_1, 1): + for i2 in range(0, n10_2, 1): + v10 = 0.0 + for k1 in range(0, 6 - i1, 1): + for k2 in range(0, 7, 1): + v10 += x0[i1 + k1 + n10_1,i2 + k2]*mat10[3 + i1 + n10_1,3 + i2,k1,k2] + + + out1[3 + i1 + n10_1,3 + i2] += v10 + + + for i1 in range(0, n10_1 + ne10_1, 1): + for i2 in range(0, ne10_2, 1): + v10 = 0.0 + for k1 in range(0, 7 - max(0, i1 - n10_1 + 1), 1): + for k2 in range(0, 6 - i2, 1): + v10 += x0[i1 + k1,i2 + k2 + n10_2]*mat10[3 + i1,3 + i2 + n10_2,k1,k2] + + + out1[3 + i1,3 + i2 + n10_2] += v10 + + + return diff --git a/__gpyccel__/__epyccel__/dependencies_wti60kr7_6feykyplisif.lock b/__gpyccel__/__epyccel__/dependencies_wti60kr7_6feykyplisif.lock new file mode 100644 index 00000000..e69de29b diff --git a/__gpyccel__/__epyccel__/dependencies_wti60kr7_6feykyplisif.py b/__gpyccel__/__epyccel__/dependencies_wti60kr7_6feykyplisif.py new file mode 100644 index 00000000..1af3e379 --- /dev/null +++ b/__gpyccel__/__epyccel__/dependencies_wti60kr7_6feykyplisif.py @@ -0,0 +1,53 @@ +def assemble_matrix_wti60kr7(global_test_basis_v2_1 : "float64[:,:,:,:]", global_test_basis_v2_2 : "float64[:,:,:,:]", global_trial_basis_u2_1 : "float64[:,:,:,:]", global_trial_basis_u2_2 : "float64[:,:,:,:]", global_span_v2_1 : "int64[:]", global_span_v2_2 : "int64[:]", global_x1 : "float64[:,:]", global_x2 : "float64[:,:]", test_v2_p1 : "int64", test_v2_p2 : "int64", trial_u2_p1 : "int64", trial_u2_p2 : "int64", n_element_1 : "int64", n_element_2 : "int64", k1 : "int64", k2 : "int64", pad1 : "int64", pad2 : "int64", g_mat_u2_v2_wti60kr7 : "float64[:,:,:,:]"): + + from numpy import array, zeros, zeros_like, floor + from math import cos, sqrt, sin, pi + local_x1 = zeros_like(global_x1[0,:]) + local_x2 = zeros_like(global_x2[0,:]) + + l_mat_u2_v2_wti60kr7 = zeros((3, 3, 5, 5), dtype='float64') + for i_element_1 in range(0, n_element_1, 1): + local_x1[:] = global_x1[i_element_1,:] + span_v2_1 = global_span_v2_1[i_element_1] + for i_element_2 in range(0, n_element_2, 1): + local_x2[:] = global_x2[i_element_2,:] + span_v2_2 = global_span_v2_2[i_element_2] + l_mat_u2_v2_wti60kr7[:,:,:,:] = 0.0 + for i_quad_1 in range(0, 4, 1): + x1 = local_x1[i_quad_1] + for i_quad_2 in range(0, 4, 1): + x2 = local_x2[i_quad_2] + for i_basis_1 in range(0, 3, 1): + for i_basis_2 in range(0, 3, 1): + for j_basis_1 in range(0, 3, 1): + v2_1 = global_test_basis_v2_1[i_element_1,i_basis_1,0,i_quad_1] + v2_1_x1 = global_test_basis_v2_1[i_element_1,i_basis_1,1,i_quad_1] + u2_1 = global_trial_basis_u2_1[i_element_1,j_basis_1,0,i_quad_1] + u2_1_x1 = global_trial_basis_u2_1[i_element_1,j_basis_1,1,i_quad_1] + for j_basis_2 in range(0, 3, 1): + v2_2 = global_test_basis_v2_2[i_element_2,i_basis_2,0,i_quad_2] + v2_2_x2 = global_test_basis_v2_2[i_element_2,i_basis_2,1,i_quad_2] + u2_2 = global_trial_basis_u2_2[i_element_2,j_basis_2,0,i_quad_2] + u2_2_x2 = global_trial_basis_u2_2[i_element_2,j_basis_2,1,i_quad_2] + v2 = v2_1*v2_2 + v2_x2 = v2_1*v2_2_x2 + v2_x1 = v2_1_x1*v2_2 + u2 = u2_1*u2_2 + u2_x2 = u2_1*u2_2_x2 + u2_x1 = u2_1_x1*u2_2 + temp_v2_u2_0 = 2*pi + temp_v2_u2_1 = temp_v2_u2_0*x1 + temp_v2_u2_2 = temp_v2_u2_0*x2 + temp_v2_u2_3 = (0.25*sin(temp_v2_u2_1)*cos(temp_v2_u2_2) + 0.25*sin(temp_v2_u2_2)*cos(temp_v2_u2_1) + 1.0)**2 + contribution_v2_u2_wti60kr7 = 0.25*u2*v2/sqrt(temp_v2_u2_3) + l_mat_u2_v2_wti60kr7[i_basis_1,i_basis_2,2 - i_basis_1 + j_basis_1,2 - i_basis_2 + j_basis_2] += contribution_v2_u2_wti60kr7 + + + + + + + g_mat_u2_v2_wti60kr7[pad1 + span_v2_1 - test_v2_p1:1 + pad1 + span_v2_1,pad2 + span_v2_2 - test_v2_p2:1 + pad2 + span_v2_2,:,:] += l_mat_u2_v2_wti60kr7[:,:,:,:] + + + return diff --git a/__psydac__/__init__.py b/__psydac__/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/__psydac__/dependencies_e0el77nq.py b/__psydac__/dependencies_e0el77nq.py new file mode 100644 index 00000000..3d0b057c --- /dev/null +++ b/__psydac__/dependencies_e0el77nq.py @@ -0,0 +1,170 @@ +def assemble_matrix_e0el77nq(global_test_basis_v1_0_1 : "float64[:,:,:,:]", global_test_basis_v1_0_2 : "float64[:,:,:,:]", global_test_basis_v1_1_1 : "float64[:,:,:,:]", global_test_basis_v1_1_2 : "float64[:,:,:,:]", global_trial_basis_u1_0_1 : "float64[:,:,:,:]", global_trial_basis_u1_0_2 : "float64[:,:,:,:]", global_trial_basis_u1_1_1 : "float64[:,:,:,:]", global_trial_basis_u1_1_2 : "float64[:,:,:,:]", global_span_v1_0_1 : "int64[:]", global_span_v1_0_2 : "int64[:]", global_span_v1_1_1 : "int64[:]", global_span_v1_1_2 : "int64[:]", global_x1 : "float64[:,:]", global_x2 : "float64[:,:]", test_v1_0_p1 : "int64", test_v1_0_p2 : "int64", test_v1_1_p1 : "int64", test_v1_1_p2 : "int64", trial_u1_0_p1 : "int64", trial_u1_0_p2 : "int64", trial_u1_1_p1 : "int64", trial_u1_1_p2 : "int64", n_element_1 : "int64", n_element_2 : "int64", k1 : "int64", k2 : "int64", pad1 : "int64", pad2 : "int64", g_mat_u1_0_v1_0_e0el77nq : "float64[:,:,:,:]", g_mat_u1_1_v1_0_e0el77nq : "float64[:,:,:,:]", g_mat_u1_0_v1_1_e0el77nq : "float64[:,:,:,:]", g_mat_u1_1_v1_1_e0el77nq : "float64[:,:,:,:]"): + + from numpy import array, zeros, zeros_like, floor + from math import cos, sqrt, sin, pi + local_x1 = zeros_like(global_x1[0,:]) + local_x2 = zeros_like(global_x2[0,:]) + + l_mat_u1_0_v1_0_e0el77nq = zeros((3, 4, 5, 7), dtype='float64') + l_mat_u1_0_v1_1_e0el77nq = zeros((4, 3, 7, 7), dtype='float64') + l_mat_u1_1_v1_0_e0el77nq = zeros((3, 4, 7, 7), dtype='float64') + l_mat_u1_1_v1_1_e0el77nq = zeros((4, 3, 7, 5), dtype='float64') + for i_element_1 in range(0, n_element_1, 1): + local_x1[:] = global_x1[i_element_1,:] + span_v1_0_1 = global_span_v1_0_1[i_element_1] + span_v1_1_1 = global_span_v1_1_1[i_element_1] + for i_element_2 in range(0, n_element_2, 1): + local_x2[:] = global_x2[i_element_2,:] + span_v1_0_2 = global_span_v1_0_2[i_element_2] + span_v1_1_2 = global_span_v1_1_2[i_element_2] + l_mat_u1_0_v1_0_e0el77nq[:,:,:,:] = 0.0 + l_mat_u1_1_v1_0_e0el77nq[:,:,:,:] = 0.0 + l_mat_u1_0_v1_1_e0el77nq[:,:,:,:] = 0.0 + l_mat_u1_1_v1_1_e0el77nq[:,:,:,:] = 0.0 + for i_quad_1 in range(0, 4, 1): + x1 = local_x1[i_quad_1] + for i_quad_2 in range(0, 4, 1): + x2 = local_x2[i_quad_2] + for i_basis_1 in range(0, 3, 1): + for i_basis_2 in range(0, 4, 1): + for j_basis_1 in range(0, 3, 1): + v1_0_1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,0,i_quad_1] + v1_0_1_x1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,1,i_quad_1] + u1_0_1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,0,i_quad_1] + u1_0_1_x1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,1,i_quad_1] + for j_basis_2 in range(0, 4, 1): + v1_0_2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,0,i_quad_2] + v1_0_2_x2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,1,i_quad_2] + u1_0_2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,0,i_quad_2] + u1_0_2_x2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,1,i_quad_2] + v1_0 = v1_0_1*v1_0_2 + v1_0_x2 = v1_0_1*v1_0_2_x2 + v1_0_x1 = v1_0_1_x1*v1_0_2 + u1_0 = u1_0_1*u1_0_2 + u1_0_x2 = u1_0_1*u1_0_2_x2 + u1_0_x1 = u1_0_1_x1*u1_0_2 + temp_v1_0_u1_0_0 = 2*pi + temp_v1_0_u1_0_1 = temp_v1_0_u1_0_0*x2 + temp_v1_0_u1_0_2 = temp_v1_0_u1_0_0*x1 + temp_v1_0_u1_0_3 = 0.25*sin(temp_v1_0_u1_0_1)*cos(temp_v1_0_u1_0_2) + temp_v1_0_u1_0_4 = sin(temp_v1_0_u1_0_2) + temp_v1_0_u1_0_5 = cos(temp_v1_0_u1_0_1) + temp_v1_0_u1_0_6 = 0.25*temp_v1_0_u1_0_4*temp_v1_0_u1_0_5 + temp_v1_0_u1_0_7 = temp_v1_0_u1_0_6 + 1.0 + temp_v1_0_u1_0_8 = u1_0*v1_0/(temp_v1_0_u1_0_3 + temp_v1_0_u1_0_6 + 1)**2 + contribution_v1_0_u1_0_e0el77nq = 4.0*(0.015625*temp_v1_0_u1_0_4**2*temp_v1_0_u1_0_5**2*temp_v1_0_u1_0_8 + 0.25*temp_v1_0_u1_0_7**2*temp_v1_0_u1_0_8)*sqrt((temp_v1_0_u1_0_3 + temp_v1_0_u1_0_7)**2) + l_mat_u1_0_v1_0_e0el77nq[i_basis_1,i_basis_2,2 - i_basis_1 + j_basis_1,3 - i_basis_2 + j_basis_2] += contribution_v1_0_u1_0_e0el77nq + + + + + for i_basis_1 in range(0, 3, 1): + for i_basis_2 in range(0, 4, 1): + for j_basis_1 in range(0, 4, 1): + v1_0_1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,0,i_quad_1] + v1_0_1_x1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,1,i_quad_1] + u1_1_1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,0,i_quad_1] + u1_1_1_x1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,1,i_quad_1] + for j_basis_2 in range(0, 3, 1): + v1_0_2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,0,i_quad_2] + v1_0_2_x2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,1,i_quad_2] + u1_1_2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,0,i_quad_2] + u1_1_2_x2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,1,i_quad_2] + v1_0 = v1_0_1*v1_0_2 + v1_0_x2 = v1_0_1*v1_0_2_x2 + v1_0_x1 = v1_0_1_x1*v1_0_2 + u1_1 = u1_1_1*u1_1_2 + u1_1_x2 = u1_1_1*u1_1_2_x2 + u1_1_x1 = u1_1_1_x1*u1_1_2 + temp_v1_0_u1_1_0 = 2*pi + temp_v1_0_u1_1_1 = temp_v1_0_u1_1_0*x1 + temp_v1_0_u1_1_2 = temp_v1_0_u1_1_0*x2 + temp_v1_0_u1_1_3 = sin(temp_v1_0_u1_1_2)*cos(temp_v1_0_u1_1_1) + temp_v1_0_u1_1_4 = sin(temp_v1_0_u1_1_1)*cos(temp_v1_0_u1_1_2) + temp_v1_0_u1_1_5 = 0.25*temp_v1_0_u1_1_4 + temp_v1_0_u1_1_6 = temp_v1_0_u1_1_5 + 1.0 + temp_v1_0_u1_1_7 = 0.5*temp_v1_0_u1_1_3 + temp_v1_0_u1_1_8 = temp_v1_0_u1_1_7 + 2.0 + temp_v1_0_u1_1_9 = u1_1*v1_0/((0.5*temp_v1_0_u1_1_4 + temp_v1_0_u1_1_8)*(1.0*temp_v1_0_u1_1_3 + 1.0*temp_v1_0_u1_1_4 + 4.0)) + contribution_v1_0_u1_1_e0el77nq = 4.0*(-temp_v1_0_u1_1_5*temp_v1_0_u1_1_8*temp_v1_0_u1_1_9 - temp_v1_0_u1_1_6*temp_v1_0_u1_1_7*temp_v1_0_u1_1_9)*sqrt((0.25*temp_v1_0_u1_1_3 + temp_v1_0_u1_1_6)**2) + l_mat_u1_1_v1_0_e0el77nq[i_basis_1,i_basis_2,3 - i_basis_1 + j_basis_1,3 - i_basis_2 + j_basis_2] += contribution_v1_0_u1_1_e0el77nq + + + + + for i_basis_1 in range(0, 4, 1): + for i_basis_2 in range(0, 3, 1): + for j_basis_1 in range(0, 3, 1): + v1_1_1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,0,i_quad_1] + v1_1_1_x1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,1,i_quad_1] + u1_0_1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,0,i_quad_1] + u1_0_1_x1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,1,i_quad_1] + for j_basis_2 in range(0, 4, 1): + v1_1_2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,0,i_quad_2] + v1_1_2_x2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,1,i_quad_2] + u1_0_2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,0,i_quad_2] + u1_0_2_x2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,1,i_quad_2] + v1_1 = v1_1_1*v1_1_2 + v1_1_x2 = v1_1_1*v1_1_2_x2 + v1_1_x1 = v1_1_1_x1*v1_1_2 + u1_0 = u1_0_1*u1_0_2 + u1_0_x2 = u1_0_1*u1_0_2_x2 + u1_0_x1 = u1_0_1_x1*u1_0_2 + temp_v1_1_u1_0_0 = 2*pi + temp_v1_1_u1_0_1 = temp_v1_1_u1_0_0*x1 + temp_v1_1_u1_0_2 = temp_v1_1_u1_0_0*x2 + temp_v1_1_u1_0_3 = sin(temp_v1_1_u1_0_2)*cos(temp_v1_1_u1_0_1) + temp_v1_1_u1_0_4 = sin(temp_v1_1_u1_0_1)*cos(temp_v1_1_u1_0_2) + temp_v1_1_u1_0_5 = 0.25*temp_v1_1_u1_0_4 + temp_v1_1_u1_0_6 = temp_v1_1_u1_0_5 + 1.0 + temp_v1_1_u1_0_7 = 0.5*temp_v1_1_u1_0_3 + temp_v1_1_u1_0_8 = temp_v1_1_u1_0_7 + 2.0 + temp_v1_1_u1_0_9 = u1_0*v1_1/((0.5*temp_v1_1_u1_0_4 + temp_v1_1_u1_0_8)*(1.0*temp_v1_1_u1_0_3 + 1.0*temp_v1_1_u1_0_4 + 4.0)) + contribution_v1_1_u1_0_e0el77nq = 4.0*(-temp_v1_1_u1_0_5*temp_v1_1_u1_0_8*temp_v1_1_u1_0_9 - temp_v1_1_u1_0_6*temp_v1_1_u1_0_7*temp_v1_1_u1_0_9)*sqrt((0.25*temp_v1_1_u1_0_3 + temp_v1_1_u1_0_6)**2) + l_mat_u1_0_v1_1_e0el77nq[i_basis_1,i_basis_2,3 - i_basis_1 + j_basis_1,3 - i_basis_2 + j_basis_2] += contribution_v1_1_u1_0_e0el77nq + + + + + for i_basis_1 in range(0, 4, 1): + for i_basis_2 in range(0, 3, 1): + for j_basis_1 in range(0, 4, 1): + v1_1_1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,0,i_quad_1] + v1_1_1_x1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,1,i_quad_1] + u1_1_1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,0,i_quad_1] + u1_1_1_x1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,1,i_quad_1] + for j_basis_2 in range(0, 3, 1): + v1_1_2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,0,i_quad_2] + v1_1_2_x2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,1,i_quad_2] + u1_1_2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,0,i_quad_2] + u1_1_2_x2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,1,i_quad_2] + v1_1 = v1_1_1*v1_1_2 + v1_1_x2 = v1_1_1*v1_1_2_x2 + v1_1_x1 = v1_1_1_x1*v1_1_2 + u1_1 = u1_1_1*u1_1_2 + u1_1_x2 = u1_1_1*u1_1_2_x2 + u1_1_x1 = u1_1_1_x1*u1_1_2 + temp_v1_1_u1_1_0 = 2*pi + temp_v1_1_u1_1_1 = temp_v1_1_u1_1_0*x1 + temp_v1_1_u1_1_2 = temp_v1_1_u1_1_0*x2 + temp_v1_1_u1_1_3 = 0.25*sin(temp_v1_1_u1_1_1)*cos(temp_v1_1_u1_1_2) + temp_v1_1_u1_1_4 = sin(temp_v1_1_u1_1_2) + temp_v1_1_u1_1_5 = cos(temp_v1_1_u1_1_1) + temp_v1_1_u1_1_6 = 0.25*temp_v1_1_u1_1_4*temp_v1_1_u1_1_5 + temp_v1_1_u1_1_7 = temp_v1_1_u1_1_6 + 1 + temp_v1_1_u1_1_8 = u1_1*v1_1/(temp_v1_1_u1_1_3 + temp_v1_1_u1_1_7)**2 + contribution_v1_1_u1_1_e0el77nq = 4.0*(0.015625*temp_v1_1_u1_1_4**2*temp_v1_1_u1_1_5**2*temp_v1_1_u1_1_8 + 0.25*temp_v1_1_u1_1_7**2*temp_v1_1_u1_1_8)*sqrt((temp_v1_1_u1_1_3 + temp_v1_1_u1_1_6 + 1.0)**2) + l_mat_u1_1_v1_1_e0el77nq[i_basis_1,i_basis_2,3 - i_basis_1 + j_basis_1,2 - i_basis_2 + j_basis_2] += contribution_v1_1_u1_1_e0el77nq + + + + + + + g_mat_u1_0_v1_0_e0el77nq[pad1 + span_v1_0_1 - test_v1_0_p1:1 + pad1 + span_v1_0_1,pad2 + span_v1_0_2 - test_v1_0_p2:1 + pad2 + span_v1_0_2,:,:] += l_mat_u1_0_v1_0_e0el77nq[:,:,:,:] + g_mat_u1_1_v1_0_e0el77nq[pad1 + span_v1_0_1 - test_v1_0_p1:1 + pad1 + span_v1_0_1,pad2 + span_v1_0_2 - test_v1_0_p2:1 + pad2 + span_v1_0_2,:,:] += l_mat_u1_1_v1_0_e0el77nq[:,:,:,:] + g_mat_u1_0_v1_1_e0el77nq[pad1 + span_v1_1_1 - test_v1_1_p1:1 + pad1 + span_v1_1_1,pad2 + span_v1_1_2 - test_v1_1_p2:1 + pad2 + span_v1_1_2,:,:] += l_mat_u1_0_v1_1_e0el77nq[:,:,:,:] + g_mat_u1_1_v1_1_e0el77nq[pad1 + span_v1_1_1 - test_v1_1_p1:1 + pad1 + span_v1_1_1,pad2 + span_v1_1_2 - test_v1_1_p2:1 + pad2 + span_v1_1_2,:,:] += l_mat_u1_1_v1_1_e0el77nq[:,:,:,:] + + + return \ No newline at end of file diff --git a/__psydac__/dependencies_vga8r193.py b/__psydac__/dependencies_vga8r193.py new file mode 100644 index 00000000..483a4a17 --- /dev/null +++ b/__psydac__/dependencies_vga8r193.py @@ -0,0 +1,136 @@ +def lo_dot_vga8r193(mat00 : "float64[:,:,:,:]", mat01 : "float64[:,:,:,:]", mat10 : "float64[:,:,:,:]", mat11 : "float64[:,:,:,:]", x0 : "float64[:,:]", x1 : "float64[:,:]", out0 : "float64[:,:]", out1 : "float64[:,:]", s00_1 : "int64", s00_2 : "int64", s01_1 : "int64", s01_2 : "int64", s10_1 : "int64", s10_2 : "int64", s11_1 : "int64", s11_2 : "int64", n00_1 : "int64", n00_2 : "int64", n01_1 : "int64", n01_2 : "int64", n10_1 : "int64", n10_2 : "int64", n11_1 : "int64", n11_2 : "int64", ne00_1 : "int64", ne00_2 : "int64", ne01_1 : "int64", ne01_2 : "int64", ne10_1 : "int64", ne10_2 : "int64", ne11_1 : "int64", ne11_2 : "int64"): + + + for i1 in range(0, n00_1, 1): + for i2 in range(0, n00_2, 1): + v00 = 0.0 + for k1 in range(0, 5, 1): + for k2 in range(0, 7, 1): + v00 += mat00[3 + i1,3 + i2,k1,k2]*x0[1 + i1 + k1,i2 + k2] + + + out0[3 + i1,3 + i2] = v00 + + + for i1 in range(0, ne00_1, 1): + for i2 in range(0, n00_2, 1): + v00 = 0.0 + for k1 in range(0, 4 - i1, 1): + for k2 in range(0, 7, 1): + v00 += x0[1 + i1 + k1 + n00_1,i2 + k2]*mat00[3 + i1 + n00_1,3 + i2,k1,k2] + + + out0[3 + i1 + n00_1,3 + i2] = v00 + + + for i1 in range(0, n00_1 + ne00_1, 1): + for i2 in range(0, ne00_2, 1): + v00 = 0.0 + for k1 in range(0, 5 - max(0, i1 - n00_1 + 1), 1): + for k2 in range(0, 6 - i2, 1): + v00 += x0[1 + i1 + k1,i2 + k2 + n00_2]*mat00[3 + i1,3 + i2 + n00_2,k1,k2] + + + out0[3 + i1,3 + i2 + n00_2] = v00 + + + for i1 in range(0, n11_1, 1): + for i2 in range(0, n11_2, 1): + v11 = 0.0 + for k1 in range(0, 7, 1): + for k2 in range(0, 5, 1): + v11 += mat11[3 + i1,3 + i2,k1,k2]*x1[i1 + k1,1 + i2 + k2] + + + out1[3 + i1,3 + i2] = v11 + + + for i1 in range(0, ne11_1, 1): + for i2 in range(0, n11_2, 1): + v11 = 0.0 + for k1 in range(0, 6 - i1, 1): + for k2 in range(0, 5, 1): + v11 += x1[i1 + k1 + n11_1,1 + i2 + k2]*mat11[3 + i1 + n11_1,3 + i2,k1,k2] + + + out1[3 + i1 + n11_1,3 + i2] = v11 + + + for i1 in range(0, n11_1 + ne11_1, 1): + for i2 in range(0, ne11_2, 1): + v11 = 0.0 + for k1 in range(0, 7 - max(0, i1 - n11_1 + 1), 1): + for k2 in range(0, 4 - i2, 1): + v11 += x1[i1 + k1,1 + i2 + k2 + n11_2]*mat11[3 + i1,3 + i2 + n11_2,k1,k2] + + + out1[3 + i1,3 + i2 + n11_2] = v11 + + + for i1 in range(0, n01_1, 1): + for i2 in range(0, n01_2, 1): + v01 = 0.0 + for k1 in range(0, 7, 1): + for k2 in range(0, 7, 1): + v01 += mat01[3 + i1,3 + i2,k1,k2]*x1[i1 + k1,i2 + k2] + + + out0[3 + i1,3 + i2] += v01 + + + for i1 in range(0, ne01_1, 1): + for i2 in range(0, n01_2, 1): + v01 = 0.0 + for k1 in range(0, 6 - i1, 1): + for k2 in range(0, 7, 1): + v01 += x1[i1 + k1 + n01_1,i2 + k2]*mat01[3 + i1 + n01_1,3 + i2,k1,k2] + + + out0[3 + i1 + n01_1,3 + i2] += v01 + + + for i1 in range(0, n01_1 + ne01_1, 1): + for i2 in range(0, ne01_2, 1): + v01 = 0.0 + for k1 in range(0, 7 - max(0, i1 - n01_1 + 1), 1): + for k2 in range(0, 6 - i2, 1): + v01 += x1[i1 + k1,i2 + k2 + n01_2]*mat01[3 + i1,3 + i2 + n01_2,k1,k2] + + + out0[3 + i1,3 + i2 + n01_2] += v01 + + + for i1 in range(0, n10_1, 1): + for i2 in range(0, n10_2, 1): + v10 = 0.0 + for k1 in range(0, 7, 1): + for k2 in range(0, 7, 1): + v10 += mat10[3 + i1,3 + i2,k1,k2]*x0[i1 + k1,i2 + k2] + + + out1[3 + i1,3 + i2] += v10 + + + for i1 in range(0, ne10_1, 1): + for i2 in range(0, n10_2, 1): + v10 = 0.0 + for k1 in range(0, 6 - i1, 1): + for k2 in range(0, 7, 1): + v10 += x0[i1 + k1 + n10_1,i2 + k2]*mat10[3 + i1 + n10_1,3 + i2,k1,k2] + + + out1[3 + i1 + n10_1,3 + i2] += v10 + + + for i1 in range(0, n10_1 + ne10_1, 1): + for i2 in range(0, ne10_2, 1): + v10 = 0.0 + for k1 in range(0, 7 - max(0, i1 - n10_1 + 1), 1): + for k2 in range(0, 6 - i2, 1): + v10 += x0[i1 + k1,i2 + k2 + n10_2]*mat10[3 + i1,3 + i2 + n10_2,k1,k2] + + + out1[3 + i1,3 + i2 + n10_2] += v10 + + + return \ No newline at end of file diff --git a/__psydac__/dependencies_wti60kr7.py b/__psydac__/dependencies_wti60kr7.py new file mode 100644 index 00000000..6d28262e --- /dev/null +++ b/__psydac__/dependencies_wti60kr7.py @@ -0,0 +1,53 @@ +def assemble_matrix_wti60kr7(global_test_basis_v2_1 : "float64[:,:,:,:]", global_test_basis_v2_2 : "float64[:,:,:,:]", global_trial_basis_u2_1 : "float64[:,:,:,:]", global_trial_basis_u2_2 : "float64[:,:,:,:]", global_span_v2_1 : "int64[:]", global_span_v2_2 : "int64[:]", global_x1 : "float64[:,:]", global_x2 : "float64[:,:]", test_v2_p1 : "int64", test_v2_p2 : "int64", trial_u2_p1 : "int64", trial_u2_p2 : "int64", n_element_1 : "int64", n_element_2 : "int64", k1 : "int64", k2 : "int64", pad1 : "int64", pad2 : "int64", g_mat_u2_v2_wti60kr7 : "float64[:,:,:,:]"): + + from numpy import array, zeros, zeros_like, floor + from math import cos, sqrt, sin, pi + local_x1 = zeros_like(global_x1[0,:]) + local_x2 = zeros_like(global_x2[0,:]) + + l_mat_u2_v2_wti60kr7 = zeros((3, 3, 5, 5), dtype='float64') + for i_element_1 in range(0, n_element_1, 1): + local_x1[:] = global_x1[i_element_1,:] + span_v2_1 = global_span_v2_1[i_element_1] + for i_element_2 in range(0, n_element_2, 1): + local_x2[:] = global_x2[i_element_2,:] + span_v2_2 = global_span_v2_2[i_element_2] + l_mat_u2_v2_wti60kr7[:,:,:,:] = 0.0 + for i_quad_1 in range(0, 4, 1): + x1 = local_x1[i_quad_1] + for i_quad_2 in range(0, 4, 1): + x2 = local_x2[i_quad_2] + for i_basis_1 in range(0, 3, 1): + for i_basis_2 in range(0, 3, 1): + for j_basis_1 in range(0, 3, 1): + v2_1 = global_test_basis_v2_1[i_element_1,i_basis_1,0,i_quad_1] + v2_1_x1 = global_test_basis_v2_1[i_element_1,i_basis_1,1,i_quad_1] + u2_1 = global_trial_basis_u2_1[i_element_1,j_basis_1,0,i_quad_1] + u2_1_x1 = global_trial_basis_u2_1[i_element_1,j_basis_1,1,i_quad_1] + for j_basis_2 in range(0, 3, 1): + v2_2 = global_test_basis_v2_2[i_element_2,i_basis_2,0,i_quad_2] + v2_2_x2 = global_test_basis_v2_2[i_element_2,i_basis_2,1,i_quad_2] + u2_2 = global_trial_basis_u2_2[i_element_2,j_basis_2,0,i_quad_2] + u2_2_x2 = global_trial_basis_u2_2[i_element_2,j_basis_2,1,i_quad_2] + v2 = v2_1*v2_2 + v2_x2 = v2_1*v2_2_x2 + v2_x1 = v2_1_x1*v2_2 + u2 = u2_1*u2_2 + u2_x2 = u2_1*u2_2_x2 + u2_x1 = u2_1_x1*u2_2 + temp_v2_u2_0 = 2*pi + temp_v2_u2_1 = temp_v2_u2_0*x1 + temp_v2_u2_2 = temp_v2_u2_0*x2 + temp_v2_u2_3 = (0.25*sin(temp_v2_u2_1)*cos(temp_v2_u2_2) + 0.25*sin(temp_v2_u2_2)*cos(temp_v2_u2_1) + 1.0)**2 + contribution_v2_u2_wti60kr7 = 0.25*u2*v2/sqrt(temp_v2_u2_3) + l_mat_u2_v2_wti60kr7[i_basis_1,i_basis_2,2 - i_basis_1 + j_basis_1,2 - i_basis_2 + j_basis_2] += contribution_v2_u2_wti60kr7 + + + + + + + g_mat_u2_v2_wti60kr7[pad1 + span_v2_1 - test_v2_p1:1 + pad1 + span_v2_1,pad2 + span_v2_2 - test_v2_p2:1 + pad2 + span_v2_2,:,:] += l_mat_u2_v2_wti60kr7[:,:,:,:] + + + return \ No newline at end of file diff --git a/sympde/topology/base_analytic_mapping.py b/sympde/topology/base_analytic_mapping.py index e0fd38ef..20249064 100644 --- a/sympde/topology/base_analytic_mapping.py +++ b/sympde/topology/base_analytic_mapping.py @@ -43,7 +43,7 @@ import itertools as it from sympy import lambdify -from .abstract_mapping import BaseMapping +from .base_mapping import BaseMapping # TODO fix circular dependency between sympde.topology.domain and sympde.topology.mapping diff --git a/sympde/topology/abstract_mapping.py b/sympde/topology/base_mapping.py similarity index 82% rename from sympde/topology/abstract_mapping.py rename to sympde/topology/base_mapping.py index 9e50f8ca..bdfe2f39 100644 --- a/sympde/topology/abstract_mapping.py +++ b/sympde/topology/base_mapping.py @@ -19,37 +19,42 @@ class BaseMapping(IndexedBase): with l <= p """ - @abstractmethod + def __init__(self, name, ldim, pdim): + self._name = name + self._ldim = ldim + self._pdim = pdim + def __call__(self, *args): """ Evaluate mapping at either a list of nd-arrays or the full domain.""" - - @abstractmethod + pass + def jacobian_eval( self, *args ): """ Compute Jacobian matrix at the list of nd-arrays. """ + pass - @abstractmethod def jacobian_inv_eval( self, *args ): """ Compute inverse Jacobian matrix at the list of nd-arrays. An exception should be raised if the matrix is singular. """ - - @abstractmethod + pass + def metric_eval( self, *args ): """ Compute components of metric tensor at list of nd-arrays. """ - - @abstractmethod + pass + def metric_det_eval( self, *args ): """ Compute determinant of metric tensor at the list of nd-arrays. """ - + pass + @property - @abstractmethod def ldim( self ): """ Number of logical/parametric dimensions in mapping (= number of eta components). """ - + pass + @property - @abstractmethod def pdim( self ): """ Number of physical dimensions in mapping - (= number of x components).""" \ No newline at end of file + (= number of x components).""" + pass \ No newline at end of file diff --git a/sympde/topology/basic.py b/sympde/topology/basic.py index 03e8636e..d6d50fbb 100644 --- a/sympde/topology/basic.py +++ b/sympde/topology/basic.py @@ -86,6 +86,11 @@ def target(self): def mapping(self): return self._mapping + @mapping.setter + def mapping(self, value): + self._mapping = value + + @property def logical_domain(self): return self._logical_domain diff --git a/sympde/topology/domain.py b/sympde/topology/domain.py index 1ab3ff12..192b0288 100644 --- a/sympde/topology/domain.py +++ b/sympde/topology/domain.py @@ -23,10 +23,10 @@ from .basic import BasicDomain, InteriorDomain, Boundary, Union, Connectivity from .basic import Interval, Interface, CornerBoundary, CornerInterface from .basic import ProductDomain -from sympde.topology.abstract_mapping import BaseMapping +from sympde.topology.base_mapping import BaseMapping # TODO fix circular dependency between domain and mapping '''if TYPE_CHECKING: - from sympde.topology.abstract_mapping import BaseMapping + from sympde.topology.base_mapping import BaseMapping # TODO add pdim''' iterable_types = (tuple, list, Tuple, Union) @@ -180,6 +180,13 @@ def mapping(self) -> Optional[BaseMapping]: """The mapping that maps the logical domain to the physical domain""" return self.args[3] + @mapping.setter + def mapping(self, value: BaseMapping) -> None: + if len(self.args) > 3: + self.args[3] = value + else: + raise TypeError("can not set mapping") + @property def logical_domain(self) -> Domain: """The domain is the image of the logical_domain under the mapping""" @@ -359,7 +366,8 @@ def from_file( cls, filename ): constructors = [globals()[dt['type']] for dt in dtype] interiors = [cs(i['name'], **dt['parameters']) for cs,i,dt in zip(constructors, d_interior, dtype)] - mappings = [BaseAnalyticMapping(I['mapping'], dim=dim) if I.get('mapping', "None") != "None" else None for I in d_interior] + mappings = [BaseMapping(I['mapping'], dim=dim) if I.get('mapping', "None") != "None" else None for I in d_interior] + print("mappings:",mappings) domains = [mapping(i) if mapping else i for i,mapping in zip(interiors, mappings)] patch_index = {I.name:ind for ind,I in enumerate(interiors)} From 053a21f9472c8524a1db1a4ff3ce66330c71a423 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Sat, 13 Jul 2024 07:15:03 +0200 Subject: [PATCH 09/39] continuing mapping undefined domain --- sympde/topology/base_mapping.py | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index bdfe2f39..10eaad73 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -19,10 +19,32 @@ class BaseMapping(IndexedBase): with l <= p """ - def __init__(self, name, ldim, pdim): - self._name = name - self._ldim = ldim - self._pdim = pdim + def __new__(self, name, **kwargs): + ldim = kwargs.pop('ldim', cls._ldim) + pdim = kwargs.pop('pdim', cls._pdim) + + dims = [dim, ldim, pdim] + + for i,d in enumerate(dims): + if isinstance(d, (tuple, list, Tuple, Matrix, ImmutableDenseMatrix)): + if not len(d) == 1: + raise ValueError('> Expecting a tuple, list, Tuple of length 1') + dims[i] = d[0] + + dim, ldim, pdim = dims + + if dim is None: + assert ldim is not None + assert pdim is not None + assert pdim >= ldim + else: + ldim = dim + pdim = dim + + self._name = name + self._ldim = ldim + self._pdim = pdim + def __call__(self, *args): """ Evaluate mapping at either a list of nd-arrays or the full domain.""" From 718c25192863ccff40b6f84a5c9b829dbecd1914 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Sat, 13 Jul 2024 07:17:37 +0200 Subject: [PATCH 10/39] '' --- sympde/topology/base_mapping.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index 10eaad73..33b4e605 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -19,7 +19,12 @@ class BaseMapping(IndexedBase): with l <= p """ - def __new__(self, name, **kwargs): + + _ldim = None + _pdim = None + + + def __new__(cls, name, dim=None, **kwargs): ldim = kwargs.pop('ldim', cls._ldim) pdim = kwargs.pop('pdim', cls._pdim) @@ -41,6 +46,8 @@ def __new__(self, name, **kwargs): ldim = dim pdim = dim + + self._name = name self._ldim = ldim self._pdim = pdim From 60bc10b6548b49dea4a564a60062aaba53d23133 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Sat, 13 Jul 2024 07:20:26 +0200 Subject: [PATCH 11/39] '' --- sympde/topology/base_mapping.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index 33b4e605..32139ec6 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -1,5 +1,5 @@ from abc import ABC, ABCMeta, abstractmethod -from sympy import IndexedBase +from sympy import IndexedBase, Matrix, ImmutableDenseMatrix __all__ = ( 'MappingMeta', @@ -20,8 +20,9 @@ class BaseMapping(IndexedBase): with l <= p """ - _ldim = None - _pdim = None + _name = None + _ldim = None + _pdim = None def __new__(cls, name, dim=None, **kwargs): @@ -46,11 +47,11 @@ def __new__(cls, name, dim=None, **kwargs): ldim = dim pdim = dim + obj = IndexedBase.__new__(cls, name, shape=pdim) - - self._name = name - self._ldim = ldim - self._pdim = pdim + obj._name = name + obj._ldim = ldim + obj._pdim = pdim def __call__(self, *args): From ea383d34064d952fc6de07ec1cc6695eb045ebdc Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Sat, 13 Jul 2024 07:22:38 +0200 Subject: [PATCH 12/39] '' --- sympde/topology/base_mapping.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index 32139ec6..95b253f8 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -1,5 +1,6 @@ from abc import ABC, ABCMeta, abstractmethod from sympy import IndexedBase, Matrix, ImmutableDenseMatrix +from sympy.core.containers import Tuple __all__ = ( 'MappingMeta', @@ -52,6 +53,8 @@ def __new__(cls, name, dim=None, **kwargs): obj._name = name obj._ldim = ldim obj._pdim = pdim + + return obj def __call__(self, *args): From 4b23aa6baf0de54c3f7cc78c3d763e9d69737977 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Tue, 23 Jul 2024 16:06:23 +0200 Subject: [PATCH 13/39] problem comes from BaseMapping doesn't have implemented call method, so we're trying to implement it --- sympde/topology/base_analytic_mapping.py | 63 ------------------ sympde/topology/base_mapping.py | 81 +++++++++++++++++++++++- sympde/topology/domain.py | 1 - 3 files changed, 78 insertions(+), 67 deletions(-) diff --git a/sympde/topology/base_analytic_mapping.py b/sympde/topology/base_analytic_mapping.py index 20249064..f16b17f9 100644 --- a/sympde/topology/base_analytic_mapping.py +++ b/sympde/topology/base_analytic_mapping.py @@ -703,70 +703,7 @@ def _sympystr(self, printer): mappings = (sstr(i) for i in self.mappings.values()) return 'MultiPatchMapping({})'.format(', '.join(mappings)) -#============================================================================== -class MappedDomain(BasicDomain): - """.""" - @cacheit - def __new__(cls, mapping, logical_domain): - assert(isinstance(mapping,BaseMapping)) - assert(isinstance(logical_domain, BasicDomain)) - if isinstance(logical_domain, Domain): - kwargs = dict( - dim = logical_domain._dim, - mapping = mapping, - logical_domain = logical_domain) - boundaries = logical_domain.boundary - interiors = logical_domain.interior - - if isinstance(interiors, Union): - kwargs['interiors'] = Union(*[mapping(a) for a in interiors.args]) - else: - kwargs['interiors'] = mapping(interiors) - - if isinstance(boundaries, Union): - kwargs['boundaries'] = [mapping(a) for a in boundaries.args] - elif boundaries: - kwargs['boundaries'] = mapping(boundaries) - - interfaces = logical_domain.connectivity.interfaces - if interfaces: - print("interfaces") - if isinstance(interfaces, Union): - interfaces = interfaces.args - else: - interfaces = [interfaces] - connectivity = {} - for e in interfaces: - connectivity[e.name] = Interface(e.name, mapping(e.minus), mapping(e.plus)) - kwargs['connectivity'] = Connectivity(connectivity) - - name = '{}({})'.format(str(mapping.name), str(logical_domain.name)) - print("return Domain(name,**kwargs)") - return Domain(name, **kwargs) - - elif isinstance(logical_domain, NCubeInterior): - name = logical_domain.name - dim = logical_domain.dim - dtype = logical_domain.dtype - min_coords = logical_domain.min_coords - max_coords = logical_domain.max_coords - name = '{}({})'.format(str(mapping.name), str(name)) - return NCubeInterior(name, dim, dtype, min_coords, max_coords, mapping, logical_domain) - elif isinstance(logical_domain, InteriorDomain): - name = logical_domain.name - dim = logical_domain.dim - dtype = logical_domain.dtype - name = '{}({})'.format(str(mapping.name), str(name)) - return InteriorDomain(name, dim, dtype, mapping, logical_domain) - elif isinstance(logical_domain, Boundary): - name = logical_domain.name - axis = logical_domain.axis - ext = logical_domain.ext - domain = mapping(logical_domain.domain) - return Boundary(name, domain, axis, ext, mapping, logical_domain) - else: - raise NotImplementedError('TODO') #============================================================================== class SymbolicWeightedVolume(Expr): """ diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index 95b253f8..c52edfe6 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -1,6 +1,8 @@ from abc import ABC, ABCMeta, abstractmethod from sympy import IndexedBase, Matrix, ImmutableDenseMatrix from sympy.core.containers import Tuple +from .basic import BasicDomain, InteriorDomain, Boundary, Union, Connectivity, Interface +from .domain import Domain, NCubeInterior __all__ = ( 'MappingMeta', @@ -56,10 +58,17 @@ def __new__(cls, name, dim=None, **kwargs): return obj - + + def __call__(self, *args): """ Evaluate mapping at either a list of nd-arrays or the full domain.""" - pass + if len(args) == 1 and isinstance(args[0], BasicDomain): + domain=args[0] + assert(isinstance(domain, BasicDomain)) + return MappedDomain(self, domain) + else: + pass + def jacobian_eval( self, *args ): """ Compute Jacobian matrix at the list of nd-arrays. """ @@ -90,4 +99,70 @@ def ldim( self ): def pdim( self ): """ Number of physical dimensions in mapping (= number of x components).""" - pass \ No newline at end of file + pass + + +#============================================================================== +class MappedDomain(BasicDomain): + """.""" + + @cacheit + def __new__(cls, mapping, logical_domain): + assert(isinstance(mapping,BaseMapping)) + assert(isinstance(logical_domain, BasicDomain)) + if isinstance(logical_domain, Domain): + kwargs = dict( + dim = logical_domain._dim, + mapping = mapping, + logical_domain = logical_domain) + boundaries = logical_domain.boundary + interiors = logical_domain.interior + + if isinstance(interiors, Union): + kwargs['interiors'] = Union(*[mapping(a) for a in interiors.args]) + else: + kwargs['interiors'] = mapping(interiors) + + if isinstance(boundaries, Union): + kwargs['boundaries'] = [mapping(a) for a in boundaries.args] + elif boundaries: + kwargs['boundaries'] = mapping(boundaries) + + interfaces = logical_domain.connectivity.interfaces + if interfaces: + print("interfaces") + if isinstance(interfaces, Union): + interfaces = interfaces.args + else: + interfaces = [interfaces] + connectivity = {} + for e in interfaces: + connectivity[e.name] = Interface(e.name, mapping(e.minus), mapping(e.plus)) + kwargs['connectivity'] = Connectivity(connectivity) + + name = '{}({})'.format(str(mapping.name), str(logical_domain.name)) + print("return Domain(name,**kwargs)") + return Domain(name, **kwargs) + + elif isinstance(logical_domain, NCubeInterior): + name = logical_domain.name + dim = logical_domain.dim + dtype = logical_domain.dtype + min_coords = logical_domain.min_coords + max_coords = logical_domain.max_coords + name = '{}({})'.format(str(mapping.name), str(name)) + return NCubeInterior(name, dim, dtype, min_coords, max_coords, mapping, logical_domain) + elif isinstance(logical_domain, InteriorDomain): + name = logical_domain.name + dim = logical_domain.dim + dtype = logical_domain.dtype + name = '{}({})'.format(str(mapping.name), str(name)) + return InteriorDomain(name, dim, dtype, mapping, logical_domain) + elif isinstance(logical_domain, Boundary): + name = logical_domain.name + axis = logical_domain.axis + ext = logical_domain.ext + domain = mapping(logical_domain.domain) + return Boundary(name, domain, axis, ext, mapping, logical_domain) + else: + raise NotImplementedError('TODO') \ No newline at end of file diff --git a/sympde/topology/domain.py b/sympde/topology/domain.py index 192b0288..03f16840 100644 --- a/sympde/topology/domain.py +++ b/sympde/topology/domain.py @@ -367,7 +367,6 @@ def from_file( cls, filename ): constructors = [globals()[dt['type']] for dt in dtype] interiors = [cs(i['name'], **dt['parameters']) for cs,i,dt in zip(constructors, d_interior, dtype)] mappings = [BaseMapping(I['mapping'], dim=dim) if I.get('mapping', "None") != "None" else None for I in d_interior] - print("mappings:",mappings) domains = [mapping(i) if mapping else i for i,mapping in zip(interiors, mappings)] patch_index = {I.name:ind for ind,I in enumerate(interiors)} From 0a79a2c8705f6c8a933eadd21926c20daab2ac83 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Tue, 23 Jul 2024 16:11:23 +0200 Subject: [PATCH 14/39] trying to solve circular dependencies --- sympde/topology/domain.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sympde/topology/domain.py b/sympde/topology/domain.py index 03f16840..75eb0e58 100644 --- a/sympde/topology/domain.py +++ b/sympde/topology/domain.py @@ -23,9 +23,8 @@ from .basic import BasicDomain, InteriorDomain, Boundary, Union, Connectivity from .basic import Interval, Interface, CornerBoundary, CornerInterface from .basic import ProductDomain -from sympde.topology.base_mapping import BaseMapping # TODO fix circular dependency between domain and mapping -'''if TYPE_CHECKING: +if TYPE_CHECKING: from sympde.topology.base_mapping import BaseMapping # TODO add pdim''' @@ -344,7 +343,7 @@ def from_file( cls, filename ): if not(ext == '.h5'): raise ValueError('> Only h5 files are supported') # ... - from sympde.topology import BaseAnalyticMapping, MultiPatchMapping + from sympde.topology import BaseMapping h5 = h5py.File( filename, mode='r' ) yml = yaml.load( h5['topology.yml'][()], Loader=yaml.SafeLoader ) From 5bf0c338f2edad331040ea8036eae5a1e5cfaf64 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Tue, 23 Jul 2024 16:13:28 +0200 Subject: [PATCH 15/39] solving circular dependencies v2 --- sympde/topology/base_mapping.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index c52edfe6..5291e064 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -1,8 +1,9 @@ from abc import ABC, ABCMeta, abstractmethod from sympy import IndexedBase, Matrix, ImmutableDenseMatrix from sympy.core.containers import Tuple -from .basic import BasicDomain, InteriorDomain, Boundary, Union, Connectivity, Interface -from .domain import Domain, NCubeInterior +from .basic import BasicDomain, Union, InteriorDomain +from .basic import Boundary, Connectivity, Interface +from .domain import Domain, NCubeInterior __all__ = ( 'MappingMeta', From bdff699603d39daf1f5d92b88340fed49d0b22a7 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Tue, 23 Jul 2024 16:33:27 +0200 Subject: [PATCH 16/39] trying to fix domain undefined mapping --- sympde/topology/__init__.py | 17 +++++++++-------- sympde/topology/base_analytic_mapping.py | 2 +- sympde/topology/base_mapping.py | 1 + 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/sympde/topology/__init__.py b/sympde/topology/__init__.py index fde7fa56..9b7eefce 100644 --- a/sympde/topology/__init__.py +++ b/sympde/topology/__init__.py @@ -1,8 +1,9 @@ -from .basic import * -from .derivatives import * -from .datatype import * -from .domain import * -from .base_analytic_mapping import * -from .analytic_mappings import * -from .measure import * -from .space import * +from .basic import * +from .derivatives import * +from .datatype import * +from .domain import * +from .base_mapping import * +from .base_analytic_mapping import * +from .analytic_mappings import * +from .measure import * +from .space import * diff --git a/sympde/topology/base_analytic_mapping.py b/sympde/topology/base_analytic_mapping.py index f16b17f9..a913ddc1 100644 --- a/sympde/topology/base_analytic_mapping.py +++ b/sympde/topology/base_analytic_mapping.py @@ -43,7 +43,7 @@ import itertools as it from sympy import lambdify -from .base_mapping import BaseMapping +from .base_mapping import BaseMapping, MappedDomain # TODO fix circular dependency between sympde.topology.domain and sympde.topology.mapping diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index 5291e064..d9cef744 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -1,5 +1,6 @@ from abc import ABC, ABCMeta, abstractmethod from sympy import IndexedBase, Matrix, ImmutableDenseMatrix +from sympy import cacheit from sympy.core.containers import Tuple from .basic import BasicDomain, Union, InteriorDomain from .basic import Boundary, Connectivity, Interface From 3f91d94adf5c17e9673997a4bd2630957dc0420d Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Wed, 24 Jul 2024 12:12:24 +0200 Subject: [PATCH 17/39] deleting a print --- sympde/topology/base_mapping.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index d9cef744..224e29f4 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -143,7 +143,6 @@ def __new__(cls, mapping, logical_domain): kwargs['connectivity'] = Connectivity(connectivity) name = '{}({})'.format(str(mapping.name), str(logical_domain.name)) - print("return Domain(name,**kwargs)") return Domain(name, **kwargs) elif isinstance(logical_domain, NCubeInterior): From b98415d97584bc2b54380b6c8cdff87e7c861fea Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Thu, 25 Jul 2024 09:36:52 +0200 Subject: [PATCH 18/39] appropriate method for setting mappings for a Dom ain class --- sympde/topology/domain.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/sympde/topology/domain.py b/sympde/topology/domain.py index 75eb0e58..89f4496c 100644 --- a/sympde/topology/domain.py +++ b/sympde/topology/domain.py @@ -156,6 +156,7 @@ def __new__(cls, name : str, *, obj._dtype = dtype obj._dim = dim obj._logical_domain = logical_domain + obj._mapping = mapping return obj @property @@ -177,14 +178,12 @@ def boundary(self) -> TypeUnion[Union, Boundary]: @property def mapping(self) -> Optional[BaseMapping]: """The mapping that maps the logical domain to the physical domain""" - return self.args[3] - + return self._mapping + @mapping.setter - def mapping(self, value: BaseMapping) -> None: - if len(self.args) > 3: - self.args[3] = value - else: - raise TypeError("can not set mapping") + def mapping(self, value: BaseMapping): + """Set the mapping that maps the logical domain to the physical domain""" + self._mapping = value @property def logical_domain(self) -> Domain: From 318fde3ce1cd24550cd3f5390d68be676077bcfc Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Fri, 26 Jul 2024 11:10:53 +0200 Subject: [PATCH 19/39] changed the structure of the constructors of BaseMapping and BaseAnalyticMapping, now to adjust it to SplineMappings in Psydac --- sympde/expr/evaluation.py | 2 +- sympde/topology/base_analytic_mapping.py | 1289 +--------------------- sympde/topology/base_mapping.py | 1282 ++++++++++++++++++++- sympde/topology/basic.py | 2 +- sympde/topology/derivatives.py | 2 +- sympde/topology/domain.py | 2 +- 6 files changed, 1274 insertions(+), 1305 deletions(-) diff --git a/sympde/expr/evaluation.py b/sympde/expr/evaluation.py index 344f6fe4..24c444bf 100644 --- a/sympde/expr/evaluation.py +++ b/sympde/expr/evaluation.py @@ -31,7 +31,7 @@ from sympde.topology.basic import Boundary, Interface from sympde.topology.basic import InteriorDomain from sympde.topology.domain import NormalVector, TangentVector, NCube, NCubeInterior -from sympde.topology.base_analytic_mapping import JacobianSymbol, InterfaceMapping, MultiPatchMapping, JacobianInverseSymbol, LogicalExpr, PullBack +from sympde.topology import JacobianSymbol, InterfaceMapping, MultiPatchMapping, JacobianInverseSymbol, LogicalExpr, PullBack # TODO fix circular dependency between sympde.expr.evaluation and sympde.topology.mapping diff --git a/sympde/topology/base_analytic_mapping.py b/sympde/topology/base_analytic_mapping.py index a913ddc1..477f2fbb 100644 --- a/sympde/topology/base_analytic_mapping.py +++ b/sympde/topology/base_analytic_mapping.py @@ -1,48 +1,12 @@ # coding: utf-8 -import numpy as np - -from sympy import Indexed, IndexedBase, Idx -from sympy import Matrix, ImmutableDenseMatrix -from sympy import Function, Expr -from sympy import sympify -from sympy import cacheit -from sympy.core import Basic -from sympy.core import Symbol,Integer -from sympy.core import Add, Mul, Pow -from sympy.core.numbers import ImaginaryUnit -from sympy.core.containers import Tuple -from sympy import S -from sympy import sqrt, symbols -from sympy.core.exprtools import factor_terms -from sympy.polys.polytools import parallel_poly_from_expr - -from sympde.core import Constant -from sympde.core.basic import BasicMapping -from sympde.core.basic import CalculusFunction -from sympde.core.basic import _coeffs_registery -from sympde.calculus.core import PlusInterfaceOperator, MinusInterfaceOperator -from sympde.calculus.core import grad, div, curl, laplace #, hessian -from sympde.calculus.core import dot, inner, outer, _diff_ops -from sympde.calculus.core import has, DiffOperator -from sympde.calculus.matrices import MatrixSymbolicExpr, MatrixElement, SymbolicTrace, Inverse -from sympde.calculus.matrices import SymbolicDeterminant, Transpose -from .basic import BasicDomain, Union, InteriorDomain -from .basic import Boundary, Connectivity, Interface -from .domain import Domain, NCubeInterior -from .domain import NormalVector -from .space import ScalarFunction, VectorFunction, IndexedVectorFunction -from .space import Trace -from .datatype import HcurlSpaceType, H1SpaceType, L2SpaceType, HdivSpaceType, UndefinedSpaceType -from .derivatives import dx, dy, dz, DifferentialOperator -from .derivatives import _partial_derivatives -from .derivatives import get_atom_derivatives, get_index_derivatives_atom -from .derivatives import _logical_partial_derivatives -from .derivatives import get_atom_logical_derivatives, get_index_logical_derivatives_atom -from .derivatives import LogicalGrad_1d, LogicalGrad_2d, LogicalGrad_3d +import numpy as np import itertools as it -from sympy import lambdify +from sympy import lambdify +from sympy.core import Symbol + +from .basic import BasicDomain from .base_mapping import BaseMapping, MappedDomain @@ -50,46 +14,11 @@ # TODO fix circular dependency between sympde.expr.evaluation and sympde.topology.mapping __all__ = ( - 'BaseAnalyticMapping', - 'Contravariant', - 'Covariant', - 'InterfaceMapping', - 'InverseMapping', - 'Jacobian', - 'JacobianInverseSymbol', - 'JacobianSymbol', - 'LogicalExpr', - 'MappedDomain', - 'MappingApplication', - 'MultiPatchMapping', - 'PullBack', - 'SymbolicExpr', - 'SymbolicWeightedVolume', - 'get_logical_test_function', 'lambdify_sympde', + 'BaseAnalyticMapping', ) -#============================================================================== -@cacheit -def cancel(f): - try: - f = factor_terms(f, radical=True) - p, q = f.as_numer_denom() - # TODO accelerate parallel_poly_from_expr - (p, q), opt = parallel_poly_from_expr((p,q)) - c, P, Q = p.cancel(q) - return c*(P.as_expr()/Q.as_expr()) - except: - return f -def get_logical_test_function(u): - space = u.space - kind = space.kind - dim = space.ldim - logical_domain = space.domain.logical_domain - l_space = type(space)(space.name, logical_domain, kind=kind) - el = l_space.element(u.name) - return el def lambdify_sympde(variables, expr): @@ -172,132 +101,17 @@ def f_vec_v(*XYZ): #============================================================================== -class BaseAnalyticMapping(BasicMapping,BaseMapping): +class BaseAnalyticMapping(BaseMapping): """ Represents a BaseAnalyticMapping object. Examples """ - _expressions = None # used for analytical mapping - _jac = None - _inv_jac = None - _constants = None - _callable_map = None - _ldim = None - _pdim = None def __new__(cls, name, dim=None, **kwargs): - ldim = kwargs.pop('ldim', cls._ldim) - pdim = kwargs.pop('pdim', cls._pdim) - coordinates = kwargs.pop('coordinates', None) - evaluate = kwargs.pop('evaluate', True) - - dims = [dim, ldim, pdim] - for i,d in enumerate(dims): - if isinstance(d, (tuple, list, Tuple, Matrix, ImmutableDenseMatrix)): - if not len(d) == 1: - raise ValueError('> Expecting a tuple, list, Tuple of length 1') - dims[i] = d[0] - - dim, ldim, pdim = dims - - if dim is None: - assert ldim is not None - assert pdim is not None - assert pdim >= ldim - else: - ldim = dim - pdim = dim - - - obj = IndexedBase.__new__(cls, name, shape=pdim) - - if not evaluate: - return obj - - if coordinates is None: - _coordinates = [Symbol(name) for name in ['x', 'y', 'z'][:pdim]] - else: - if not isinstance(coordinates, (list, tuple, Tuple)): - raise TypeError('> Expecting list, tuple, Tuple') - - for a in coordinates: - if not isinstance(a, (str, Symbol)): - raise TypeError('> Expecting str or Symbol') - - _coordinates = [Symbol(u) for u in coordinates] - - obj._name = name - obj._ldim = ldim - obj._pdim = pdim - obj._coordinates = tuple(_coordinates) - obj._jacobian = kwargs.pop('jacobian', JacobianSymbol(obj)) - obj._is_minus = None - obj._is_plus = None - - lcoords = ['x1', 'x2', 'x3'][:ldim] - lcoords = [Symbol(i) for i in lcoords] - obj._logical_coordinates = Tuple(*lcoords) - # ... - if not( obj._expressions is None ): - coords = ['x', 'y', 'z'][:pdim] - - # ... - args = [] - for i in coords: - x = obj._expressions[i] - x = sympify(x) - args.append(x) - - args = Tuple(*args) - # ... - zero_coords = ['x1', 'x2', 'x3'][ldim:] - - for i in zero_coords: - x = sympify(i) - args = args.subs(x,0) - # ... - - constants = list(set(args.free_symbols) - set(lcoords)) - constants_values = {a.name:Constant(a.name) for a in constants} - # subs constants as Constant objects instead of Symbol - constants_values.update( kwargs ) - d = {a:constants_values[a.name] for a in constants} - args = args.subs(d) - - obj._expressions = args - obj._constants = tuple(a for a in constants if isinstance(constants_values[a.name], Symbol)) - - args = [obj[i] for i in range(pdim)] - exprs = obj._expressions - subs = list(zip(_coordinates, exprs)) - - if obj._jac is None and obj._inv_jac is None: - obj._jac = Jacobian(obj).subs(list(zip(args, exprs))) - obj._inv_jac = obj._jac.inv() if pdim == ldim else None - elif obj._inv_jac is None: - obj._jac = ImmutableDenseMatrix(sympify(obj._jac)).subs(subs) - obj._inv_jac = obj._jac.inv() if pdim == ldim else None - - elif obj._jac is None: - obj._inv_jac = ImmutableDenseMatrix(sympify(obj._inv_jac)).subs(subs) - obj._jac = obj._inv_jac.inv() - else: - obj._jac = ImmutableDenseMatrix(sympify(obj._jac)).subs(subs) - obj._inv_jac = ImmutableDenseMatrix(sympify(obj._inv_jac)).subs(subs) - - else: - obj._jac = Jacobian(obj) - obj._func_eval = None - obj._jac_eval = None - obj._inv_jac_eval = None - obj._metric_eval = None - obj._metric_det_eval = None - - obj._metric = obj._jac.T*obj._jac - obj._metric_det = obj._metric.det() + obj = super().__new__(cls, name, dim, **kwargs) if obj.expressions : obj._func_eval = tuple(lambdify_sympde( obj._logical_coordinates, expr) for expr in obj._expressions) @@ -305,6 +119,8 @@ def __new__(cls, name, dim=None, **kwargs): obj._inv_jac_eval = lambdify_sympde( obj._logical_coordinates, obj._inv_jac) obj._metric_eval = lambdify_sympde( obj._logical_coordinates, obj._metric) obj._metric_det_eval = lambdify_sympde( obj._logical_coordinates, obj._metric_det) + else: + raise TypeError("BaseAnalyticMapping should have an expression") return obj @@ -312,17 +128,6 @@ def __new__(cls, name, dim=None, **kwargs): #-------------------------------------------------------------------------- #Abstract Interface : - @property - def name( self ): - return self._name - - @property - def ldim( self ): - return self._ldim - - @property - def pdim( self ): - return self._pdim def _evaluate_domain( self, domain ): assert(isinstance(domain, BasicDomain)) @@ -413,1078 +218,6 @@ def metric_det_eval( self, *args ): if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): return self._metric_det_evaluate(*args) else: - raise TypeError("Invalid arguments for metric_det_eval") - -#-------------------------------------------------------------------------- - - @property - def coordinates( self ): - if self.pdim == 1: - return self._coordinates[0] - else: - return self._coordinates - - @property - def logical_coordinates( self ): - if self.ldim == 1: - return self._logical_coordinates[0] - else: - return self._logical_coordinates - - @property - def jacobian( self ): - return self._jacobian - - @property - def det_jacobian( self ): - return self.jacobian.det() - - @property - def is_analytical( self ): - return not( self._expressions is None ) - - @property - def expressions( self ): - return self._expressions - - @property - def jacobian_expr( self ): - return self._jac - - @property - def jacobian_inv_expr( self ): - if not self.is_analytical and self._inv_jac is None: - self._inv_jac = self.jacobian_expr.inv() - return self._inv_jac - - @property - def metric_expr( self ): - return self._metric - - @property - def metric_det_expr( self ): - return self._metric_det - - @property - def constants( self ): - return self._constants - - @property - def is_minus( self ): - return self._is_minus - - @property - def is_plus( self ): - return self._is_plus - - def set_plus_minus( self, **kwargs): - minus = kwargs.pop('minus', False) - plus = kwargs.pop('plus', False) - assert plus is not minus - - self._is_plus = plus - self._is_minus = minus - - def copy(self): - obj = BaseAnalyticMapping(self.name, - ldim=self.ldim, - pdim=self.pdim, - evaluate=False) - - obj._name = self.name - obj._ldim = self.ldim - obj._pdim = self.pdim - obj._coordinates = self.coordinates - obj._jacobian = JacobianSymbol(obj) - obj._logical_coordinates = self.logical_coordinates - obj._expressions = self._expressions - obj._constants = self._constants - obj._jac = self._jac - obj._inv_jac = self._inv_jac - obj._metric = self._metric - obj._metric_det = self._metric_det - obj.__callable_map = self._callable_map - obj._is_plus = self._is_plus - obj._is_minus = self._is_minus - return obj - - def _hashable_content(self): - args = (self.name, self.ldim, self.pdim, self._coordinates, self._logical_coordinates, - self._expressions, self._constants, self._is_plus, self._is_minus) - return tuple([a for a in args if a is not None]) - - def _eval_subs(self, old, new): - return self - - def _sympystr(self, printer): - sstr = printer.doprint - return sstr(self.name) + raise TypeError("Invalid arguments for metric_det_eval") -#============================================================================== -class InverseMapping(BaseAnalyticMapping): - def __new__(cls, mapping): - assert isinstance(mapping, BaseAnalyticMapping) - name = mapping.name - ldim = mapping.ldim - pdim = mapping.pdim - coords = mapping.logical_coordinates - jacobian = mapping.jacobian.inv() - return BaseAnalyticMapping.__new__(cls, name, ldim=ldim, pdim=pdim, coordinates=coords, jacobian=jacobian) - -#============================================================================== -class JacobianSymbol(MatrixSymbolicExpr): - _axis = None - def __new__(cls, mapping, axis=None): - assert isinstance(mapping, BaseAnalyticMapping) - if axis is not None: - assert isinstance(axis, (int, Integer)) - obj = MatrixSymbolicExpr.__new__(cls, mapping) - obj._axis = axis - return obj - - @property - def mapping(self): - return self._args[0] - - @property - def axis(self): - return self._axis - - def inv(self): - return JacobianInverseSymbol(self.mapping, self.axis) - - def _hashable_content(self): - if self.axis is not None: - return (type(self).__name__, self.mapping, self.axis) - else: - return (type(self).__name__, self.mapping) - - def __hash__(self): - return hash(self._hashable_content()) - - def _eval_subs(self, old, new): - if isinstance(new, BaseAnalyticMapping): - if self.axis is not None: - obj = JacobianSymbol(new, self.axis) - else: - obj = JacobianSymbol(new) - return obj - return self - def _sympystr(self, printer): - sstr = printer.doprint - if self.axis: - return 'Jacobian({},{})'.format(sstr(self.mapping.name), self.axis) - else: - return 'Jacobian({})'.format(sstr(self.mapping.name)) - -#============================================================================== -class JacobianInverseSymbol(MatrixSymbolicExpr): - _axis = None - is_Matrix = False - def __new__(cls, mapping, axis=None): - assert isinstance(mapping, BaseAnalyticMapping) - if axis is not None: - assert isinstance(axis, int) - obj = MatrixSymbolicExpr.__new__(cls, mapping) - obj._axis = axis - return obj - - @property - def mapping(self): - return self._args[0] - - @property - def axis(self): - return self._axis - - def _hashable_content(self): - if self.axis is not None: - return (type(self).__name__, self.mapping, self.axis) - else: - return (type(self).__name__, self.mapping) - - def __hash__(self): - return hash(self._hashable_content()) - - def _sympystr(self, printer): - sstr = printer.doprint - if self.axis: - return 'Jacobian({},{})**(-1)'.format(sstr(self.mapping.name), self.axis) - else: - return 'Jacobian({})**(-1)'.format(sstr(self.mapping.name)) - -#============================================================================== -class InterfaceMapping(BaseAnalyticMapping): - """ - InterfaceMapping is used to represent a mapping in the interface. - - Attributes - ---------- - minus : BaseAnalyticMapping - the mapping on the negative direction of the interface - plus : BaseAnalyticMapping - the mapping on the positive direction of the interface - """ - - def __new__(cls, minus, plus): - assert isinstance(minus, BaseAnalyticMapping) - assert isinstance(plus, BaseAnalyticMapping) - minus = minus.copy() - plus = plus.copy() - - minus.set_plus_minus(minus=True) - plus.set_plus_minus(plus=True) - - name = '{}|{}'.format(str(minus.name), str(plus.name)) - obj = BaseAnalyticMapping.__new__(cls, name, ldim=minus.ldim, pdim=minus.pdim) - obj._minus = minus - obj._plus = plus - return obj - - @property - def minus(self): - return self._minus - - @property - def plus(self): - return self._plus - - @property - def is_analytical(self): - return self.minus.is_analytical and self.plus.is_analytical - - def _eval_subs(self, old, new): - minus = self.minus.subs(old, new) - plus = self.plus.subs(old, new) - return InterfaceMapping(minus, plus) - - def _eval_simplify(self, **kwargs): - return self - -#============================================================================== -class MultiPatchMapping(BaseAnalyticMapping): - - def __new__(cls, dic): - assert isinstance( dic, dict) - return Basic.__new__(cls, dic) - - @property - def mappings(self): - return self.args[0] - - @property - def is_analytical(self): - return all(a.is_analytical for a in self.mappings.values()) - - @property - def ldim(self): - return list(self.mappings.values())[0].ldim - - @property - def pdim(self): - return list(self.mappings.values())[0].pdim - - @property - def is_analytical(self): - return all(e.is_analytical for e in self.mappings.values()) - - def _eval_subs(self, old, new): - return self - - def _eval_simplify(self, **kwargs): - return self - - def __hash__(self): - return hash((*self.mappings.values(), *self.mappings.keys())) - - def _sympystr(self, printer): - sstr = printer.doprint - mappings = (sstr(i) for i in self.mappings.values()) - return 'MultiPatchMapping({})'.format(', '.join(mappings)) - - -#============================================================================== -class SymbolicWeightedVolume(Expr): - """ - This class represents the symbolic weighted volume of a quadrature rule - """ -#TODO move this somewhere else -#============================================================================== -class MappingApplication(Function): - nargs = None - - def __new__(cls, *args, **options): - - if options.pop('evaluate', True): - r = cls.eval(*args) - else: - r = None - - if r is None: - return Basic.__new__(cls, *args, **options) - else: - return r - -class PullBack(Expr): - is_commutative = False - - def __new__(cls, u, mapping=None): - if not isinstance(u, (VectorFunction, ScalarFunction)): - raise TypeError('{} must be of type ScalarFunction or VectorFunction'.format(str(u))) - - if u.space.domain.mapping is None: - raise ValueError('The pull-back can be performed only to mapped domains') - - space = u.space - kind = space.kind - dim = space.ldim - el = get_logical_test_function(u) - - if space.is_broken: - assert mapping is not None - else: - mapping = space.domain.mapping - - J = mapping.jacobian - if isinstance(kind, (UndefinedSpaceType, H1SpaceType)): - expr = el - - elif isinstance(kind, HcurlSpaceType): - expr = J.inv().T * el - - elif isinstance(kind, HdivSpaceType): - expr = (J/J.det()) * el - - elif isinstance(kind, L2SpaceType): - expr = el/J.det() - -# elif isinstance(kind, UndefinedSpaceType): -# raise ValueError('kind must be specified in order to perform the pull-back transformation') - else: - raise ValueError("Unrecognized kind '{}' of space {}".format(kind, str(u.space))) - - obj = Expr.__new__(cls, u) - obj._expr = expr - obj._kind = kind - obj._test = el - return obj - - @property - def expr(self): - return self._expr - - @property - def kind(self): - return self._kind - - @property - def test(self): - return self._test - -#============================================================================== -class Jacobian(MappingApplication): - r""" - This class calculates the Jacobian of a mapping F - where [J_{F}]_{i,j} = \frac{\partial F_{i}}{\partial x_{j}} - or simply J_{F} = (\nabla F)^T - - """ - - @classmethod - def eval(cls, F): - """ - this class methods computes the jacobian of a mapping - - Parameters: - ---------- - F: BaseAnalyticMapping - mapping object - - Returns: - ---------- - expr : ImmutableDenseMatrix - the jacobian matrix - """ - - if not isinstance(F, BaseAnalyticMapping): - raise TypeError('> Expecting a BaseAnalyticMapping object') - - if F.jacobian_expr is not None: - return F.jacobian_expr - - pdim = F.pdim - ldim = F.ldim - - F = [F[i] for i in range(0, F.pdim)] - F = Tuple(*F) - - if ldim == 1: - expr = LogicalGrad_1d(F) - - elif ldim == 2: - expr = LogicalGrad_2d(F) - - elif ldim == 3: - expr = LogicalGrad_3d(F) - - return expr.T - -#============================================================================== -class Covariant(MappingApplication): - """ - - Examples - - """ - - @classmethod - def eval(cls, F, v): - - """ - This class methods computes the covariant transformation - - Parameters: - ---------- - F: BaseAnalyticMapping - mapping object - - v: - the basis function - - Returns: - ---------- - expr : Tuple - the covariant transformation - """ - - if not isinstance(v, (tuple, list, Tuple, ImmutableDenseMatrix, Matrix)): - raise TypeError('> Expecting a tuple, list, Tuple, Matrix') - - assert F.pdim == F.ldim - - M = Jacobian(F).inv().T - dim = F.pdim - - if dim == 1: - b = M[0,0] * v[0] - return Tuple(b) - else: - n,m = M.shape - w = [] - for i in range(0, n): - w.append(S.Zero) - - for i in range(0, n): - for j in range(0, m): - w[i] += M[i,j] * v[j] - return Tuple(*w) - -#============================================================================== -class Contravariant(MappingApplication): - """ - - Examples - - """ - - @classmethod - def eval(cls, F, v): - """ - This class methods computes the contravariant transformation - - Parameters: - ---------- - F: BaseAnalyticMapping - mapping object - - v: - the basis function - - Returns: - ---------- - expr : Tuple - the contravariant transformation - """ - - if not isinstance(F, BaseAnalyticMapping): - raise TypeError('> Expecting a BaseAnalyticMapping') - - if not isinstance(v, (tuple, list, Tuple, ImmutableDenseMatrix, Matrix)): - raise TypeError('> Expecting a tuple, list, Tuple, Matrix') - - M = Jacobian(F) - M = M/M.det() - v = Matrix(v) - v = M*v - return Tuple(*v) - -#============================================================================== -class LogicalExpr(CalculusFunction): - - def __new__(cls, expr, domain, **options): - # (Try to) sympify args first - - if options.pop('evaluate', True): - r = cls.eval(expr, domain, **options) - else: - r = None - - if r is None: - obj = Basic.__new__(cls, expr, domain) - return obj - else: - return r - - @property - def expr(self): - return self._args[0] - - @property - def domain(self): - return self._args[1] - - def __getitem__(self, indices, **kw_args): - if is_sequence(indices): - # Special case needed because M[*my_tuple] is a syntax error. - return Indexed(self, *indices, **kw_args) - else: - return Indexed(self, indices, **kw_args) - - @classmethod - def eval(cls, expr, domain, **options): - """.""" - - from sympde.expr.evaluation import TerminalExpr, DomainExpression - from sympde.expr.expr import BilinearForm, LinearForm, BasicForm, Norm - from sympde.expr.expr import Integral - - types = (ScalarFunction, VectorFunction, DifferentialOperator, Trace, Integral) - - mapping = domain.mapping - dim = domain.dim - assert mapping - - # TODO this is not the dim of the domain - l_coords = ['x1', 'x2', 'x3'][:dim] - ph_coords = ['x', 'y', 'z'] - - if not has(expr, types): - if has(expr, DiffOperator): - return cls( expr, domain, evaluate=False) - else: - syms = symbols(ph_coords[:dim]) - if isinstance(mapping, InterfaceMapping): - mapping = mapping.minus - # here we assume that the two mapped domains - # are identical in the interface so we choose one of them - Ms = [mapping[i] for i in range(dim)] - expr = expr.subs(list(zip(syms, Ms))) - - if mapping.is_analytical: - expr = expr.subs(list(zip(Ms, mapping.expressions))) - return expr - - if isinstance(expr, Symbol) and expr.name in l_coords: - return expr - - if isinstance(expr, Symbol) and expr.name in ph_coords: - return mapping[ph_coords.index(expr.name)] - - elif isinstance(expr, Add): - args = [cls.eval(a, domain) for a in expr.args] - v = S.Zero - for i in args: - v += i - n,d = v.as_numer_denom() - return n/d - - elif isinstance(expr, Mul): - args = [cls.eval(a, domain) for a in expr.args] - v = S.One - for i in args: - v *= i - return v - - elif isinstance(expr, _logical_partial_derivatives): - if mapping.is_analytical: - Ms = [mapping[i] for i in range(dim)] - expr = expr.subs(list(zip(Ms, mapping.expressions))) - return expr - - elif isinstance(expr, IndexedVectorFunction): - el = cls.eval(expr.base, domain) - el = TerminalExpr(el, domain=domain.logical_domain) - return el[expr.indices[0]] - - elif isinstance(expr, MinusInterfaceOperator): - mapping = mapping.minus - newexpr = PullBack(expr.args[0], mapping) - test = newexpr.test - newexpr = newexpr.expr.subs(test, MinusInterfaceOperator(test)) - return newexpr - - elif isinstance(expr, PlusInterfaceOperator): - mapping = mapping.plus - newexpr = PullBack(expr.args[0], mapping) - test = newexpr.test - newexpr = newexpr.expr.subs(test, PlusInterfaceOperator(test)) - return newexpr - - elif isinstance(expr, (VectorFunction, ScalarFunction)): - return PullBack(expr, mapping).expr - - elif isinstance(expr, Transpose): - arg = cls(expr.arg, domain) - return Transpose(arg) - - elif isinstance(expr, grad): - arg = expr.args[0] - if isinstance(mapping, InterfaceMapping): - if isinstance(arg, MinusInterfaceOperator): - a = arg.args[0] - mapping = mapping.minus - elif isinstance(arg, PlusInterfaceOperator): - a = arg.args[0] - mapping = mapping.plus - else: - raise TypeError(arg) - - arg = type(arg)(cls.eval(a, domain)) - else: - arg = cls.eval(arg, domain) - - return mapping.jacobian.inv().T*grad(arg) - - elif isinstance(expr, curl): - arg = expr.args[0] - if isinstance(mapping, InterfaceMapping): - if isinstance(arg, MinusInterfaceOperator): - arg = arg.args[0] - mapping = mapping.minus - elif isinstance(arg, PlusInterfaceOperator): - arg = arg.args[0] - mapping = mapping.plus - else: - raise TypeError(arg) - - if isinstance(arg, VectorFunction): - arg = PullBack(arg, mapping) - else: - arg = cls.eval(arg, domain) - - if isinstance(arg, PullBack) and isinstance(arg.kind, HcurlSpaceType): - J = mapping.jacobian - arg = arg.test - if isinstance(expr.args[0], (MinusInterfaceOperator, PlusInterfaceOperator)): - arg = type(expr.args[0])(arg) - if expr.is_scalar: - return (1/J.det())*curl(arg) - - return (J/J.det())*curl(arg) - else: - raise NotImplementedError('TODO') - - elif isinstance(expr, div): - arg = expr.args[0] - if isinstance(mapping, InterfaceMapping): - if isinstance(arg, MinusInterfaceOperator): - arg = arg.args[0] - mapping = mapping.minus - elif isinstance(arg, PlusInterfaceOperator): - arg = arg.args[0] - mapping = mapping.plus - else: - raise TypeError(arg) - - if isinstance(arg, (ScalarFunction, VectorFunction)): - arg = PullBack(arg, mapping) - else: - - arg = cls.eval(arg, domain) - - if isinstance(arg, PullBack) and isinstance(arg.kind, HdivSpaceType): - J = mapping.jacobian - arg = arg.test - if isinstance(expr.args[0], (MinusInterfaceOperator, PlusInterfaceOperator)): - arg = type(expr.args[0])(arg) - return (1/J.det())*div(arg) - elif isinstance(arg, PullBack): - return SymbolicTrace(mapping.jacobian.inv().T*grad(arg.test)) - else: - raise NotImplementedError('TODO') - - elif isinstance(expr, laplace): - arg = expr.args[0] - v = cls.eval(grad(arg), domain) - v = mapping.jacobian.inv().T*grad(v) - return SymbolicTrace(v) - -# elif isinstance(expr, hessian): -# arg = expr.args[0] -# if isinstance(mapping, InterfaceMapping): -# if isinstance(arg, MinusInterfaceOperator): -# arg = arg.args[0] -# mapping = mapping.minus -# elif isinstance(arg, PlusInterfaceOperator): -# arg = arg.args[0] -# mapping = mapping.plus -# else: -# raise TypeError(arg) -# v = cls.eval(grad(expr.args[0]), domain) -# v = mapping.jacobian.inv().T*grad(v) -# return v - - elif isinstance(expr, (dot, inner, outer)): - args = [cls.eval(arg, domain) for arg in expr.args] - return type(expr)(*args) - - elif isinstance(expr, _diff_ops): - raise NotImplementedError('TODO') - - # TODO MUST BE MOVED AFTER TREATING THE CASES OF GRAD, CURL, DIV IN FEEC - elif isinstance(expr, (Matrix, ImmutableDenseMatrix)): - n_rows, n_cols = expr.shape - lines = [] - for i_row in range(0, n_rows): - line = [] - for i_col in range(0, n_cols): - line.append(cls.eval(expr[i_row,i_col], domain)) - lines.append(line) - return type(expr)(lines) - - elif isinstance(expr, dx): - if expr.atoms(PlusInterfaceOperator): - mapping = mapping.plus - elif expr.atoms(MinusInterfaceOperator): - mapping = mapping.minus - - arg = expr.args[0] - arg = cls(arg, domain, evaluate=True) - - if isinstance(arg, PullBack): - arg = TerminalExpr(arg, domain=domain.logical_domain) - elif isinstance(arg, MatrixElement): - arg = TerminalExpr(arg, domain=domain.logical_domain) - # ... - if dim == 1: - lgrad_arg = LogicalGrad_1d(arg) - - if not isinstance(lgrad_arg, (list, tuple, Tuple, Matrix)): - lgrad_arg = Tuple(lgrad_arg) - - elif dim == 2: - lgrad_arg = LogicalGrad_2d(arg) - - elif dim == 3: - lgrad_arg = LogicalGrad_3d(arg) - - grad_arg = Covariant(mapping, lgrad_arg) - expr = grad_arg[0] - return expr - - elif isinstance(expr, dy): - if expr.atoms(PlusInterfaceOperator): - mapping = mapping.plus - elif expr.atoms(MinusInterfaceOperator): - mapping = mapping.minus - - arg = expr.args[0] - arg = cls(arg, domain, evaluate=True) - if isinstance(arg, PullBack): - arg = TerminalExpr(arg, domain=domain.logical_domain) - elif isinstance(arg, MatrixElement): - arg = TerminalExpr(arg, domain=domain.logical_domain) - - # ..p - if dim == 1: - lgrad_arg = LogicalGrad_1d(arg) - - elif dim == 2: - lgrad_arg = LogicalGrad_2d(arg) - - elif dim == 3: - lgrad_arg = LogicalGrad_3d(arg) - - grad_arg = Covariant(mapping, lgrad_arg) - - expr = grad_arg[1] - return expr - - elif isinstance(expr, dz): - if expr.atoms(PlusInterfaceOperator): - mapping = mapping.plus - elif expr.atoms(MinusInterfaceOperator): - mapping = mapping.minus - - arg = expr.args[0] - arg = cls(arg, domain, evaluate=True) - if isinstance(arg, PullBack): - arg = TerminalExpr(arg, domain=domain.logical_domain) - elif isinstance(arg, MatrixElement): - arg = TerminalExpr(arg, domain=domain.logical_domain) - # ... - if dim == 1: - lgrad_arg = LogicalGrad_1d(arg) - - elif dim == 2: - lgrad_arg = LogicalGrad_2d(arg) - - elif dim == 3: - lgrad_arg = LogicalGrad_3d(arg) - - grad_arg = Covariant(mapping, lgrad_arg) - - expr = grad_arg[2] - - return expr - - elif isinstance(expr, (Symbol, Indexed)): - return expr - - elif isinstance(expr, NormalVector): - return expr - - elif isinstance(expr, Pow): - b = expr.base - e = expr.exp - expr = Pow(cls(b, domain), cls(e, domain)) - return expr - - elif isinstance(expr, Trace): - e = cls.eval(expr.expr, domain) - bd = expr.boundary.logical_domain - order = expr.order - return Trace(e, bd, order) - - elif isinstance(expr, Integral): - domain = expr.domain - mapping = domain.mapping - - - assert domain is not None - - if expr.is_domain_integral: - J = mapping.jacobian - det = sqrt((J.T*J).det()) - else: - axis = domain.axis - J = JacobianSymbol(mapping, axis=axis) - det = sqrt((J.T*J).det()) - - body = cls.eval(expr.expr, domain)*det - domain = domain.logical_domain - return Integral(body, domain) - - elif isinstance(expr, BilinearForm): - tests = [get_logical_test_function(a) for a in expr.test_functions] - trials = [get_logical_test_function(a) for a in expr.trial_functions] - body = cls.eval(expr.expr, domain) - return BilinearForm((trials, tests), body) - - elif isinstance(expr, LinearForm): - tests = [get_logical_test_function(a) for a in expr.test_functions] - body = cls.eval(expr.expr, domain) - return LinearForm(tests, body) - - elif isinstance(expr, Norm): - kind = expr.kind - exponent = expr.exponent - e = cls.eval(expr.expr, domain) - domain = domain.logical_domain - norm = Norm(e, domain, kind, evaluate=False) - norm._exponent = exponent - return norm - - elif isinstance(expr, DomainExpression): - domain = expr.target - J = domain.mapping.jacobian - newexpr = cls.eval(expr.expr, domain) - newexpr = TerminalExpr(newexpr, domain=domain) - domain = domain.logical_domain - det = TerminalExpr(sqrt((J.T*J).det()), domain=domain) - return DomainExpression(domain, ImmutableDenseMatrix([[newexpr*det]])) - - elif isinstance(expr, Function): - args = [cls.eval(a, domain) for a in expr.args] - return type(expr)(*args) - - return cls(expr, domain, evaluate=False) - -#============================================================================== -class SymbolicExpr(CalculusFunction): - """returns a sympy expression where partial derivatives are converted into - sympy Symbols.""" - - @cacheit - def __new__(cls, *args, **options): - # (Try to) sympify args first - - if options.pop('evaluate', True): - r = cls.eval(*args) - else: - r = None - - if r is None: - return Basic.__new__(cls, *args, **options) - else: - return r - - def __getitem__(self, indices, **kw_args): - if is_sequence(indices): - # Special case needed because M[*my_tuple] is a syntax error. - return Indexed(self, *indices, **kw_args) - else: - return Indexed(self, indices, **kw_args) - - @classmethod - @cacheit - def eval(cls, *_args, **kwargs): - """.""" - - if not _args: - return - - if not len(_args) == 1: - raise ValueError('Expecting one argument') - - expr = _args[0] - code = kwargs.pop('code', None) - - if isinstance(expr, Add): - args = [cls.eval(a, code=code) for a in expr.args] - v = Add(*args) - return v - - elif isinstance(expr, Mul): - args = [cls.eval(a, code=code) for a in expr.args] - v = Mul(*args) - return v - - elif isinstance(expr, Pow): - b = expr.base - e = expr.exp - v = Pow(cls.eval(b, code=code), e) - return v - - elif isinstance(expr, _coeffs_registery): - return expr - - elif isinstance(expr, (list, tuple, Tuple)): - expr = [cls.eval(a, code=code) for a in expr] - return Tuple(*expr) - - elif isinstance(expr, (Matrix, ImmutableDenseMatrix)): - - lines = [] - n_row,n_col = expr.shape - for i_row in range(0,n_row): - line = [] - for i_col in range(0,n_col): - line.append(cls.eval(expr[i_row, i_col], code=code)) - - lines.append(line) - - return type(expr)(lines) - - elif isinstance(expr, (ScalarFunction, VectorFunction)): - if code: - name = '{name}_{code}'.format(name=expr.name, code=code) - else: - name = str(expr.name) - - return Symbol(name) - - elif isinstance(expr, ( PlusInterfaceOperator, MinusInterfaceOperator)): - return cls.eval(expr.args[0], code=code) - - elif isinstance(expr, Indexed): - base = expr.base - if isinstance(base, BaseAnalyticMapping): - if expr.indices[0] == 0: - name = 'x' - elif expr.indices[0] == 1: - name = 'y' - elif expr.indices[0] == 2: - name = 'z' - else: - raise ValueError('Wrong index') - - if base.is_plus: - name = name + '_plus' - else: - name = '{base}_{i}'.format(base=base.name, i=expr.indices[0]) - - if code: - name = '{name}_{code}'.format(name=name, code=code) - - return Symbol(name) - - elif isinstance(expr, _partial_derivatives): - atom = get_atom_derivatives(expr) - indices = get_index_derivatives_atom(expr, atom) - code = None - if indices: - index = indices[0] - code = '' - index =dict(sorted(index.items())) - - for k,n in list(index.items()): - code += k*n - return cls.eval(atom, code=code) - - elif isinstance(expr, _logical_partial_derivatives): - atom = get_atom_logical_derivatives(expr) - indices = get_index_logical_derivatives_atom(expr, atom) - code = None - if indices: - index = indices[0] - code = '' - index = dict(sorted(index.items())) - for k,n in list(index.items()): - code += k*n - return cls.eval(atom, code=code) - - elif isinstance(expr, BaseAnalyticMapping): - return Symbol(expr.name) - - # ... this must be done here, otherwise codegen for FEM will not work - elif isinstance(expr, Symbol): - return expr - - elif isinstance(expr, IndexedBase): - return expr - - elif isinstance(expr, Indexed): - return expr - - elif isinstance(expr, Idx): - return expr - - elif isinstance(expr, Function): - args = [cls.eval(a, code=code) for a in expr.args] - return type(expr)(*args) - - elif isinstance(expr, ImaginaryUnit): - return expr - - - elif isinstance(expr, SymbolicWeightedVolume): - mapping = expr.args[0] - if isinstance(mapping, InterfaceMapping): - mapping = mapping.minus - name = 'wvol_{mapping}'.format(mapping=mapping) - - return Symbol(name) - - elif isinstance(expr, SymbolicDeterminant): - name = 'det_{}'.format(str(expr.args[0])) - return Symbol(name) - - elif isinstance(expr, PullBack): - return cls.eval(expr.expr, code=code) - - # Expression must always be translated to Sympy! - # TODO: check if we should use 'sympy.sympify(expr)' instead - else: - raise NotImplementedError('Cannot translate to Sympy: {}'.format(expr)) diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index 224e29f4..cdf794b7 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -1,19 +1,91 @@ -from abc import ABC, ABCMeta, abstractmethod -from sympy import IndexedBase, Matrix, ImmutableDenseMatrix +# coding: utf-8 + +from abc import ABCMeta + +from sympy import Indexed, IndexedBase, Idx +from sympy import Matrix, ImmutableDenseMatrix +from sympy import Function, Expr +from sympy import sympify from sympy import cacheit +from sympy.core import Basic +from sympy.core import Symbol,Integer +from sympy.core import Add, Mul, Pow +from sympy.core.numbers import ImaginaryUnit from sympy.core.containers import Tuple +from sympy import S +from sympy import sqrt, symbols +from sympy.core.exprtools import factor_terms +from sympy.polys.polytools import parallel_poly_from_expr + +from sympde.core import Constant +from sympde.core.basic import CalculusFunction +from sympde.core.basic import _coeffs_registery +from sympde.calculus.core import PlusInterfaceOperator, MinusInterfaceOperator +from sympde.calculus.core import grad, div, curl, laplace #, hessian +from sympde.calculus.core import dot, inner, outer, _diff_ops +from sympde.calculus.core import has, DiffOperator +from sympde.calculus.matrices import MatrixSymbolicExpr, MatrixElement, SymbolicTrace +from sympde.calculus.matrices import SymbolicDeterminant, Transpose + from .basic import BasicDomain, Union, InteriorDomain from .basic import Boundary, Connectivity, Interface -from .domain import Domain, NCubeInterior +from .domain import Domain, NCubeInterior +from .domain import NormalVector +from .space import ScalarFunction, VectorFunction, IndexedVectorFunction +from .space import Trace +from .datatype import HcurlSpaceType, H1SpaceType, L2SpaceType, HdivSpaceType, UndefinedSpaceType +from .derivatives import dx, dy, dz, DifferentialOperator +from .derivatives import _partial_derivatives +from .derivatives import get_atom_derivatives, get_index_derivatives_atom +from .derivatives import _logical_partial_derivatives +from .derivatives import get_atom_logical_derivatives, get_index_logical_derivatives_atom +from .derivatives import LogicalGrad_1d, LogicalGrad_2d, LogicalGrad_3d __all__ = ( 'MappingMeta', 'BaseMapping', + 'Contravariant', + 'Covariant', + 'InterfaceMapping', + 'InverseMapping', + 'Jacobian', + 'JacobianInverseSymbol', + 'JacobianSymbol', + 'LogicalExpr', + 'MappedDomain', + 'MappingApplication', + 'MultiPatchMapping', + 'PullBack', + 'SymbolicExpr', + 'SymbolicWeightedVolume', + 'get_logical_test_function', ) class MappingMeta(ABCMeta,type(IndexedBase)): pass +#============================================================================== +@cacheit +def cancel(f): + try: + f = factor_terms(f, radical=True) + p, q = f.as_numer_denom() + # TODO accelerate parallel_poly_from_expr + (p, q), opt = parallel_poly_from_expr((p,q)) + c, P, Q = p.cancel(q) + return c*(P.as_expr()/Q.as_expr()) + except: + return f + +def get_logical_test_function(u): + space = u.space + kind = space.kind + dim = space.ldim + logical_domain = space.domain.logical_domain + l_space = type(space)(space.name, logical_domain, kind=kind) + el = l_space.element(u.name) + return el + #============================================================================== class BaseMapping(IndexedBase): """ @@ -25,17 +97,22 @@ class BaseMapping(IndexedBase): with l <= p """ - _name = None - _ldim = None - _pdim = None + _expressions = None # used for analytical mapping + _jac = None + _inv_jac = None + _constants = None + _callable_map = None + _ldim = None + _pdim = None - def __new__(cls, name, dim=None, **kwargs): + ldim = kwargs.pop('ldim', cls._ldim) pdim = kwargs.pop('pdim', cls._pdim) + coordinates = kwargs.pop('coordinates', None) + evaluate = kwargs.pop('evaluate', True) dims = [dim, ldim, pdim] - for i,d in enumerate(dims): if isinstance(d, (tuple, list, Tuple, Matrix, ImmutableDenseMatrix)): if not len(d) == 1: @@ -52,15 +129,218 @@ def __new__(cls, name, dim=None, **kwargs): ldim = dim pdim = dim + obj = IndexedBase.__new__(cls, name, shape=pdim) - + + if not evaluate: + return obj + + if coordinates is None: + _coordinates = [Symbol(name) for name in ['x', 'y', 'z'][:pdim]] + else: + if not isinstance(coordinates, (list, tuple, Tuple)): + raise TypeError('> Expecting list, tuple, Tuple') + + for a in coordinates: + if not isinstance(a, (str, Symbol)): + raise TypeError('> Expecting str or Symbol') + + _coordinates = [Symbol(u) for u in coordinates] + obj._name = name obj._ldim = ldim obj._pdim = pdim + obj._coordinates = tuple(_coordinates) + obj._jacobian = kwargs.pop('jacobian', JacobianSymbol(obj)) + obj._is_minus = None + obj._is_plus = None + + lcoords = ['x1', 'x2', 'x3'][:ldim] + lcoords = [Symbol(i) for i in lcoords] + obj._logical_coordinates = Tuple(*lcoords) + # ... + if not( obj._expressions is None ): + coords = ['x', 'y', 'z'][:pdim] + + # ... + args = [] + for i in coords: + x = obj._expressions[i] + x = sympify(x) + args.append(x) + + args = Tuple(*args) + # ... + zero_coords = ['x1', 'x2', 'x3'][ldim:] + + for i in zero_coords: + x = sympify(i) + args = args.subs(x,0) + # ... + + constants = list(set(args.free_symbols) - set(lcoords)) + constants_values = {a.name:Constant(a.name) for a in constants} + # subs constants as Constant objects instead of Symbol + constants_values.update( kwargs ) + d = {a:constants_values[a.name] for a in constants} + args = args.subs(d) + + obj._expressions = args + obj._constants = tuple(a for a in constants if isinstance(constants_values[a.name], Symbol)) + + args = [obj[i] for i in range(pdim)] + exprs = obj._expressions + subs = list(zip(_coordinates, exprs)) + + if obj._jac is None and obj._inv_jac is None: + obj._jac = Jacobian(obj).subs(list(zip(args, exprs))) + obj._inv_jac = obj._jac.inv() if pdim == ldim else None + elif obj._inv_jac is None: + obj._jac = ImmutableDenseMatrix(sympify(obj._jac)).subs(subs) + obj._inv_jac = obj._jac.inv() if pdim == ldim else None + + elif obj._jac is None: + obj._inv_jac = ImmutableDenseMatrix(sympify(obj._inv_jac)).subs(subs) + obj._jac = obj._inv_jac.inv() + else: + obj._jac = ImmutableDenseMatrix(sympify(obj._jac)).subs(subs) + obj._inv_jac = ImmutableDenseMatrix(sympify(obj._inv_jac)).subs(subs) + + else: + obj._jac = Jacobian(obj) + obj._func_eval = None + obj._jac_eval = None + obj._inv_jac_eval = None + obj._metric_eval = None + obj._metric_det_eval = None + + obj._metric = obj._jac.T*obj._jac + obj._metric_det = obj._metric.det() return obj + #-------------------------------------------------------------------------- + #Abstract Interface : + + @property + def name( self ): + return self._name + + @property + def ldim( self ): + return self._ldim + + @property + def pdim( self ): + return self._pdim + + #-------------------------------------------------------------------------- + + @property + def coordinates( self ): + if self.pdim == 1: + return self._coordinates[0] + else: + return self._coordinates + + @property + def logical_coordinates( self ): + if self.ldim == 1: + return self._logical_coordinates[0] + else: + return self._logical_coordinates + + @property + def jacobian( self ): + return self._jacobian + + @property + def det_jacobian( self ): + return self.jacobian.det() + + @property + def is_analytical( self ): + return not( self._expressions is None ) + + @property + def expressions( self ): + return self._expressions + + @property + def jacobian_expr( self ): + return self._jac + + @property + def jacobian_inv_expr( self ): + if not self.is_analytical and self._inv_jac is None: + self._inv_jac = self.jacobian_expr.inv() + return self._inv_jac + + @property + def metric_expr( self ): + return self._metric + + @property + def metric_det_expr( self ): + return self._metric_det + + @property + def constants( self ): + return self._constants + + @property + def is_minus( self ): + return self._is_minus + + @property + def is_plus( self ): + return self._is_plus + + def set_plus_minus( self, **kwargs): + minus = kwargs.pop('minus', False) + plus = kwargs.pop('plus', False) + assert plus is not minus + + self._is_plus = plus + self._is_minus = minus + + def copy(self): + obj = BaseMapping(self.name, + ldim=self.ldim, + pdim=self.pdim, + evaluate=False) + + obj._name = self.name + obj._ldim = self.ldim + obj._pdim = self.pdim + obj._coordinates = self.coordinates + obj._jacobian = JacobianSymbol(obj) + obj._logical_coordinates = self.logical_coordinates + obj._expressions = self._expressions + obj._constants = self._constants + obj._jac = self._jac + obj._inv_jac = self._inv_jac + obj._metric = self._metric + obj._metric_det = self._metric_det + obj.__callable_map = self._callable_map + obj._is_plus = self._is_plus + obj._is_minus = self._is_minus + return obj + + def _hashable_content(self): + args = (self.name, self.ldim, self.pdim, self._coordinates, self._logical_coordinates, + self._expressions, self._constants, self._is_plus, self._is_minus) + return tuple([a for a in args if a is not None]) + + def _eval_subs(self, old, new): + return self + + def _sympystr(self, printer): + sstr = printer.doprint + return sstr(self.name) + #-------------------------------------------------------------------------- + #Abstract Interface : heritage methods def __call__(self, *args): """ Evaluate mapping at either a list of nd-arrays or the full domain.""" @@ -90,19 +370,6 @@ def metric_det_eval( self, *args ): """ Compute determinant of metric tensor at the list of nd-arrays. """ pass - @property - def ldim( self ): - """ Number of logical/parametric dimensions in mapping - (= number of eta components). - """ - pass - - @property - def pdim( self ): - """ Number of physical dimensions in mapping - (= number of x components).""" - pass - #============================================================================== class MappedDomain(BasicDomain): @@ -166,4 +433,973 @@ def __new__(cls, mapping, logical_domain): domain = mapping(logical_domain.domain) return Boundary(name, domain, axis, ext, mapping, logical_domain) else: - raise NotImplementedError('TODO') \ No newline at end of file + raise NotImplementedError('TODO') + + +#============================================================================== +class InverseMapping(BaseMapping): + def __new__(cls, mapping): + assert isinstance(mapping, BaseMapping) + name = mapping.name + ldim = mapping.ldim + pdim = mapping.pdim + coords = mapping.logical_coordinates + jacobian = mapping.jacobian.inv() + return BaseMapping.__new__(cls, name, ldim=ldim, pdim=pdim, coordinates=coords, jacobian=jacobian) + +#============================================================================== +class JacobianSymbol(MatrixSymbolicExpr): + _axis = None + def __new__(cls, mapping, axis=None): + assert isinstance(mapping, BaseMapping) + if axis is not None: + assert isinstance(axis, (int, Integer)) + obj = MatrixSymbolicExpr.__new__(cls, mapping) + obj._axis = axis + return obj + + @property + def mapping(self): + return self._args[0] + + @property + def axis(self): + return self._axis + + def inv(self): + return JacobianInverseSymbol(self.mapping, self.axis) + + def _hashable_content(self): + if self.axis is not None: + return (type(self).__name__, self.mapping, self.axis) + else: + return (type(self).__name__, self.mapping) + + def __hash__(self): + return hash(self._hashable_content()) + + def _eval_subs(self, old, new): + if isinstance(new, BaseMapping): + if self.axis is not None: + obj = JacobianSymbol(new, self.axis) + else: + obj = JacobianSymbol(new) + return obj + return self + def _sympystr(self, printer): + sstr = printer.doprint + if self.axis: + return 'Jacobian({},{})'.format(sstr(self.mapping.name), self.axis) + else: + return 'Jacobian({})'.format(sstr(self.mapping.name)) + +#============================================================================== +class JacobianInverseSymbol(MatrixSymbolicExpr): + _axis = None + is_Matrix = False + def __new__(cls, mapping, axis=None): + assert isinstance(mapping, BaseMapping) + if axis is not None: + assert isinstance(axis, int) + obj = MatrixSymbolicExpr.__new__(cls, mapping) + obj._axis = axis + return obj + + @property + def mapping(self): + return self._args[0] + + @property + def axis(self): + return self._axis + + def _hashable_content(self): + if self.axis is not None: + return (type(self).__name__, self.mapping, self.axis) + else: + return (type(self).__name__, self.mapping) + + def __hash__(self): + return hash(self._hashable_content()) + + def _sympystr(self, printer): + sstr = printer.doprint + if self.axis: + return 'Jacobian({},{})**(-1)'.format(sstr(self.mapping.name), self.axis) + else: + return 'Jacobian({})**(-1)'.format(sstr(self.mapping.name)) + +#============================================================================== +class InterfaceMapping(BaseMapping): + """ + InterfaceMapping is used to represent a mapping in the interface. + + Attributes + ---------- + minus : BaseMapping + the mapping on the negative direction of the interface + plus : BaseMapping + the mapping on the positive direction of the interface + """ + + def __new__(cls, minus, plus): + assert isinstance(minus, BaseMapping) + assert isinstance(plus, BaseMapping) + minus = minus.copy() + plus = plus.copy() + + minus.set_plus_minus(minus=True) + plus.set_plus_minus(plus=True) + + name = '{}|{}'.format(str(minus.name), str(plus.name)) + obj = BaseMapping.__new__(cls, name, ldim=minus.ldim, pdim=minus.pdim) + obj._minus = minus + obj._plus = plus + return obj + + @property + def minus(self): + return self._minus + + @property + def plus(self): + return self._plus + + @property + def is_analytical(self): + return self.minus.is_analytical and self.plus.is_analytical + + def _eval_subs(self, old, new): + minus = self.minus.subs(old, new) + plus = self.plus.subs(old, new) + return InterfaceMapping(minus, plus) + + def _eval_simplify(self, **kwargs): + return self + +#============================================================================== +class MultiPatchMapping(BaseMapping): + + def __new__(cls, dic): + assert isinstance( dic, dict) + return Basic.__new__(cls, dic) + + @property + def mappings(self): + return self.args[0] + + @property + def is_analytical(self): + return all(a.is_analytical for a in self.mappings.values()) + + @property + def ldim(self): + return list(self.mappings.values())[0].ldim + + @property + def pdim(self): + return list(self.mappings.values())[0].pdim + + @property + def is_analytical(self): + return all(e.is_analytical for e in self.mappings.values()) + + def _eval_subs(self, old, new): + return self + + def _eval_simplify(self, **kwargs): + return self + + def __hash__(self): + return hash((*self.mappings.values(), *self.mappings.keys())) + + def _sympystr(self, printer): + sstr = printer.doprint + mappings = (sstr(i) for i in self.mappings.values()) + return 'MultiPatchMapping({})'.format(', '.join(mappings)) + + +#============================================================================== +class SymbolicWeightedVolume(Expr): + """ + This class represents the symbolic weighted volume of a quadrature rule + """ +#TODO move this somewhere else +#============================================================================== +class MappingApplication(Function): + nargs = None + + def __new__(cls, *args, **options): + + if options.pop('evaluate', True): + r = cls.eval(*args) + else: + r = None + + if r is None: + return Basic.__new__(cls, *args, **options) + else: + return r + +class PullBack(Expr): + is_commutative = False + + def __new__(cls, u, mapping=None): + if not isinstance(u, (VectorFunction, ScalarFunction)): + raise TypeError('{} must be of type ScalarFunction or VectorFunction'.format(str(u))) + + if u.space.domain.mapping is None: + raise ValueError('The pull-back can be performed only to mapped domains') + + space = u.space + kind = space.kind + dim = space.ldim + el = get_logical_test_function(u) + + if space.is_broken: + assert mapping is not None + else: + mapping = space.domain.mapping + + J = mapping.jacobian + if isinstance(kind, (UndefinedSpaceType, H1SpaceType)): + expr = el + + elif isinstance(kind, HcurlSpaceType): + expr = J.inv().T * el + + elif isinstance(kind, HdivSpaceType): + expr = (J/J.det()) * el + + elif isinstance(kind, L2SpaceType): + expr = el/J.det() + +# elif isinstance(kind, UndefinedSpaceType): +# raise ValueError('kind must be specified in order to perform the pull-back transformation') + else: + raise ValueError("Unrecognized kind '{}' of space {}".format(kind, str(u.space))) + + obj = Expr.__new__(cls, u) + obj._expr = expr + obj._kind = kind + obj._test = el + return obj + + @property + def expr(self): + return self._expr + + @property + def kind(self): + return self._kind + + @property + def test(self): + return self._test + +#============================================================================== +class Jacobian(MappingApplication): + r""" + This class calculates the Jacobian of a mapping F + where [J_{F}]_{i,j} = \frac{\partial F_{i}}{\partial x_{j}} + or simply J_{F} = (\nabla F)^T + + """ + + @classmethod + def eval(cls, F): + """ + this class methods computes the jacobian of a mapping + + Parameters: + ---------- + F: BaseMapping + mapping object + + Returns: + ---------- + expr : ImmutableDenseMatrix + the jacobian matrix + """ + + if not isinstance(F, BaseMapping): + raise TypeError('> Expecting a BaseMapping object') + + if F.jacobian_expr is not None: + return F.jacobian_expr + + pdim = F.pdim + ldim = F.ldim + + F = [F[i] for i in range(0, F.pdim)] + F = Tuple(*F) + + if ldim == 1: + expr = LogicalGrad_1d(F) + + elif ldim == 2: + expr = LogicalGrad_2d(F) + + elif ldim == 3: + expr = LogicalGrad_3d(F) + + return expr.T + +#============================================================================== +class Covariant(MappingApplication): + """ + + Examples + + """ + + @classmethod + def eval(cls, F, v): + + """ + This class methods computes the covariant transformation + + Parameters: + ---------- + F: BaseMapping + mapping object + + v: + the basis function + + Returns: + ---------- + expr : Tuple + the covariant transformation + """ + + if not isinstance(v, (tuple, list, Tuple, ImmutableDenseMatrix, Matrix)): + raise TypeError('> Expecting a tuple, list, Tuple, Matrix') + + assert F.pdim == F.ldim + + M = Jacobian(F).inv().T + dim = F.pdim + + if dim == 1: + b = M[0,0] * v[0] + return Tuple(b) + else: + n,m = M.shape + w = [] + for i in range(0, n): + w.append(S.Zero) + + for i in range(0, n): + for j in range(0, m): + w[i] += M[i,j] * v[j] + return Tuple(*w) + +#============================================================================== +class Contravariant(MappingApplication): + """ + + Examples + + """ + + @classmethod + def eval(cls, F, v): + """ + This class methods computes the contravariant transformation + + Parameters: + ---------- + F: BaseMapping + mapping object + + v: + the basis function + + Returns: + ---------- + expr : Tuple + the contravariant transformation + """ + + if not isinstance(F, BaseMapping): + raise TypeError('> Expecting a BaseMapping') + + if not isinstance(v, (tuple, list, Tuple, ImmutableDenseMatrix, Matrix)): + raise TypeError('> Expecting a tuple, list, Tuple, Matrix') + + M = Jacobian(F) + M = M/M.det() + v = Matrix(v) + v = M*v + return Tuple(*v) + +#============================================================================== +class LogicalExpr(CalculusFunction): + + def __new__(cls, expr, domain, **options): + # (Try to) sympify args first + + if options.pop('evaluate', True): + r = cls.eval(expr, domain, **options) + else: + r = None + + if r is None: + obj = Basic.__new__(cls, expr, domain) + return obj + else: + return r + + @property + def expr(self): + return self._args[0] + + @property + def domain(self): + return self._args[1] + + def __getitem__(self, indices, **kw_args): + if is_sequence(indices): + # Special case needed because M[*my_tuple] is a syntax error. + return Indexed(self, *indices, **kw_args) + else: + return Indexed(self, indices, **kw_args) + + @classmethod + def eval(cls, expr, domain, **options): + """.""" + + from sympde.expr.evaluation import TerminalExpr, DomainExpression + from sympde.expr.expr import BilinearForm, LinearForm, BasicForm, Norm + from sympde.expr.expr import Integral + + types = (ScalarFunction, VectorFunction, DifferentialOperator, Trace, Integral) + + mapping = domain.mapping + dim = domain.dim + assert mapping + + # TODO this is not the dim of the domain + l_coords = ['x1', 'x2', 'x3'][:dim] + ph_coords = ['x', 'y', 'z'] + + if not has(expr, types): + if has(expr, DiffOperator): + return cls( expr, domain, evaluate=False) + else: + syms = symbols(ph_coords[:dim]) + if isinstance(mapping, InterfaceMapping): + mapping = mapping.minus + # here we assume that the two mapped domains + # are identical in the interface so we choose one of them + Ms = [mapping[i] for i in range(dim)] + expr = expr.subs(list(zip(syms, Ms))) + + if mapping.is_analytical: + expr = expr.subs(list(zip(Ms, mapping.expressions))) + return expr + + if isinstance(expr, Symbol) and expr.name in l_coords: + return expr + + if isinstance(expr, Symbol) and expr.name in ph_coords: + return mapping[ph_coords.index(expr.name)] + + elif isinstance(expr, Add): + args = [cls.eval(a, domain) for a in expr.args] + v = S.Zero + for i in args: + v += i + n,d = v.as_numer_denom() + return n/d + + elif isinstance(expr, Mul): + args = [cls.eval(a, domain) for a in expr.args] + v = S.One + for i in args: + v *= i + return v + + elif isinstance(expr, _logical_partial_derivatives): + if mapping.is_analytical: + Ms = [mapping[i] for i in range(dim)] + expr = expr.subs(list(zip(Ms, mapping.expressions))) + return expr + + elif isinstance(expr, IndexedVectorFunction): + el = cls.eval(expr.base, domain) + el = TerminalExpr(el, domain=domain.logical_domain) + return el[expr.indices[0]] + + elif isinstance(expr, MinusInterfaceOperator): + mapping = mapping.minus + newexpr = PullBack(expr.args[0], mapping) + test = newexpr.test + newexpr = newexpr.expr.subs(test, MinusInterfaceOperator(test)) + return newexpr + + elif isinstance(expr, PlusInterfaceOperator): + mapping = mapping.plus + newexpr = PullBack(expr.args[0], mapping) + test = newexpr.test + newexpr = newexpr.expr.subs(test, PlusInterfaceOperator(test)) + return newexpr + + elif isinstance(expr, (VectorFunction, ScalarFunction)): + return PullBack(expr, mapping).expr + + elif isinstance(expr, Transpose): + arg = cls(expr.arg, domain) + return Transpose(arg) + + elif isinstance(expr, grad): + arg = expr.args[0] + if isinstance(mapping, InterfaceMapping): + if isinstance(arg, MinusInterfaceOperator): + a = arg.args[0] + mapping = mapping.minus + elif isinstance(arg, PlusInterfaceOperator): + a = arg.args[0] + mapping = mapping.plus + else: + raise TypeError(arg) + + arg = type(arg)(cls.eval(a, domain)) + else: + arg = cls.eval(arg, domain) + + return mapping.jacobian.inv().T*grad(arg) + + elif isinstance(expr, curl): + arg = expr.args[0] + if isinstance(mapping, InterfaceMapping): + if isinstance(arg, MinusInterfaceOperator): + arg = arg.args[0] + mapping = mapping.minus + elif isinstance(arg, PlusInterfaceOperator): + arg = arg.args[0] + mapping = mapping.plus + else: + raise TypeError(arg) + + if isinstance(arg, VectorFunction): + arg = PullBack(arg, mapping) + else: + arg = cls.eval(arg, domain) + + if isinstance(arg, PullBack) and isinstance(arg.kind, HcurlSpaceType): + J = mapping.jacobian + arg = arg.test + if isinstance(expr.args[0], (MinusInterfaceOperator, PlusInterfaceOperator)): + arg = type(expr.args[0])(arg) + if expr.is_scalar: + return (1/J.det())*curl(arg) + + return (J/J.det())*curl(arg) + else: + raise NotImplementedError('TODO') + + elif isinstance(expr, div): + arg = expr.args[0] + if isinstance(mapping, InterfaceMapping): + if isinstance(arg, MinusInterfaceOperator): + arg = arg.args[0] + mapping = mapping.minus + elif isinstance(arg, PlusInterfaceOperator): + arg = arg.args[0] + mapping = mapping.plus + else: + raise TypeError(arg) + + if isinstance(arg, (ScalarFunction, VectorFunction)): + arg = PullBack(arg, mapping) + else: + + arg = cls.eval(arg, domain) + + if isinstance(arg, PullBack) and isinstance(arg.kind, HdivSpaceType): + J = mapping.jacobian + arg = arg.test + if isinstance(expr.args[0], (MinusInterfaceOperator, PlusInterfaceOperator)): + arg = type(expr.args[0])(arg) + return (1/J.det())*div(arg) + elif isinstance(arg, PullBack): + return SymbolicTrace(mapping.jacobian.inv().T*grad(arg.test)) + else: + raise NotImplementedError('TODO') + + elif isinstance(expr, laplace): + arg = expr.args[0] + v = cls.eval(grad(arg), domain) + v = mapping.jacobian.inv().T*grad(v) + return SymbolicTrace(v) + +# elif isinstance(expr, hessian): +# arg = expr.args[0] +# if isinstance(mapping, InterfaceMapping): +# if isinstance(arg, MinusInterfaceOperator): +# arg = arg.args[0] +# mapping = mapping.minus +# elif isinstance(arg, PlusInterfaceOperator): +# arg = arg.args[0] +# mapping = mapping.plus +# else: +# raise TypeError(arg) +# v = cls.eval(grad(expr.args[0]), domain) +# v = mapping.jacobian.inv().T*grad(v) +# return v + + elif isinstance(expr, (dot, inner, outer)): + args = [cls.eval(arg, domain) for arg in expr.args] + return type(expr)(*args) + + elif isinstance(expr, _diff_ops): + raise NotImplementedError('TODO') + + # TODO MUST BE MOVED AFTER TREATING THE CASES OF GRAD, CURL, DIV IN FEEC + elif isinstance(expr, (Matrix, ImmutableDenseMatrix)): + n_rows, n_cols = expr.shape + lines = [] + for i_row in range(0, n_rows): + line = [] + for i_col in range(0, n_cols): + line.append(cls.eval(expr[i_row,i_col], domain)) + lines.append(line) + return type(expr)(lines) + + elif isinstance(expr, dx): + if expr.atoms(PlusInterfaceOperator): + mapping = mapping.plus + elif expr.atoms(MinusInterfaceOperator): + mapping = mapping.minus + + arg = expr.args[0] + arg = cls(arg, domain, evaluate=True) + + if isinstance(arg, PullBack): + arg = TerminalExpr(arg, domain=domain.logical_domain) + elif isinstance(arg, MatrixElement): + arg = TerminalExpr(arg, domain=domain.logical_domain) + # ... + if dim == 1: + lgrad_arg = LogicalGrad_1d(arg) + + if not isinstance(lgrad_arg, (list, tuple, Tuple, Matrix)): + lgrad_arg = Tuple(lgrad_arg) + + elif dim == 2: + lgrad_arg = LogicalGrad_2d(arg) + + elif dim == 3: + lgrad_arg = LogicalGrad_3d(arg) + + grad_arg = Covariant(mapping, lgrad_arg) + expr = grad_arg[0] + return expr + + elif isinstance(expr, dy): + if expr.atoms(PlusInterfaceOperator): + mapping = mapping.plus + elif expr.atoms(MinusInterfaceOperator): + mapping = mapping.minus + + arg = expr.args[0] + arg = cls(arg, domain, evaluate=True) + if isinstance(arg, PullBack): + arg = TerminalExpr(arg, domain=domain.logical_domain) + elif isinstance(arg, MatrixElement): + arg = TerminalExpr(arg, domain=domain.logical_domain) + + # ..p + if dim == 1: + lgrad_arg = LogicalGrad_1d(arg) + + elif dim == 2: + lgrad_arg = LogicalGrad_2d(arg) + + elif dim == 3: + lgrad_arg = LogicalGrad_3d(arg) + + grad_arg = Covariant(mapping, lgrad_arg) + + expr = grad_arg[1] + return expr + + elif isinstance(expr, dz): + if expr.atoms(PlusInterfaceOperator): + mapping = mapping.plus + elif expr.atoms(MinusInterfaceOperator): + mapping = mapping.minus + + arg = expr.args[0] + arg = cls(arg, domain, evaluate=True) + if isinstance(arg, PullBack): + arg = TerminalExpr(arg, domain=domain.logical_domain) + elif isinstance(arg, MatrixElement): + arg = TerminalExpr(arg, domain=domain.logical_domain) + # ... + if dim == 1: + lgrad_arg = LogicalGrad_1d(arg) + + elif dim == 2: + lgrad_arg = LogicalGrad_2d(arg) + + elif dim == 3: + lgrad_arg = LogicalGrad_3d(arg) + + grad_arg = Covariant(mapping, lgrad_arg) + + expr = grad_arg[2] + + return expr + + elif isinstance(expr, (Symbol, Indexed)): + return expr + + elif isinstance(expr, NormalVector): + return expr + + elif isinstance(expr, Pow): + b = expr.base + e = expr.exp + expr = Pow(cls(b, domain), cls(e, domain)) + return expr + + elif isinstance(expr, Trace): + e = cls.eval(expr.expr, domain) + bd = expr.boundary.logical_domain + order = expr.order + return Trace(e, bd, order) + + elif isinstance(expr, Integral): + domain = expr.domain + mapping = domain.mapping + + + assert domain is not None + + if expr.is_domain_integral: + J = mapping.jacobian + det = sqrt((J.T*J).det()) + else: + axis = domain.axis + J = JacobianSymbol(mapping, axis=axis) + det = sqrt((J.T*J).det()) + + body = cls.eval(expr.expr, domain)*det + domain = domain.logical_domain + return Integral(body, domain) + + elif isinstance(expr, BilinearForm): + tests = [get_logical_test_function(a) for a in expr.test_functions] + trials = [get_logical_test_function(a) for a in expr.trial_functions] + body = cls.eval(expr.expr, domain) + return BilinearForm((trials, tests), body) + + elif isinstance(expr, LinearForm): + tests = [get_logical_test_function(a) for a in expr.test_functions] + body = cls.eval(expr.expr, domain) + return LinearForm(tests, body) + + elif isinstance(expr, Norm): + kind = expr.kind + exponent = expr.exponent + e = cls.eval(expr.expr, domain) + domain = domain.logical_domain + norm = Norm(e, domain, kind, evaluate=False) + norm._exponent = exponent + return norm + + elif isinstance(expr, DomainExpression): + domain = expr.target + J = domain.mapping.jacobian + newexpr = cls.eval(expr.expr, domain) + newexpr = TerminalExpr(newexpr, domain=domain) + domain = domain.logical_domain + det = TerminalExpr(sqrt((J.T*J).det()), domain=domain) + return DomainExpression(domain, ImmutableDenseMatrix([[newexpr*det]])) + + elif isinstance(expr, Function): + args = [cls.eval(a, domain) for a in expr.args] + return type(expr)(*args) + + return cls(expr, domain, evaluate=False) + +#============================================================================== +class SymbolicExpr(CalculusFunction): + """returns a sympy expression where partial derivatives are converted into + sympy Symbols.""" + + @cacheit + def __new__(cls, *args, **options): + # (Try to) sympify args first + + if options.pop('evaluate', True): + r = cls.eval(*args) + else: + r = None + + if r is None: + return Basic.__new__(cls, *args, **options) + else: + return r + + def __getitem__(self, indices, **kw_args): + if is_sequence(indices): + # Special case needed because M[*my_tuple] is a syntax error. + return Indexed(self, *indices, **kw_args) + else: + return Indexed(self, indices, **kw_args) + + @classmethod + @cacheit + def eval(cls, *_args, **kwargs): + """.""" + + if not _args: + return + + if not len(_args) == 1: + raise ValueError('Expecting one argument') + + expr = _args[0] + code = kwargs.pop('code', None) + + if isinstance(expr, Add): + args = [cls.eval(a, code=code) for a in expr.args] + v = Add(*args) + return v + + elif isinstance(expr, Mul): + args = [cls.eval(a, code=code) for a in expr.args] + v = Mul(*args) + return v + + elif isinstance(expr, Pow): + b = expr.base + e = expr.exp + v = Pow(cls.eval(b, code=code), e) + return v + + elif isinstance(expr, _coeffs_registery): + return expr + + elif isinstance(expr, (list, tuple, Tuple)): + expr = [cls.eval(a, code=code) for a in expr] + return Tuple(*expr) + + elif isinstance(expr, (Matrix, ImmutableDenseMatrix)): + + lines = [] + n_row,n_col = expr.shape + for i_row in range(0,n_row): + line = [] + for i_col in range(0,n_col): + line.append(cls.eval(expr[i_row, i_col], code=code)) + + lines.append(line) + + return type(expr)(lines) + + elif isinstance(expr, (ScalarFunction, VectorFunction)): + if code: + name = '{name}_{code}'.format(name=expr.name, code=code) + else: + name = str(expr.name) + + return Symbol(name) + + elif isinstance(expr, ( PlusInterfaceOperator, MinusInterfaceOperator)): + return cls.eval(expr.args[0], code=code) + + elif isinstance(expr, Indexed): + base = expr.base + if isinstance(base, BaseMapping): + if expr.indices[0] == 0: + name = 'x' + elif expr.indices[0] == 1: + name = 'y' + elif expr.indices[0] == 2: + name = 'z' + else: + raise ValueError('Wrong index') + + if base.is_plus: + name = name + '_plus' + else: + name = '{base}_{i}'.format(base=base.name, i=expr.indices[0]) + + if code: + name = '{name}_{code}'.format(name=name, code=code) + + return Symbol(name) + + elif isinstance(expr, _partial_derivatives): + atom = get_atom_derivatives(expr) + indices = get_index_derivatives_atom(expr, atom) + code = None + if indices: + index = indices[0] + code = '' + index =dict(sorted(index.items())) + + for k,n in list(index.items()): + code += k*n + return cls.eval(atom, code=code) + + elif isinstance(expr, _logical_partial_derivatives): + atom = get_atom_logical_derivatives(expr) + indices = get_index_logical_derivatives_atom(expr, atom) + code = None + if indices: + index = indices[0] + code = '' + index = dict(sorted(index.items())) + for k,n in list(index.items()): + code += k*n + return cls.eval(atom, code=code) + + elif isinstance(expr, BaseMapping): + return Symbol(expr.name) + + # ... this must be done here, otherwise codegen for FEM will not work + elif isinstance(expr, Symbol): + return expr + + elif isinstance(expr, IndexedBase): + return expr + + elif isinstance(expr, Indexed): + return expr + + elif isinstance(expr, Idx): + return expr + + elif isinstance(expr, Function): + args = [cls.eval(a, code=code) for a in expr.args] + return type(expr)(*args) + + elif isinstance(expr, ImaginaryUnit): + return expr + + + elif isinstance(expr, SymbolicWeightedVolume): + mapping = expr.args[0] + if isinstance(mapping, InterfaceMapping): + mapping = mapping.minus + name = 'wvol_{mapping}'.format(mapping=mapping) + + return Symbol(name) + + elif isinstance(expr, SymbolicDeterminant): + name = 'det_{}'.format(str(expr.args[0])) + return Symbol(name) + + elif isinstance(expr, PullBack): + return cls.eval(expr.expr, code=code) + + # Expression must always be translated to Sympy! + # TODO: check if we should use 'sympy.sympify(expr)' instead + else: + raise NotImplementedError('Cannot translate to Sympy: {}'.format(expr)) diff --git a/sympde/topology/basic.py b/sympde/topology/basic.py index d6d50fbb..b2fb05c3 100644 --- a/sympde/topology/basic.py +++ b/sympde/topology/basic.py @@ -329,7 +329,7 @@ def rotate(self, *directions): raise NotImplementedError('only 2d case is available') def join(self, boundary, ornt=None): - from sympde.sympde.topology.base_analytic_mapping import InterfaceMapping + from sympde.sympde.topology.base_mapping import InterfaceMapping # TODO be careful with '|' in psydac if self.mapping and boundary.mapping: int_map = InterfaceMapping(self.mapping , boundary.mapping) diff --git a/sympde/topology/derivatives.py b/sympde/topology/derivatives.py index 29acdf51..ab216a63 100644 --- a/sympde/topology/derivatives.py +++ b/sympde/topology/derivatives.py @@ -1291,4 +1291,4 @@ def get_max_logical_partial_derivatives(expr, F=None): return d -from .base_analytic_mapping import BaseAnalyticMapping, Jacobian +from .base_mapping import BaseMapping, Jacobian diff --git a/sympde/topology/domain.py b/sympde/topology/domain.py index 89f4496c..e47d0092 100644 --- a/sympde/topology/domain.py +++ b/sympde/topology/domain.py @@ -408,7 +408,7 @@ def join(cls, patches, connectivity, name): assert all(p.dim==patches[0].dim for p in patches) dim = int(patches[0].dim) - from sympde.sympde.topology.base_analytic_mapping import MultiPatchMapping + from sympde.sympde.topology.base_mapping import MultiPatchMapping # ... connectivity interfaces = {} boundaries = [] From cb8260722536225d65fc75435bce57ce84587c65 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Fri, 26 Jul 2024 16:59:15 +0200 Subject: [PATCH 20/39] trying to make the new hierearchy work : mapping undefined --- sympde/topology/base_mapping.py | 202 ++++++++++++-------------------- sympde/topology/derivatives.py | 7 +- 2 files changed, 83 insertions(+), 126 deletions(-) diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index cdf794b7..ac48b56d 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -1,7 +1,5 @@ # coding: utf-8 - -from abc import ABCMeta - +from abc import ABC, abstractmethod from sympy import Indexed, IndexedBase, Idx from sympy import Matrix, ImmutableDenseMatrix from sympy import Function, Expr @@ -24,13 +22,13 @@ from sympde.calculus.core import grad, div, curl, laplace #, hessian from sympde.calculus.core import dot, inner, outer, _diff_ops from sympde.calculus.core import has, DiffOperator -from sympde.calculus.matrices import MatrixSymbolicExpr, MatrixElement, SymbolicTrace +from sympde.calculus.matrices import MatrixSymbolicExpr, MatrixElement, SymbolicTrace, Inverse from sympde.calculus.matrices import SymbolicDeterminant, Transpose from .basic import BasicDomain, Union, InteriorDomain from .basic import Boundary, Connectivity, Interface -from .domain import Domain, NCubeInterior -from .domain import NormalVector +from .domain import Domain, NCubeInterior +from .domain import NormalVector from .space import ScalarFunction, VectorFunction, IndexedVectorFunction from .space import Trace from .datatype import HcurlSpaceType, H1SpaceType, L2SpaceType, HdivSpaceType, UndefinedSpaceType @@ -41,9 +39,10 @@ from .derivatives import get_atom_logical_derivatives, get_index_logical_derivatives_atom from .derivatives import LogicalGrad_1d, LogicalGrad_2d, LogicalGrad_3d +# TODO fix circular dependency between sympde.topology.domain and sympde.topology.mapping +# TODO fix circular dependency between sympde.expr.evaluation and sympde.topology.mapping + __all__ = ( - 'MappingMeta', - 'BaseMapping', 'Contravariant', 'Covariant', 'InterfaceMapping', @@ -61,9 +60,6 @@ 'get_logical_test_function', ) -class MappingMeta(ABCMeta,type(IndexedBase)): - pass - #============================================================================== @cacheit def cancel(f): @@ -89,19 +85,15 @@ def get_logical_test_function(u): #============================================================================== class BaseMapping(IndexedBase): """ - Transformation of coordinates, which can be evaluated. + Represents a BaseMapping object. - F: R^l -> R^p - F(eta) = x + Examples - with l <= p """ - _expressions = None # used for analytical mapping _jac = None _inv_jac = None _constants = None - _callable_map = None _ldim = None _pdim = None @@ -208,20 +200,14 @@ def __new__(cls, name, dim=None, **kwargs): else: obj._jac = Jacobian(obj) - obj._func_eval = None - obj._jac_eval = None - obj._inv_jac_eval = None - obj._metric_eval = None - obj._metric_det_eval = None obj._metric = obj._jac.T*obj._jac obj._metric_det = obj._metric.det() - + return obj + #-------------------------------------------------------------------------- - #Abstract Interface : - @property def name( self ): return self._name @@ -233,8 +219,6 @@ def ldim( self ): @property def pdim( self ): return self._pdim - - #-------------------------------------------------------------------------- @property def coordinates( self ): @@ -250,6 +234,10 @@ def logical_coordinates( self ): else: return self._logical_coordinates + def __call__(self, domain): + assert(isinstance(domain, BasicDomain)) + return MappedDomain(self, domain) + @property def jacobian( self ): return self._jacobian @@ -338,104 +326,7 @@ def _eval_subs(self, old, new): def _sympystr(self, printer): sstr = printer.doprint return sstr(self.name) - - #-------------------------------------------------------------------------- - #Abstract Interface : heritage methods - - def __call__(self, *args): - """ Evaluate mapping at either a list of nd-arrays or the full domain.""" - if len(args) == 1 and isinstance(args[0], BasicDomain): - domain=args[0] - assert(isinstance(domain, BasicDomain)) - return MappedDomain(self, domain) - else: - pass - - - def jacobian_eval( self, *args ): - """ Compute Jacobian matrix at the list of nd-arrays. """ - pass - - def jacobian_inv_eval( self, *args ): - """ Compute inverse Jacobian matrix at the list of nd-arrays. - An exception should be raised if the matrix is singular. - """ - pass - - def metric_eval( self, *args ): - """ Compute components of metric tensor at list of nd-arrays. """ - pass - - def metric_det_eval( self, *args ): - """ Compute determinant of metric tensor at the list of nd-arrays. """ - pass - - -#============================================================================== -class MappedDomain(BasicDomain): - """.""" - @cacheit - def __new__(cls, mapping, logical_domain): - assert(isinstance(mapping,BaseMapping)) - assert(isinstance(logical_domain, BasicDomain)) - if isinstance(logical_domain, Domain): - kwargs = dict( - dim = logical_domain._dim, - mapping = mapping, - logical_domain = logical_domain) - boundaries = logical_domain.boundary - interiors = logical_domain.interior - - if isinstance(interiors, Union): - kwargs['interiors'] = Union(*[mapping(a) for a in interiors.args]) - else: - kwargs['interiors'] = mapping(interiors) - - if isinstance(boundaries, Union): - kwargs['boundaries'] = [mapping(a) for a in boundaries.args] - elif boundaries: - kwargs['boundaries'] = mapping(boundaries) - - interfaces = logical_domain.connectivity.interfaces - if interfaces: - print("interfaces") - if isinstance(interfaces, Union): - interfaces = interfaces.args - else: - interfaces = [interfaces] - connectivity = {} - for e in interfaces: - connectivity[e.name] = Interface(e.name, mapping(e.minus), mapping(e.plus)) - kwargs['connectivity'] = Connectivity(connectivity) - - name = '{}({})'.format(str(mapping.name), str(logical_domain.name)) - return Domain(name, **kwargs) - - elif isinstance(logical_domain, NCubeInterior): - name = logical_domain.name - dim = logical_domain.dim - dtype = logical_domain.dtype - min_coords = logical_domain.min_coords - max_coords = logical_domain.max_coords - name = '{}({})'.format(str(mapping.name), str(name)) - return NCubeInterior(name, dim, dtype, min_coords, max_coords, mapping, logical_domain) - elif isinstance(logical_domain, InteriorDomain): - name = logical_domain.name - dim = logical_domain.dim - dtype = logical_domain.dtype - name = '{}({})'.format(str(mapping.name), str(name)) - return InteriorDomain(name, dim, dtype, mapping, logical_domain) - elif isinstance(logical_domain, Boundary): - name = logical_domain.name - axis = logical_domain.axis - ext = logical_domain.ext - domain = mapping(logical_domain.domain) - return Boundary(name, domain, axis, ext, mapping, logical_domain) - else: - raise NotImplementedError('TODO') - - #============================================================================== class InverseMapping(BaseMapping): def __new__(cls, mapping): @@ -618,7 +509,68 @@ def _sympystr(self, printer): mappings = (sstr(i) for i in self.mappings.values()) return 'MultiPatchMapping({})'.format(', '.join(mappings)) +#============================================================================== +class MappedDomain(BasicDomain): + """.""" + + @cacheit + def __new__(cls, mapping, logical_domain): + assert(isinstance(mapping, BaseMapping)) + assert(isinstance(logical_domain, BasicDomain)) + if isinstance(logical_domain, Domain): + kwargs = dict( + dim = logical_domain._dim, + mapping = mapping, + logical_domain = logical_domain) + boundaries = logical_domain.boundary + interiors = logical_domain.interior + + if isinstance(interiors, Union): + kwargs['interiors'] = Union(*[mapping(a) for a in interiors.args]) + else: + kwargs['interiors'] = mapping(interiors) + + if isinstance(boundaries, Union): + kwargs['boundaries'] = [mapping(a) for a in boundaries.args] + elif boundaries: + kwargs['boundaries'] = mapping(boundaries) + + interfaces = logical_domain.connectivity.interfaces + if interfaces: + if isinstance(interfaces, Union): + interfaces = interfaces.args + else: + interfaces = [interfaces] + connectivity = {} + for e in interfaces: + connectivity[e.name] = Interface(e.name, mapping(e.minus), mapping(e.plus)) + kwargs['connectivity'] = Connectivity(connectivity) + + name = '{}({})'.format(str(mapping.name), str(logical_domain.name)) + return Domain(name, **kwargs) + elif isinstance(logical_domain, NCubeInterior): + name = logical_domain.name + dim = logical_domain.dim + dtype = logical_domain.dtype + min_coords = logical_domain.min_coords + max_coords = logical_domain.max_coords + name = '{}({})'.format(str(mapping.name), str(name)) + return NCubeInterior(name, dim, dtype, min_coords, max_coords, mapping, logical_domain) + elif isinstance(logical_domain, InteriorDomain): + name = logical_domain.name + dim = logical_domain.dim + dtype = logical_domain.dtype + name = '{}({})'.format(str(mapping.name), str(name)) + return InteriorDomain(name, dim, dtype, mapping, logical_domain) + elif isinstance(logical_domain, Boundary): + name = logical_domain.name + axis = logical_domain.axis + ext = logical_domain.ext + domain = mapping(logical_domain.domain) + return Boundary(name, domain, axis, ext, mapping, logical_domain) + else: + raise NotImplementedError('TODO') #============================================================================== class SymbolicWeightedVolume(Expr): """ @@ -721,7 +673,7 @@ def eval(cls, F): expr : ImmutableDenseMatrix the jacobian matrix """ - + if not isinstance(F, BaseMapping): raise TypeError('> Expecting a BaseMapping object') diff --git a/sympde/topology/derivatives.py b/sympde/topology/derivatives.py index ab216a63..43bb687d 100644 --- a/sympde/topology/derivatives.py +++ b/sympde/topology/derivatives.py @@ -53,7 +53,9 @@ def __getitem__(self, indices, **kw_args): @classmethod @cacheit def eval(cls, expr): - + print(type(expr),expr) + if isinstance(expr,Indexed): + print(type(expr.base)) types = (VectorFunction, ScalarFunction, DifferentialOperator) if isinstance(expr, _logical_partial_derivatives): @@ -108,6 +110,8 @@ def eval(cls, expr): elif isinstance(expr, Expr): x = Symbol(cls.coordinate) if cls.logical: + + exit() M = expr.atoms(BaseAnalyticMapping) if len(M)>0: M = list(M)[0] @@ -954,6 +958,7 @@ def eval(cls, *_args): return u = _args[0] + du = (dx1(u), dx2(u)) if isinstance(du[0], (Tuple, Matrix, ImmutableDenseMatrix)): From 6d0661907081963f2f9d9fc4b281e76d80341db0 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Mon, 29 Jul 2024 13:22:17 +0200 Subject: [PATCH 21/39] repair bug for TerminalExpr with Jacobian : replacing deprecated if statements --- sympde/topology/base_mapping.py | 1 - sympde/topology/derivatives.py | 9 +++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index ac48b56d..41602830 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -121,7 +121,6 @@ def __new__(cls, name, dim=None, **kwargs): ldim = dim pdim = dim - obj = IndexedBase.__new__(cls, name, shape=pdim) if not evaluate: diff --git a/sympde/topology/derivatives.py b/sympde/topology/derivatives.py index 43bb687d..3ea4154b 100644 --- a/sympde/topology/derivatives.py +++ b/sympde/topology/derivatives.py @@ -53,9 +53,6 @@ def __getitem__(self, indices, **kw_args): @classmethod @cacheit def eval(cls, expr): - print(type(expr),expr) - if isinstance(expr,Indexed): - print(type(expr.base)) types = (VectorFunction, ScalarFunction, DifferentialOperator) if isinstance(expr, _logical_partial_derivatives): @@ -101,7 +98,7 @@ def eval(cls, expr): elif isinstance(expr, (minus, plus)): return cls(expr, evaluate=False) - elif isinstance(expr, Indexed) and isinstance(expr.base, BasicMapping): + elif isinstance(expr, Indexed) and isinstance(expr.base, BaseMapping): return cls(expr, evaluate=False) elif not has(expr, types): if expr.is_number: @@ -111,8 +108,8 @@ def eval(cls, expr): x = Symbol(cls.coordinate) if cls.logical: - exit() - M = expr.atoms(BaseAnalyticMapping) + + M = expr.atoms(BaseMapping) if len(M)>0: M = list(M)[0] expr_primes = [diff(expr, M[i]) for i in range(M.pdim)] From 1e534e2e9311015c9ae7a8d0c72e722face85244 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Mon, 29 Jul 2024 13:44:25 +0200 Subject: [PATCH 22/39] getting rid of the __gypyccel__ and __psydac__ git status inconveniences --- .gitignore | 3 + .../__epyccel__/.lock_acquisition.lock | 0 .../__pyccel__/.lock_acquisition.lock | 0 ...d_c_dependencies_e0el77nq_mx2lvwh9fed2.f90 | 520 ----------- ...ependencies_e0el77nq_mx2lvwh9fed2.f90.lock | 0 ...d_c_dependencies_e0el77nq_mx2lvwh9fed2.mod | Bin 3277 -> 0 bytes ...ind_c_dependencies_e0el77nq_mx2lvwh9fed2.o | Bin 10152 -> 0 bytes ..._dependencies_e0el77nq_mx2lvwh9fed2.o.lock | 0 ...d_c_dependencies_vga8r193_6xftl47r79t3.f90 | 181 ---- ...ependencies_vga8r193_6xftl47r79t3.f90.lock | 0 ...d_c_dependencies_vga8r193_6xftl47r79t3.mod | Bin 2334 -> 0 bytes ...ind_c_dependencies_vga8r193_6xftl47r79t3.o | Bin 5176 -> 0 bytes ..._dependencies_vga8r193_6xftl47r79t3.o.lock | 0 ...d_c_dependencies_wti60kr7_6feykyplisif.f90 | 248 ------ ...ependencies_wti60kr7_6feykyplisif.f90.lock | 0 ...d_c_dependencies_wti60kr7_6feykyplisif.mod | Bin 2336 -> 0 bytes ...ind_c_dependencies_wti60kr7_6feykyplisif.o | Bin 5320 -> 0 bytes ..._dependencies_wti60kr7_6feykyplisif.o.lock | 0 .../__epyccel__/__pyccel__/cwrapper.lock | 0 .../__pyccel__/cwrapper/cwrapper.c | 136 --- .../__pyccel__/cwrapper/cwrapper.c.lock | 0 .../__pyccel__/cwrapper/cwrapper.h | 200 ----- .../__pyccel__/cwrapper/cwrapper.o | Bin 24568 -> 0 bytes .../__pyccel__/cwrapper/cwrapper.o.lock | 0 .../__pyccel__/cwrapper/numpy_version.h | 3 - .../__pyccel__/cwrapper_ndarrays.lock | 0 .../cwrapper_ndarrays/cwrapper_ndarrays.c | 509 ----------- .../cwrapper_ndarrays.c.lock | 0 .../cwrapper_ndarrays/cwrapper_ndarrays.h | 55 -- .../cwrapper_ndarrays/cwrapper_ndarrays.o | Bin 33208 -> 0 bytes .../cwrapper_ndarrays.o.lock | 0 .../dependencies_e0el77nq_mx2lvwh9fed2.f90 | 464 ---------- ...ependencies_e0el77nq_mx2lvwh9fed2.f90.lock | 0 .../dependencies_e0el77nq_mx2lvwh9fed2.mod | Bin 959 -> 0 bytes .../dependencies_e0el77nq_mx2lvwh9fed2.o | Bin 26272 -> 0 bytes .../dependencies_e0el77nq_mx2lvwh9fed2.o.lock | 0 ...pendencies_e0el77nq_mx2lvwh9fed2_wrapper.c | 739 ---------------- ...ncies_e0el77nq_mx2lvwh9fed2_wrapper.c.lock | 0 ...pendencies_e0el77nq_mx2lvwh9fed2_wrapper.h | 35 - ...pendencies_e0el77nq_mx2lvwh9fed2_wrapper.o | Bin 71312 -> 0 bytes ...ncies_e0el77nq_mx2lvwh9fed2_wrapper.o.lock | 0 .../dependencies_vga8r193_6xftl47r79t3.f90 | 218 ----- ...ependencies_vga8r193_6xftl47r79t3.f90.lock | 0 .../dependencies_vga8r193_6xftl47r79t3.mod | Bin 836 -> 0 bytes .../dependencies_vga8r193_6xftl47r79t3.o | Bin 78272 -> 0 bytes .../dependencies_vga8r193_6xftl47r79t3.o.lock | 0 ...pendencies_vga8r193_6xftl47r79t3_wrapper.c | 581 ------------- ...ncies_vga8r193_6xftl47r79t3_wrapper.c.lock | 0 ...pendencies_vga8r193_6xftl47r79t3_wrapper.h | 35 - ...pendencies_vga8r193_6xftl47r79t3_wrapper.o | Bin 56288 -> 0 bytes ...ncies_vga8r193_6xftl47r79t3_wrapper.o.lock | 0 .../dependencies_wti60kr7_6feykyplisif.f90 | 160 ---- ...ependencies_wti60kr7_6feykyplisif.f90.lock | 0 .../dependencies_wti60kr7_6feykyplisif.mod | Bin 809 -> 0 bytes .../dependencies_wti60kr7_6feykyplisif.o | Bin 8296 -> 0 bytes .../dependencies_wti60kr7_6feykyplisif.o.lock | 0 ...pendencies_wti60kr7_6feykyplisif_wrapper.c | 436 ---------- ...ncies_wti60kr7_6feykyplisif_wrapper.c.lock | 0 ...pendencies_wti60kr7_6feykyplisif_wrapper.h | 35 - ...ncies_wti60kr7_6feykyplisif_wrapper.o.lock | 0 .../__epyccel__/__pyccel__/ndarrays.lock | 0 .../__pyccel__/ndarrays/ndarrays.c | 822 ------------------ .../__pyccel__/ndarrays/ndarrays.c.lock | 0 .../__pyccel__/ndarrays/ndarrays.h | 194 ----- .../__pyccel__/ndarrays/ndarrays.o | Bin 74392 -> 0 bytes .../__pyccel__/ndarrays/ndarrays.o.lock | 0 .../dependencies_e0el77nq_mx2lvwh9fed2.lock | 0 .../dependencies_e0el77nq_mx2lvwh9fed2.py | 170 ---- .../dependencies_vga8r193_6xftl47r79t3.lock | 0 .../dependencies_vga8r193_6xftl47r79t3.py | 136 --- .../dependencies_wti60kr7_6feykyplisif.lock | 0 .../dependencies_wti60kr7_6feykyplisif.py | 53 -- __psydac__/__init__.py | 0 __psydac__/dependencies_e0el77nq.py | 170 ---- __psydac__/dependencies_vga8r193.py | 136 --- __psydac__/dependencies_wti60kr7.py | 53 -- 76 files changed, 3 insertions(+), 6289 deletions(-) delete mode 100644 __gpyccel__/__epyccel__/.lock_acquisition.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/.lock_acquisition.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.f90 delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.f90.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.mod delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.o delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.o.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.f90 delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.f90.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.mod delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.o delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.o.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.f90 delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.f90.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.mod delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.o delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.o.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.c delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.c.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.h delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.o delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.o.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper/numpy_version.h delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.c delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.c.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.h delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.o delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.o.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.f90 delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.f90.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.mod delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.o delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.o.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.c delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.c.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.h delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.o delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.o.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.f90 delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.f90.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.mod delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.o delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.o.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.c delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.c.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.h delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.o delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.o.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.f90 delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.f90.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.mod delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.o delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.o.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.c delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.c.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.h delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.o.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/ndarrays.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.c delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.c.lock delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.h delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.o delete mode 100644 __gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.o.lock delete mode 100644 __gpyccel__/__epyccel__/dependencies_e0el77nq_mx2lvwh9fed2.lock delete mode 100644 __gpyccel__/__epyccel__/dependencies_e0el77nq_mx2lvwh9fed2.py delete mode 100644 __gpyccel__/__epyccel__/dependencies_vga8r193_6xftl47r79t3.lock delete mode 100644 __gpyccel__/__epyccel__/dependencies_vga8r193_6xftl47r79t3.py delete mode 100644 __gpyccel__/__epyccel__/dependencies_wti60kr7_6feykyplisif.lock delete mode 100644 __gpyccel__/__epyccel__/dependencies_wti60kr7_6feykyplisif.py delete mode 100644 __psydac__/__init__.py delete mode 100644 __psydac__/dependencies_e0el77nq.py delete mode 100644 __psydac__/dependencies_vga8r193.py delete mode 100644 __psydac__/dependencies_wti60kr7.py diff --git a/.gitignore b/.gitignore index 27146ff3..ef6f7968 100644 --- a/.gitignore +++ b/.gitignore @@ -111,3 +111,6 @@ doc/utils/*.png # Swap files *.swp + +__gpyccel__/* +__psydac__/* \ No newline at end of file diff --git a/__gpyccel__/__epyccel__/.lock_acquisition.lock b/__gpyccel__/__epyccel__/.lock_acquisition.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/.lock_acquisition.lock b/__gpyccel__/__epyccel__/__pyccel__/.lock_acquisition.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.f90 b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.f90 deleted file mode 100644 index 83553c6a..00000000 --- a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.f90 +++ /dev/null @@ -1,520 +0,0 @@ -module bind_c_dependencies_e0el77nq_mx2lvwh9fed2 - - use dependencies_e0el77nq_mx2lvwh9fed2 - - use, intrinsic :: ISO_C_Binding, only : f64 => C_DOUBLE , i64 => & - C_INT64_T , C_F_Pointer , c_ptr - implicit none - - contains - - !........................................ - subroutine bind_c_assemble_matrix_e0el77nq( & - bound_global_test_basis_v1_0_1, & - bound_global_test_basis_v1_0_1_shape_1, & - bound_global_test_basis_v1_0_1_shape_2, & - bound_global_test_basis_v1_0_1_shape_3, & - bound_global_test_basis_v1_0_1_shape_4, & - bound_global_test_basis_v1_0_1_stride_1, & - bound_global_test_basis_v1_0_1_stride_2, & - bound_global_test_basis_v1_0_1_stride_3, & - bound_global_test_basis_v1_0_1_stride_4, & - bound_global_test_basis_v1_0_2, & - bound_global_test_basis_v1_0_2_shape_1, & - bound_global_test_basis_v1_0_2_shape_2, & - bound_global_test_basis_v1_0_2_shape_3, & - bound_global_test_basis_v1_0_2_shape_4, & - bound_global_test_basis_v1_0_2_stride_1, & - bound_global_test_basis_v1_0_2_stride_2, & - bound_global_test_basis_v1_0_2_stride_3, & - bound_global_test_basis_v1_0_2_stride_4, & - bound_global_test_basis_v1_1_1, & - bound_global_test_basis_v1_1_1_shape_1, & - bound_global_test_basis_v1_1_1_shape_2, & - bound_global_test_basis_v1_1_1_shape_3, & - bound_global_test_basis_v1_1_1_shape_4, & - bound_global_test_basis_v1_1_1_stride_1, & - bound_global_test_basis_v1_1_1_stride_2, & - bound_global_test_basis_v1_1_1_stride_3, & - bound_global_test_basis_v1_1_1_stride_4, & - bound_global_test_basis_v1_1_2, & - bound_global_test_basis_v1_1_2_shape_1, & - bound_global_test_basis_v1_1_2_shape_2, & - bound_global_test_basis_v1_1_2_shape_3, & - bound_global_test_basis_v1_1_2_shape_4, & - bound_global_test_basis_v1_1_2_stride_1, & - bound_global_test_basis_v1_1_2_stride_2, & - bound_global_test_basis_v1_1_2_stride_3, & - bound_global_test_basis_v1_1_2_stride_4, & - bound_global_trial_basis_u1_0_1, & - bound_global_trial_basis_u1_0_1_shape_1, & - bound_global_trial_basis_u1_0_1_shape_2, & - bound_global_trial_basis_u1_0_1_shape_3, & - bound_global_trial_basis_u1_0_1_shape_4, & - bound_global_trial_basis_u1_0_1_stride_1, & - bound_global_trial_basis_u1_0_1_stride_2, & - bound_global_trial_basis_u1_0_1_stride_3, & - bound_global_trial_basis_u1_0_1_stride_4, & - bound_global_trial_basis_u1_0_2, & - bound_global_trial_basis_u1_0_2_shape_1, & - bound_global_trial_basis_u1_0_2_shape_2, & - bound_global_trial_basis_u1_0_2_shape_3, & - bound_global_trial_basis_u1_0_2_shape_4, & - bound_global_trial_basis_u1_0_2_stride_1, & - bound_global_trial_basis_u1_0_2_stride_2, & - bound_global_trial_basis_u1_0_2_stride_3, & - bound_global_trial_basis_u1_0_2_stride_4, & - bound_global_trial_basis_u1_1_1, & - bound_global_trial_basis_u1_1_1_shape_1, & - bound_global_trial_basis_u1_1_1_shape_2, & - bound_global_trial_basis_u1_1_1_shape_3, & - bound_global_trial_basis_u1_1_1_shape_4, & - bound_global_trial_basis_u1_1_1_stride_1, & - bound_global_trial_basis_u1_1_1_stride_2, & - bound_global_trial_basis_u1_1_1_stride_3, & - bound_global_trial_basis_u1_1_1_stride_4, & - bound_global_trial_basis_u1_1_2, & - bound_global_trial_basis_u1_1_2_shape_1, & - bound_global_trial_basis_u1_1_2_shape_2, & - bound_global_trial_basis_u1_1_2_shape_3, & - bound_global_trial_basis_u1_1_2_shape_4, & - bound_global_trial_basis_u1_1_2_stride_1, & - bound_global_trial_basis_u1_1_2_stride_2, & - bound_global_trial_basis_u1_1_2_stride_3, & - bound_global_trial_basis_u1_1_2_stride_4, & - bound_global_span_v1_0_1, bound_global_span_v1_0_1_shape_1, & - bound_global_span_v1_0_1_stride_1, bound_global_span_v1_0_2, & - bound_global_span_v1_0_2_shape_1, & - bound_global_span_v1_0_2_stride_1, bound_global_span_v1_1_1, & - bound_global_span_v1_1_1_shape_1, & - bound_global_span_v1_1_1_stride_1, bound_global_span_v1_1_2, & - bound_global_span_v1_1_2_shape_1, & - bound_global_span_v1_1_2_stride_1, bound_global_x1, & - bound_global_x1_shape_1, bound_global_x1_shape_2, & - bound_global_x1_stride_1, bound_global_x1_stride_2, & - bound_global_x2, bound_global_x2_shape_1, & - bound_global_x2_shape_2, bound_global_x2_stride_1, & - bound_global_x2_stride_2, test_v1_0_p1, test_v1_0_p2, & - test_v1_1_p1, test_v1_1_p2, trial_u1_0_p1, trial_u1_0_p2, & - trial_u1_1_p1, trial_u1_1_p2, n_element_1, n_element_2, k1, k2, & - pad1, pad2, bound_g_mat_u1_0_v1_0_e0el77nq, & - bound_g_mat_u1_0_v1_0_e0el77nq_shape_1, & - bound_g_mat_u1_0_v1_0_e0el77nq_shape_2, & - bound_g_mat_u1_0_v1_0_e0el77nq_shape_3, & - bound_g_mat_u1_0_v1_0_e0el77nq_shape_4, & - bound_g_mat_u1_0_v1_0_e0el77nq_stride_1, & - bound_g_mat_u1_0_v1_0_e0el77nq_stride_2, & - bound_g_mat_u1_0_v1_0_e0el77nq_stride_3, & - bound_g_mat_u1_0_v1_0_e0el77nq_stride_4, & - bound_g_mat_u1_1_v1_0_e0el77nq, & - bound_g_mat_u1_1_v1_0_e0el77nq_shape_1, & - bound_g_mat_u1_1_v1_0_e0el77nq_shape_2, & - bound_g_mat_u1_1_v1_0_e0el77nq_shape_3, & - bound_g_mat_u1_1_v1_0_e0el77nq_shape_4, & - bound_g_mat_u1_1_v1_0_e0el77nq_stride_1, & - bound_g_mat_u1_1_v1_0_e0el77nq_stride_2, & - bound_g_mat_u1_1_v1_0_e0el77nq_stride_3, & - bound_g_mat_u1_1_v1_0_e0el77nq_stride_4, & - bound_g_mat_u1_0_v1_1_e0el77nq, & - bound_g_mat_u1_0_v1_1_e0el77nq_shape_1, & - bound_g_mat_u1_0_v1_1_e0el77nq_shape_2, & - bound_g_mat_u1_0_v1_1_e0el77nq_shape_3, & - bound_g_mat_u1_0_v1_1_e0el77nq_shape_4, & - bound_g_mat_u1_0_v1_1_e0el77nq_stride_1, & - bound_g_mat_u1_0_v1_1_e0el77nq_stride_2, & - bound_g_mat_u1_0_v1_1_e0el77nq_stride_3, & - bound_g_mat_u1_0_v1_1_e0el77nq_stride_4, & - bound_g_mat_u1_1_v1_1_e0el77nq, & - bound_g_mat_u1_1_v1_1_e0el77nq_shape_1, & - bound_g_mat_u1_1_v1_1_e0el77nq_shape_2, & - bound_g_mat_u1_1_v1_1_e0el77nq_shape_3, & - bound_g_mat_u1_1_v1_1_e0el77nq_shape_4, & - bound_g_mat_u1_1_v1_1_e0el77nq_stride_1, & - bound_g_mat_u1_1_v1_1_e0el77nq_stride_2, & - bound_g_mat_u1_1_v1_1_e0el77nq_stride_3, & - bound_g_mat_u1_1_v1_1_e0el77nq_stride_4) bind(c) - - implicit none - - type(c_ptr), value :: bound_global_test_basis_v1_0_1 - integer(i64), value :: bound_global_test_basis_v1_0_1_shape_1 - integer(i64), value :: bound_global_test_basis_v1_0_1_shape_2 - integer(i64), value :: bound_global_test_basis_v1_0_1_shape_3 - integer(i64), value :: bound_global_test_basis_v1_0_1_shape_4 - integer(i64), value :: bound_global_test_basis_v1_0_1_stride_1 - integer(i64), value :: bound_global_test_basis_v1_0_1_stride_2 - integer(i64), value :: bound_global_test_basis_v1_0_1_stride_3 - integer(i64), value :: bound_global_test_basis_v1_0_1_stride_4 - type(c_ptr), value :: bound_global_test_basis_v1_0_2 - integer(i64), value :: bound_global_test_basis_v1_0_2_shape_1 - integer(i64), value :: bound_global_test_basis_v1_0_2_shape_2 - integer(i64), value :: bound_global_test_basis_v1_0_2_shape_3 - integer(i64), value :: bound_global_test_basis_v1_0_2_shape_4 - integer(i64), value :: bound_global_test_basis_v1_0_2_stride_1 - integer(i64), value :: bound_global_test_basis_v1_0_2_stride_2 - integer(i64), value :: bound_global_test_basis_v1_0_2_stride_3 - integer(i64), value :: bound_global_test_basis_v1_0_2_stride_4 - type(c_ptr), value :: bound_global_test_basis_v1_1_1 - integer(i64), value :: bound_global_test_basis_v1_1_1_shape_1 - integer(i64), value :: bound_global_test_basis_v1_1_1_shape_2 - integer(i64), value :: bound_global_test_basis_v1_1_1_shape_3 - integer(i64), value :: bound_global_test_basis_v1_1_1_shape_4 - integer(i64), value :: bound_global_test_basis_v1_1_1_stride_1 - integer(i64), value :: bound_global_test_basis_v1_1_1_stride_2 - integer(i64), value :: bound_global_test_basis_v1_1_1_stride_3 - integer(i64), value :: bound_global_test_basis_v1_1_1_stride_4 - type(c_ptr), value :: bound_global_test_basis_v1_1_2 - integer(i64), value :: bound_global_test_basis_v1_1_2_shape_1 - integer(i64), value :: bound_global_test_basis_v1_1_2_shape_2 - integer(i64), value :: bound_global_test_basis_v1_1_2_shape_3 - integer(i64), value :: bound_global_test_basis_v1_1_2_shape_4 - integer(i64), value :: bound_global_test_basis_v1_1_2_stride_1 - integer(i64), value :: bound_global_test_basis_v1_1_2_stride_2 - integer(i64), value :: bound_global_test_basis_v1_1_2_stride_3 - integer(i64), value :: bound_global_test_basis_v1_1_2_stride_4 - type(c_ptr), value :: bound_global_trial_basis_u1_0_1 - integer(i64), value :: bound_global_trial_basis_u1_0_1_shape_1 - integer(i64), value :: bound_global_trial_basis_u1_0_1_shape_2 - integer(i64), value :: bound_global_trial_basis_u1_0_1_shape_3 - integer(i64), value :: bound_global_trial_basis_u1_0_1_shape_4 - integer(i64), value :: bound_global_trial_basis_u1_0_1_stride_1 - integer(i64), value :: bound_global_trial_basis_u1_0_1_stride_2 - integer(i64), value :: bound_global_trial_basis_u1_0_1_stride_3 - integer(i64), value :: bound_global_trial_basis_u1_0_1_stride_4 - type(c_ptr), value :: bound_global_trial_basis_u1_0_2 - integer(i64), value :: bound_global_trial_basis_u1_0_2_shape_1 - integer(i64), value :: bound_global_trial_basis_u1_0_2_shape_2 - integer(i64), value :: bound_global_trial_basis_u1_0_2_shape_3 - integer(i64), value :: bound_global_trial_basis_u1_0_2_shape_4 - integer(i64), value :: bound_global_trial_basis_u1_0_2_stride_1 - integer(i64), value :: bound_global_trial_basis_u1_0_2_stride_2 - integer(i64), value :: bound_global_trial_basis_u1_0_2_stride_3 - integer(i64), value :: bound_global_trial_basis_u1_0_2_stride_4 - type(c_ptr), value :: bound_global_trial_basis_u1_1_1 - integer(i64), value :: bound_global_trial_basis_u1_1_1_shape_1 - integer(i64), value :: bound_global_trial_basis_u1_1_1_shape_2 - integer(i64), value :: bound_global_trial_basis_u1_1_1_shape_3 - integer(i64), value :: bound_global_trial_basis_u1_1_1_shape_4 - integer(i64), value :: bound_global_trial_basis_u1_1_1_stride_1 - integer(i64), value :: bound_global_trial_basis_u1_1_1_stride_2 - integer(i64), value :: bound_global_trial_basis_u1_1_1_stride_3 - integer(i64), value :: bound_global_trial_basis_u1_1_1_stride_4 - type(c_ptr), value :: bound_global_trial_basis_u1_1_2 - integer(i64), value :: bound_global_trial_basis_u1_1_2_shape_1 - integer(i64), value :: bound_global_trial_basis_u1_1_2_shape_2 - integer(i64), value :: bound_global_trial_basis_u1_1_2_shape_3 - integer(i64), value :: bound_global_trial_basis_u1_1_2_shape_4 - integer(i64), value :: bound_global_trial_basis_u1_1_2_stride_1 - integer(i64), value :: bound_global_trial_basis_u1_1_2_stride_2 - integer(i64), value :: bound_global_trial_basis_u1_1_2_stride_3 - integer(i64), value :: bound_global_trial_basis_u1_1_2_stride_4 - type(c_ptr), value :: bound_global_span_v1_0_1 - integer(i64), value :: bound_global_span_v1_0_1_shape_1 - integer(i64), value :: bound_global_span_v1_0_1_stride_1 - type(c_ptr), value :: bound_global_span_v1_0_2 - integer(i64), value :: bound_global_span_v1_0_2_shape_1 - integer(i64), value :: bound_global_span_v1_0_2_stride_1 - type(c_ptr), value :: bound_global_span_v1_1_1 - integer(i64), value :: bound_global_span_v1_1_1_shape_1 - integer(i64), value :: bound_global_span_v1_1_1_stride_1 - type(c_ptr), value :: bound_global_span_v1_1_2 - integer(i64), value :: bound_global_span_v1_1_2_shape_1 - integer(i64), value :: bound_global_span_v1_1_2_stride_1 - type(c_ptr), value :: bound_global_x1 - integer(i64), value :: bound_global_x1_shape_1 - integer(i64), value :: bound_global_x1_shape_2 - integer(i64), value :: bound_global_x1_stride_1 - integer(i64), value :: bound_global_x1_stride_2 - type(c_ptr), value :: bound_global_x2 - integer(i64), value :: bound_global_x2_shape_1 - integer(i64), value :: bound_global_x2_shape_2 - integer(i64), value :: bound_global_x2_stride_1 - integer(i64), value :: bound_global_x2_stride_2 - integer(i64), value :: test_v1_0_p1 - integer(i64), value :: test_v1_0_p2 - integer(i64), value :: test_v1_1_p1 - integer(i64), value :: test_v1_1_p2 - integer(i64), value :: trial_u1_0_p1 - integer(i64), value :: trial_u1_0_p2 - integer(i64), value :: trial_u1_1_p1 - integer(i64), value :: trial_u1_1_p2 - integer(i64), value :: n_element_1 - integer(i64), value :: n_element_2 - integer(i64), value :: k1 - integer(i64), value :: k2 - integer(i64), value :: pad1 - integer(i64), value :: pad2 - type(c_ptr), value :: bound_g_mat_u1_0_v1_0_e0el77nq - integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_shape_1 - integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_shape_2 - integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_shape_3 - integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_shape_4 - integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_stride_1 - integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_stride_2 - integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_stride_3 - integer(i64), value :: bound_g_mat_u1_0_v1_0_e0el77nq_stride_4 - type(c_ptr), value :: bound_g_mat_u1_1_v1_0_e0el77nq - integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_shape_1 - integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_shape_2 - integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_shape_3 - integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_shape_4 - integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_stride_1 - integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_stride_2 - integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_stride_3 - integer(i64), value :: bound_g_mat_u1_1_v1_0_e0el77nq_stride_4 - type(c_ptr), value :: bound_g_mat_u1_0_v1_1_e0el77nq - integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_shape_1 - integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_shape_2 - integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_shape_3 - integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_shape_4 - integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_stride_1 - integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_stride_2 - integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_stride_3 - integer(i64), value :: bound_g_mat_u1_0_v1_1_e0el77nq_stride_4 - type(c_ptr), value :: bound_g_mat_u1_1_v1_1_e0el77nq - integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_shape_1 - integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_shape_2 - integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_shape_3 - integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_shape_4 - integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_stride_1 - integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_stride_2 - integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_stride_3 - integer(i64), value :: bound_g_mat_u1_1_v1_1_e0el77nq_stride_4 - real(f64), pointer :: global_test_basis_v1_0_1(:,:,:,:) - real(f64), pointer :: global_test_basis_v1_0_2(:,:,:,:) - real(f64), pointer :: global_test_basis_v1_1_1(:,:,:,:) - real(f64), pointer :: global_test_basis_v1_1_2(:,:,:,:) - real(f64), pointer :: global_trial_basis_u1_0_1(:,:,:,:) - real(f64), pointer :: global_trial_basis_u1_0_2(:,:,:,:) - real(f64), pointer :: global_trial_basis_u1_1_1(:,:,:,:) - real(f64), pointer :: global_trial_basis_u1_1_2(:,:,:,:) - integer(i64), pointer :: global_span_v1_0_1(:) - integer(i64), pointer :: global_span_v1_0_2(:) - integer(i64), pointer :: global_span_v1_1_1(:) - integer(i64), pointer :: global_span_v1_1_2(:) - real(f64), pointer :: global_x1(:,:) - real(f64), pointer :: global_x2(:,:) - real(f64), pointer :: g_mat_u1_0_v1_0_e0el77nq(:,:,:,:) - real(f64), pointer :: g_mat_u1_1_v1_0_e0el77nq(:,:,:,:) - real(f64), pointer :: g_mat_u1_0_v1_1_e0el77nq(:,:,:,:) - real(f64), pointer :: g_mat_u1_1_v1_1_e0el77nq(:,:,:,:) - - call C_F_Pointer(bound_global_test_basis_v1_0_1, & - global_test_basis_v1_0_1, [ & - bound_global_test_basis_v1_0_1_shape_4 * & - bound_global_test_basis_v1_0_1_stride_4, & - bound_global_test_basis_v1_0_1_shape_3 * & - bound_global_test_basis_v1_0_1_stride_3, & - bound_global_test_basis_v1_0_1_shape_2 * & - bound_global_test_basis_v1_0_1_stride_2, & - bound_global_test_basis_v1_0_1_shape_1 * & - bound_global_test_basis_v1_0_1_stride_1]) - call C_F_Pointer(bound_global_test_basis_v1_0_2, & - global_test_basis_v1_0_2, [ & - bound_global_test_basis_v1_0_2_shape_4 * & - bound_global_test_basis_v1_0_2_stride_4, & - bound_global_test_basis_v1_0_2_shape_3 * & - bound_global_test_basis_v1_0_2_stride_3, & - bound_global_test_basis_v1_0_2_shape_2 * & - bound_global_test_basis_v1_0_2_stride_2, & - bound_global_test_basis_v1_0_2_shape_1 * & - bound_global_test_basis_v1_0_2_stride_1]) - call C_F_Pointer(bound_global_test_basis_v1_1_1, & - global_test_basis_v1_1_1, [ & - bound_global_test_basis_v1_1_1_shape_4 * & - bound_global_test_basis_v1_1_1_stride_4, & - bound_global_test_basis_v1_1_1_shape_3 * & - bound_global_test_basis_v1_1_1_stride_3, & - bound_global_test_basis_v1_1_1_shape_2 * & - bound_global_test_basis_v1_1_1_stride_2, & - bound_global_test_basis_v1_1_1_shape_1 * & - bound_global_test_basis_v1_1_1_stride_1]) - call C_F_Pointer(bound_global_test_basis_v1_1_2, & - global_test_basis_v1_1_2, [ & - bound_global_test_basis_v1_1_2_shape_4 * & - bound_global_test_basis_v1_1_2_stride_4, & - bound_global_test_basis_v1_1_2_shape_3 * & - bound_global_test_basis_v1_1_2_stride_3, & - bound_global_test_basis_v1_1_2_shape_2 * & - bound_global_test_basis_v1_1_2_stride_2, & - bound_global_test_basis_v1_1_2_shape_1 * & - bound_global_test_basis_v1_1_2_stride_1]) - call C_F_Pointer(bound_global_trial_basis_u1_0_1, & - global_trial_basis_u1_0_1, [ & - bound_global_trial_basis_u1_0_1_shape_4 * & - bound_global_trial_basis_u1_0_1_stride_4, & - bound_global_trial_basis_u1_0_1_shape_3 * & - bound_global_trial_basis_u1_0_1_stride_3, & - bound_global_trial_basis_u1_0_1_shape_2 * & - bound_global_trial_basis_u1_0_1_stride_2, & - bound_global_trial_basis_u1_0_1_shape_1 * & - bound_global_trial_basis_u1_0_1_stride_1]) - call C_F_Pointer(bound_global_trial_basis_u1_0_2, & - global_trial_basis_u1_0_2, [ & - bound_global_trial_basis_u1_0_2_shape_4 * & - bound_global_trial_basis_u1_0_2_stride_4, & - bound_global_trial_basis_u1_0_2_shape_3 * & - bound_global_trial_basis_u1_0_2_stride_3, & - bound_global_trial_basis_u1_0_2_shape_2 * & - bound_global_trial_basis_u1_0_2_stride_2, & - bound_global_trial_basis_u1_0_2_shape_1 * & - bound_global_trial_basis_u1_0_2_stride_1]) - call C_F_Pointer(bound_global_trial_basis_u1_1_1, & - global_trial_basis_u1_1_1, [ & - bound_global_trial_basis_u1_1_1_shape_4 * & - bound_global_trial_basis_u1_1_1_stride_4, & - bound_global_trial_basis_u1_1_1_shape_3 * & - bound_global_trial_basis_u1_1_1_stride_3, & - bound_global_trial_basis_u1_1_1_shape_2 * & - bound_global_trial_basis_u1_1_1_stride_2, & - bound_global_trial_basis_u1_1_1_shape_1 * & - bound_global_trial_basis_u1_1_1_stride_1]) - call C_F_Pointer(bound_global_trial_basis_u1_1_2, & - global_trial_basis_u1_1_2, [ & - bound_global_trial_basis_u1_1_2_shape_4 * & - bound_global_trial_basis_u1_1_2_stride_4, & - bound_global_trial_basis_u1_1_2_shape_3 * & - bound_global_trial_basis_u1_1_2_stride_3, & - bound_global_trial_basis_u1_1_2_shape_2 * & - bound_global_trial_basis_u1_1_2_stride_2, & - bound_global_trial_basis_u1_1_2_shape_1 * & - bound_global_trial_basis_u1_1_2_stride_1]) - call C_F_Pointer(bound_global_span_v1_0_1, global_span_v1_0_1, [ & - bound_global_span_v1_0_1_shape_1 * & - bound_global_span_v1_0_1_stride_1]) - call C_F_Pointer(bound_global_span_v1_0_2, global_span_v1_0_2, [ & - bound_global_span_v1_0_2_shape_1 * & - bound_global_span_v1_0_2_stride_1]) - call C_F_Pointer(bound_global_span_v1_1_1, global_span_v1_1_1, [ & - bound_global_span_v1_1_1_shape_1 * & - bound_global_span_v1_1_1_stride_1]) - call C_F_Pointer(bound_global_span_v1_1_2, global_span_v1_1_2, [ & - bound_global_span_v1_1_2_shape_1 * & - bound_global_span_v1_1_2_stride_1]) - call C_F_Pointer(bound_global_x1, global_x1, [ & - bound_global_x1_shape_2 * bound_global_x1_stride_2, & - bound_global_x1_shape_1 * bound_global_x1_stride_1]) - call C_F_Pointer(bound_global_x2, global_x2, [ & - bound_global_x2_shape_2 * bound_global_x2_stride_2, & - bound_global_x2_shape_1 * bound_global_x2_stride_1]) - call C_F_Pointer(bound_g_mat_u1_0_v1_0_e0el77nq, & - g_mat_u1_0_v1_0_e0el77nq, [ & - bound_g_mat_u1_0_v1_0_e0el77nq_shape_4 * & - bound_g_mat_u1_0_v1_0_e0el77nq_stride_4, & - bound_g_mat_u1_0_v1_0_e0el77nq_shape_3 * & - bound_g_mat_u1_0_v1_0_e0el77nq_stride_3, & - bound_g_mat_u1_0_v1_0_e0el77nq_shape_2 * & - bound_g_mat_u1_0_v1_0_e0el77nq_stride_2, & - bound_g_mat_u1_0_v1_0_e0el77nq_shape_1 * & - bound_g_mat_u1_0_v1_0_e0el77nq_stride_1]) - call C_F_Pointer(bound_g_mat_u1_1_v1_0_e0el77nq, & - g_mat_u1_1_v1_0_e0el77nq, [ & - bound_g_mat_u1_1_v1_0_e0el77nq_shape_4 * & - bound_g_mat_u1_1_v1_0_e0el77nq_stride_4, & - bound_g_mat_u1_1_v1_0_e0el77nq_shape_3 * & - bound_g_mat_u1_1_v1_0_e0el77nq_stride_3, & - bound_g_mat_u1_1_v1_0_e0el77nq_shape_2 * & - bound_g_mat_u1_1_v1_0_e0el77nq_stride_2, & - bound_g_mat_u1_1_v1_0_e0el77nq_shape_1 * & - bound_g_mat_u1_1_v1_0_e0el77nq_stride_1]) - call C_F_Pointer(bound_g_mat_u1_0_v1_1_e0el77nq, & - g_mat_u1_0_v1_1_e0el77nq, [ & - bound_g_mat_u1_0_v1_1_e0el77nq_shape_4 * & - bound_g_mat_u1_0_v1_1_e0el77nq_stride_4, & - bound_g_mat_u1_0_v1_1_e0el77nq_shape_3 * & - bound_g_mat_u1_0_v1_1_e0el77nq_stride_3, & - bound_g_mat_u1_0_v1_1_e0el77nq_shape_2 * & - bound_g_mat_u1_0_v1_1_e0el77nq_stride_2, & - bound_g_mat_u1_0_v1_1_e0el77nq_shape_1 * & - bound_g_mat_u1_0_v1_1_e0el77nq_stride_1]) - call C_F_Pointer(bound_g_mat_u1_1_v1_1_e0el77nq, & - g_mat_u1_1_v1_1_e0el77nq, [ & - bound_g_mat_u1_1_v1_1_e0el77nq_shape_4 * & - bound_g_mat_u1_1_v1_1_e0el77nq_stride_4, & - bound_g_mat_u1_1_v1_1_e0el77nq_shape_3 * & - bound_g_mat_u1_1_v1_1_e0el77nq_stride_3, & - bound_g_mat_u1_1_v1_1_e0el77nq_shape_2 * & - bound_g_mat_u1_1_v1_1_e0el77nq_stride_2, & - bound_g_mat_u1_1_v1_1_e0el77nq_shape_1 * & - bound_g_mat_u1_1_v1_1_e0el77nq_stride_1]) - call assemble_matrix_e0el77nq(global_test_basis_v1_0_1 = & - global_test_basis_v1_0_1(1_i64:: & - bound_global_test_basis_v1_0_1_stride_4, 1_i64:: & - bound_global_test_basis_v1_0_1_stride_3, 1_i64:: & - bound_global_test_basis_v1_0_1_stride_2, 1_i64:: & - bound_global_test_basis_v1_0_1_stride_1), & - global_test_basis_v1_0_2 = global_test_basis_v1_0_2(1_i64:: & - bound_global_test_basis_v1_0_2_stride_4, 1_i64:: & - bound_global_test_basis_v1_0_2_stride_3, 1_i64:: & - bound_global_test_basis_v1_0_2_stride_2, 1_i64:: & - bound_global_test_basis_v1_0_2_stride_1), & - global_test_basis_v1_1_1 = global_test_basis_v1_1_1(1_i64:: & - bound_global_test_basis_v1_1_1_stride_4, 1_i64:: & - bound_global_test_basis_v1_1_1_stride_3, 1_i64:: & - bound_global_test_basis_v1_1_1_stride_2, 1_i64:: & - bound_global_test_basis_v1_1_1_stride_1), & - global_test_basis_v1_1_2 = global_test_basis_v1_1_2(1_i64:: & - bound_global_test_basis_v1_1_2_stride_4, 1_i64:: & - bound_global_test_basis_v1_1_2_stride_3, 1_i64:: & - bound_global_test_basis_v1_1_2_stride_2, 1_i64:: & - bound_global_test_basis_v1_1_2_stride_1), & - global_trial_basis_u1_0_1 = global_trial_basis_u1_0_1(1_i64:: & - bound_global_trial_basis_u1_0_1_stride_4, 1_i64:: & - bound_global_trial_basis_u1_0_1_stride_3, 1_i64:: & - bound_global_trial_basis_u1_0_1_stride_2, 1_i64:: & - bound_global_trial_basis_u1_0_1_stride_1), & - global_trial_basis_u1_0_2 = global_trial_basis_u1_0_2(1_i64:: & - bound_global_trial_basis_u1_0_2_stride_4, 1_i64:: & - bound_global_trial_basis_u1_0_2_stride_3, 1_i64:: & - bound_global_trial_basis_u1_0_2_stride_2, 1_i64:: & - bound_global_trial_basis_u1_0_2_stride_1), & - global_trial_basis_u1_1_1 = global_trial_basis_u1_1_1(1_i64:: & - bound_global_trial_basis_u1_1_1_stride_4, 1_i64:: & - bound_global_trial_basis_u1_1_1_stride_3, 1_i64:: & - bound_global_trial_basis_u1_1_1_stride_2, 1_i64:: & - bound_global_trial_basis_u1_1_1_stride_1), & - global_trial_basis_u1_1_2 = global_trial_basis_u1_1_2(1_i64:: & - bound_global_trial_basis_u1_1_2_stride_4, 1_i64:: & - bound_global_trial_basis_u1_1_2_stride_3, 1_i64:: & - bound_global_trial_basis_u1_1_2_stride_2, 1_i64:: & - bound_global_trial_basis_u1_1_2_stride_1), global_span_v1_0_1 & - = global_span_v1_0_1(1_i64::bound_global_span_v1_0_1_stride_1 & - ), global_span_v1_0_2 = global_span_v1_0_2(1_i64:: & - bound_global_span_v1_0_2_stride_1), global_span_v1_1_1 = & - global_span_v1_1_1(1_i64::bound_global_span_v1_1_1_stride_1), & - global_span_v1_1_2 = global_span_v1_1_2(1_i64:: & - bound_global_span_v1_1_2_stride_1), global_x1 = global_x1( & - 1_i64::bound_global_x1_stride_2, 1_i64:: & - bound_global_x1_stride_1), global_x2 = global_x2(1_i64:: & - bound_global_x2_stride_2, 1_i64::bound_global_x2_stride_1), & - test_v1_0_p1 = test_v1_0_p1, test_v1_0_p2 = test_v1_0_p2, & - test_v1_1_p1 = test_v1_1_p1, test_v1_1_p2 = test_v1_1_p2, & - trial_u1_0_p1 = trial_u1_0_p1, trial_u1_0_p2 = trial_u1_0_p2, & - trial_u1_1_p1 = trial_u1_1_p1, trial_u1_1_p2 = trial_u1_1_p2, & - n_element_1 = n_element_1, n_element_2 = n_element_2, k1 = k1 & - , k2 = k2, pad1 = pad1, pad2 = pad2, g_mat_u1_0_v1_0_e0el77nq & - = g_mat_u1_0_v1_0_e0el77nq(1_i64:: & - bound_g_mat_u1_0_v1_0_e0el77nq_stride_4, 1_i64:: & - bound_g_mat_u1_0_v1_0_e0el77nq_stride_3, 1_i64:: & - bound_g_mat_u1_0_v1_0_e0el77nq_stride_2, 1_i64:: & - bound_g_mat_u1_0_v1_0_e0el77nq_stride_1), & - g_mat_u1_1_v1_0_e0el77nq = g_mat_u1_1_v1_0_e0el77nq(1_i64:: & - bound_g_mat_u1_1_v1_0_e0el77nq_stride_4, 1_i64:: & - bound_g_mat_u1_1_v1_0_e0el77nq_stride_3, 1_i64:: & - bound_g_mat_u1_1_v1_0_e0el77nq_stride_2, 1_i64:: & - bound_g_mat_u1_1_v1_0_e0el77nq_stride_1), & - g_mat_u1_0_v1_1_e0el77nq = g_mat_u1_0_v1_1_e0el77nq(1_i64:: & - bound_g_mat_u1_0_v1_1_e0el77nq_stride_4, 1_i64:: & - bound_g_mat_u1_0_v1_1_e0el77nq_stride_3, 1_i64:: & - bound_g_mat_u1_0_v1_1_e0el77nq_stride_2, 1_i64:: & - bound_g_mat_u1_0_v1_1_e0el77nq_stride_1), & - g_mat_u1_1_v1_1_e0el77nq = g_mat_u1_1_v1_1_e0el77nq(1_i64:: & - bound_g_mat_u1_1_v1_1_e0el77nq_stride_4, 1_i64:: & - bound_g_mat_u1_1_v1_1_e0el77nq_stride_3, 1_i64:: & - bound_g_mat_u1_1_v1_1_e0el77nq_stride_2, 1_i64:: & - bound_g_mat_u1_1_v1_1_e0el77nq_stride_1)) - - end subroutine bind_c_assemble_matrix_e0el77nq - !........................................ - -end module bind_c_dependencies_e0el77nq_mx2lvwh9fed2 diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.f90.lock b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.f90.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.mod b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.mod deleted file mode 100644 index d906d0f5809db0572d2d64617a662149cc7f20c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3277 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 LDQh{PsGR@+M5%gx diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.o b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.o deleted file mode 100644 index 538230ff04807cdabf8fab58a6cc3f1f6522836d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10152 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 diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.o.lock b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_e0el77nq_mx2lvwh9fed2.o.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.f90 b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.f90 deleted file mode 100644 index b12a9888..00000000 --- a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.f90 +++ /dev/null @@ -1,181 +0,0 @@ -module bind_c_dependencies_vga8r193_6xftl47r79t3 - - use dependencies_vga8r193_6xftl47r79t3 - - use, intrinsic :: ISO_C_Binding, only : f64 => C_DOUBLE , i64 => & - C_INT64_T , C_F_Pointer , c_ptr - implicit none - - contains - - !........................................ - subroutine bind_c_lo_dot_vga8r193(bound_mat00, bound_mat00_shape_1, & - bound_mat00_shape_2, bound_mat00_shape_3, bound_mat00_shape_4, & - bound_mat00_stride_1, bound_mat00_stride_2, & - bound_mat00_stride_3, bound_mat00_stride_4, bound_mat01, & - bound_mat01_shape_1, bound_mat01_shape_2, bound_mat01_shape_3, & - bound_mat01_shape_4, bound_mat01_stride_1, bound_mat01_stride_2 & - , bound_mat01_stride_3, bound_mat01_stride_4, bound_mat10, & - bound_mat10_shape_1, bound_mat10_shape_2, bound_mat10_shape_3, & - bound_mat10_shape_4, bound_mat10_stride_1, bound_mat10_stride_2 & - , bound_mat10_stride_3, bound_mat10_stride_4, bound_mat11, & - bound_mat11_shape_1, bound_mat11_shape_2, bound_mat11_shape_3, & - bound_mat11_shape_4, bound_mat11_stride_1, bound_mat11_stride_2 & - , bound_mat11_stride_3, bound_mat11_stride_4, bound_x0, & - bound_x0_shape_1, bound_x0_shape_2, bound_x0_stride_1, & - bound_x0_stride_2, bound_x1, bound_x1_shape_1, bound_x1_shape_2 & - , bound_x1_stride_1, bound_x1_stride_2, bound_out0, & - bound_out0_shape_1, bound_out0_shape_2, bound_out0_stride_1, & - bound_out0_stride_2, bound_out1, bound_out1_shape_1, & - bound_out1_shape_2, bound_out1_stride_1, bound_out1_stride_2, & - s00_1, s00_2, s01_1, s01_2, s10_1, s10_2, s11_1, s11_2, n00_1, & - n00_2, n01_1, n01_2, n10_1, n10_2, n11_1, n11_2, ne00_1, ne00_2 & - , ne01_1, ne01_2, ne10_1, ne10_2, ne11_1, ne11_2) bind(c) - - implicit none - - type(c_ptr), value :: bound_mat00 - integer(i64), value :: bound_mat00_shape_1 - integer(i64), value :: bound_mat00_shape_2 - integer(i64), value :: bound_mat00_shape_3 - integer(i64), value :: bound_mat00_shape_4 - integer(i64), value :: bound_mat00_stride_1 - integer(i64), value :: bound_mat00_stride_2 - integer(i64), value :: bound_mat00_stride_3 - integer(i64), value :: bound_mat00_stride_4 - type(c_ptr), value :: bound_mat01 - integer(i64), value :: bound_mat01_shape_1 - integer(i64), value :: bound_mat01_shape_2 - integer(i64), value :: bound_mat01_shape_3 - integer(i64), value :: bound_mat01_shape_4 - integer(i64), value :: bound_mat01_stride_1 - integer(i64), value :: bound_mat01_stride_2 - integer(i64), value :: bound_mat01_stride_3 - integer(i64), value :: bound_mat01_stride_4 - type(c_ptr), value :: bound_mat10 - integer(i64), value :: bound_mat10_shape_1 - integer(i64), value :: bound_mat10_shape_2 - integer(i64), value :: bound_mat10_shape_3 - integer(i64), value :: bound_mat10_shape_4 - integer(i64), value :: bound_mat10_stride_1 - integer(i64), value :: bound_mat10_stride_2 - integer(i64), value :: bound_mat10_stride_3 - integer(i64), value :: bound_mat10_stride_4 - type(c_ptr), value :: bound_mat11 - integer(i64), value :: bound_mat11_shape_1 - integer(i64), value :: bound_mat11_shape_2 - integer(i64), value :: bound_mat11_shape_3 - integer(i64), value :: bound_mat11_shape_4 - integer(i64), value :: bound_mat11_stride_1 - integer(i64), value :: bound_mat11_stride_2 - integer(i64), value :: bound_mat11_stride_3 - integer(i64), value :: bound_mat11_stride_4 - type(c_ptr), value :: bound_x0 - integer(i64), value :: bound_x0_shape_1 - integer(i64), value :: bound_x0_shape_2 - integer(i64), value :: bound_x0_stride_1 - integer(i64), value :: bound_x0_stride_2 - type(c_ptr), value :: bound_x1 - integer(i64), value :: bound_x1_shape_1 - integer(i64), value :: bound_x1_shape_2 - integer(i64), value :: bound_x1_stride_1 - integer(i64), value :: bound_x1_stride_2 - type(c_ptr), value :: bound_out0 - integer(i64), value :: bound_out0_shape_1 - integer(i64), value :: bound_out0_shape_2 - integer(i64), value :: bound_out0_stride_1 - integer(i64), value :: bound_out0_stride_2 - type(c_ptr), value :: bound_out1 - integer(i64), value :: bound_out1_shape_1 - integer(i64), value :: bound_out1_shape_2 - integer(i64), value :: bound_out1_stride_1 - integer(i64), value :: bound_out1_stride_2 - integer(i64), value :: s00_1 - integer(i64), value :: s00_2 - integer(i64), value :: s01_1 - integer(i64), value :: s01_2 - integer(i64), value :: s10_1 - integer(i64), value :: s10_2 - integer(i64), value :: s11_1 - integer(i64), value :: s11_2 - integer(i64), value :: n00_1 - integer(i64), value :: n00_2 - integer(i64), value :: n01_1 - integer(i64), value :: n01_2 - integer(i64), value :: n10_1 - integer(i64), value :: n10_2 - integer(i64), value :: n11_1 - integer(i64), value :: n11_2 - integer(i64), value :: ne00_1 - integer(i64), value :: ne00_2 - integer(i64), value :: ne01_1 - integer(i64), value :: ne01_2 - integer(i64), value :: ne10_1 - integer(i64), value :: ne10_2 - integer(i64), value :: ne11_1 - integer(i64), value :: ne11_2 - real(f64), pointer :: mat00(:,:,:,:) - real(f64), pointer :: mat01(:,:,:,:) - real(f64), pointer :: mat10(:,:,:,:) - real(f64), pointer :: mat11(:,:,:,:) - real(f64), pointer :: x0(:,:) - real(f64), pointer :: x1(:,:) - real(f64), pointer :: out0(:,:) - real(f64), pointer :: out1(:,:) - - call C_F_Pointer(bound_mat00, mat00, [bound_mat00_shape_4 * & - bound_mat00_stride_4,bound_mat00_shape_3 * & - bound_mat00_stride_3,bound_mat00_shape_2 * & - bound_mat00_stride_2,bound_mat00_shape_1 * & - bound_mat00_stride_1]) - call C_F_Pointer(bound_mat01, mat01, [bound_mat01_shape_4 * & - bound_mat01_stride_4,bound_mat01_shape_3 * & - bound_mat01_stride_3,bound_mat01_shape_2 * & - bound_mat01_stride_2,bound_mat01_shape_1 * & - bound_mat01_stride_1]) - call C_F_Pointer(bound_mat10, mat10, [bound_mat10_shape_4 * & - bound_mat10_stride_4,bound_mat10_shape_3 * & - bound_mat10_stride_3,bound_mat10_shape_2 * & - bound_mat10_stride_2,bound_mat10_shape_1 * & - bound_mat10_stride_1]) - call C_F_Pointer(bound_mat11, mat11, [bound_mat11_shape_4 * & - bound_mat11_stride_4,bound_mat11_shape_3 * & - bound_mat11_stride_3,bound_mat11_shape_2 * & - bound_mat11_stride_2,bound_mat11_shape_1 * & - bound_mat11_stride_1]) - call C_F_Pointer(bound_x0, x0, [bound_x0_shape_2 * bound_x0_stride_2 & - ,bound_x0_shape_1 * bound_x0_stride_1]) - call C_F_Pointer(bound_x1, x1, [bound_x1_shape_2 * bound_x1_stride_2 & - ,bound_x1_shape_1 * bound_x1_stride_1]) - call C_F_Pointer(bound_out0, out0, [bound_out0_shape_2 * & - bound_out0_stride_2,bound_out0_shape_1 * bound_out0_stride_1] & - ) - call C_F_Pointer(bound_out1, out1, [bound_out1_shape_2 * & - bound_out1_stride_2,bound_out1_shape_1 * bound_out1_stride_1] & - ) - call lo_dot_vga8r193(mat00 = mat00(1_i64::bound_mat00_stride_4, & - 1_i64::bound_mat00_stride_3, 1_i64::bound_mat00_stride_2, & - 1_i64::bound_mat00_stride_1), mat01 = mat01(1_i64:: & - bound_mat01_stride_4, 1_i64::bound_mat01_stride_3, 1_i64:: & - bound_mat01_stride_2, 1_i64::bound_mat01_stride_1), mat10 = & - mat10(1_i64::bound_mat10_stride_4, 1_i64:: & - bound_mat10_stride_3, 1_i64::bound_mat10_stride_2, 1_i64:: & - bound_mat10_stride_1), mat11 = mat11(1_i64:: & - bound_mat11_stride_4, 1_i64::bound_mat11_stride_3, 1_i64:: & - bound_mat11_stride_2, 1_i64::bound_mat11_stride_1), x0 = x0( & - 1_i64::bound_x0_stride_2, 1_i64::bound_x0_stride_1), x1 = x1( & - 1_i64::bound_x1_stride_2, 1_i64::bound_x1_stride_1), out0 = & - out0(1_i64::bound_out0_stride_2, 1_i64::bound_out0_stride_1), & - out1 = out1(1_i64::bound_out1_stride_2, 1_i64:: & - bound_out1_stride_1), s00_1 = s00_1, s00_2 = s00_2, s01_1 = & - s01_1, s01_2 = s01_2, s10_1 = s10_1, s10_2 = s10_2, s11_1 = & - s11_1, s11_2 = s11_2, n00_1 = n00_1, n00_2 = n00_2, n01_1 = & - n01_1, n01_2 = n01_2, n10_1 = n10_1, n10_2 = n10_2, n11_1 = & - n11_1, n11_2 = n11_2, ne00_1 = ne00_1, ne00_2 = ne00_2, & - ne01_1 = ne01_1, ne01_2 = ne01_2, ne10_1 = ne10_1, ne10_2 = & - ne10_2, ne11_1 = ne11_1, ne11_2 = ne11_2) - - end subroutine bind_c_lo_dot_vga8r193 - !........................................ - -end module bind_c_dependencies_vga8r193_6xftl47r79t3 diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.f90.lock b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.f90.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.mod b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.mod deleted file mode 100644 index 343f9f5d7b43e1aa5aa8157a137d6c99132fb891..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2334 zcmV+(3E}o1iwFP!000006YZSebK1HR$KUl=?3Lv8D`tJQbcsM3e`{o#0+_2A2L`t5!O-)9f2 z`EmgPMgiPD%x>1RDcn6Qzrd&YVp`l5)7jVAVme#g&S$IQ`yV&v0aI1Pk9X^PojfGz zTK(%TmEz*!5?RFJD|PG<}=ynSiNoheYb`sTrBWlU2XyF z9i0zbE5ou~6xaPuyKK~&Qnf0d07B4o;-%2mZPVFZF<;ErMa_dnRb)FomOZ3+bFxvOWtfa?!2e3vM!9X;fH)&MTu*peQiG*+>w@>~T#!vI?HYpRezIK03Q+2K`cH zT?RxE>=Y_EtpTsX;AqblM>sf?aEjaI*FOVyl%sNo`RlQaChvy*$+*+YA@Al_bWPS3 zgUK+5towWRaa830twt=^TNHKoJ++;+TKQ-M{p)-GV(VKL;r$J;{KAf-?PFQR6!*q6Yf4{t?TF7d_ zvo@E1mNswO&Nw$)INf^0Wbp!1E}?eOX+w^QwUuk6RMcFLU!vVF%d;o5t7Db$q##Uo zHr+3a>2kdz3|?gH!A-1L$6^91dn?1*d8;dq#Dl-+JhYoiOX1p$HXmGI3ZaA$Aq*i@ z5NZe`2xABn2n~cOCf`8sZ4z7~%wC191w8gajc8AyJTMNFqpLND@d4 zBqt>^TcH!$}*NS2|Al8SQ~(p!0I@|eO@YB>G?bQZZ!dfrcZt#PN{gAaL+ zGG`fPol(DNkq!^Dj|G{N4~up_$b0R)*ZSCW#5uNz&GUt|g|xNNnBuJ*lH~9%)~7lo z8)jEIx$Y%TnNQD_+s>$(cdJ8+8W`r3BW;$j&b}Ybi@ZtS!cQKfzvVLojbkk1!1&q0bqNZ)`awe&$Y zipaNvjJ=SJLh|h(6E9?=n0z}(<3gUVjXzYs_i_ue)NdtyjJ)()p^uT5eyh;O$V7DEy!2Z|UPxa0tzs`EFa1_-l0jbew=#QdJoP*EG4j%HEq#o<^jo8kk(Yk! zu*S$yzqRs0^3rduy^y^0TSs0xN+eT=;Pm`I0_S0+i&MPoTolF)<5tb^4)BFBM}XdfdpKT<|nN%;cLH5((( zQ+dZoTv46xs~<|0SSsY^D^pQ1^A#nD6>^I!BP%LizA|X3xW$zTD=KEbBHdrG(<`GZ zDrUZlEET)BiYqE+z9Ma3@Y5?(Q8DvXYN@!zRVphgUcO36+ZQu-f|Z6FEN0$PB^JBT z(i<#h-m>~WV<%c^yuo7Tt)#?a7h7h7#mifExm|EuEvBoeq;#=5Juiy;h$q@DI%582oD^K%rWN9C^{|A!a)1G{W6>-ze{w`al$9J{N) z{<0aFp4};(tGqX|3mF}ra)I17K(?#pb|jWE8;vGcdAk_>I~&+#)XYkcj97hL1Cv-7oh@-rh32X*+< z9PLY3RG~h;aisBb0M){KQ?+#$G%IBO?p{brFB}hqe})%KeX3>O4L_^Ww@b43CtG-M z+2z>#(=AN6us-3!ge$C1xiH~U^+^{dT)IB(!h|cTPrNYUitAG^Ot_NzrnQ=fie z!j;x1V0dsTS)YPo!iDuo7$#g{eHw-dm#R<1FyYb%Q!z}yqJzm8CSdWwbPN-)U6a}iqq)X{xym0?)KZg?InZ_HfpESv}YGTS?z#+VqZaOD9Yill^S1`q!kkPp5=x>&{JU&(Izxp1uF<_vTXk1tp_kX&7Mu E0QH}Q#{d8T diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.o b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_vga8r193_6xftl47r79t3.o deleted file mode 100644 index 13977da22656939888b2ed006a91cb28a3324da5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5176 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 C_DOUBLE , i64 => & - C_INT64_T , C_F_Pointer , c_ptr - implicit none - - contains - - !........................................ - subroutine bind_c_assemble_matrix_wti60kr7( & - bound_global_test_basis_v2_1, & - bound_global_test_basis_v2_1_shape_1, & - bound_global_test_basis_v2_1_shape_2, & - bound_global_test_basis_v2_1_shape_3, & - bound_global_test_basis_v2_1_shape_4, & - bound_global_test_basis_v2_1_stride_1, & - bound_global_test_basis_v2_1_stride_2, & - bound_global_test_basis_v2_1_stride_3, & - bound_global_test_basis_v2_1_stride_4, & - bound_global_test_basis_v2_2, & - bound_global_test_basis_v2_2_shape_1, & - bound_global_test_basis_v2_2_shape_2, & - bound_global_test_basis_v2_2_shape_3, & - bound_global_test_basis_v2_2_shape_4, & - bound_global_test_basis_v2_2_stride_1, & - bound_global_test_basis_v2_2_stride_2, & - bound_global_test_basis_v2_2_stride_3, & - bound_global_test_basis_v2_2_stride_4, & - bound_global_trial_basis_u2_1, & - bound_global_trial_basis_u2_1_shape_1, & - bound_global_trial_basis_u2_1_shape_2, & - bound_global_trial_basis_u2_1_shape_3, & - bound_global_trial_basis_u2_1_shape_4, & - bound_global_trial_basis_u2_1_stride_1, & - bound_global_trial_basis_u2_1_stride_2, & - bound_global_trial_basis_u2_1_stride_3, & - bound_global_trial_basis_u2_1_stride_4, & - bound_global_trial_basis_u2_2, & - bound_global_trial_basis_u2_2_shape_1, & - bound_global_trial_basis_u2_2_shape_2, & - bound_global_trial_basis_u2_2_shape_3, & - bound_global_trial_basis_u2_2_shape_4, & - bound_global_trial_basis_u2_2_stride_1, & - bound_global_trial_basis_u2_2_stride_2, & - bound_global_trial_basis_u2_2_stride_3, & - bound_global_trial_basis_u2_2_stride_4, bound_global_span_v2_1, & - bound_global_span_v2_1_shape_1, bound_global_span_v2_1_stride_1 & - , bound_global_span_v2_2, bound_global_span_v2_2_shape_1, & - bound_global_span_v2_2_stride_1, bound_global_x1, & - bound_global_x1_shape_1, bound_global_x1_shape_2, & - bound_global_x1_stride_1, bound_global_x1_stride_2, & - bound_global_x2, bound_global_x2_shape_1, & - bound_global_x2_shape_2, bound_global_x2_stride_1, & - bound_global_x2_stride_2, test_v2_p1, test_v2_p2, trial_u2_p1, & - trial_u2_p2, n_element_1, n_element_2, k1, k2, pad1, pad2, & - bound_g_mat_u2_v2_wti60kr7, bound_g_mat_u2_v2_wti60kr7_shape_1, & - bound_g_mat_u2_v2_wti60kr7_shape_2, & - bound_g_mat_u2_v2_wti60kr7_shape_3, & - bound_g_mat_u2_v2_wti60kr7_shape_4, & - bound_g_mat_u2_v2_wti60kr7_stride_1, & - bound_g_mat_u2_v2_wti60kr7_stride_2, & - bound_g_mat_u2_v2_wti60kr7_stride_3, & - bound_g_mat_u2_v2_wti60kr7_stride_4) bind(c) - - implicit none - - type(c_ptr), value :: bound_global_test_basis_v2_1 - integer(i64), value :: bound_global_test_basis_v2_1_shape_1 - integer(i64), value :: bound_global_test_basis_v2_1_shape_2 - integer(i64), value :: bound_global_test_basis_v2_1_shape_3 - integer(i64), value :: bound_global_test_basis_v2_1_shape_4 - integer(i64), value :: bound_global_test_basis_v2_1_stride_1 - integer(i64), value :: bound_global_test_basis_v2_1_stride_2 - integer(i64), value :: bound_global_test_basis_v2_1_stride_3 - integer(i64), value :: bound_global_test_basis_v2_1_stride_4 - type(c_ptr), value :: bound_global_test_basis_v2_2 - integer(i64), value :: bound_global_test_basis_v2_2_shape_1 - integer(i64), value :: bound_global_test_basis_v2_2_shape_2 - integer(i64), value :: bound_global_test_basis_v2_2_shape_3 - integer(i64), value :: bound_global_test_basis_v2_2_shape_4 - integer(i64), value :: bound_global_test_basis_v2_2_stride_1 - integer(i64), value :: bound_global_test_basis_v2_2_stride_2 - integer(i64), value :: bound_global_test_basis_v2_2_stride_3 - integer(i64), value :: bound_global_test_basis_v2_2_stride_4 - type(c_ptr), value :: bound_global_trial_basis_u2_1 - integer(i64), value :: bound_global_trial_basis_u2_1_shape_1 - integer(i64), value :: bound_global_trial_basis_u2_1_shape_2 - integer(i64), value :: bound_global_trial_basis_u2_1_shape_3 - integer(i64), value :: bound_global_trial_basis_u2_1_shape_4 - integer(i64), value :: bound_global_trial_basis_u2_1_stride_1 - integer(i64), value :: bound_global_trial_basis_u2_1_stride_2 - integer(i64), value :: bound_global_trial_basis_u2_1_stride_3 - integer(i64), value :: bound_global_trial_basis_u2_1_stride_4 - type(c_ptr), value :: bound_global_trial_basis_u2_2 - integer(i64), value :: bound_global_trial_basis_u2_2_shape_1 - integer(i64), value :: bound_global_trial_basis_u2_2_shape_2 - integer(i64), value :: bound_global_trial_basis_u2_2_shape_3 - integer(i64), value :: bound_global_trial_basis_u2_2_shape_4 - integer(i64), value :: bound_global_trial_basis_u2_2_stride_1 - integer(i64), value :: bound_global_trial_basis_u2_2_stride_2 - integer(i64), value :: bound_global_trial_basis_u2_2_stride_3 - integer(i64), value :: bound_global_trial_basis_u2_2_stride_4 - type(c_ptr), value :: bound_global_span_v2_1 - integer(i64), value :: bound_global_span_v2_1_shape_1 - integer(i64), value :: bound_global_span_v2_1_stride_1 - type(c_ptr), value :: bound_global_span_v2_2 - integer(i64), value :: bound_global_span_v2_2_shape_1 - integer(i64), value :: bound_global_span_v2_2_stride_1 - type(c_ptr), value :: bound_global_x1 - integer(i64), value :: bound_global_x1_shape_1 - integer(i64), value :: bound_global_x1_shape_2 - integer(i64), value :: bound_global_x1_stride_1 - integer(i64), value :: bound_global_x1_stride_2 - type(c_ptr), value :: bound_global_x2 - integer(i64), value :: bound_global_x2_shape_1 - integer(i64), value :: bound_global_x2_shape_2 - integer(i64), value :: bound_global_x2_stride_1 - integer(i64), value :: bound_global_x2_stride_2 - integer(i64), value :: test_v2_p1 - integer(i64), value :: test_v2_p2 - integer(i64), value :: trial_u2_p1 - integer(i64), value :: trial_u2_p2 - integer(i64), value :: n_element_1 - integer(i64), value :: n_element_2 - integer(i64), value :: k1 - integer(i64), value :: k2 - integer(i64), value :: pad1 - integer(i64), value :: pad2 - type(c_ptr), value :: bound_g_mat_u2_v2_wti60kr7 - integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_shape_1 - integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_shape_2 - integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_shape_3 - integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_shape_4 - integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_stride_1 - integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_stride_2 - integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_stride_3 - integer(i64), value :: bound_g_mat_u2_v2_wti60kr7_stride_4 - real(f64), pointer :: global_test_basis_v2_1(:,:,:,:) - real(f64), pointer :: global_test_basis_v2_2(:,:,:,:) - real(f64), pointer :: global_trial_basis_u2_1(:,:,:,:) - real(f64), pointer :: global_trial_basis_u2_2(:,:,:,:) - integer(i64), pointer :: global_span_v2_1(:) - integer(i64), pointer :: global_span_v2_2(:) - real(f64), pointer :: global_x1(:,:) - real(f64), pointer :: global_x2(:,:) - real(f64), pointer :: g_mat_u2_v2_wti60kr7(:,:,:,:) - - call C_F_Pointer(bound_global_test_basis_v2_1, & - global_test_basis_v2_1, [bound_global_test_basis_v2_1_shape_4 & - * bound_global_test_basis_v2_1_stride_4, & - bound_global_test_basis_v2_1_shape_3 * & - bound_global_test_basis_v2_1_stride_3, & - bound_global_test_basis_v2_1_shape_2 * & - bound_global_test_basis_v2_1_stride_2, & - bound_global_test_basis_v2_1_shape_1 * & - bound_global_test_basis_v2_1_stride_1]) - call C_F_Pointer(bound_global_test_basis_v2_2, & - global_test_basis_v2_2, [bound_global_test_basis_v2_2_shape_4 & - * bound_global_test_basis_v2_2_stride_4, & - bound_global_test_basis_v2_2_shape_3 * & - bound_global_test_basis_v2_2_stride_3, & - bound_global_test_basis_v2_2_shape_2 * & - bound_global_test_basis_v2_2_stride_2, & - bound_global_test_basis_v2_2_shape_1 * & - bound_global_test_basis_v2_2_stride_1]) - call C_F_Pointer(bound_global_trial_basis_u2_1, & - global_trial_basis_u2_1, [ & - bound_global_trial_basis_u2_1_shape_4 * & - bound_global_trial_basis_u2_1_stride_4, & - bound_global_trial_basis_u2_1_shape_3 * & - bound_global_trial_basis_u2_1_stride_3, & - bound_global_trial_basis_u2_1_shape_2 * & - bound_global_trial_basis_u2_1_stride_2, & - bound_global_trial_basis_u2_1_shape_1 * & - bound_global_trial_basis_u2_1_stride_1]) - call C_F_Pointer(bound_global_trial_basis_u2_2, & - global_trial_basis_u2_2, [ & - bound_global_trial_basis_u2_2_shape_4 * & - bound_global_trial_basis_u2_2_stride_4, & - bound_global_trial_basis_u2_2_shape_3 * & - bound_global_trial_basis_u2_2_stride_3, & - bound_global_trial_basis_u2_2_shape_2 * & - bound_global_trial_basis_u2_2_stride_2, & - bound_global_trial_basis_u2_2_shape_1 * & - bound_global_trial_basis_u2_2_stride_1]) - call C_F_Pointer(bound_global_span_v2_1, global_span_v2_1, [ & - bound_global_span_v2_1_shape_1 * & - bound_global_span_v2_1_stride_1]) - call C_F_Pointer(bound_global_span_v2_2, global_span_v2_2, [ & - bound_global_span_v2_2_shape_1 * & - bound_global_span_v2_2_stride_1]) - call C_F_Pointer(bound_global_x1, global_x1, [ & - bound_global_x1_shape_2 * bound_global_x1_stride_2, & - bound_global_x1_shape_1 * bound_global_x1_stride_1]) - call C_F_Pointer(bound_global_x2, global_x2, [ & - bound_global_x2_shape_2 * bound_global_x2_stride_2, & - bound_global_x2_shape_1 * bound_global_x2_stride_1]) - call C_F_Pointer(bound_g_mat_u2_v2_wti60kr7, g_mat_u2_v2_wti60kr7, [ & - bound_g_mat_u2_v2_wti60kr7_shape_4 * & - bound_g_mat_u2_v2_wti60kr7_stride_4, & - bound_g_mat_u2_v2_wti60kr7_shape_3 * & - bound_g_mat_u2_v2_wti60kr7_stride_3, & - bound_g_mat_u2_v2_wti60kr7_shape_2 * & - bound_g_mat_u2_v2_wti60kr7_stride_2, & - bound_g_mat_u2_v2_wti60kr7_shape_1 * & - bound_g_mat_u2_v2_wti60kr7_stride_1]) - call assemble_matrix_wti60kr7(global_test_basis_v2_1 = & - global_test_basis_v2_1(1_i64:: & - bound_global_test_basis_v2_1_stride_4, 1_i64:: & - bound_global_test_basis_v2_1_stride_3, 1_i64:: & - bound_global_test_basis_v2_1_stride_2, 1_i64:: & - bound_global_test_basis_v2_1_stride_1), & - global_test_basis_v2_2 = global_test_basis_v2_2(1_i64:: & - bound_global_test_basis_v2_2_stride_4, 1_i64:: & - bound_global_test_basis_v2_2_stride_3, 1_i64:: & - bound_global_test_basis_v2_2_stride_2, 1_i64:: & - bound_global_test_basis_v2_2_stride_1), & - global_trial_basis_u2_1 = global_trial_basis_u2_1(1_i64:: & - bound_global_trial_basis_u2_1_stride_4, 1_i64:: & - bound_global_trial_basis_u2_1_stride_3, 1_i64:: & - bound_global_trial_basis_u2_1_stride_2, 1_i64:: & - bound_global_trial_basis_u2_1_stride_1), & - global_trial_basis_u2_2 = global_trial_basis_u2_2(1_i64:: & - bound_global_trial_basis_u2_2_stride_4, 1_i64:: & - bound_global_trial_basis_u2_2_stride_3, 1_i64:: & - bound_global_trial_basis_u2_2_stride_2, 1_i64:: & - bound_global_trial_basis_u2_2_stride_1), global_span_v2_1 = & - global_span_v2_1(1_i64::bound_global_span_v2_1_stride_1), & - global_span_v2_2 = global_span_v2_2(1_i64:: & - bound_global_span_v2_2_stride_1), global_x1 = global_x1(1_i64 & - ::bound_global_x1_stride_2, 1_i64::bound_global_x1_stride_1), & - global_x2 = global_x2(1_i64::bound_global_x2_stride_2, 1_i64 & - ::bound_global_x2_stride_1), test_v2_p1 = test_v2_p1, & - test_v2_p2 = test_v2_p2, trial_u2_p1 = trial_u2_p1, & - trial_u2_p2 = trial_u2_p2, n_element_1 = n_element_1, & - n_element_2 = n_element_2, k1 = k1, k2 = k2, pad1 = pad1, & - pad2 = pad2, g_mat_u2_v2_wti60kr7 = g_mat_u2_v2_wti60kr7( & - 1_i64::bound_g_mat_u2_v2_wti60kr7_stride_4, 1_i64:: & - bound_g_mat_u2_v2_wti60kr7_stride_3, 1_i64:: & - bound_g_mat_u2_v2_wti60kr7_stride_2, 1_i64:: & - bound_g_mat_u2_v2_wti60kr7_stride_1)) - - end subroutine bind_c_assemble_matrix_wti60kr7 - !........................................ - -end module bind_c_dependencies_wti60kr7_6feykyplisif diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.f90.lock b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.f90.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.mod b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.mod deleted file mode 100644 index 92f03123c32a2a26e362c32a70f0de46e7d44e01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2336 zcmV+*3E%b~iwFP!000006YX40lcG!#zSpnF8}{Mdpb9A9$S5;wtgQxWzdI+wZgIvK zTaDJ4b@tb976>91A3F9}u`yxO0R|sWW@YA+Sr+-};~*FZULRi9v+v6YenfBE#d-xA zwKRBni>AA12J^S|D?Be&v+yOHMVn|fi&ig-XdC`#x8VA>H#_9>=;ybeo8@A=nEzw$ z>ZH|rfLr{LbmxKKE^aODCEV=ZG|<9uv0Wn~0c^4Qq5;cJN;d{tyXBj4&H%^yBv;DzMRzQ!$0;4ut**jNMJpr0K^@02dR`S zel8_XgKj5&s1PN2s(u8(z{C?Dh$+-Ii{{~Cwb+FP4TgzkiPqRKGMztpLD&1x^GSu$ zGpV|d!(O-D9sf1*p8OcE7mT|f@hh(fV=wsRj}t4&%P2nSajBR>U&NA`MwziZ4my*b zf9arzQ4YHOQMY|Eya$+idMc?H4+P2utRK7SvpNHjXdj-&-iHJ#Np)^tGzNAe+RsgN zL)i|GZX{ZMM4rZ57YA3@f2Ad*?Fxu~MM7G+||72q?)6vBvGaSTGHjjZ)qGb_E ztBwIT!H|nRDIAi6gM<^ltT#Wkyq8lW@8-9|GMan{29t5O?}Oj-AMqNmM~0KY2e0?H z_jwfh|4uv>#4W<2`i{@`+HHR{g29s?1l>*?5QZLpF&g@9AuSAtZQ)kBKu!fK%onTa zQY#H*M;S?_U)0J-^7@tw(Vz5s)j;$(eW;KYDx?+sFpH+k<@yD4ArT8|Wsd&@TE8O( z<5ITB4Qq+Wi$|VFwYVQ{FTd9FH)Llsidm!@sHMF2ZL$FKBaKY5Uq#{=|4KPhG zEigHlHkb~WE?7EPlvoTb11u9P3oH(n4VD9z3tR_IfivI+a1*!%oCCLkJHTDAb+9Se z3~U2z6Kspv9BdnG2W%G{9UKY{1IGZz1jho0gJXl^fa8LzgG<3>;2PkX;9B5vaBXlM za9t!V6iCM$SZBByxS6xo5E>m;dExKTCH(mhLt*U6d9z!Dk z?$#!CPwC7|y8UH?b~4d)g{O%6q#)35vU-UHTSqNiHn{&+TEJ2;&Kc0eHzmf{Py}B}JzX&PaB?1ysidHkch9DI! zXY3k+RJ5M4YY0-+g2t|4NL4EuyM`fEEotl;hE%ntv5O3OwyH@9im{7?n8B>%mS2Zk z&?;%D)gmM2;8ul;yWuTT;o0ghHLRdWeHlz8t-vW#UJkB`R^Sx5Zr=#sNwAW>t57%m zl9#__FN-)uPTQ;L{Z5g?_SKUXcf(oati7V)$tjZ5zNS#V8_*(6?Hl3yeI8WgrM;q& zv&cvL>SF9}IE#d|S2VP{MJn3Y6aaSvN@eSE8#_;W@E(iDTqawWs|GYfx-M4@Y^HQw zt{T`Z>AGAsuyN_STs5%S`E|J$L&~82BBXRzEP{2N{JLBW5EtXUxOnF@Vj>A7A!< zN!j!BDiWXcxDEwIq&V#Sf))lt(c8xB$+%wr(n%>C@&5Yu?Ii;fcm22sOs?0*MROvu zERBj+x@X&6DV#=wbW22{A8p!=RtMIgwJM%wN}9~*Nzc-XR-kwxuWPA^=h&p8jT`zS zukUMyry2G|4Po%UqKno^!zu9{C212Uam1UokrSudhgL&k-$^?25V7w*kpBT_fL3_j GSO5SoX?-dH diff --git a/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.o b/__gpyccel__/__epyccel__/__pyccel__/bind_c_dependencies_wti60kr7_6feykyplisif.o deleted file mode 100644 index a0f59e0b28355dc097b0be81747ba1f2a9375ff6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5320 zcmb_gPi$OA8Q&yMvI)q$1rCdZ#2)70MMByTsjLuEy&{$7Nn_PemspVG*@@R(tBJEp z40TWsuIeH`t+)8#gCqH1Bp-Z;WFLGmXhFM8QoCwNw&lQ9QHgK3G@*-xWETX>@Au7& zHv~nZz?0w3%r`T?@BcUBclWOk|8X=HJ8&q5AG}?7;|KAR#*636cxO2Agl8>jCwjOC z&x#uZGsc&Ae8O;|FgaoSc0BOx;6P{Wd*4df9`U%h@dYav22*|w+b|p%o*3>>!thjn zAm17HI-Hy%6`zX54x`@$o)fjR7`-sOaQV`u%j2H-IG)!l?iZk?&HVGYiNdf@3`egF zUnt9 zURH5%(a|evQb%`nd0LUHF5gi7Y!j=$HRx-h&8ltgO{`9E1m zwZP2~YL4yZv}(W{^eX1p)sRfis~K(pXs?L2#t~$uh5MqL+_l}=RaF}fss$pAD3^@#_LP}s79KjSzLOrE4WnbZd2B@J! zCOyHg>6R{pkVw2G^mWyQIDM5;n|N6YQUd?m?DU(crLXJVPxb5XPaF?U+zIM`dd6g0 z`t@3{`Boc`j%L*k_6G_5mTupr)~pOvP`7J3npS)0>u8TK&ho%Y=#y?x|Ku5+*#n^7 z+$3OMkUH=$T zHpPl{TG5oxs6m5>APU5+Q@#Z!M$mqTfRkiv4LU>YsA(B9#{}J+T$F?hfNlicJH7mh ziW70oBf=1H(y}bqm6zKNcZn<*LMB>Pa~vQBn2%2Sbvtl2Msa8{GZ|b?3#29@OQhd& zyb!vJDoKoXO#(ykV8#vNx8KoGlg3@)NDL`!y|rZUxV3cUN3a;`0WC$-Im*G*>AMC+=blQ2aIYS1)$ z7(7S$Bje7B&l7mN2Ei1z3r>~z&ksOc^gF04V5MnXehOk(leMiaKXeAASb-{D+z+C zSIP)@4LV*DRD)ax*;%>;5Bg{<2-@$OXj?~Bl_NKCwyd@MmK6s<{Q-h^TT(+RR$t{b zoNb^JgSLDM<-0s<4GYFoKoZ9y7_;OH+MK6}v$tHfFM;ZvJ%qlA8anfl{#D1>I`b)O z%C>X%2H{|u87@w&&Wd;@^EQ*bA2cbY-r45lyqp+8{f`j8AvtlAnXO@_BF_fG!CZ3C zYGvrK*yFt-b~Zuyb(6E#U&S8x9mqZXw9;8gNblHei0k z1vPaOJQ9Q-HQ zo`J$BwN@5dwM3>6rG-|KKEtDURyDAMNxXoa)Md#dFrh_05Z6Ftv;=MVdkY28Ciylo zktW1oAWw2^!`A`_P{&Z68)}l&cgdu;8YKG9m?PK#i+@0ZuVdig~(2((XOV z)&SkrEe(}cFr-R6t#tc0EEH2h+M$(a*uBoMY_bP21qm?Q7z+&gE%YT1tQQ=+`a^hO zN5p;8THmNNok9r6{H8&Iu}?=dNs}shkhZN{YddEo0qn#z5NL;DK*l|^hF1!@rA8uT z<5h|#+>*&hB$=svMxZv572L~Hrac;M061lF?BvNjLW93D;9hJb! z87A1h$K!%}(Kh{PSrxAbnU7g*dP#?QcwwXs<1&xnCml*np%oM4&sJEh@Yz2lR^H%{y{d*j3dGh|W9<(#4HSu9Q_-vVX8~edn&_NDoVl2 zxXb)y892N1zY#m<=_G|OtK0jIOYqJb&ZDu9TvI_T0u1R%fVfL0| zNth#_3eIH~1YWT#^X?$M5BALa82MD}UCLxc>nV`r8YRq7o^6pWaV0DfmmO8PQR~+p z#7zbNg@TqJXyeQT!~d}{khg{?$$!^WsuE85)1+k?SQT3-cNnz#)mw4o_YcqJ&*abM z&*j6Lq;?+0?`L_wgNv$C&?` z``!@i!Zjq;o&4EB+ey7~$ad0|F5BsuJ>127=+6H1i0$NFJK9D3?#8jMH}L79yLqhZ zILF(^EPcndE!Xb3cIvpDpKP z6Iaj^_Wybs`=CX43N1A5?nR5|TrYkQ7u{*Jc+REq!*$Q|2NV9g3@wo0k9(d&n?S(& z??6B27{LBJ( -# include -# include -# include "numpy_version.h" - -# define NO_IMPORT_ARRAY -# define PY_ARRAY_UNIQUE_SYMBOL CWRAPPER_ARRAY_API -# include "numpy/arrayobject.h" - -extern const char* dataTypes[17]; - -/* - * Functions : Cast functions - * -------------------------- - * All functions listed down are based on C/python api - * with more tolerance to different precision - * Convert python type object to the desired C type - * Parameters : - * object : the python object - * Returns : - * The desired C type, an error may be raised by c/python converter - * so one should call PyErr_Occurred() to check for errors after the - * calling a cast function - * - * Reference of the used c python api function - * -------------------------------------------- - * https://docs.python.org/3/c-api/float.html#c.PyFloat_AsDouble - * https://docs.python.org/3/c-api/long.html#c.PyLong_AsLong - * https://docs.python.org/3/c-api/long.html#c.PyLong_AsLongLong - */ -float complex PyComplex_to_Complex64(PyObject *o) ; -double complex PyComplex_to_Complex128(PyObject *o); - -//-----------------------------------------------------// -static inline int64_t PyInt64_to_Int64(PyObject *object) -{ - return (int64_t)PyLong_AsLongLong(object); -} -//-----------------------------------------------------// -static inline int32_t PyInt32_to_Int32(PyObject *object) -{ - return (int32_t)PyLong_AsLong(object); -} -//-----------------------------------------------------// -static inline int16_t PyInt16_to_Int16(PyObject *object) -{ - return (int16_t)PyLong_AsLong(object); -} -//-----------------------------------------------------// -static inline int8_t PyInt8_to_Int8(PyObject *object) -{ - return (int8_t)PyLong_AsLong(object); -} -//-----------------------------------------------------// -static inline bool PyBool_to_Bool(PyObject *object) -{ - return object == Py_True; -} -//-----------------------------------------------------// -static inline float PyFloat_to_Float(PyObject *object) -{ - return (float)PyFloat_AsDouble(object); -} -//-----------------------------------------------------// -static inline double PyDouble_to_Double(PyObject *object) -{ - return PyFloat_AsDouble(object); -} - - -/* - * Functions : Cast functions - * --------------------------- - * Some of the function used below are based on C/python api - * with more tolerance to different precisions and complex type. - * Collect the python object from the C object - * Parameters : - * object : the C object - * - * Returns : - * boolean : python object - */ -PyObject *Complex128_to_PyComplex(double complex *c); -PyObject *Complex128_to_NumpyComplex(double complex *c); -PyObject *Complex64_to_NumpyComplex(float complex *c); - -PyObject *Bool_to_PyBool(bool *b); - -PyObject *Int64_to_PyLong(int64_t *i); -PyObject *Int32_to_PyLong(int32_t *i); -PyObject *Int64_to_NumpyLong(int64_t *i); -PyObject *Int32_to_NumpyLong(int32_t *i); -PyObject *Int16_to_NumpyLong(int16_t *i); -PyObject *Int8_to_NumpyLong(int8_t *i); - -PyObject *Double_to_PyDouble(double *d); -PyObject *Double_to_NumpyDouble(double *d); -PyObject *Float_to_NumpyDouble(float *d); - -/* - * Functions : Type check functions - * --------------------------- - * Some of the function used below are based on C/python api and numpy/c api with - * more tolerance to different precisions, different system architectures and complex type. - * Check the C data type ob a python object - * Parameters : - * object : the python object - * - * Returns : - * boolean : logic statement responsible for checking python data type - * - * Reference of the used c/python api function - * --------------------------------------------------- - * https://docs.python.org/3/c-api/long.html#c.PyLong_Check - * https://docs.python.org/3/c-api/complex.html#c.PyComplex_Check - * https://docs.python.org/3/c-api/float.html#c.PyFloat_Check - * https://docs.python.org/3/c-api/bool.html#c.PyBool_Check - * https://numpy.org/doc/1.17/reference/c-api.array.html#c.PyArray_IsScalar - */ -//--------------------------------------------------------// -static inline bool PyIs_NativeInt(PyObject *o) -{ - return PyLong_CheckExact(o); -} -//--------------------------------------------------------// -static inline bool PyIs_Int8(PyObject *o) -{ - return PyArray_IsScalar(o, Int8); -} -//--------------------------------------------------------// -static inline bool PyIs_Int16(PyObject *o) -{ - return PyArray_IsScalar(o, Int16); -} -//--------------------------------------------------------// -static inline bool PyIs_Int32(PyObject *o) -{ - return PyArray_IsScalar(o, Int32); -} -//--------------------------------------------------------// -static inline bool PyIs_Int64(PyObject *o) -{ - return PyArray_IsScalar(o, Int64); -} -//--------------------------------------------------------// -static inline bool PyIs_NativeFloat(PyObject *o) -{ - return PyFloat_Check(o); -} -//--------------------------------------------------------// -static inline bool PyIs_Float(PyObject *o) -{ - return PyArray_IsScalar(o, Float32); -} -//--------------------------------------------------------// -static inline bool PyIs_Double(PyObject *o) -{ - return PyArray_IsScalar(o, Float64); -} -//--------------------------------------------------------// -static inline bool PyIs_Bool(PyObject *o) -{ - return PyBool_Check(o) || PyArray_IsScalar(o, Bool); -} -//--------------------------------------------------------// -static inline bool PyIs_NativeComplex(PyObject *o) -{ - return PyComplex_Check(o); -} -//--------------------------------------------------------// -static inline bool PyIs_Complex128(PyObject *o) -{ - return PyArray_IsScalar(o, Complex128); -} -//--------------------------------------------------------// -static inline bool PyIs_Complex64(PyObject *o) -{ - return PyArray_IsScalar(o, Complex64); -} - - -#endif diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.o b/__gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.o deleted file mode 100644 index 3bb6cd2654f9abbb01794e27bde461436f1327d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24568 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 SJaH72$heSWW*{0xi2nof;t4MR diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.o.lock b/__gpyccel__/__epyccel__/__pyccel__/cwrapper/cwrapper.o.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper/numpy_version.h b/__gpyccel__/__epyccel__/__pyccel__/cwrapper/numpy_version.h deleted file mode 100644 index 77602060..00000000 --- a/__gpyccel__/__epyccel__/__pyccel__/cwrapper/numpy_version.h +++ /dev/null @@ -1,3 +0,0 @@ -#ifndef NPY_NO_DEPRECATED_API -# define NPY_NO_DEPRECATED_API NPY_1_19_API_VERSION -#endif \ No newline at end of file diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays.lock b/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.c b/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.c deleted file mode 100644 index e2d43d95..00000000 --- a/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.c +++ /dev/null @@ -1,509 +0,0 @@ -/* -------------------------------------------------------------------------------------- */ -/* This file is part of Pyccel which is released under MIT License. See the LICENSE file */ -/* or go to https://github.com/pyccel/pyccel/blob/devel/LICENSE for full license details. */ -/* -------------------------------------------------------------------------------------- */ - -#include -#include "cwrapper_ndarrays.h" - -/* - * Function : _numpy_to_ndarray_strides - * -------------------- - * Convert numpy strides to nd_array strides, and return it in a new array, to - * avoid the problem of different implementations of strides in numpy and ndarray. - * Parameters : - * np_strides : npy_intp array - * type_size : data type enum - * nd : size of the array - * - * Returns : - * ndarray_strides : a new array with new strides values - */ -static int64_t *_numpy_to_ndarray_strides(npy_intp *np_strides, int type_size, int nd) -{ - int64_t *ndarray_strides; - - ndarray_strides = (int64_t*)malloc(sizeof(int64_t) * nd); - for (int i = 0; i < nd; i++) - ndarray_strides[i] = (int64_t) np_strides[i] / type_size; - - return ndarray_strides; -} - -static npy_intp *_ndarray_to_numpy_strides(int64_t *nd_strides, int32_t type_size, int nd) -{ - npy_intp *numpy_strides; - - numpy_strides = (npy_intp*)malloc(sizeof(npy_intp) * nd); - for (int i = 0; i < nd; i++) - numpy_strides[i] = (npy_intp) nd_strides[i] * type_size; - - return numpy_strides; -} - - -/* - * Function : _numpy_to_ndarray_shape - * -------------------- - * Copy numpy shape to nd_array shape, and return it in a new array, to - * avoid the problem of variation of system architecture because numpy shape - * is not saved in fixed length type. - * Parameters : - * np_shape : npy_intp array - * nd : size of the array - * - * Returns : - * ndarray_strides : new array -*/ -static int64_t *_numpy_to_ndarray_shape(npy_intp *np_shape, int nd) -{ - int64_t *nd_shape; - - nd_shape = (int64_t*)malloc(sizeof(int64_t) * nd); - for (int i = 0; i < nd; i++) - nd_shape[i] = (int64_t) np_shape[i]; - return nd_shape; -} - -static npy_intp *_ndarray_to_numpy_shape(int64_t *nd_shape, int nd) -{ - npy_intp *np_shape; - - np_shape = (npy_intp*)malloc(sizeof(npy_intp) * nd); - for (int i = 0; i < nd; i++) - np_shape[i] = (npy_intp) nd_shape[i]; - return np_shape; -} - -/* - * Function: _check_pyarray_dtype - * -------------------- - * Check Python Object DataType: - * - * Parameters : - * a : python array object - * dtype : desired data type enum - * Returns : - * return NULL if no error occurred otherwise it will return the - * message to be reported in a TypeError exception - * reference of the used c/python api function - * ------------------------------------------- - * https://numpy.org/doc/stable/reference/c-api/array.html#c.PyArray_TYPE - */ -static char* _check_pyarray_dtype(PyArrayObject *a, int dtype) -{ - int current_dtype; - - if (dtype == NO_TYPE_CHECK) - return NULL; - - current_dtype = PyArray_TYPE(a); - if (current_dtype != dtype) - { - char* error = (char *)malloc(200); - sprintf(error, "argument dtype must be %s, not %s", - dataTypes[dtype], - dataTypes[current_dtype]); - return error; - } - - return NULL; -} - -/* - * Function: _check_pyarray_rank - * -------------------- - * Check Python Object Rank: - * - * Parameters : - * a : python array object - * rank : desired rank - * Returns : - * return NULL if no error occurred otherwise it will return the - * message to be reported in a TypeError exception - * reference of the used c/python api function - * ------------------------------------------- - * https://numpy.org/doc/stable/reference/c-api/array.html#c.PyArray_NDIM - */ -static char* _check_pyarray_rank(PyArrayObject *a, int rank) -{ - int current_rank; - - current_rank = PyArray_NDIM(a); - if (current_rank != rank) - { - char* error = (char *)malloc(200); - sprintf(error, "argument rank must be %d, not %d", - rank, - current_rank); - return error; - } - - return NULL; -} - -/* - * Function: _check_pyarray_order - * -------------------- - * Check Python Object Order: - * - * Parameters : - * a : python array object - * flag : desired order - * Returns : - * return NULL if no error occurred otherwise it will return the - * message to be reported in a TypeError exception - * reference of the used c/python api function - * ------------------------------------------- - * https://numpy.org/doc/stable/reference/c-api/array.html#c.PyArray_CHKFLAGS - */ -static char* _check_pyarray_order(PyArrayObject *a, int flag) -{ - - if (flag == NO_ORDER_CHECK) - return NULL; - - if (!PyArray_CHKFLAGS(a, flag)) - { - char order = (flag == NPY_ARRAY_C_CONTIGUOUS ? 'C' : (flag == NPY_ARRAY_F_CONTIGUOUS ? 'F' : '?')); - char* error = (char *)malloc(200); - sprintf(error, "argument does not have the expected ordering (%c)", order); - return error; - } - - return NULL; -} - - -/* - * Function: _check_pyarray_type - * -------------------- - * Check if Python Object is ArrayType: - * - * Parameters : - * a : python array object - * - * Returns : - * return NULL if no error occurred otherwise it will return the - * message to be reported in a TypeError exception - * reference of the used c/python api function - * ------------------------------------------- - * https://numpy.org/doc/stable/reference/c-api/array.html#c.PyArray_Check - */ -static char* _check_pyarray_type(PyObject *a) -{ - if (!PyArray_Check(a)) - { - char* error = (char *)malloc(200); - sprintf(error, "argument must be numpy.ndarray, not %s", - a == Py_None ? "None" : Py_TYPE(a)->tp_name); - return error; - } - - return NULL; -} - -enum NPY_TYPES get_numpy_type(t_ndarray o) -{ - enum e_types nd_type = o.type; - enum NPY_TYPES npy_type; - switch (nd_type) - { - case nd_bool: - npy_type = NPY_BOOL; - break; - case nd_int8: - npy_type = NPY_INT8; - break; - case nd_int16: - npy_type = NPY_INT16; - break; - case nd_int32: - npy_type = NPY_INT32; - break; - case nd_int64: - npy_type = NPY_INT64; - break; - case nd_float: - npy_type = NPY_FLOAT; - break; - case nd_double: - npy_type = NPY_DOUBLE; - break; - case nd_cfloat: - npy_type = NPY_CFLOAT; - break; - case nd_cdouble: - npy_type = NPY_CDOUBLE; - break; - default: - printf("Unknown data type\n"); - exit(1); - } - return npy_type; -} - -enum e_types get_ndarray_type(PyArrayObject *a) -{ - enum NPY_TYPES npy_type = PyArray_TYPE(a); - enum e_types nd_type; - switch (npy_type) - { - case NPY_BOOL: - nd_type = nd_bool; - break; - case NPY_INT8: - nd_type = nd_int8; - break; - case NPY_INT16: - nd_type = nd_int16; - break; - case NPY_INT32: - nd_type = nd_int32; - break; - case NPY_INT64: - nd_type = nd_int64; - break; - case NPY_FLOAT: - nd_type = nd_float; - break; - case NPY_DOUBLE: - nd_type = nd_double; - break; - case NPY_CFLOAT: - nd_type = nd_cfloat; - break; - case NPY_CDOUBLE: - nd_type = nd_cdouble; - break; - default: - printf("Unknown data type\n"); - exit(1); - } - return nd_type; -} - -/* converting numpy array to c nd array*/ -t_ndarray pyarray_to_ndarray(PyObject *o) -{ - PyArrayObject* a = (PyArrayObject*) o; - t_ndarray array; - - array.nd = PyArray_NDIM(a); - array.raw_data = PyArray_DATA(a); - array.type_size = PyArray_ITEMSIZE(a); - array.type = get_ndarray_type(a); - array.length = PyArray_SIZE(a); - array.buffer_size = PyArray_NBYTES(a); - array.shape = _numpy_to_ndarray_shape(PyArray_SHAPE(a), array.nd); - array.strides = _numpy_to_ndarray_strides(PyArray_STRIDES(a), array.type_size, array.nd); - array.order = PyArray_CHKFLAGS(a, NPY_ARRAY_C_CONTIGUOUS) ? order_c : order_f; - - array.is_view = 1; - - return array; -} - -PyObject* ndarray_to_pyarray(t_ndarray o) -{ - int FLAGS; - if (o.nd == 1) { - FLAGS = NPY_ARRAY_F_CONTIGUOUS | NPY_ARRAY_C_CONTIGUOUS | NPY_ARRAY_WRITEABLE; - } - else if (o.order == order_c) { - FLAGS = NPY_ARRAY_C_CONTIGUOUS | NPY_ARRAY_WRITEABLE; - } - else if (o.order == order_f) { - FLAGS = NPY_ARRAY_C_CONTIGUOUS | NPY_ARRAY_WRITEABLE; - } - else { - FLAGS = NPY_ARRAY_WRITEABLE; - } - - enum NPY_TYPES npy_type = get_numpy_type(o); - - return PyArray_NewFromDescr(&PyArray_Type, PyArray_DescrFromType(npy_type), - o.nd, _ndarray_to_numpy_shape(o.shape, o.nd), - _ndarray_to_numpy_strides(o.strides, o.type_size, o.nd), - o.raw_data, FLAGS, NULL); -} - -/* - * Function: pyarray_check - * -------------------- - * Check Python Object (DataType, Rank, Order): - * - * Parameters : - * a : python array object - * dtype : desired data type enum - * rank : desired rank - * flag : desired order flag - * Returns : - * return true if no error occurred otherwise it will return false - */ -bool pyarray_check(PyObject *o, int dtype, int rank, int flag) -{ - char* array_type = _check_pyarray_type(o); - if (array_type != NULL) { - PyErr_Format(PyExc_TypeError, array_type); - free(array_type); - return false; - } - - PyArrayObject* a = (PyArrayObject*)o; - - char error[600]; - error[0] = '\0'; - - // check array element type / rank / order - char* array_dtype = _check_pyarray_dtype(a, dtype); - if (array_dtype != NULL) { - strcat(error, array_dtype); - free(array_dtype); - } - - char* array_rank = _check_pyarray_rank(a, rank); - if (array_rank != NULL) { - strcat(error, array_rank); - free(array_rank); - } - - if (rank > 1) { - char* array_order = _check_pyarray_order(a, flag); - if (array_order != NULL) { - strcat(error, array_order); - free(array_order); - } - } - - if (error[0] != '\0') { - PyErr_Format(PyExc_TypeError, error); - return false; - } - else { - return true; - } -} - -bool is_numpy_array(PyObject *o, int dtype, int rank, int flag) -{ - char* array_type = _check_pyarray_type(o); - if (array_type != NULL) { - free(array_type); - return false; - } - - PyArrayObject* a = (PyArrayObject*)o; - - // check array element type / rank / order - char* array_dtype = _check_pyarray_dtype(a, dtype); - if(array_dtype != NULL) { - free(array_dtype); - return false; - } - - char* array_rank = _check_pyarray_rank(a, rank); - if(array_rank != NULL) { - free(array_rank); - return false; - } - - if (rank > 1) { - char* array_order = _check_pyarray_order(a, flag); - if(array_order != NULL) { - free(array_order); - return false; - } - } - - return true; -} - -/* - * Function: nd_ndim - * -------------------- - * Return the shape in the n dimension. - * - * Parameters : - * a : python array object - * index : dimension index - * Returns : - * return 0 if object is NULL or shape at indexed dimension - * reference of the used c/numpy api function - * ------------------------------------------- - * https://numpy.org/doc/1.17/reference/c-api.array.html#c.PyArray_DIM - */ -int nd_ndim(t_ndarray *a, int n) -{ - if (a == NULL) - return 0; - - return a->shape[n]; -} - - -/* - * Function: nd_data - * -------------------- - * Return data pointed by array - * - * Parameters : - * a : python array object - * Returns : - * return NULL if object is NULL or the data of the array - * reference of the used c/numpy api function - * ------------------------------------------- - * https://numpy.org/doc/1.17/reference/c-api.array.html#c.PyArray_DIM - */ -void *nd_data(t_ndarray *a) -{ - if (a == NULL) - return NULL; - - return a->raw_data; -} - -/* - * Function: nd_step_C - * -------------------- - * Return the step in the nth dimension for a C-ordered array (decreasing strides) - * - * Parameters : - * a : python array object - * index : dimension index - * Returns : - * return 1 if object is NULL or the step along the indexed dimension - */ -int nd_nstep_C(t_ndarray *a, int n) -{ - if (a == NULL || a->length == 0) - return 1; - - int step = a->strides[n]; - for (int i = n+1; ind; ++i) { - step /= a->shape[i]; - } - return step > 0 ? step : 1; -} -/* - * Function: nd_step_F - * -------------------- - * Return the step in the nth dimension for a F-ordered array (increasing strides) - * - * Parameters : - * a : python array object - * index : dimension index - * Returns : - * return 1 if object is NULL or the step along the indexed dimension - */ -int nd_nstep_F(t_ndarray *a, int n) -{ - if (a == NULL || a->length == 0) - return 1; - - int step = a->strides[n]; - for (int i = 0; ishape[i]; - } - return step > 0 ? step : 1; -} diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.c.lock b/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.c.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.h b/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.h deleted file mode 100644 index 05799a24..00000000 --- a/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -------------------------------------------------------------------------------------- */ -/* This file is part of Pyccel which is released under MIT License. See the LICENSE file */ -/* or go to https://github.com/pyccel/pyccel/blob/devel/LICENSE for full license details. */ -/* -------------------------------------------------------------------------------------- */ - -/* - * File containing functions useful for the cwrapper which require ndarrays. - * There are 2 types of functions: - * - Functions converting PythonObjects to standard C types - * - Functions converting standard C types to PythonObjects (TODO: issue #537) - */ - -#ifndef CWRAPPER_NDARRAYS_H -# define CWRAPPER_NDARRAYS_H - -# include "cwrapper.h" -# include "ndarrays.h" - -# define NO_TYPE_CHECK -1 -# define NO_ORDER_CHECK -1 - -/* - * Function: pyarray_to_ndarray - * ---------------------------- - * A Cast function that convert numpy array variable into ndarray variable, - * by copying its information and data to a new variable of type ndarray struct - * and return this variable to be used inside c code. - * Parameters : - * o : python array object - * - * Returns : - * array : c ndarray - * - * reference of the used c/numpy api function - * ------------------------------------------- - * https://numpy.org/doc/stable/reference/c-api/array.html - */ -enum NPY_TYPES get_numpy_type(t_ndarray o); -enum e_types get_ndarray_type(PyArrayObject *a); -t_ndarray pyarray_to_ndarray(PyObject *o); -PyObject* ndarray_to_pyarray(t_ndarray o); -PyObject* c_ndarray_to_pyarray(t_ndarray o); -PyObject* fortran_ndarray_to_pyarray(t_ndarray o); - - -/* arrays checkers and helpers */ -bool pyarray_check(PyObject *o, int dtype, int rank, int flag); -bool is_numpy_array(PyObject *o, int dtype, int rank, int flag); - -void *nd_data(t_ndarray *a); -int nd_ndim(t_ndarray *a, int n); -int nd_nstep_C(t_ndarray *a, int n); -int nd_nstep_F(t_ndarray *a, int n); - -#endif diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.o b/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.o deleted file mode 100644 index e21dbf9a4b3645f24b077c759c1497f69bcab695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33208 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 F{ujeEA7ual diff --git a/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.o.lock b/__gpyccel__/__epyccel__/__pyccel__/cwrapper_ndarrays/cwrapper_ndarrays.o.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.f90 b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.f90 deleted file mode 100644 index f5925b09..00000000 --- a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.f90 +++ /dev/null @@ -1,464 +0,0 @@ -module dependencies_e0el77nq_mx2lvwh9fed2 - - - use, intrinsic :: ISO_C_Binding, only : f64 => C_DOUBLE , i64 => & - C_INT64_T - implicit none - - contains - - !........................................ - subroutine assemble_matrix_e0el77nq(global_test_basis_v1_0_1, & - global_test_basis_v1_0_2, global_test_basis_v1_1_1, & - global_test_basis_v1_1_2, global_trial_basis_u1_0_1, & - global_trial_basis_u1_0_2, global_trial_basis_u1_1_1, & - global_trial_basis_u1_1_2, global_span_v1_0_1, & - global_span_v1_0_2, global_span_v1_1_1, global_span_v1_1_2, & - global_x1, global_x2, test_v1_0_p1, test_v1_0_p2, test_v1_1_p1, & - test_v1_1_p2, trial_u1_0_p1, trial_u1_0_p2, trial_u1_1_p1, & - trial_u1_1_p2, n_element_1, n_element_2, k1, k2, pad1, pad2, & - g_mat_u1_0_v1_0_e0el77nq, g_mat_u1_1_v1_0_e0el77nq, & - g_mat_u1_0_v1_1_e0el77nq, g_mat_u1_1_v1_1_e0el77nq) - - implicit none - - real(f64), intent(in) :: global_test_basis_v1_0_1(0:,0:,0:,0:) - real(f64), intent(in) :: global_test_basis_v1_0_2(0:,0:,0:,0:) - real(f64), intent(in) :: global_test_basis_v1_1_1(0:,0:,0:,0:) - real(f64), intent(in) :: global_test_basis_v1_1_2(0:,0:,0:,0:) - real(f64), intent(in) :: global_trial_basis_u1_0_1(0:,0:,0:,0:) - real(f64), intent(in) :: global_trial_basis_u1_0_2(0:,0:,0:,0:) - real(f64), intent(in) :: global_trial_basis_u1_1_1(0:,0:,0:,0:) - real(f64), intent(in) :: global_trial_basis_u1_1_2(0:,0:,0:,0:) - integer(i64), intent(in) :: global_span_v1_0_1(0:) - integer(i64), intent(in) :: global_span_v1_0_2(0:) - integer(i64), intent(in) :: global_span_v1_1_1(0:) - integer(i64), intent(in) :: global_span_v1_1_2(0:) - real(f64), intent(in) :: global_x1(0:,0:) - real(f64), intent(in) :: global_x2(0:,0:) - integer(i64), value :: test_v1_0_p1 - integer(i64), value :: test_v1_0_p2 - integer(i64), value :: test_v1_1_p1 - integer(i64), value :: test_v1_1_p2 - integer(i64), value :: trial_u1_0_p1 - integer(i64), value :: trial_u1_0_p2 - integer(i64), value :: trial_u1_1_p1 - integer(i64), value :: trial_u1_1_p2 - integer(i64), value :: n_element_1 - integer(i64), value :: n_element_2 - integer(i64), value :: k1 - integer(i64), value :: k2 - integer(i64), value :: pad1 - integer(i64), value :: pad2 - real(f64), intent(inout) :: g_mat_u1_0_v1_0_e0el77nq(0:,0:,0:,0:) - real(f64), intent(inout) :: g_mat_u1_1_v1_0_e0el77nq(0:,0:,0:,0:) - real(f64), intent(inout) :: g_mat_u1_0_v1_1_e0el77nq(0:,0:,0:,0:) - real(f64), intent(inout) :: g_mat_u1_1_v1_1_e0el77nq(0:,0:,0:,0:) - real(f64), allocatable :: local_x1(:) - real(f64), allocatable :: local_x2(:) - real(f64), allocatable :: l_mat_u1_0_v1_0_e0el77nq(:,:,:,:) - real(f64), allocatable :: l_mat_u1_0_v1_1_e0el77nq(:,:,:,:) - real(f64), allocatable :: l_mat_u1_1_v1_0_e0el77nq(:,:,:,:) - real(f64), allocatable :: l_mat_u1_1_v1_1_e0el77nq(:,:,:,:) - integer(i64) :: i_element_1 - integer(i64) :: span_v1_0_1 - integer(i64) :: span_v1_1_1 - integer(i64) :: i_element_2 - integer(i64) :: span_v1_0_2 - integer(i64) :: span_v1_1_2 - integer(i64) :: i_quad_1 - real(f64) :: x1 - integer(i64) :: i_quad_2 - real(f64) :: x2 - integer(i64) :: i_basis_1 - integer(i64) :: i_basis_2 - integer(i64) :: j_basis_1 - real(f64) :: v1_0_1 - real(f64) :: v1_0_1_x1 - real(f64) :: u1_0_1 - real(f64) :: u1_0_1_x1 - integer(i64) :: j_basis_2 - real(f64) :: v1_0_2 - real(f64) :: v1_0_2_x2 - real(f64) :: u1_0_2 - real(f64) :: u1_0_2_x2 - real(f64) :: v1_0 - real(f64) :: v1_0_x2 - real(f64) :: v1_0_x1 - real(f64) :: u1_0 - real(f64) :: u1_0_x2 - real(f64) :: u1_0_x1 - real(f64) :: temp_v1_0_u1_0_0 - real(f64) :: temp_v1_0_u1_0_1 - real(f64) :: temp_v1_0_u1_0_2 - real(f64) :: temp_v1_0_u1_0_3 - real(f64) :: temp_v1_0_u1_0_4 - real(f64) :: temp_v1_0_u1_0_5 - real(f64) :: temp_v1_0_u1_0_6 - real(f64) :: temp_v1_0_u1_0_7 - real(f64) :: temp_v1_0_u1_0_8 - real(f64) :: contribution_v1_0_u1_0_e0el77nq - real(f64) :: u1_1_1 - real(f64) :: u1_1_1_x1 - real(f64) :: u1_1_2 - real(f64) :: u1_1_2_x2 - real(f64) :: u1_1 - real(f64) :: u1_1_x2 - real(f64) :: u1_1_x1 - real(f64) :: temp_v1_0_u1_1_0 - real(f64) :: temp_v1_0_u1_1_1 - real(f64) :: temp_v1_0_u1_1_2 - real(f64) :: temp_v1_0_u1_1_3 - real(f64) :: temp_v1_0_u1_1_4 - real(f64) :: temp_v1_0_u1_1_5 - real(f64) :: temp_v1_0_u1_1_6 - real(f64) :: temp_v1_0_u1_1_7 - real(f64) :: temp_v1_0_u1_1_8 - real(f64) :: temp_v1_0_u1_1_9 - real(f64) :: contribution_v1_0_u1_1_e0el77nq - real(f64) :: v1_1_1 - real(f64) :: v1_1_1_x1 - real(f64) :: v1_1_2 - real(f64) :: v1_1_2_x2 - real(f64) :: v1_1 - real(f64) :: v1_1_x2 - real(f64) :: v1_1_x1 - real(f64) :: temp_v1_1_u1_0_0 - real(f64) :: temp_v1_1_u1_0_1 - real(f64) :: temp_v1_1_u1_0_2 - real(f64) :: temp_v1_1_u1_0_3 - real(f64) :: temp_v1_1_u1_0_4 - real(f64) :: temp_v1_1_u1_0_5 - real(f64) :: temp_v1_1_u1_0_6 - real(f64) :: temp_v1_1_u1_0_7 - real(f64) :: temp_v1_1_u1_0_8 - real(f64) :: temp_v1_1_u1_0_9 - real(f64) :: contribution_v1_1_u1_0_e0el77nq - real(f64) :: temp_v1_1_u1_1_0 - real(f64) :: temp_v1_1_u1_1_1 - real(f64) :: temp_v1_1_u1_1_2 - real(f64) :: temp_v1_1_u1_1_3 - real(f64) :: temp_v1_1_u1_1_4 - real(f64) :: temp_v1_1_u1_1_5 - real(f64) :: temp_v1_1_u1_1_6 - real(f64) :: temp_v1_1_u1_1_7 - real(f64) :: temp_v1_1_u1_1_8 - real(f64) :: contribution_v1_1_u1_1_e0el77nq - - allocate(local_x1(0:size(global_x1, 1_i64, i64) - 1_i64)) - local_x1 = 0.0_f64 - allocate(local_x2(0:size(global_x2, 1_i64, i64) - 1_i64)) - local_x2 = 0.0_f64 - allocate(l_mat_u1_0_v1_0_e0el77nq(0:6_i64, 0:4_i64, 0:3_i64, 0:2_i64 & - )) - l_mat_u1_0_v1_0_e0el77nq = 0.0_f64 - allocate(l_mat_u1_0_v1_1_e0el77nq(0:6_i64, 0:6_i64, 0:2_i64, 0:3_i64 & - )) - l_mat_u1_0_v1_1_e0el77nq = 0.0_f64 - allocate(l_mat_u1_1_v1_0_e0el77nq(0:6_i64, 0:6_i64, 0:3_i64, 0:2_i64 & - )) - l_mat_u1_1_v1_0_e0el77nq = 0.0_f64 - allocate(l_mat_u1_1_v1_1_e0el77nq(0:4_i64, 0:6_i64, 0:2_i64, 0:3_i64 & - )) - l_mat_u1_1_v1_1_e0el77nq = 0.0_f64 - do i_element_1 = 0_i64, n_element_1 - 1_i64 - local_x1(:) = global_x1(:, i_element_1) - span_v1_0_1 = global_span_v1_0_1(i_element_1) - span_v1_1_1 = global_span_v1_1_1(i_element_1) - do i_element_2 = 0_i64, n_element_2 - 1_i64 - local_x2(:) = global_x2(:, i_element_2) - span_v1_0_2 = global_span_v1_0_2(i_element_2) - span_v1_1_2 = global_span_v1_1_2(i_element_2) - l_mat_u1_0_v1_0_e0el77nq(:, :, :, :) = 0.0_f64 - l_mat_u1_1_v1_0_e0el77nq(:, :, :, :) = 0.0_f64 - l_mat_u1_0_v1_1_e0el77nq(:, :, :, :) = 0.0_f64 - l_mat_u1_1_v1_1_e0el77nq(:, :, :, :) = 0.0_f64 - do i_quad_1 = 0_i64, 3_i64 - x1 = local_x1(i_quad_1) - do i_quad_2 = 0_i64, 3_i64 - x2 = local_x2(i_quad_2) - do i_basis_1 = 0_i64, 2_i64 - do i_basis_2 = 0_i64, 3_i64 - do j_basis_1 = 0_i64, 2_i64 - v1_0_1 = global_test_basis_v1_0_1(i_quad_1, 0_i64, & - i_basis_1, i_element_1) - v1_0_1_x1 = global_test_basis_v1_0_1(i_quad_1, 1_i64, & - i_basis_1, i_element_1) - u1_0_1 = global_trial_basis_u1_0_1(i_quad_1, 0_i64, & - j_basis_1, i_element_1) - u1_0_1_x1 = global_trial_basis_u1_0_1(i_quad_1, 1_i64, & - j_basis_1, i_element_1) - do j_basis_2 = 0_i64, 3_i64 - v1_0_2 = global_test_basis_v1_0_2(i_quad_2, 0_i64, & - i_basis_2, i_element_2) - v1_0_2_x2 = global_test_basis_v1_0_2(i_quad_2, 1_i64 & - , i_basis_2, i_element_2) - u1_0_2 = global_trial_basis_u1_0_2(i_quad_2, 0_i64, & - j_basis_2, i_element_2) - u1_0_2_x2 = global_trial_basis_u1_0_2(i_quad_2, & - 1_i64, j_basis_2, i_element_2) - v1_0 = v1_0_1 * v1_0_2 - v1_0_x2 = v1_0_1 * v1_0_2_x2 - v1_0_x1 = v1_0_1_x1 * v1_0_2 - u1_0 = u1_0_1 * u1_0_2 - u1_0_x2 = u1_0_1 * u1_0_2_x2 - u1_0_x1 = u1_0_1_x1 * u1_0_2 - temp_v1_0_u1_0_0 = 2_i64 * 3.141592653589793_f64 - temp_v1_0_u1_0_1 = temp_v1_0_u1_0_0 * x2 - temp_v1_0_u1_0_2 = temp_v1_0_u1_0_0 * x1 - temp_v1_0_u1_0_3 = 0.25_f64 * sin(temp_v1_0_u1_0_1) & - * cos(temp_v1_0_u1_0_2) - temp_v1_0_u1_0_4 = sin(temp_v1_0_u1_0_2) - temp_v1_0_u1_0_5 = cos(temp_v1_0_u1_0_1) - temp_v1_0_u1_0_6 = 0.25_f64 * temp_v1_0_u1_0_4 * & - temp_v1_0_u1_0_5 - temp_v1_0_u1_0_7 = temp_v1_0_u1_0_6 + 1.0_f64 - temp_v1_0_u1_0_8 = u1_0 * v1_0 / (temp_v1_0_u1_0_3 + & - temp_v1_0_u1_0_6 + 1_i64) ** 2_i64 - contribution_v1_0_u1_0_e0el77nq = 4.0_f64 * ( & - 0.015625_f64 * (temp_v1_0_u1_0_4 * & - temp_v1_0_u1_0_4) * (temp_v1_0_u1_0_5 * & - temp_v1_0_u1_0_5) * temp_v1_0_u1_0_8 + & - 0.25_f64 * (temp_v1_0_u1_0_7 * & - temp_v1_0_u1_0_7) * temp_v1_0_u1_0_8) * abs(( & - temp_v1_0_u1_0_3 + temp_v1_0_u1_0_7)) - l_mat_u1_0_v1_0_e0el77nq(3_i64 - i_basis_2 + & - j_basis_2, 2_i64 - i_basis_1 + j_basis_1, & - i_basis_2, i_basis_1) = & - l_mat_u1_0_v1_0_e0el77nq(3_i64 - i_basis_2 + & - j_basis_2, 2_i64 - i_basis_1 + j_basis_1, & - i_basis_2, i_basis_1) + & - contribution_v1_0_u1_0_e0el77nq - end do - end do - end do - end do - do i_basis_1 = 0_i64, 2_i64 - do i_basis_2 = 0_i64, 3_i64 - do j_basis_1 = 0_i64, 3_i64 - v1_0_1 = global_test_basis_v1_0_1(i_quad_1, 0_i64, & - i_basis_1, i_element_1) - v1_0_1_x1 = global_test_basis_v1_0_1(i_quad_1, 1_i64, & - i_basis_1, i_element_1) - u1_1_1 = global_trial_basis_u1_1_1(i_quad_1, 0_i64, & - j_basis_1, i_element_1) - u1_1_1_x1 = global_trial_basis_u1_1_1(i_quad_1, 1_i64, & - j_basis_1, i_element_1) - do j_basis_2 = 0_i64, 2_i64 - v1_0_2 = global_test_basis_v1_0_2(i_quad_2, 0_i64, & - i_basis_2, i_element_2) - v1_0_2_x2 = global_test_basis_v1_0_2(i_quad_2, 1_i64 & - , i_basis_2, i_element_2) - u1_1_2 = global_trial_basis_u1_1_2(i_quad_2, 0_i64, & - j_basis_2, i_element_2) - u1_1_2_x2 = global_trial_basis_u1_1_2(i_quad_2, & - 1_i64, j_basis_2, i_element_2) - v1_0 = v1_0_1 * v1_0_2 - v1_0_x2 = v1_0_1 * v1_0_2_x2 - v1_0_x1 = v1_0_1_x1 * v1_0_2 - u1_1 = u1_1_1 * u1_1_2 - u1_1_x2 = u1_1_1 * u1_1_2_x2 - u1_1_x1 = u1_1_1_x1 * u1_1_2 - temp_v1_0_u1_1_0 = 2_i64 * 3.141592653589793_f64 - temp_v1_0_u1_1_1 = temp_v1_0_u1_1_0 * x1 - temp_v1_0_u1_1_2 = temp_v1_0_u1_1_0 * x2 - temp_v1_0_u1_1_3 = sin(temp_v1_0_u1_1_2) * cos( & - temp_v1_0_u1_1_1) - temp_v1_0_u1_1_4 = sin(temp_v1_0_u1_1_1) * cos( & - temp_v1_0_u1_1_2) - temp_v1_0_u1_1_5 = 0.25_f64 * temp_v1_0_u1_1_4 - temp_v1_0_u1_1_6 = temp_v1_0_u1_1_5 + 1.0_f64 - temp_v1_0_u1_1_7 = 0.5_f64 * temp_v1_0_u1_1_3 - temp_v1_0_u1_1_8 = temp_v1_0_u1_1_7 + 2.0_f64 - temp_v1_0_u1_1_9 = u1_1 * v1_0 / ((0.5_f64 * & - temp_v1_0_u1_1_4 + temp_v1_0_u1_1_8) * ( & - 1.0_f64 * temp_v1_0_u1_1_3 + 1.0_f64 * & - temp_v1_0_u1_1_4 + 4.0_f64)) - contribution_v1_0_u1_1_e0el77nq = 4.0_f64 * (( & - -temp_v1_0_u1_1_5) * temp_v1_0_u1_1_8 * & - temp_v1_0_u1_1_9 - temp_v1_0_u1_1_6 * & - temp_v1_0_u1_1_7 * temp_v1_0_u1_1_9) * abs(( & - 0.25_f64 * temp_v1_0_u1_1_3 + & - temp_v1_0_u1_1_6)) - l_mat_u1_1_v1_0_e0el77nq(3_i64 - i_basis_2 + & - j_basis_2, 3_i64 - i_basis_1 + j_basis_1, & - i_basis_2, i_basis_1) = & - l_mat_u1_1_v1_0_e0el77nq(3_i64 - i_basis_2 + & - j_basis_2, 3_i64 - i_basis_1 + j_basis_1, & - i_basis_2, i_basis_1) + & - contribution_v1_0_u1_1_e0el77nq - end do - end do - end do - end do - do i_basis_1 = 0_i64, 3_i64 - do i_basis_2 = 0_i64, 2_i64 - do j_basis_1 = 0_i64, 2_i64 - v1_1_1 = global_test_basis_v1_1_1(i_quad_1, 0_i64, & - i_basis_1, i_element_1) - v1_1_1_x1 = global_test_basis_v1_1_1(i_quad_1, 1_i64, & - i_basis_1, i_element_1) - u1_0_1 = global_trial_basis_u1_0_1(i_quad_1, 0_i64, & - j_basis_1, i_element_1) - u1_0_1_x1 = global_trial_basis_u1_0_1(i_quad_1, 1_i64, & - j_basis_1, i_element_1) - do j_basis_2 = 0_i64, 3_i64 - v1_1_2 = global_test_basis_v1_1_2(i_quad_2, 0_i64, & - i_basis_2, i_element_2) - v1_1_2_x2 = global_test_basis_v1_1_2(i_quad_2, 1_i64 & - , i_basis_2, i_element_2) - u1_0_2 = global_trial_basis_u1_0_2(i_quad_2, 0_i64, & - j_basis_2, i_element_2) - u1_0_2_x2 = global_trial_basis_u1_0_2(i_quad_2, & - 1_i64, j_basis_2, i_element_2) - v1_1 = v1_1_1 * v1_1_2 - v1_1_x2 = v1_1_1 * v1_1_2_x2 - v1_1_x1 = v1_1_1_x1 * v1_1_2 - u1_0 = u1_0_1 * u1_0_2 - u1_0_x2 = u1_0_1 * u1_0_2_x2 - u1_0_x1 = u1_0_1_x1 * u1_0_2 - temp_v1_1_u1_0_0 = 2_i64 * 3.141592653589793_f64 - temp_v1_1_u1_0_1 = temp_v1_1_u1_0_0 * x1 - temp_v1_1_u1_0_2 = temp_v1_1_u1_0_0 * x2 - temp_v1_1_u1_0_3 = sin(temp_v1_1_u1_0_2) * cos( & - temp_v1_1_u1_0_1) - temp_v1_1_u1_0_4 = sin(temp_v1_1_u1_0_1) * cos( & - temp_v1_1_u1_0_2) - temp_v1_1_u1_0_5 = 0.25_f64 * temp_v1_1_u1_0_4 - temp_v1_1_u1_0_6 = temp_v1_1_u1_0_5 + 1.0_f64 - temp_v1_1_u1_0_7 = 0.5_f64 * temp_v1_1_u1_0_3 - temp_v1_1_u1_0_8 = temp_v1_1_u1_0_7 + 2.0_f64 - temp_v1_1_u1_0_9 = u1_0 * v1_1 / ((0.5_f64 * & - temp_v1_1_u1_0_4 + temp_v1_1_u1_0_8) * ( & - 1.0_f64 * temp_v1_1_u1_0_3 + 1.0_f64 * & - temp_v1_1_u1_0_4 + 4.0_f64)) - contribution_v1_1_u1_0_e0el77nq = 4.0_f64 * (( & - -temp_v1_1_u1_0_5) * temp_v1_1_u1_0_8 * & - temp_v1_1_u1_0_9 - temp_v1_1_u1_0_6 * & - temp_v1_1_u1_0_7 * temp_v1_1_u1_0_9) * abs(( & - 0.25_f64 * temp_v1_1_u1_0_3 + & - temp_v1_1_u1_0_6)) - l_mat_u1_0_v1_1_e0el77nq(3_i64 - i_basis_2 + & - j_basis_2, 3_i64 - i_basis_1 + j_basis_1, & - i_basis_2, i_basis_1) = & - l_mat_u1_0_v1_1_e0el77nq(3_i64 - i_basis_2 + & - j_basis_2, 3_i64 - i_basis_1 + j_basis_1, & - i_basis_2, i_basis_1) + & - contribution_v1_1_u1_0_e0el77nq - end do - end do - end do - end do - do i_basis_1 = 0_i64, 3_i64 - do i_basis_2 = 0_i64, 2_i64 - do j_basis_1 = 0_i64, 3_i64 - v1_1_1 = global_test_basis_v1_1_1(i_quad_1, 0_i64, & - i_basis_1, i_element_1) - v1_1_1_x1 = global_test_basis_v1_1_1(i_quad_1, 1_i64, & - i_basis_1, i_element_1) - u1_1_1 = global_trial_basis_u1_1_1(i_quad_1, 0_i64, & - j_basis_1, i_element_1) - u1_1_1_x1 = global_trial_basis_u1_1_1(i_quad_1, 1_i64, & - j_basis_1, i_element_1) - do j_basis_2 = 0_i64, 2_i64 - v1_1_2 = global_test_basis_v1_1_2(i_quad_2, 0_i64, & - i_basis_2, i_element_2) - v1_1_2_x2 = global_test_basis_v1_1_2(i_quad_2, 1_i64 & - , i_basis_2, i_element_2) - u1_1_2 = global_trial_basis_u1_1_2(i_quad_2, 0_i64, & - j_basis_2, i_element_2) - u1_1_2_x2 = global_trial_basis_u1_1_2(i_quad_2, & - 1_i64, j_basis_2, i_element_2) - v1_1 = v1_1_1 * v1_1_2 - v1_1_x2 = v1_1_1 * v1_1_2_x2 - v1_1_x1 = v1_1_1_x1 * v1_1_2 - u1_1 = u1_1_1 * u1_1_2 - u1_1_x2 = u1_1_1 * u1_1_2_x2 - u1_1_x1 = u1_1_1_x1 * u1_1_2 - temp_v1_1_u1_1_0 = 2_i64 * 3.141592653589793_f64 - temp_v1_1_u1_1_1 = temp_v1_1_u1_1_0 * x1 - temp_v1_1_u1_1_2 = temp_v1_1_u1_1_0 * x2 - temp_v1_1_u1_1_3 = 0.25_f64 * sin(temp_v1_1_u1_1_1) & - * cos(temp_v1_1_u1_1_2) - temp_v1_1_u1_1_4 = sin(temp_v1_1_u1_1_2) - temp_v1_1_u1_1_5 = cos(temp_v1_1_u1_1_1) - temp_v1_1_u1_1_6 = 0.25_f64 * temp_v1_1_u1_1_4 * & - temp_v1_1_u1_1_5 - temp_v1_1_u1_1_7 = temp_v1_1_u1_1_6 + 1_i64 - temp_v1_1_u1_1_8 = u1_1 * v1_1 / (temp_v1_1_u1_1_3 + & - temp_v1_1_u1_1_7) ** 2_i64 - contribution_v1_1_u1_1_e0el77nq = 4.0_f64 * ( & - 0.015625_f64 * (temp_v1_1_u1_1_4 * & - temp_v1_1_u1_1_4) * (temp_v1_1_u1_1_5 * & - temp_v1_1_u1_1_5) * temp_v1_1_u1_1_8 + & - 0.25_f64 * (temp_v1_1_u1_1_7 * & - temp_v1_1_u1_1_7) * temp_v1_1_u1_1_8) * abs(( & - temp_v1_1_u1_1_3 + temp_v1_1_u1_1_6 + 1.0_f64 & - )) - l_mat_u1_1_v1_1_e0el77nq(2_i64 - i_basis_2 + & - j_basis_2, 3_i64 - i_basis_1 + j_basis_1, & - i_basis_2, i_basis_1) = & - l_mat_u1_1_v1_1_e0el77nq(2_i64 - i_basis_2 + & - j_basis_2, 3_i64 - i_basis_1 + j_basis_1, & - i_basis_2, i_basis_1) + & - contribution_v1_1_u1_1_e0el77nq - end do - end do - end do - end do - end do - end do - g_mat_u1_0_v1_0_e0el77nq(:, :, pad2 + span_v1_0_2 - test_v1_0_p2 & - :1_i64 + pad2 + span_v1_0_2 - 1_i64, pad1 + span_v1_0_1 - & - test_v1_0_p1:1_i64 + pad1 + span_v1_0_1 - 1_i64) = & - g_mat_u1_0_v1_0_e0el77nq(:, :, pad2 + span_v1_0_2 - & - test_v1_0_p2:1_i64 + pad2 + span_v1_0_2 - 1_i64, pad1 + & - span_v1_0_1 - test_v1_0_p1:1_i64 + pad1 + span_v1_0_1 - & - 1_i64) + l_mat_u1_0_v1_0_e0el77nq(:, :, :, :) - g_mat_u1_1_v1_0_e0el77nq(:, :, pad2 + span_v1_0_2 - test_v1_0_p2 & - :1_i64 + pad2 + span_v1_0_2 - 1_i64, pad1 + span_v1_0_1 - & - test_v1_0_p1:1_i64 + pad1 + span_v1_0_1 - 1_i64) = & - g_mat_u1_1_v1_0_e0el77nq(:, :, pad2 + span_v1_0_2 - & - test_v1_0_p2:1_i64 + pad2 + span_v1_0_2 - 1_i64, pad1 + & - span_v1_0_1 - test_v1_0_p1:1_i64 + pad1 + span_v1_0_1 - & - 1_i64) + l_mat_u1_1_v1_0_e0el77nq(:, :, :, :) - g_mat_u1_0_v1_1_e0el77nq(:, :, pad2 + span_v1_1_2 - test_v1_1_p2 & - :1_i64 + pad2 + span_v1_1_2 - 1_i64, pad1 + span_v1_1_1 - & - test_v1_1_p1:1_i64 + pad1 + span_v1_1_1 - 1_i64) = & - g_mat_u1_0_v1_1_e0el77nq(:, :, pad2 + span_v1_1_2 - & - test_v1_1_p2:1_i64 + pad2 + span_v1_1_2 - 1_i64, pad1 + & - span_v1_1_1 - test_v1_1_p1:1_i64 + pad1 + span_v1_1_1 - & - 1_i64) + l_mat_u1_0_v1_1_e0el77nq(:, :, :, :) - g_mat_u1_1_v1_1_e0el77nq(:, :, pad2 + span_v1_1_2 - test_v1_1_p2 & - :1_i64 + pad2 + span_v1_1_2 - 1_i64, pad1 + span_v1_1_1 - & - test_v1_1_p1:1_i64 + pad1 + span_v1_1_1 - 1_i64) = & - g_mat_u1_1_v1_1_e0el77nq(:, :, pad2 + span_v1_1_2 - & - test_v1_1_p2:1_i64 + pad2 + span_v1_1_2 - 1_i64, pad1 + & - span_v1_1_1 - test_v1_1_p1:1_i64 + pad1 + span_v1_1_1 - & - 1_i64) + l_mat_u1_1_v1_1_e0el77nq(:, :, :, :) - end do - end do - if (allocated(l_mat_u1_0_v1_0_e0el77nq)) then - deallocate(l_mat_u1_0_v1_0_e0el77nq) - end if - if (allocated(local_x1)) then - deallocate(local_x1) - end if - if (allocated(l_mat_u1_0_v1_1_e0el77nq)) then - deallocate(l_mat_u1_0_v1_1_e0el77nq) - end if - if (allocated(l_mat_u1_1_v1_0_e0el77nq)) then - deallocate(l_mat_u1_1_v1_0_e0el77nq) - end if - if (allocated(l_mat_u1_1_v1_1_e0el77nq)) then - deallocate(l_mat_u1_1_v1_1_e0el77nq) - end if - if (allocated(local_x2)) then - deallocate(local_x2) - end if - return - - end subroutine assemble_matrix_e0el77nq - !........................................ - -end module dependencies_e0el77nq_mx2lvwh9fed2 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.f90.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.f90.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.mod b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.mod deleted file mode 100644 index 23fc2639d957433a0616778f44eb6455b3fe7a91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 959 zcmV;w13>&AiwFP!000006YZK^bDBUDhVS=RoICWQ9d`K;FNxBYse%KNv{ySOZd#^_ zshHHC-vvZb*F^Cv(=wW5Q3&t*oWt3J?&nXg*Y`{Z#*^Xmh`|e+#^EFa32PEOOxa+@ zhVVF@jA6*0STtnOL&##vWHxFvqTh5pC!?1?KbwziNIpI`WmK!x;S^7l59){y1wRBN zO2c?UALxA;4a4Y%Bzi>x47FOv^r*AoZlyCMtx0S!Q{44VZ-_Nrh z-)?1Eif<*4#WvSdPq#D4^2!DQxsDW&264>B_ajEfgV{8kFY$4GZ)43(pjx8SY6sq? z5yW+m40I&Yk()r`ES#$8OpES6wCOK~3CfphE);Xabf2W55Jq z1+WTO1FQpX05$+Ofyh8G5CTL2q5{!?=s+4k3?NNVWKb|D1QZ1n6%-8=J&kgKmz?ry z>_r6~fUacx-{zA=UFgC9=}}i-$;qDSnO&=Id7IHJ%0j}l^l6JGJ9};~*|2?=E>bjk z^)vsMN#J;-z_ZLwdJ*OM*>WAfZ}PKj?YizuGNg30keO@ zevBsfgAtvvct-CBaTwDVOl68wgZ!y-kGH00n>ReGYzIV{go?J>cGu#C#C4z@bi3cP z6Q;p2Qho9=Qp-xhg(K7VgRa%4{ui@n?Q*xMR5^>poxF5cLuC#U9D_<6BRUUS9kYGa z=sVGq3jKM}H+G=MRo0&yy|EL0mGx&v-&~=ehWvNN{<$jl7huo3$(```N_=4hQ35_n zwEuVX@h|qoxZZ9A3qJEvo!a)nwKtFtl4@lmvF+K ztAsew=fy-_7k4nZvx?IS;>x7lS;gt=;@%fIKHEiw#W*T_KKNCd(ODGnS>S0fJem?ZGH&@0C7MX8>1a+T)s)=pC11Q|g*Bbe z3*WzrIxjcaqd-*m+WXyWD{6s1uJ~V^zqXnGxZ;0F{`zMASNt!@KUpiZy-q;}^4hW- h8I=9jm+&1Mi-jJ1Xe`!6@L{u#{sP(uHGNzq000AO;DZ1F diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.o b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.o deleted file mode 100644 index 3d49e22c5500390ebc6419ea879423ff819fa7c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26272 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

w@u8%j*0Ti~ySV!Ti&u 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 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.o.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2.o.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.c b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.c deleted file mode 100644 index 328648ab..00000000 --- a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.c +++ /dev/null @@ -1,739 +0,0 @@ -#define PY_ARRAY_UNIQUE_SYMBOL CWRAPPER_ARRAY_API -#define DEPENDENCIES_E0EL77NQ_MX2LVWH9FED2_WRAPPER - -#include "dependencies_e0el77nq_mx2lvwh9fed2_wrapper.h" -#include -#include -#include "ndarrays.h" - - -/*........................................*/ - - -/*........................................*/ - -/*........................................*/ -static PyObject* bind_c_assemble_matrix_e0el77nq_wrapper(PyObject* self, PyObject* args, PyObject* kwargs) -{ - PyObject* global_test_basis_v1_0_1_obj; - PyObject* global_test_basis_v1_0_2_obj; - PyObject* global_test_basis_v1_1_1_obj; - PyObject* global_test_basis_v1_1_2_obj; - PyObject* global_trial_basis_u1_0_1_obj; - PyObject* global_trial_basis_u1_0_2_obj; - PyObject* global_trial_basis_u1_1_1_obj; - PyObject* global_trial_basis_u1_1_2_obj; - PyObject* global_span_v1_0_1_obj; - PyObject* global_span_v1_0_2_obj; - PyObject* global_span_v1_1_1_obj; - PyObject* global_span_v1_1_2_obj; - PyObject* global_x1_obj; - PyObject* global_x2_obj; - PyObject* test_v1_0_p1_obj; - PyObject* test_v1_0_p2_obj; - PyObject* test_v1_1_p1_obj; - PyObject* test_v1_1_p2_obj; - PyObject* trial_u1_0_p1_obj; - PyObject* trial_u1_0_p2_obj; - PyObject* trial_u1_1_p1_obj; - PyObject* trial_u1_1_p2_obj; - PyObject* n_element_1_obj; - PyObject* n_element_2_obj; - PyObject* k1_obj; - PyObject* k2_obj; - PyObject* pad1_obj; - PyObject* pad2_obj; - PyObject* g_mat_u1_0_v1_0_e0el77nq_obj; - PyObject* g_mat_u1_1_v1_0_e0el77nq_obj; - PyObject* g_mat_u1_0_v1_1_e0el77nq_obj; - PyObject* g_mat_u1_1_v1_1_e0el77nq_obj; - t_ndarray global_test_basis_v1_0_1 = {.shape = NULL}; - void* bound_global_test_basis_v1_0_1; - int64_t bound_global_test_basis_v1_0_1_shape_1; - int64_t bound_global_test_basis_v1_0_1_shape_2; - int64_t bound_global_test_basis_v1_0_1_shape_3; - int64_t bound_global_test_basis_v1_0_1_shape_4; - int64_t bound_global_test_basis_v1_0_1_stride_1; - int64_t bound_global_test_basis_v1_0_1_stride_2; - int64_t bound_global_test_basis_v1_0_1_stride_3; - int64_t bound_global_test_basis_v1_0_1_stride_4; - t_ndarray global_test_basis_v1_0_2 = {.shape = NULL}; - void* bound_global_test_basis_v1_0_2; - int64_t bound_global_test_basis_v1_0_2_shape_1; - int64_t bound_global_test_basis_v1_0_2_shape_2; - int64_t bound_global_test_basis_v1_0_2_shape_3; - int64_t bound_global_test_basis_v1_0_2_shape_4; - int64_t bound_global_test_basis_v1_0_2_stride_1; - int64_t bound_global_test_basis_v1_0_2_stride_2; - int64_t bound_global_test_basis_v1_0_2_stride_3; - int64_t bound_global_test_basis_v1_0_2_stride_4; - t_ndarray global_test_basis_v1_1_1 = {.shape = NULL}; - void* bound_global_test_basis_v1_1_1; - int64_t bound_global_test_basis_v1_1_1_shape_1; - int64_t bound_global_test_basis_v1_1_1_shape_2; - int64_t bound_global_test_basis_v1_1_1_shape_3; - int64_t bound_global_test_basis_v1_1_1_shape_4; - int64_t bound_global_test_basis_v1_1_1_stride_1; - int64_t bound_global_test_basis_v1_1_1_stride_2; - int64_t bound_global_test_basis_v1_1_1_stride_3; - int64_t bound_global_test_basis_v1_1_1_stride_4; - t_ndarray global_test_basis_v1_1_2 = {.shape = NULL}; - void* bound_global_test_basis_v1_1_2; - int64_t bound_global_test_basis_v1_1_2_shape_1; - int64_t bound_global_test_basis_v1_1_2_shape_2; - int64_t bound_global_test_basis_v1_1_2_shape_3; - int64_t bound_global_test_basis_v1_1_2_shape_4; - int64_t bound_global_test_basis_v1_1_2_stride_1; - int64_t bound_global_test_basis_v1_1_2_stride_2; - int64_t bound_global_test_basis_v1_1_2_stride_3; - int64_t bound_global_test_basis_v1_1_2_stride_4; - t_ndarray global_trial_basis_u1_0_1 = {.shape = NULL}; - void* bound_global_trial_basis_u1_0_1; - int64_t bound_global_trial_basis_u1_0_1_shape_1; - int64_t bound_global_trial_basis_u1_0_1_shape_2; - int64_t bound_global_trial_basis_u1_0_1_shape_3; - int64_t bound_global_trial_basis_u1_0_1_shape_4; - int64_t bound_global_trial_basis_u1_0_1_stride_1; - int64_t bound_global_trial_basis_u1_0_1_stride_2; - int64_t bound_global_trial_basis_u1_0_1_stride_3; - int64_t bound_global_trial_basis_u1_0_1_stride_4; - t_ndarray global_trial_basis_u1_0_2 = {.shape = NULL}; - void* bound_global_trial_basis_u1_0_2; - int64_t bound_global_trial_basis_u1_0_2_shape_1; - int64_t bound_global_trial_basis_u1_0_2_shape_2; - int64_t bound_global_trial_basis_u1_0_2_shape_3; - int64_t bound_global_trial_basis_u1_0_2_shape_4; - int64_t bound_global_trial_basis_u1_0_2_stride_1; - int64_t bound_global_trial_basis_u1_0_2_stride_2; - int64_t bound_global_trial_basis_u1_0_2_stride_3; - int64_t bound_global_trial_basis_u1_0_2_stride_4; - t_ndarray global_trial_basis_u1_1_1 = {.shape = NULL}; - void* bound_global_trial_basis_u1_1_1; - int64_t bound_global_trial_basis_u1_1_1_shape_1; - int64_t bound_global_trial_basis_u1_1_1_shape_2; - int64_t bound_global_trial_basis_u1_1_1_shape_3; - int64_t bound_global_trial_basis_u1_1_1_shape_4; - int64_t bound_global_trial_basis_u1_1_1_stride_1; - int64_t bound_global_trial_basis_u1_1_1_stride_2; - int64_t bound_global_trial_basis_u1_1_1_stride_3; - int64_t bound_global_trial_basis_u1_1_1_stride_4; - t_ndarray global_trial_basis_u1_1_2 = {.shape = NULL}; - void* bound_global_trial_basis_u1_1_2; - int64_t bound_global_trial_basis_u1_1_2_shape_1; - int64_t bound_global_trial_basis_u1_1_2_shape_2; - int64_t bound_global_trial_basis_u1_1_2_shape_3; - int64_t bound_global_trial_basis_u1_1_2_shape_4; - int64_t bound_global_trial_basis_u1_1_2_stride_1; - int64_t bound_global_trial_basis_u1_1_2_stride_2; - int64_t bound_global_trial_basis_u1_1_2_stride_3; - int64_t bound_global_trial_basis_u1_1_2_stride_4; - t_ndarray global_span_v1_0_1 = {.shape = NULL}; - void* bound_global_span_v1_0_1; - int64_t bound_global_span_v1_0_1_shape_1; - int64_t bound_global_span_v1_0_1_stride_1; - t_ndarray global_span_v1_0_2 = {.shape = NULL}; - void* bound_global_span_v1_0_2; - int64_t bound_global_span_v1_0_2_shape_1; - int64_t bound_global_span_v1_0_2_stride_1; - t_ndarray global_span_v1_1_1 = {.shape = NULL}; - void* bound_global_span_v1_1_1; - int64_t bound_global_span_v1_1_1_shape_1; - int64_t bound_global_span_v1_1_1_stride_1; - t_ndarray global_span_v1_1_2 = {.shape = NULL}; - void* bound_global_span_v1_1_2; - int64_t bound_global_span_v1_1_2_shape_1; - int64_t bound_global_span_v1_1_2_stride_1; - t_ndarray global_x1 = {.shape = NULL}; - void* bound_global_x1; - int64_t bound_global_x1_shape_1; - int64_t bound_global_x1_shape_2; - int64_t bound_global_x1_stride_1; - int64_t bound_global_x1_stride_2; - t_ndarray global_x2 = {.shape = NULL}; - void* bound_global_x2; - int64_t bound_global_x2_shape_1; - int64_t bound_global_x2_shape_2; - int64_t bound_global_x2_stride_1; - int64_t bound_global_x2_stride_2; - int64_t test_v1_0_p1; - int64_t test_v1_0_p2; - int64_t test_v1_1_p1; - int64_t test_v1_1_p2; - int64_t trial_u1_0_p1; - int64_t trial_u1_0_p2; - int64_t trial_u1_1_p1; - int64_t trial_u1_1_p2; - int64_t n_element_1; - int64_t n_element_2; - int64_t k1; - int64_t k2; - int64_t pad1; - int64_t pad2; - t_ndarray g_mat_u1_0_v1_0_e0el77nq = {.shape = NULL}; - void* bound_g_mat_u1_0_v1_0_e0el77nq; - int64_t bound_g_mat_u1_0_v1_0_e0el77nq_shape_1; - int64_t bound_g_mat_u1_0_v1_0_e0el77nq_shape_2; - int64_t bound_g_mat_u1_0_v1_0_e0el77nq_shape_3; - int64_t bound_g_mat_u1_0_v1_0_e0el77nq_shape_4; - int64_t bound_g_mat_u1_0_v1_0_e0el77nq_stride_1; - int64_t bound_g_mat_u1_0_v1_0_e0el77nq_stride_2; - int64_t bound_g_mat_u1_0_v1_0_e0el77nq_stride_3; - int64_t bound_g_mat_u1_0_v1_0_e0el77nq_stride_4; - t_ndarray g_mat_u1_1_v1_0_e0el77nq = {.shape = NULL}; - void* bound_g_mat_u1_1_v1_0_e0el77nq; - int64_t bound_g_mat_u1_1_v1_0_e0el77nq_shape_1; - int64_t bound_g_mat_u1_1_v1_0_e0el77nq_shape_2; - int64_t bound_g_mat_u1_1_v1_0_e0el77nq_shape_3; - int64_t bound_g_mat_u1_1_v1_0_e0el77nq_shape_4; - int64_t bound_g_mat_u1_1_v1_0_e0el77nq_stride_1; - int64_t bound_g_mat_u1_1_v1_0_e0el77nq_stride_2; - int64_t bound_g_mat_u1_1_v1_0_e0el77nq_stride_3; - int64_t bound_g_mat_u1_1_v1_0_e0el77nq_stride_4; - t_ndarray g_mat_u1_0_v1_1_e0el77nq = {.shape = NULL}; - void* bound_g_mat_u1_0_v1_1_e0el77nq; - int64_t bound_g_mat_u1_0_v1_1_e0el77nq_shape_1; - int64_t bound_g_mat_u1_0_v1_1_e0el77nq_shape_2; - int64_t bound_g_mat_u1_0_v1_1_e0el77nq_shape_3; - int64_t bound_g_mat_u1_0_v1_1_e0el77nq_shape_4; - int64_t bound_g_mat_u1_0_v1_1_e0el77nq_stride_1; - int64_t bound_g_mat_u1_0_v1_1_e0el77nq_stride_2; - int64_t bound_g_mat_u1_0_v1_1_e0el77nq_stride_3; - int64_t bound_g_mat_u1_0_v1_1_e0el77nq_stride_4; - t_ndarray g_mat_u1_1_v1_1_e0el77nq = {.shape = NULL}; - void* bound_g_mat_u1_1_v1_1_e0el77nq; - int64_t bound_g_mat_u1_1_v1_1_e0el77nq_shape_1; - int64_t bound_g_mat_u1_1_v1_1_e0el77nq_shape_2; - int64_t bound_g_mat_u1_1_v1_1_e0el77nq_shape_3; - int64_t bound_g_mat_u1_1_v1_1_e0el77nq_shape_4; - int64_t bound_g_mat_u1_1_v1_1_e0el77nq_stride_1; - int64_t bound_g_mat_u1_1_v1_1_e0el77nq_stride_2; - int64_t bound_g_mat_u1_1_v1_1_e0el77nq_stride_3; - int64_t bound_g_mat_u1_1_v1_1_e0el77nq_stride_4; - static char *kwlist[] = { - "global_test_basis_v1_0_1", - "global_test_basis_v1_0_2", - "global_test_basis_v1_1_1", - "global_test_basis_v1_1_2", - "global_trial_basis_u1_0_1", - "global_trial_basis_u1_0_2", - "global_trial_basis_u1_1_1", - "global_trial_basis_u1_1_2", - "global_span_v1_0_1", - "global_span_v1_0_2", - "global_span_v1_1_1", - "global_span_v1_1_2", - "global_x1", - "global_x2", - "test_v1_0_p1", - "test_v1_0_p2", - "test_v1_1_p1", - "test_v1_1_p2", - "trial_u1_0_p1", - "trial_u1_0_p2", - "trial_u1_1_p1", - "trial_u1_1_p2", - "n_element_1", - "n_element_2", - "k1", - "k2", - "pad1", - "pad2", - "g_mat_u1_0_v1_0_e0el77nq", - "g_mat_u1_1_v1_0_e0el77nq", - "g_mat_u1_0_v1_1_e0el77nq", - "g_mat_u1_1_v1_1_e0el77nq", - NULL - }; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", kwlist, &global_test_basis_v1_0_1_obj, &global_test_basis_v1_0_2_obj, &global_test_basis_v1_1_1_obj, &global_test_basis_v1_1_2_obj, &global_trial_basis_u1_0_1_obj, &global_trial_basis_u1_0_2_obj, &global_trial_basis_u1_1_1_obj, &global_trial_basis_u1_1_2_obj, &global_span_v1_0_1_obj, &global_span_v1_0_2_obj, &global_span_v1_1_1_obj, &global_span_v1_1_2_obj, &global_x1_obj, &global_x2_obj, &test_v1_0_p1_obj, &test_v1_0_p2_obj, &test_v1_1_p1_obj, &test_v1_1_p2_obj, &trial_u1_0_p1_obj, &trial_u1_0_p2_obj, &trial_u1_1_p1_obj, &trial_u1_1_p2_obj, &n_element_1_obj, &n_element_2_obj, &k1_obj, &k2_obj, &pad1_obj, &pad2_obj, &g_mat_u1_0_v1_0_e0el77nq_obj, &g_mat_u1_1_v1_0_e0el77nq_obj, &g_mat_u1_0_v1_1_e0el77nq_obj, &g_mat_u1_1_v1_1_e0el77nq_obj)) - { - return NULL; - } - if (pyarray_check(global_test_basis_v1_0_1_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - global_test_basis_v1_0_1 = pyarray_to_ndarray(global_test_basis_v1_0_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_test_basis_v1_0_1"); - return NULL; - } - bound_global_test_basis_v1_0_1 = nd_data(&global_test_basis_v1_0_1); - bound_global_test_basis_v1_0_1_shape_1 = nd_ndim(&global_test_basis_v1_0_1, INT64_C(0)); - bound_global_test_basis_v1_0_1_shape_2 = nd_ndim(&global_test_basis_v1_0_1, INT64_C(1)); - bound_global_test_basis_v1_0_1_shape_3 = nd_ndim(&global_test_basis_v1_0_1, INT64_C(2)); - bound_global_test_basis_v1_0_1_shape_4 = nd_ndim(&global_test_basis_v1_0_1, INT64_C(3)); - bound_global_test_basis_v1_0_1_stride_1 = nd_nstep_C(&global_test_basis_v1_0_1, INT64_C(0)); - bound_global_test_basis_v1_0_1_stride_2 = nd_nstep_C(&global_test_basis_v1_0_1, INT64_C(1)); - bound_global_test_basis_v1_0_1_stride_3 = nd_nstep_C(&global_test_basis_v1_0_1, INT64_C(2)); - bound_global_test_basis_v1_0_1_stride_4 = nd_nstep_C(&global_test_basis_v1_0_1, INT64_C(3)); - if (pyarray_check(global_test_basis_v1_0_2_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - global_test_basis_v1_0_2 = pyarray_to_ndarray(global_test_basis_v1_0_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_test_basis_v1_0_2"); - return NULL; - } - bound_global_test_basis_v1_0_2 = nd_data(&global_test_basis_v1_0_2); - bound_global_test_basis_v1_0_2_shape_1 = nd_ndim(&global_test_basis_v1_0_2, INT64_C(0)); - bound_global_test_basis_v1_0_2_shape_2 = nd_ndim(&global_test_basis_v1_0_2, INT64_C(1)); - bound_global_test_basis_v1_0_2_shape_3 = nd_ndim(&global_test_basis_v1_0_2, INT64_C(2)); - bound_global_test_basis_v1_0_2_shape_4 = nd_ndim(&global_test_basis_v1_0_2, INT64_C(3)); - bound_global_test_basis_v1_0_2_stride_1 = nd_nstep_C(&global_test_basis_v1_0_2, INT64_C(0)); - bound_global_test_basis_v1_0_2_stride_2 = nd_nstep_C(&global_test_basis_v1_0_2, INT64_C(1)); - bound_global_test_basis_v1_0_2_stride_3 = nd_nstep_C(&global_test_basis_v1_0_2, INT64_C(2)); - bound_global_test_basis_v1_0_2_stride_4 = nd_nstep_C(&global_test_basis_v1_0_2, INT64_C(3)); - if (pyarray_check(global_test_basis_v1_1_1_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - global_test_basis_v1_1_1 = pyarray_to_ndarray(global_test_basis_v1_1_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_test_basis_v1_1_1"); - return NULL; - } - bound_global_test_basis_v1_1_1 = nd_data(&global_test_basis_v1_1_1); - bound_global_test_basis_v1_1_1_shape_1 = nd_ndim(&global_test_basis_v1_1_1, INT64_C(0)); - bound_global_test_basis_v1_1_1_shape_2 = nd_ndim(&global_test_basis_v1_1_1, INT64_C(1)); - bound_global_test_basis_v1_1_1_shape_3 = nd_ndim(&global_test_basis_v1_1_1, INT64_C(2)); - bound_global_test_basis_v1_1_1_shape_4 = nd_ndim(&global_test_basis_v1_1_1, INT64_C(3)); - bound_global_test_basis_v1_1_1_stride_1 = nd_nstep_C(&global_test_basis_v1_1_1, INT64_C(0)); - bound_global_test_basis_v1_1_1_stride_2 = nd_nstep_C(&global_test_basis_v1_1_1, INT64_C(1)); - bound_global_test_basis_v1_1_1_stride_3 = nd_nstep_C(&global_test_basis_v1_1_1, INT64_C(2)); - bound_global_test_basis_v1_1_1_stride_4 = nd_nstep_C(&global_test_basis_v1_1_1, INT64_C(3)); - if (pyarray_check(global_test_basis_v1_1_2_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - global_test_basis_v1_1_2 = pyarray_to_ndarray(global_test_basis_v1_1_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_test_basis_v1_1_2"); - return NULL; - } - bound_global_test_basis_v1_1_2 = nd_data(&global_test_basis_v1_1_2); - bound_global_test_basis_v1_1_2_shape_1 = nd_ndim(&global_test_basis_v1_1_2, INT64_C(0)); - bound_global_test_basis_v1_1_2_shape_2 = nd_ndim(&global_test_basis_v1_1_2, INT64_C(1)); - bound_global_test_basis_v1_1_2_shape_3 = nd_ndim(&global_test_basis_v1_1_2, INT64_C(2)); - bound_global_test_basis_v1_1_2_shape_4 = nd_ndim(&global_test_basis_v1_1_2, INT64_C(3)); - bound_global_test_basis_v1_1_2_stride_1 = nd_nstep_C(&global_test_basis_v1_1_2, INT64_C(0)); - bound_global_test_basis_v1_1_2_stride_2 = nd_nstep_C(&global_test_basis_v1_1_2, INT64_C(1)); - bound_global_test_basis_v1_1_2_stride_3 = nd_nstep_C(&global_test_basis_v1_1_2, INT64_C(2)); - bound_global_test_basis_v1_1_2_stride_4 = nd_nstep_C(&global_test_basis_v1_1_2, INT64_C(3)); - if (pyarray_check(global_trial_basis_u1_0_1_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - global_trial_basis_u1_0_1 = pyarray_to_ndarray(global_trial_basis_u1_0_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_trial_basis_u1_0_1"); - return NULL; - } - bound_global_trial_basis_u1_0_1 = nd_data(&global_trial_basis_u1_0_1); - bound_global_trial_basis_u1_0_1_shape_1 = nd_ndim(&global_trial_basis_u1_0_1, INT64_C(0)); - bound_global_trial_basis_u1_0_1_shape_2 = nd_ndim(&global_trial_basis_u1_0_1, INT64_C(1)); - bound_global_trial_basis_u1_0_1_shape_3 = nd_ndim(&global_trial_basis_u1_0_1, INT64_C(2)); - bound_global_trial_basis_u1_0_1_shape_4 = nd_ndim(&global_trial_basis_u1_0_1, INT64_C(3)); - bound_global_trial_basis_u1_0_1_stride_1 = nd_nstep_C(&global_trial_basis_u1_0_1, INT64_C(0)); - bound_global_trial_basis_u1_0_1_stride_2 = nd_nstep_C(&global_trial_basis_u1_0_1, INT64_C(1)); - bound_global_trial_basis_u1_0_1_stride_3 = nd_nstep_C(&global_trial_basis_u1_0_1, INT64_C(2)); - bound_global_trial_basis_u1_0_1_stride_4 = nd_nstep_C(&global_trial_basis_u1_0_1, INT64_C(3)); - if (pyarray_check(global_trial_basis_u1_0_2_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - global_trial_basis_u1_0_2 = pyarray_to_ndarray(global_trial_basis_u1_0_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_trial_basis_u1_0_2"); - return NULL; - } - bound_global_trial_basis_u1_0_2 = nd_data(&global_trial_basis_u1_0_2); - bound_global_trial_basis_u1_0_2_shape_1 = nd_ndim(&global_trial_basis_u1_0_2, INT64_C(0)); - bound_global_trial_basis_u1_0_2_shape_2 = nd_ndim(&global_trial_basis_u1_0_2, INT64_C(1)); - bound_global_trial_basis_u1_0_2_shape_3 = nd_ndim(&global_trial_basis_u1_0_2, INT64_C(2)); - bound_global_trial_basis_u1_0_2_shape_4 = nd_ndim(&global_trial_basis_u1_0_2, INT64_C(3)); - bound_global_trial_basis_u1_0_2_stride_1 = nd_nstep_C(&global_trial_basis_u1_0_2, INT64_C(0)); - bound_global_trial_basis_u1_0_2_stride_2 = nd_nstep_C(&global_trial_basis_u1_0_2, INT64_C(1)); - bound_global_trial_basis_u1_0_2_stride_3 = nd_nstep_C(&global_trial_basis_u1_0_2, INT64_C(2)); - bound_global_trial_basis_u1_0_2_stride_4 = nd_nstep_C(&global_trial_basis_u1_0_2, INT64_C(3)); - if (pyarray_check(global_trial_basis_u1_1_1_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - global_trial_basis_u1_1_1 = pyarray_to_ndarray(global_trial_basis_u1_1_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_trial_basis_u1_1_1"); - return NULL; - } - bound_global_trial_basis_u1_1_1 = nd_data(&global_trial_basis_u1_1_1); - bound_global_trial_basis_u1_1_1_shape_1 = nd_ndim(&global_trial_basis_u1_1_1, INT64_C(0)); - bound_global_trial_basis_u1_1_1_shape_2 = nd_ndim(&global_trial_basis_u1_1_1, INT64_C(1)); - bound_global_trial_basis_u1_1_1_shape_3 = nd_ndim(&global_trial_basis_u1_1_1, INT64_C(2)); - bound_global_trial_basis_u1_1_1_shape_4 = nd_ndim(&global_trial_basis_u1_1_1, INT64_C(3)); - bound_global_trial_basis_u1_1_1_stride_1 = nd_nstep_C(&global_trial_basis_u1_1_1, INT64_C(0)); - bound_global_trial_basis_u1_1_1_stride_2 = nd_nstep_C(&global_trial_basis_u1_1_1, INT64_C(1)); - bound_global_trial_basis_u1_1_1_stride_3 = nd_nstep_C(&global_trial_basis_u1_1_1, INT64_C(2)); - bound_global_trial_basis_u1_1_1_stride_4 = nd_nstep_C(&global_trial_basis_u1_1_1, INT64_C(3)); - if (pyarray_check(global_trial_basis_u1_1_2_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - global_trial_basis_u1_1_2 = pyarray_to_ndarray(global_trial_basis_u1_1_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_trial_basis_u1_1_2"); - return NULL; - } - bound_global_trial_basis_u1_1_2 = nd_data(&global_trial_basis_u1_1_2); - bound_global_trial_basis_u1_1_2_shape_1 = nd_ndim(&global_trial_basis_u1_1_2, INT64_C(0)); - bound_global_trial_basis_u1_1_2_shape_2 = nd_ndim(&global_trial_basis_u1_1_2, INT64_C(1)); - bound_global_trial_basis_u1_1_2_shape_3 = nd_ndim(&global_trial_basis_u1_1_2, INT64_C(2)); - bound_global_trial_basis_u1_1_2_shape_4 = nd_ndim(&global_trial_basis_u1_1_2, INT64_C(3)); - bound_global_trial_basis_u1_1_2_stride_1 = nd_nstep_C(&global_trial_basis_u1_1_2, INT64_C(0)); - bound_global_trial_basis_u1_1_2_stride_2 = nd_nstep_C(&global_trial_basis_u1_1_2, INT64_C(1)); - bound_global_trial_basis_u1_1_2_stride_3 = nd_nstep_C(&global_trial_basis_u1_1_2, INT64_C(2)); - bound_global_trial_basis_u1_1_2_stride_4 = nd_nstep_C(&global_trial_basis_u1_1_2, INT64_C(3)); - if (pyarray_check(global_span_v1_0_1_obj, NPY_LONG, INT64_C(1), NO_ORDER_CHECK)) - { - global_span_v1_0_1 = pyarray_to_ndarray(global_span_v1_0_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument global_span_v1_0_1"); - return NULL; - } - bound_global_span_v1_0_1 = nd_data(&global_span_v1_0_1); - bound_global_span_v1_0_1_shape_1 = nd_ndim(&global_span_v1_0_1, INT64_C(0)); - bound_global_span_v1_0_1_stride_1 = nd_nstep_F(&global_span_v1_0_1, INT64_C(0)); - if (pyarray_check(global_span_v1_0_2_obj, NPY_LONG, INT64_C(1), NO_ORDER_CHECK)) - { - global_span_v1_0_2 = pyarray_to_ndarray(global_span_v1_0_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument global_span_v1_0_2"); - return NULL; - } - bound_global_span_v1_0_2 = nd_data(&global_span_v1_0_2); - bound_global_span_v1_0_2_shape_1 = nd_ndim(&global_span_v1_0_2, INT64_C(0)); - bound_global_span_v1_0_2_stride_1 = nd_nstep_F(&global_span_v1_0_2, INT64_C(0)); - if (pyarray_check(global_span_v1_1_1_obj, NPY_LONG, INT64_C(1), NO_ORDER_CHECK)) - { - global_span_v1_1_1 = pyarray_to_ndarray(global_span_v1_1_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument global_span_v1_1_1"); - return NULL; - } - bound_global_span_v1_1_1 = nd_data(&global_span_v1_1_1); - bound_global_span_v1_1_1_shape_1 = nd_ndim(&global_span_v1_1_1, INT64_C(0)); - bound_global_span_v1_1_1_stride_1 = nd_nstep_F(&global_span_v1_1_1, INT64_C(0)); - if (pyarray_check(global_span_v1_1_2_obj, NPY_LONG, INT64_C(1), NO_ORDER_CHECK)) - { - global_span_v1_1_2 = pyarray_to_ndarray(global_span_v1_1_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument global_span_v1_1_2"); - return NULL; - } - bound_global_span_v1_1_2 = nd_data(&global_span_v1_1_2); - bound_global_span_v1_1_2_shape_1 = nd_ndim(&global_span_v1_1_2, INT64_C(0)); - bound_global_span_v1_1_2_stride_1 = nd_nstep_F(&global_span_v1_1_2, INT64_C(0)); - if (pyarray_check(global_x1_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) - { - global_x1 = pyarray_to_ndarray(global_x1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_x1"); - return NULL; - } - bound_global_x1 = nd_data(&global_x1); - bound_global_x1_shape_1 = nd_ndim(&global_x1, INT64_C(0)); - bound_global_x1_shape_2 = nd_ndim(&global_x1, INT64_C(1)); - bound_global_x1_stride_1 = nd_nstep_C(&global_x1, INT64_C(0)); - bound_global_x1_stride_2 = nd_nstep_C(&global_x1, INT64_C(1)); - if (pyarray_check(global_x2_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) - { - global_x2 = pyarray_to_ndarray(global_x2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_x2"); - return NULL; - } - bound_global_x2 = nd_data(&global_x2); - bound_global_x2_shape_1 = nd_ndim(&global_x2, INT64_C(0)); - bound_global_x2_shape_2 = nd_ndim(&global_x2, INT64_C(1)); - bound_global_x2_stride_1 = nd_nstep_C(&global_x2, INT64_C(0)); - bound_global_x2_stride_2 = nd_nstep_C(&global_x2, INT64_C(1)); - if (PyIs_Int64(test_v1_0_p1_obj)) - { - test_v1_0_p1 = PyInt64_to_Int64(test_v1_0_p1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument test_v1_0_p1"); - return NULL; - } - if (PyIs_Int64(test_v1_0_p2_obj)) - { - test_v1_0_p2 = PyInt64_to_Int64(test_v1_0_p2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument test_v1_0_p2"); - return NULL; - } - if (PyIs_Int64(test_v1_1_p1_obj)) - { - test_v1_1_p1 = PyInt64_to_Int64(test_v1_1_p1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument test_v1_1_p1"); - return NULL; - } - if (PyIs_Int64(test_v1_1_p2_obj)) - { - test_v1_1_p2 = PyInt64_to_Int64(test_v1_1_p2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument test_v1_1_p2"); - return NULL; - } - if (PyIs_Int64(trial_u1_0_p1_obj)) - { - trial_u1_0_p1 = PyInt64_to_Int64(trial_u1_0_p1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument trial_u1_0_p1"); - return NULL; - } - if (PyIs_Int64(trial_u1_0_p2_obj)) - { - trial_u1_0_p2 = PyInt64_to_Int64(trial_u1_0_p2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument trial_u1_0_p2"); - return NULL; - } - if (PyIs_Int64(trial_u1_1_p1_obj)) - { - trial_u1_1_p1 = PyInt64_to_Int64(trial_u1_1_p1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument trial_u1_1_p1"); - return NULL; - } - if (PyIs_Int64(trial_u1_1_p2_obj)) - { - trial_u1_1_p2 = PyInt64_to_Int64(trial_u1_1_p2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument trial_u1_1_p2"); - return NULL; - } - if (PyIs_Int64(n_element_1_obj)) - { - n_element_1 = PyInt64_to_Int64(n_element_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n_element_1"); - return NULL; - } - if (PyIs_Int64(n_element_2_obj)) - { - n_element_2 = PyInt64_to_Int64(n_element_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n_element_2"); - return NULL; - } - if (PyIs_Int64(k1_obj)) - { - k1 = PyInt64_to_Int64(k1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument k1"); - return NULL; - } - if (PyIs_Int64(k2_obj)) - { - k2 = PyInt64_to_Int64(k2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument k2"); - return NULL; - } - if (PyIs_Int64(pad1_obj)) - { - pad1 = PyInt64_to_Int64(pad1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument pad1"); - return NULL; - } - if (PyIs_Int64(pad2_obj)) - { - pad2 = PyInt64_to_Int64(pad2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument pad2"); - return NULL; - } - if (pyarray_check(g_mat_u1_0_v1_0_e0el77nq_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - g_mat_u1_0_v1_0_e0el77nq = pyarray_to_ndarray(g_mat_u1_0_v1_0_e0el77nq_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument g_mat_u1_0_v1_0_e0el77nq"); - return NULL; - } - bound_g_mat_u1_0_v1_0_e0el77nq = nd_data(&g_mat_u1_0_v1_0_e0el77nq); - bound_g_mat_u1_0_v1_0_e0el77nq_shape_1 = nd_ndim(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(0)); - bound_g_mat_u1_0_v1_0_e0el77nq_shape_2 = nd_ndim(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(1)); - bound_g_mat_u1_0_v1_0_e0el77nq_shape_3 = nd_ndim(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(2)); - bound_g_mat_u1_0_v1_0_e0el77nq_shape_4 = nd_ndim(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(3)); - bound_g_mat_u1_0_v1_0_e0el77nq_stride_1 = nd_nstep_C(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(0)); - bound_g_mat_u1_0_v1_0_e0el77nq_stride_2 = nd_nstep_C(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(1)); - bound_g_mat_u1_0_v1_0_e0el77nq_stride_3 = nd_nstep_C(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(2)); - bound_g_mat_u1_0_v1_0_e0el77nq_stride_4 = nd_nstep_C(&g_mat_u1_0_v1_0_e0el77nq, INT64_C(3)); - if (pyarray_check(g_mat_u1_1_v1_0_e0el77nq_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - g_mat_u1_1_v1_0_e0el77nq = pyarray_to_ndarray(g_mat_u1_1_v1_0_e0el77nq_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument g_mat_u1_1_v1_0_e0el77nq"); - return NULL; - } - bound_g_mat_u1_1_v1_0_e0el77nq = nd_data(&g_mat_u1_1_v1_0_e0el77nq); - bound_g_mat_u1_1_v1_0_e0el77nq_shape_1 = nd_ndim(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(0)); - bound_g_mat_u1_1_v1_0_e0el77nq_shape_2 = nd_ndim(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(1)); - bound_g_mat_u1_1_v1_0_e0el77nq_shape_3 = nd_ndim(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(2)); - bound_g_mat_u1_1_v1_0_e0el77nq_shape_4 = nd_ndim(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(3)); - bound_g_mat_u1_1_v1_0_e0el77nq_stride_1 = nd_nstep_C(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(0)); - bound_g_mat_u1_1_v1_0_e0el77nq_stride_2 = nd_nstep_C(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(1)); - bound_g_mat_u1_1_v1_0_e0el77nq_stride_3 = nd_nstep_C(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(2)); - bound_g_mat_u1_1_v1_0_e0el77nq_stride_4 = nd_nstep_C(&g_mat_u1_1_v1_0_e0el77nq, INT64_C(3)); - if (pyarray_check(g_mat_u1_0_v1_1_e0el77nq_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - g_mat_u1_0_v1_1_e0el77nq = pyarray_to_ndarray(g_mat_u1_0_v1_1_e0el77nq_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument g_mat_u1_0_v1_1_e0el77nq"); - return NULL; - } - bound_g_mat_u1_0_v1_1_e0el77nq = nd_data(&g_mat_u1_0_v1_1_e0el77nq); - bound_g_mat_u1_0_v1_1_e0el77nq_shape_1 = nd_ndim(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(0)); - bound_g_mat_u1_0_v1_1_e0el77nq_shape_2 = nd_ndim(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(1)); - bound_g_mat_u1_0_v1_1_e0el77nq_shape_3 = nd_ndim(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(2)); - bound_g_mat_u1_0_v1_1_e0el77nq_shape_4 = nd_ndim(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(3)); - bound_g_mat_u1_0_v1_1_e0el77nq_stride_1 = nd_nstep_C(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(0)); - bound_g_mat_u1_0_v1_1_e0el77nq_stride_2 = nd_nstep_C(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(1)); - bound_g_mat_u1_0_v1_1_e0el77nq_stride_3 = nd_nstep_C(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(2)); - bound_g_mat_u1_0_v1_1_e0el77nq_stride_4 = nd_nstep_C(&g_mat_u1_0_v1_1_e0el77nq, INT64_C(3)); - if (pyarray_check(g_mat_u1_1_v1_1_e0el77nq_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - g_mat_u1_1_v1_1_e0el77nq = pyarray_to_ndarray(g_mat_u1_1_v1_1_e0el77nq_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument g_mat_u1_1_v1_1_e0el77nq"); - return NULL; - } - bound_g_mat_u1_1_v1_1_e0el77nq = nd_data(&g_mat_u1_1_v1_1_e0el77nq); - bound_g_mat_u1_1_v1_1_e0el77nq_shape_1 = nd_ndim(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(0)); - bound_g_mat_u1_1_v1_1_e0el77nq_shape_2 = nd_ndim(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(1)); - bound_g_mat_u1_1_v1_1_e0el77nq_shape_3 = nd_ndim(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(2)); - bound_g_mat_u1_1_v1_1_e0el77nq_shape_4 = nd_ndim(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(3)); - bound_g_mat_u1_1_v1_1_e0el77nq_stride_1 = nd_nstep_C(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(0)); - bound_g_mat_u1_1_v1_1_e0el77nq_stride_2 = nd_nstep_C(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(1)); - bound_g_mat_u1_1_v1_1_e0el77nq_stride_3 = nd_nstep_C(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(2)); - bound_g_mat_u1_1_v1_1_e0el77nq_stride_4 = nd_nstep_C(&g_mat_u1_1_v1_1_e0el77nq, INT64_C(3)); - bind_c_assemble_matrix_e0el77nq(bound_global_test_basis_v1_0_1, bound_global_test_basis_v1_0_1_shape_1, bound_global_test_basis_v1_0_1_shape_2, bound_global_test_basis_v1_0_1_shape_3, bound_global_test_basis_v1_0_1_shape_4, bound_global_test_basis_v1_0_1_stride_1, bound_global_test_basis_v1_0_1_stride_2, bound_global_test_basis_v1_0_1_stride_3, bound_global_test_basis_v1_0_1_stride_4, bound_global_test_basis_v1_0_2, bound_global_test_basis_v1_0_2_shape_1, bound_global_test_basis_v1_0_2_shape_2, bound_global_test_basis_v1_0_2_shape_3, bound_global_test_basis_v1_0_2_shape_4, bound_global_test_basis_v1_0_2_stride_1, bound_global_test_basis_v1_0_2_stride_2, bound_global_test_basis_v1_0_2_stride_3, bound_global_test_basis_v1_0_2_stride_4, bound_global_test_basis_v1_1_1, bound_global_test_basis_v1_1_1_shape_1, bound_global_test_basis_v1_1_1_shape_2, bound_global_test_basis_v1_1_1_shape_3, bound_global_test_basis_v1_1_1_shape_4, bound_global_test_basis_v1_1_1_stride_1, bound_global_test_basis_v1_1_1_stride_2, bound_global_test_basis_v1_1_1_stride_3, bound_global_test_basis_v1_1_1_stride_4, bound_global_test_basis_v1_1_2, bound_global_test_basis_v1_1_2_shape_1, bound_global_test_basis_v1_1_2_shape_2, bound_global_test_basis_v1_1_2_shape_3, bound_global_test_basis_v1_1_2_shape_4, bound_global_test_basis_v1_1_2_stride_1, bound_global_test_basis_v1_1_2_stride_2, bound_global_test_basis_v1_1_2_stride_3, bound_global_test_basis_v1_1_2_stride_4, bound_global_trial_basis_u1_0_1, bound_global_trial_basis_u1_0_1_shape_1, bound_global_trial_basis_u1_0_1_shape_2, bound_global_trial_basis_u1_0_1_shape_3, bound_global_trial_basis_u1_0_1_shape_4, bound_global_trial_basis_u1_0_1_stride_1, bound_global_trial_basis_u1_0_1_stride_2, bound_global_trial_basis_u1_0_1_stride_3, bound_global_trial_basis_u1_0_1_stride_4, bound_global_trial_basis_u1_0_2, bound_global_trial_basis_u1_0_2_shape_1, bound_global_trial_basis_u1_0_2_shape_2, bound_global_trial_basis_u1_0_2_shape_3, bound_global_trial_basis_u1_0_2_shape_4, bound_global_trial_basis_u1_0_2_stride_1, bound_global_trial_basis_u1_0_2_stride_2, bound_global_trial_basis_u1_0_2_stride_3, bound_global_trial_basis_u1_0_2_stride_4, bound_global_trial_basis_u1_1_1, bound_global_trial_basis_u1_1_1_shape_1, bound_global_trial_basis_u1_1_1_shape_2, bound_global_trial_basis_u1_1_1_shape_3, bound_global_trial_basis_u1_1_1_shape_4, bound_global_trial_basis_u1_1_1_stride_1, bound_global_trial_basis_u1_1_1_stride_2, bound_global_trial_basis_u1_1_1_stride_3, bound_global_trial_basis_u1_1_1_stride_4, bound_global_trial_basis_u1_1_2, bound_global_trial_basis_u1_1_2_shape_1, bound_global_trial_basis_u1_1_2_shape_2, bound_global_trial_basis_u1_1_2_shape_3, bound_global_trial_basis_u1_1_2_shape_4, bound_global_trial_basis_u1_1_2_stride_1, bound_global_trial_basis_u1_1_2_stride_2, bound_global_trial_basis_u1_1_2_stride_3, bound_global_trial_basis_u1_1_2_stride_4, bound_global_span_v1_0_1, bound_global_span_v1_0_1_shape_1, bound_global_span_v1_0_1_stride_1, bound_global_span_v1_0_2, bound_global_span_v1_0_2_shape_1, bound_global_span_v1_0_2_stride_1, bound_global_span_v1_1_1, bound_global_span_v1_1_1_shape_1, bound_global_span_v1_1_1_stride_1, bound_global_span_v1_1_2, bound_global_span_v1_1_2_shape_1, bound_global_span_v1_1_2_stride_1, bound_global_x1, bound_global_x1_shape_1, bound_global_x1_shape_2, bound_global_x1_stride_1, bound_global_x1_stride_2, bound_global_x2, bound_global_x2_shape_1, bound_global_x2_shape_2, bound_global_x2_stride_1, bound_global_x2_stride_2, test_v1_0_p1, test_v1_0_p2, test_v1_1_p1, test_v1_1_p2, trial_u1_0_p1, trial_u1_0_p2, trial_u1_1_p1, trial_u1_1_p2, n_element_1, n_element_2, k1, k2, pad1, pad2, bound_g_mat_u1_0_v1_0_e0el77nq, bound_g_mat_u1_0_v1_0_e0el77nq_shape_1, bound_g_mat_u1_0_v1_0_e0el77nq_shape_2, bound_g_mat_u1_0_v1_0_e0el77nq_shape_3, bound_g_mat_u1_0_v1_0_e0el77nq_shape_4, bound_g_mat_u1_0_v1_0_e0el77nq_stride_1, bound_g_mat_u1_0_v1_0_e0el77nq_stride_2, bound_g_mat_u1_0_v1_0_e0el77nq_stride_3, bound_g_mat_u1_0_v1_0_e0el77nq_stride_4, bound_g_mat_u1_1_v1_0_e0el77nq, bound_g_mat_u1_1_v1_0_e0el77nq_shape_1, bound_g_mat_u1_1_v1_0_e0el77nq_shape_2, bound_g_mat_u1_1_v1_0_e0el77nq_shape_3, bound_g_mat_u1_1_v1_0_e0el77nq_shape_4, bound_g_mat_u1_1_v1_0_e0el77nq_stride_1, bound_g_mat_u1_1_v1_0_e0el77nq_stride_2, bound_g_mat_u1_1_v1_0_e0el77nq_stride_3, bound_g_mat_u1_1_v1_0_e0el77nq_stride_4, bound_g_mat_u1_0_v1_1_e0el77nq, bound_g_mat_u1_0_v1_1_e0el77nq_shape_1, bound_g_mat_u1_0_v1_1_e0el77nq_shape_2, bound_g_mat_u1_0_v1_1_e0el77nq_shape_3, bound_g_mat_u1_0_v1_1_e0el77nq_shape_4, bound_g_mat_u1_0_v1_1_e0el77nq_stride_1, bound_g_mat_u1_0_v1_1_e0el77nq_stride_2, bound_g_mat_u1_0_v1_1_e0el77nq_stride_3, bound_g_mat_u1_0_v1_1_e0el77nq_stride_4, bound_g_mat_u1_1_v1_1_e0el77nq, bound_g_mat_u1_1_v1_1_e0el77nq_shape_1, bound_g_mat_u1_1_v1_1_e0el77nq_shape_2, bound_g_mat_u1_1_v1_1_e0el77nq_shape_3, bound_g_mat_u1_1_v1_1_e0el77nq_shape_4, bound_g_mat_u1_1_v1_1_e0el77nq_stride_1, bound_g_mat_u1_1_v1_1_e0el77nq_stride_2, bound_g_mat_u1_1_v1_1_e0el77nq_stride_3, bound_g_mat_u1_1_v1_1_e0el77nq_stride_4); - free_pointer(&global_test_basis_v1_0_1); - free_pointer(&global_test_basis_v1_0_2); - free_pointer(&global_test_basis_v1_1_1); - free_pointer(&global_test_basis_v1_1_2); - free_pointer(&global_trial_basis_u1_0_1); - free_pointer(&global_trial_basis_u1_0_2); - free_pointer(&global_trial_basis_u1_1_1); - free_pointer(&global_trial_basis_u1_1_2); - free_pointer(&global_span_v1_0_1); - free_pointer(&global_span_v1_0_2); - free_pointer(&global_span_v1_1_1); - free_pointer(&global_span_v1_1_2); - free_pointer(&global_x1); - free_pointer(&global_x2); - free_pointer(&g_mat_u1_0_v1_0_e0el77nq); - free_pointer(&g_mat_u1_1_v1_0_e0el77nq); - free_pointer(&g_mat_u1_0_v1_1_e0el77nq); - free_pointer(&g_mat_u1_1_v1_1_e0el77nq); - Py_INCREF(Py_None); - return Py_None; -} -/*........................................*/ - -/*........................................*/ - -static PyMethodDef dependencies_e0el77nq_mx2lvwh9fed2_methods[] = { - { - "assemble_matrix_e0el77nq", - (PyCFunction)bind_c_assemble_matrix_e0el77nq_wrapper, - METH_VARARGS | METH_KEYWORDS, - "" - }, - { NULL, NULL, 0, NULL} -}; - -/*........................................*/ - -static struct PyModuleDef dependencies_e0el77nq_mx2lvwh9fed2_module = { - PyModuleDef_HEAD_INIT, - /* name of module */ - "dependencies_e0el77nq_mx2lvwh9fed2", - /* module documentation, may be NULL */ - NULL, - /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */ - 0, - dependencies_e0el77nq_mx2lvwh9fed2_methods, -}; - -/*........................................*/ - -PyMODINIT_FUNC PyInit_dependencies_e0el77nq_mx2lvwh9fed2(void) -{ - PyObject* mod; - static void* Pydependencies_e0el77nq_mx2lvwh9fed2_API[0]; - PyObject* c_api_object_0001; - mod = PyModule_Create(&dependencies_e0el77nq_mx2lvwh9fed2_module); - if (mod == NULL) - { - return NULL; - } - c_api_object_0001 = PyCapsule_New((void *)Pydependencies_e0el77nq_mx2lvwh9fed2_API, "dependencies_e0el77nq_mx2lvwh9fed2._C_API", NULL); - if (PyModule_AddObject(mod, "_C_API", c_api_object_0001) < INT64_C(0)) - { - Py_DECREF(mod); - return NULL; - } - Py_INCREF(c_api_object_0001); - import_array(); - return mod; -} diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.c.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.c.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.h b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.h deleted file mode 100644 index 399d4c53..00000000 --- a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef DEPENDENCIES_E0EL77NQ_MX2LVWH9FED2_WRAPPER_H -#define DEPENDENCIES_E0EL77NQ_MX2LVWH9FED2_WRAPPER_H - -#include "numpy_version.h" -#include "numpy/arrayobject.h" -#include "cwrapper.h" -#include "cwrapper_ndarrays.h" - - -#ifdef DEPENDENCIES_E0EL77NQ_MX2LVWH9FED2_WRAPPER - -void bind_c_assemble_matrix_e0el77nq(void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, void*, int64_t, int64_t, void*, int64_t, int64_t, void*, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t); - -#else - -static void** Pydependencies_e0el77nq_mx2lvwh9fed2_API; - - -/*........................................*/ -static int dependencies_e0el77nq_mx2lvwh9fed2_import(void) -{ - PyObject* current_path; - PyObject* stash_path; - current_path = PySys_GetObject("path"); - stash_path = PyList_GetItem(current_path, 0); - Py_INCREF(stash_path); - PyList_SetItem(current_path, 0, PyUnicode_FromString("/Users/patricklagarrigue/psydac_workspace/sympde/__gpyccel__/__epyccel__")); - Pydependencies_e0el77nq_mx2lvwh9fed2_API = (void**)PyCapsule_Import("dependencies_e0el77nq_mx2lvwh9fed2._C_API", 0); - PyList_SetItem(current_path, 0, stash_path); - return Pydependencies_e0el77nq_mx2lvwh9fed2_API != NULL ? 0 : -1; -} -/*........................................*/ - -#endif -#endif // DEPENDENCIES_E0EL77NQ_MX2LVWH9FED2_WRAPPER_H diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.o b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.o deleted file mode 100644 index 17f9a35e48e7854563ef275ec12e68832bf9acbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71312 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 aNi}2>dyvwyS{F~RJw=9_zjpm<#Qp&sT~p2g diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.o.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_e0el77nq_mx2lvwh9fed2_wrapper.o.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.f90 b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.f90 deleted file mode 100644 index aa8ae499..00000000 --- a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.f90 +++ /dev/null @@ -1,218 +0,0 @@ -module dependencies_vga8r193_6xftl47r79t3 - - - use, intrinsic :: ISO_C_Binding, only : f64 => C_DOUBLE , i64 => & - C_INT64_T - implicit none - - contains - - !........................................ - subroutine lo_dot_vga8r193(mat00, mat01, mat10, mat11, x0, x1, out0, & - out1, s00_1, s00_2, s01_1, s01_2, s10_1, s10_2, s11_1, s11_2, & - n00_1, n00_2, n01_1, n01_2, n10_1, n10_2, n11_1, n11_2, ne00_1, & - ne00_2, ne01_1, ne01_2, ne10_1, ne10_2, ne11_1, ne11_2) - - implicit none - - real(f64), intent(in) :: mat00(0:,0:,0:,0:) - real(f64), intent(in) :: mat01(0:,0:,0:,0:) - real(f64), intent(in) :: mat10(0:,0:,0:,0:) - real(f64), intent(in) :: mat11(0:,0:,0:,0:) - real(f64), intent(in) :: x0(0:,0:) - real(f64), intent(in) :: x1(0:,0:) - real(f64), intent(inout) :: out0(0:,0:) - real(f64), intent(inout) :: out1(0:,0:) - integer(i64), value :: s00_1 - integer(i64), value :: s00_2 - integer(i64), value :: s01_1 - integer(i64), value :: s01_2 - integer(i64), value :: s10_1 - integer(i64), value :: s10_2 - integer(i64), value :: s11_1 - integer(i64), value :: s11_2 - integer(i64), value :: n00_1 - integer(i64), value :: n00_2 - integer(i64), value :: n01_1 - integer(i64), value :: n01_2 - integer(i64), value :: n10_1 - integer(i64), value :: n10_2 - integer(i64), value :: n11_1 - integer(i64), value :: n11_2 - integer(i64), value :: ne00_1 - integer(i64), value :: ne00_2 - integer(i64), value :: ne01_1 - integer(i64), value :: ne01_2 - integer(i64), value :: ne10_1 - integer(i64), value :: ne10_2 - integer(i64), value :: ne11_1 - integer(i64), value :: ne11_2 - integer(i64) :: i1 - integer(i64) :: i2 - real(f64) :: v00 - integer(i64) :: k1 - integer(i64) :: k2 - real(f64) :: v11 - real(f64) :: v01 - real(f64) :: v10 - - do i1 = 0_i64, n00_1 - 1_i64 - do i2 = 0_i64, n00_2 - 1_i64 - v00 = 0.0_f64 - do k1 = 0_i64, 4_i64 - do k2 = 0_i64, 6_i64 - v00 = v00 + mat00(k2, k1, 3_i64 + i2, 3_i64 + i1) * x0(i2 + & - k2, 1_i64 + i1 + k1) - end do - end do - out0(3_i64 + i2, 3_i64 + i1) = v00 - end do - end do - do i1 = 0_i64, ne00_1 - 1_i64 - do i2 = 0_i64, n00_2 - 1_i64 - v00 = 0.0_f64 - do k1 = 0_i64, 4_i64 - i1 - 1_i64 - do k2 = 0_i64, 6_i64 - v00 = v00 + x0(i2 + k2, 1_i64 + i1 + k1 + n00_1) * mat00(k2, & - k1, 3_i64 + i2, 3_i64 + i1 + n00_1) - end do - end do - out0(3_i64 + i2, 3_i64 + i1 + n00_1) = v00 - end do - end do - do i1 = 0_i64, n00_1 + ne00_1 - 1_i64 - do i2 = 0_i64, ne00_2 - 1_i64 - v00 = 0.0_f64 - do k1 = 0_i64, 5_i64 - maxval([0_i64, i1 - n00_1 + 1_i64]) - & - 1_i64 - do k2 = 0_i64, 6_i64 - i2 - 1_i64 - v00 = v00 + x0(i2 + k2 + n00_2, 1_i64 + i1 + k1) * mat00(k2, & - k1, 3_i64 + i2 + n00_2, 3_i64 + i1) - end do - end do - out0(3_i64 + i2 + n00_2, 3_i64 + i1) = v00 - end do - end do - do i1 = 0_i64, n11_1 - 1_i64 - do i2 = 0_i64, n11_2 - 1_i64 - v11 = 0.0_f64 - do k1 = 0_i64, 6_i64 - do k2 = 0_i64, 4_i64 - v11 = v11 + mat11(k2, k1, 3_i64 + i2, 3_i64 + i1) * x1(1_i64 & - + i2 + k2, i1 + k1) - end do - end do - out1(3_i64 + i2, 3_i64 + i1) = v11 - end do - end do - do i1 = 0_i64, ne11_1 - 1_i64 - do i2 = 0_i64, n11_2 - 1_i64 - v11 = 0.0_f64 - do k1 = 0_i64, 6_i64 - i1 - 1_i64 - do k2 = 0_i64, 4_i64 - v11 = v11 + x1(1_i64 + i2 + k2, i1 + k1 + n11_1) * mat11(k2, & - k1, 3_i64 + i2, 3_i64 + i1 + n11_1) - end do - end do - out1(3_i64 + i2, 3_i64 + i1 + n11_1) = v11 - end do - end do - do i1 = 0_i64, n11_1 + ne11_1 - 1_i64 - do i2 = 0_i64, ne11_2 - 1_i64 - v11 = 0.0_f64 - do k1 = 0_i64, 7_i64 - maxval([0_i64, i1 - n11_1 + 1_i64]) - & - 1_i64 - do k2 = 0_i64, 4_i64 - i2 - 1_i64 - v11 = v11 + x1(1_i64 + i2 + k2 + n11_2, i1 + k1) * mat11(k2, & - k1, 3_i64 + i2 + n11_2, 3_i64 + i1) - end do - end do - out1(3_i64 + i2 + n11_2, 3_i64 + i1) = v11 - end do - end do - do i1 = 0_i64, n01_1 - 1_i64 - do i2 = 0_i64, n01_2 - 1_i64 - v01 = 0.0_f64 - do k1 = 0_i64, 6_i64 - do k2 = 0_i64, 6_i64 - v01 = v01 + mat01(k2, k1, 3_i64 + i2, 3_i64 + i1) * x1(i2 + & - k2, i1 + k1) - end do - end do - out0(3_i64 + i2, 3_i64 + i1) = out0(3_i64 + i2, 3_i64 + i1) + & - v01 - end do - end do - do i1 = 0_i64, ne01_1 - 1_i64 - do i2 = 0_i64, n01_2 - 1_i64 - v01 = 0.0_f64 - do k1 = 0_i64, 6_i64 - i1 - 1_i64 - do k2 = 0_i64, 6_i64 - v01 = v01 + x1(i2 + k2, i1 + k1 + n01_1) * mat01(k2, k1, & - 3_i64 + i2, 3_i64 + i1 + n01_1) - end do - end do - out0(3_i64 + i2, 3_i64 + i1 + n01_1) = out0(3_i64 + i2, 3_i64 + & - i1 + n01_1) + v01 - end do - end do - do i1 = 0_i64, n01_1 + ne01_1 - 1_i64 - do i2 = 0_i64, ne01_2 - 1_i64 - v01 = 0.0_f64 - do k1 = 0_i64, 7_i64 - maxval([0_i64, i1 - n01_1 + 1_i64]) - & - 1_i64 - do k2 = 0_i64, 6_i64 - i2 - 1_i64 - v01 = v01 + x1(i2 + k2 + n01_2, i1 + k1) * mat01(k2, k1, & - 3_i64 + i2 + n01_2, 3_i64 + i1) - end do - end do - out0(3_i64 + i2 + n01_2, 3_i64 + i1) = out0(3_i64 + i2 + n01_2, & - 3_i64 + i1) + v01 - end do - end do - do i1 = 0_i64, n10_1 - 1_i64 - do i2 = 0_i64, n10_2 - 1_i64 - v10 = 0.0_f64 - do k1 = 0_i64, 6_i64 - do k2 = 0_i64, 6_i64 - v10 = v10 + mat10(k2, k1, 3_i64 + i2, 3_i64 + i1) * x0(i2 + & - k2, i1 + k1) - end do - end do - out1(3_i64 + i2, 3_i64 + i1) = out1(3_i64 + i2, 3_i64 + i1) + & - v10 - end do - end do - do i1 = 0_i64, ne10_1 - 1_i64 - do i2 = 0_i64, n10_2 - 1_i64 - v10 = 0.0_f64 - do k1 = 0_i64, 6_i64 - i1 - 1_i64 - do k2 = 0_i64, 6_i64 - v10 = v10 + x0(i2 + k2, i1 + k1 + n10_1) * mat10(k2, k1, & - 3_i64 + i2, 3_i64 + i1 + n10_1) - end do - end do - out1(3_i64 + i2, 3_i64 + i1 + n10_1) = out1(3_i64 + i2, 3_i64 + & - i1 + n10_1) + v10 - end do - end do - do i1 = 0_i64, n10_1 + ne10_1 - 1_i64 - do i2 = 0_i64, ne10_2 - 1_i64 - v10 = 0.0_f64 - do k1 = 0_i64, 7_i64 - maxval([0_i64, i1 - n10_1 + 1_i64]) - & - 1_i64 - do k2 = 0_i64, 6_i64 - i2 - 1_i64 - v10 = v10 + x0(i2 + k2 + n10_2, i1 + k1) * mat10(k2, k1, & - 3_i64 + i2 + n10_2, 3_i64 + i1) - end do - end do - out1(3_i64 + i2 + n10_2, 3_i64 + i1) = out1(3_i64 + i2 + n10_2, & - 3_i64 + i1) + v10 - end do - end do - return - - end subroutine lo_dot_vga8r193 - !........................................ - -end module dependencies_vga8r193_6xftl47r79t3 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.f90.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.f90.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.mod b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.mod deleted file mode 100644 index eea057d525497dc53903742c825cb1155f8b7946..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 836 zcmV-K1H1emiwFP!000006YZH>Z`v>%#ozrY{%y)1_{cgU7w<^gbJw* z6VRz2e|BySG%bjh&C{xYh`}M}{Cw=#^7)rAN+LIa`{nH6E{9+FYQ0z%fT@AuW|d!W z@)^um%X^sRKl5Ui7dMN1o&CDKwpY~QnfW;1-09ZJayI<)+#zT%(BM5@s5#M)IPG~e zz*)9fFSDEM$D)`mid)?G4F(E>!6Y1|V-M2cTM%9bpZp;4f&?|iX%r5d-`Y_QT3N0nlP4Pth=w@e{p>J0q|)2$ylMiTOrUKO@=Bxwo}2nBgr{!g zPQ1j6c2q%E73zf?XTwZZj>4%d_;Hxkz~#5+;xBbkjfx}k+;JI+hW0QF;=~nqc~*7X z7PfJDw$nU_85%MGFaEx@ru?4nDASM$_->iamYX(G_@F#C=8-h#jnZg0Zcv4=O54aA zj<=l0=~)z}i63~#9bdXvaprxWj{TvZ>`$R3UD)6N6=sE729yKU5jB9CKrNs)PzM+R zMu9P49GDKw0A>QSfZ4zt-~>1Y&VX~^I&cHH3ETp1Bkt^?DkE+KzQ5iOQd$=;OSr#q zBi}s}UCj?*U-v>If8vS3A`D=ZP9|5?pO=xf%Vr~Oe%sMPwx=7%>BJjl@mF{1!2tEQ zdOaL98Ii3{+E(vN3OeGNzWbmfuIb#T<%}B6PQ{sia6T<((R(Cl`Vr_;gQgYek3^pu zw3zcf9vx?BDWiiav*(nbjG#ABuC76Q-M7yt@est1M`!GxcQ0n3%ZJTNtuN*pC+TKA z2>wtv>p@_Y2wsZ7e}Oh7AYo0DV8a*`YT1LMM^xa3f0Cbu|h6IsYS|^ zqEyS2Rf$rIlo-(q<;E$e5~UO=PNXQsGR0{nN-a`iL@#pH1}e^LRcf))OI51H%BWST z#Y&FqxoU$Iw`x^tv9e25s^!Y5RVl?vZu~vpry;-&+tVPx>wPRDceKiF9|A_t76}1U OL%#v@s(&CI9RL6(*pw0g diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.o b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3.o deleted file mode 100644 index 9af7ee326d974e817f01c4a4e9338af7dbdb5351..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78272 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 j82jDpZg|}rZn)_UH}4f_` -#include -#include "ndarrays.h" - - -/*........................................*/ - - -/*........................................*/ - -/*........................................*/ -static PyObject* bind_c_lo_dot_vga8r193_wrapper(PyObject* self, PyObject* args, PyObject* kwargs) -{ - PyObject* mat00_obj; - PyObject* mat01_obj; - PyObject* mat10_obj; - PyObject* mat11_obj; - PyObject* x0_obj; - PyObject* x1_obj; - PyObject* out0_obj; - PyObject* out1_obj; - PyObject* s00_1_obj; - PyObject* s00_2_obj; - PyObject* s01_1_obj; - PyObject* s01_2_obj; - PyObject* s10_1_obj; - PyObject* s10_2_obj; - PyObject* s11_1_obj; - PyObject* s11_2_obj; - PyObject* n00_1_obj; - PyObject* n00_2_obj; - PyObject* n01_1_obj; - PyObject* n01_2_obj; - PyObject* n10_1_obj; - PyObject* n10_2_obj; - PyObject* n11_1_obj; - PyObject* n11_2_obj; - PyObject* ne00_1_obj; - PyObject* ne00_2_obj; - PyObject* ne01_1_obj; - PyObject* ne01_2_obj; - PyObject* ne10_1_obj; - PyObject* ne10_2_obj; - PyObject* ne11_1_obj; - PyObject* ne11_2_obj; - t_ndarray mat00 = {.shape = NULL}; - void* bound_mat00; - int64_t bound_mat00_shape_1; - int64_t bound_mat00_shape_2; - int64_t bound_mat00_shape_3; - int64_t bound_mat00_shape_4; - int64_t bound_mat00_stride_1; - int64_t bound_mat00_stride_2; - int64_t bound_mat00_stride_3; - int64_t bound_mat00_stride_4; - t_ndarray mat01 = {.shape = NULL}; - void* bound_mat01; - int64_t bound_mat01_shape_1; - int64_t bound_mat01_shape_2; - int64_t bound_mat01_shape_3; - int64_t bound_mat01_shape_4; - int64_t bound_mat01_stride_1; - int64_t bound_mat01_stride_2; - int64_t bound_mat01_stride_3; - int64_t bound_mat01_stride_4; - t_ndarray mat10 = {.shape = NULL}; - void* bound_mat10; - int64_t bound_mat10_shape_1; - int64_t bound_mat10_shape_2; - int64_t bound_mat10_shape_3; - int64_t bound_mat10_shape_4; - int64_t bound_mat10_stride_1; - int64_t bound_mat10_stride_2; - int64_t bound_mat10_stride_3; - int64_t bound_mat10_stride_4; - t_ndarray mat11 = {.shape = NULL}; - void* bound_mat11; - int64_t bound_mat11_shape_1; - int64_t bound_mat11_shape_2; - int64_t bound_mat11_shape_3; - int64_t bound_mat11_shape_4; - int64_t bound_mat11_stride_1; - int64_t bound_mat11_stride_2; - int64_t bound_mat11_stride_3; - int64_t bound_mat11_stride_4; - t_ndarray x0 = {.shape = NULL}; - void* bound_x0; - int64_t bound_x0_shape_1; - int64_t bound_x0_shape_2; - int64_t bound_x0_stride_1; - int64_t bound_x0_stride_2; - t_ndarray x1 = {.shape = NULL}; - void* bound_x1; - int64_t bound_x1_shape_1; - int64_t bound_x1_shape_2; - int64_t bound_x1_stride_1; - int64_t bound_x1_stride_2; - t_ndarray out0 = {.shape = NULL}; - void* bound_out0; - int64_t bound_out0_shape_1; - int64_t bound_out0_shape_2; - int64_t bound_out0_stride_1; - int64_t bound_out0_stride_2; - t_ndarray out1 = {.shape = NULL}; - void* bound_out1; - int64_t bound_out1_shape_1; - int64_t bound_out1_shape_2; - int64_t bound_out1_stride_1; - int64_t bound_out1_stride_2; - int64_t s00_1; - int64_t s00_2; - int64_t s01_1; - int64_t s01_2; - int64_t s10_1; - int64_t s10_2; - int64_t s11_1; - int64_t s11_2; - int64_t n00_1; - int64_t n00_2; - int64_t n01_1; - int64_t n01_2; - int64_t n10_1; - int64_t n10_2; - int64_t n11_1; - int64_t n11_2; - int64_t ne00_1; - int64_t ne00_2; - int64_t ne01_1; - int64_t ne01_2; - int64_t ne10_1; - int64_t ne10_2; - int64_t ne11_1; - int64_t ne11_2; - static char *kwlist[] = { - "mat00", - "mat01", - "mat10", - "mat11", - "x0", - "x1", - "out0", - "out1", - "s00_1", - "s00_2", - "s01_1", - "s01_2", - "s10_1", - "s10_2", - "s11_1", - "s11_2", - "n00_1", - "n00_2", - "n01_1", - "n01_2", - "n10_1", - "n10_2", - "n11_1", - "n11_2", - "ne00_1", - "ne00_2", - "ne01_1", - "ne01_2", - "ne10_1", - "ne10_2", - "ne11_1", - "ne11_2", - NULL - }; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", kwlist, &mat00_obj, &mat01_obj, &mat10_obj, &mat11_obj, &x0_obj, &x1_obj, &out0_obj, &out1_obj, &s00_1_obj, &s00_2_obj, &s01_1_obj, &s01_2_obj, &s10_1_obj, &s10_2_obj, &s11_1_obj, &s11_2_obj, &n00_1_obj, &n00_2_obj, &n01_1_obj, &n01_2_obj, &n10_1_obj, &n10_2_obj, &n11_1_obj, &n11_2_obj, &ne00_1_obj, &ne00_2_obj, &ne01_1_obj, &ne01_2_obj, &ne10_1_obj, &ne10_2_obj, &ne11_1_obj, &ne11_2_obj)) - { - return NULL; - } - if (pyarray_check(mat00_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - mat00 = pyarray_to_ndarray(mat00_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument mat00"); - return NULL; - } - bound_mat00 = nd_data(&mat00); - bound_mat00_shape_1 = nd_ndim(&mat00, INT64_C(0)); - bound_mat00_shape_2 = nd_ndim(&mat00, INT64_C(1)); - bound_mat00_shape_3 = nd_ndim(&mat00, INT64_C(2)); - bound_mat00_shape_4 = nd_ndim(&mat00, INT64_C(3)); - bound_mat00_stride_1 = nd_nstep_C(&mat00, INT64_C(0)); - bound_mat00_stride_2 = nd_nstep_C(&mat00, INT64_C(1)); - bound_mat00_stride_3 = nd_nstep_C(&mat00, INT64_C(2)); - bound_mat00_stride_4 = nd_nstep_C(&mat00, INT64_C(3)); - if (pyarray_check(mat01_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - mat01 = pyarray_to_ndarray(mat01_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument mat01"); - return NULL; - } - bound_mat01 = nd_data(&mat01); - bound_mat01_shape_1 = nd_ndim(&mat01, INT64_C(0)); - bound_mat01_shape_2 = nd_ndim(&mat01, INT64_C(1)); - bound_mat01_shape_3 = nd_ndim(&mat01, INT64_C(2)); - bound_mat01_shape_4 = nd_ndim(&mat01, INT64_C(3)); - bound_mat01_stride_1 = nd_nstep_C(&mat01, INT64_C(0)); - bound_mat01_stride_2 = nd_nstep_C(&mat01, INT64_C(1)); - bound_mat01_stride_3 = nd_nstep_C(&mat01, INT64_C(2)); - bound_mat01_stride_4 = nd_nstep_C(&mat01, INT64_C(3)); - if (pyarray_check(mat10_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - mat10 = pyarray_to_ndarray(mat10_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument mat10"); - return NULL; - } - bound_mat10 = nd_data(&mat10); - bound_mat10_shape_1 = nd_ndim(&mat10, INT64_C(0)); - bound_mat10_shape_2 = nd_ndim(&mat10, INT64_C(1)); - bound_mat10_shape_3 = nd_ndim(&mat10, INT64_C(2)); - bound_mat10_shape_4 = nd_ndim(&mat10, INT64_C(3)); - bound_mat10_stride_1 = nd_nstep_C(&mat10, INT64_C(0)); - bound_mat10_stride_2 = nd_nstep_C(&mat10, INT64_C(1)); - bound_mat10_stride_3 = nd_nstep_C(&mat10, INT64_C(2)); - bound_mat10_stride_4 = nd_nstep_C(&mat10, INT64_C(3)); - if (pyarray_check(mat11_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - mat11 = pyarray_to_ndarray(mat11_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument mat11"); - return NULL; - } - bound_mat11 = nd_data(&mat11); - bound_mat11_shape_1 = nd_ndim(&mat11, INT64_C(0)); - bound_mat11_shape_2 = nd_ndim(&mat11, INT64_C(1)); - bound_mat11_shape_3 = nd_ndim(&mat11, INT64_C(2)); - bound_mat11_shape_4 = nd_ndim(&mat11, INT64_C(3)); - bound_mat11_stride_1 = nd_nstep_C(&mat11, INT64_C(0)); - bound_mat11_stride_2 = nd_nstep_C(&mat11, INT64_C(1)); - bound_mat11_stride_3 = nd_nstep_C(&mat11, INT64_C(2)); - bound_mat11_stride_4 = nd_nstep_C(&mat11, INT64_C(3)); - if (pyarray_check(x0_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) - { - x0 = pyarray_to_ndarray(x0_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument x0"); - return NULL; - } - bound_x0 = nd_data(&x0); - bound_x0_shape_1 = nd_ndim(&x0, INT64_C(0)); - bound_x0_shape_2 = nd_ndim(&x0, INT64_C(1)); - bound_x0_stride_1 = nd_nstep_C(&x0, INT64_C(0)); - bound_x0_stride_2 = nd_nstep_C(&x0, INT64_C(1)); - if (pyarray_check(x1_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) - { - x1 = pyarray_to_ndarray(x1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument x1"); - return NULL; - } - bound_x1 = nd_data(&x1); - bound_x1_shape_1 = nd_ndim(&x1, INT64_C(0)); - bound_x1_shape_2 = nd_ndim(&x1, INT64_C(1)); - bound_x1_stride_1 = nd_nstep_C(&x1, INT64_C(0)); - bound_x1_stride_2 = nd_nstep_C(&x1, INT64_C(1)); - if (pyarray_check(out0_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) - { - out0 = pyarray_to_ndarray(out0_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument out0"); - return NULL; - } - bound_out0 = nd_data(&out0); - bound_out0_shape_1 = nd_ndim(&out0, INT64_C(0)); - bound_out0_shape_2 = nd_ndim(&out0, INT64_C(1)); - bound_out0_stride_1 = nd_nstep_C(&out0, INT64_C(0)); - bound_out0_stride_2 = nd_nstep_C(&out0, INT64_C(1)); - if (pyarray_check(out1_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) - { - out1 = pyarray_to_ndarray(out1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument out1"); - return NULL; - } - bound_out1 = nd_data(&out1); - bound_out1_shape_1 = nd_ndim(&out1, INT64_C(0)); - bound_out1_shape_2 = nd_ndim(&out1, INT64_C(1)); - bound_out1_stride_1 = nd_nstep_C(&out1, INT64_C(0)); - bound_out1_stride_2 = nd_nstep_C(&out1, INT64_C(1)); - if (PyIs_Int64(s00_1_obj)) - { - s00_1 = PyInt64_to_Int64(s00_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s00_1"); - return NULL; - } - if (PyIs_Int64(s00_2_obj)) - { - s00_2 = PyInt64_to_Int64(s00_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s00_2"); - return NULL; - } - if (PyIs_Int64(s01_1_obj)) - { - s01_1 = PyInt64_to_Int64(s01_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s01_1"); - return NULL; - } - if (PyIs_Int64(s01_2_obj)) - { - s01_2 = PyInt64_to_Int64(s01_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s01_2"); - return NULL; - } - if (PyIs_Int64(s10_1_obj)) - { - s10_1 = PyInt64_to_Int64(s10_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s10_1"); - return NULL; - } - if (PyIs_Int64(s10_2_obj)) - { - s10_2 = PyInt64_to_Int64(s10_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s10_2"); - return NULL; - } - if (PyIs_Int64(s11_1_obj)) - { - s11_1 = PyInt64_to_Int64(s11_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s11_1"); - return NULL; - } - if (PyIs_Int64(s11_2_obj)) - { - s11_2 = PyInt64_to_Int64(s11_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument s11_2"); - return NULL; - } - if (PyIs_Int64(n00_1_obj)) - { - n00_1 = PyInt64_to_Int64(n00_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n00_1"); - return NULL; - } - if (PyIs_Int64(n00_2_obj)) - { - n00_2 = PyInt64_to_Int64(n00_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n00_2"); - return NULL; - } - if (PyIs_Int64(n01_1_obj)) - { - n01_1 = PyInt64_to_Int64(n01_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n01_1"); - return NULL; - } - if (PyIs_Int64(n01_2_obj)) - { - n01_2 = PyInt64_to_Int64(n01_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n01_2"); - return NULL; - } - if (PyIs_Int64(n10_1_obj)) - { - n10_1 = PyInt64_to_Int64(n10_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n10_1"); - return NULL; - } - if (PyIs_Int64(n10_2_obj)) - { - n10_2 = PyInt64_to_Int64(n10_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n10_2"); - return NULL; - } - if (PyIs_Int64(n11_1_obj)) - { - n11_1 = PyInt64_to_Int64(n11_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n11_1"); - return NULL; - } - if (PyIs_Int64(n11_2_obj)) - { - n11_2 = PyInt64_to_Int64(n11_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n11_2"); - return NULL; - } - if (PyIs_Int64(ne00_1_obj)) - { - ne00_1 = PyInt64_to_Int64(ne00_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne00_1"); - return NULL; - } - if (PyIs_Int64(ne00_2_obj)) - { - ne00_2 = PyInt64_to_Int64(ne00_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne00_2"); - return NULL; - } - if (PyIs_Int64(ne01_1_obj)) - { - ne01_1 = PyInt64_to_Int64(ne01_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne01_1"); - return NULL; - } - if (PyIs_Int64(ne01_2_obj)) - { - ne01_2 = PyInt64_to_Int64(ne01_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne01_2"); - return NULL; - } - if (PyIs_Int64(ne10_1_obj)) - { - ne10_1 = PyInt64_to_Int64(ne10_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne10_1"); - return NULL; - } - if (PyIs_Int64(ne10_2_obj)) - { - ne10_2 = PyInt64_to_Int64(ne10_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne10_2"); - return NULL; - } - if (PyIs_Int64(ne11_1_obj)) - { - ne11_1 = PyInt64_to_Int64(ne11_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne11_1"); - return NULL; - } - if (PyIs_Int64(ne11_2_obj)) - { - ne11_2 = PyInt64_to_Int64(ne11_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument ne11_2"); - return NULL; - } - bind_c_lo_dot_vga8r193(bound_mat00, bound_mat00_shape_1, bound_mat00_shape_2, bound_mat00_shape_3, bound_mat00_shape_4, bound_mat00_stride_1, bound_mat00_stride_2, bound_mat00_stride_3, bound_mat00_stride_4, bound_mat01, bound_mat01_shape_1, bound_mat01_shape_2, bound_mat01_shape_3, bound_mat01_shape_4, bound_mat01_stride_1, bound_mat01_stride_2, bound_mat01_stride_3, bound_mat01_stride_4, bound_mat10, bound_mat10_shape_1, bound_mat10_shape_2, bound_mat10_shape_3, bound_mat10_shape_4, bound_mat10_stride_1, bound_mat10_stride_2, bound_mat10_stride_3, bound_mat10_stride_4, bound_mat11, bound_mat11_shape_1, bound_mat11_shape_2, bound_mat11_shape_3, bound_mat11_shape_4, bound_mat11_stride_1, bound_mat11_stride_2, bound_mat11_stride_3, bound_mat11_stride_4, bound_x0, bound_x0_shape_1, bound_x0_shape_2, bound_x0_stride_1, bound_x0_stride_2, bound_x1, bound_x1_shape_1, bound_x1_shape_2, bound_x1_stride_1, bound_x1_stride_2, bound_out0, bound_out0_shape_1, bound_out0_shape_2, bound_out0_stride_1, bound_out0_stride_2, bound_out1, bound_out1_shape_1, bound_out1_shape_2, bound_out1_stride_1, bound_out1_stride_2, s00_1, s00_2, s01_1, s01_2, s10_1, s10_2, s11_1, s11_2, n00_1, n00_2, n01_1, n01_2, n10_1, n10_2, n11_1, n11_2, ne00_1, ne00_2, ne01_1, ne01_2, ne10_1, ne10_2, ne11_1, ne11_2); - free_pointer(&mat00); - free_pointer(&mat01); - free_pointer(&mat10); - free_pointer(&mat11); - free_pointer(&x0); - free_pointer(&x1); - free_pointer(&out0); - free_pointer(&out1); - Py_INCREF(Py_None); - return Py_None; -} -/*........................................*/ - -/*........................................*/ - -static PyMethodDef dependencies_vga8r193_6xftl47r79t3_methods[] = { - { - "lo_dot_vga8r193", - (PyCFunction)bind_c_lo_dot_vga8r193_wrapper, - METH_VARARGS | METH_KEYWORDS, - "" - }, - { NULL, NULL, 0, NULL} -}; - -/*........................................*/ - -static struct PyModuleDef dependencies_vga8r193_6xftl47r79t3_module = { - PyModuleDef_HEAD_INIT, - /* name of module */ - "dependencies_vga8r193_6xftl47r79t3", - /* module documentation, may be NULL */ - NULL, - /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */ - 0, - dependencies_vga8r193_6xftl47r79t3_methods, -}; - -/*........................................*/ - -PyMODINIT_FUNC PyInit_dependencies_vga8r193_6xftl47r79t3(void) -{ - PyObject* mod; - static void* Pydependencies_vga8r193_6xftl47r79t3_API[0]; - PyObject* c_api_object_0001; - mod = PyModule_Create(&dependencies_vga8r193_6xftl47r79t3_module); - if (mod == NULL) - { - return NULL; - } - c_api_object_0001 = PyCapsule_New((void *)Pydependencies_vga8r193_6xftl47r79t3_API, "dependencies_vga8r193_6xftl47r79t3._C_API", NULL); - if (PyModule_AddObject(mod, "_C_API", c_api_object_0001) < INT64_C(0)) - { - Py_DECREF(mod); - return NULL; - } - Py_INCREF(c_api_object_0001); - import_array(); - return mod; -} diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.c.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.c.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.h b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.h deleted file mode 100644 index 0e9146f5..00000000 --- a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef DEPENDENCIES_VGA8R193_6XFTL47R79T3_WRAPPER_H -#define DEPENDENCIES_VGA8R193_6XFTL47R79T3_WRAPPER_H - -#include "numpy_version.h" -#include "numpy/arrayobject.h" -#include "cwrapper.h" -#include "cwrapper_ndarrays.h" - - -#ifdef DEPENDENCIES_VGA8R193_6XFTL47R79T3_WRAPPER - -void bind_c_lo_dot_vga8r193(void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t); - -#else - -static void** Pydependencies_vga8r193_6xftl47r79t3_API; - - -/*........................................*/ -static int dependencies_vga8r193_6xftl47r79t3_import(void) -{ - PyObject* current_path; - PyObject* stash_path; - current_path = PySys_GetObject("path"); - stash_path = PyList_GetItem(current_path, 0); - Py_INCREF(stash_path); - PyList_SetItem(current_path, 0, PyUnicode_FromString("/Users/patricklagarrigue/psydac_workspace/sympde/__gpyccel__/__epyccel__")); - Pydependencies_vga8r193_6xftl47r79t3_API = (void**)PyCapsule_Import("dependencies_vga8r193_6xftl47r79t3._C_API", 0); - PyList_SetItem(current_path, 0, stash_path); - return Pydependencies_vga8r193_6xftl47r79t3_API != NULL ? 0 : -1; -} -/*........................................*/ - -#endif -#endif // DEPENDENCIES_VGA8R193_6XFTL47R79T3_WRAPPER_H diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.o b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.o deleted file mode 100644 index d2ef13681b4254d1b959d25af205f35c92696433..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56288 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

?^a`FIl5K!eK^`0EmU6jca1n1 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 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.o.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_vga8r193_6xftl47r79t3_wrapper.o.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.f90 b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.f90 deleted file mode 100644 index 93c7a93e..00000000 --- a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.f90 +++ /dev/null @@ -1,160 +0,0 @@ -module dependencies_wti60kr7_6feykyplisif - - - use, intrinsic :: ISO_C_Binding, only : f64 => C_DOUBLE , i64 => & - C_INT64_T - implicit none - - contains - - !........................................ - subroutine assemble_matrix_wti60kr7(global_test_basis_v2_1, & - global_test_basis_v2_2, global_trial_basis_u2_1, & - global_trial_basis_u2_2, global_span_v2_1, global_span_v2_2, & - global_x1, global_x2, test_v2_p1, test_v2_p2, trial_u2_p1, & - trial_u2_p2, n_element_1, n_element_2, k1, k2, pad1, pad2, & - g_mat_u2_v2_wti60kr7) - - implicit none - - real(f64), intent(in) :: global_test_basis_v2_1(0:,0:,0:,0:) - real(f64), intent(in) :: global_test_basis_v2_2(0:,0:,0:,0:) - real(f64), intent(in) :: global_trial_basis_u2_1(0:,0:,0:,0:) - real(f64), intent(in) :: global_trial_basis_u2_2(0:,0:,0:,0:) - integer(i64), intent(in) :: global_span_v2_1(0:) - integer(i64), intent(in) :: global_span_v2_2(0:) - real(f64), intent(in) :: global_x1(0:,0:) - real(f64), intent(in) :: global_x2(0:,0:) - integer(i64), value :: test_v2_p1 - integer(i64), value :: test_v2_p2 - integer(i64), value :: trial_u2_p1 - integer(i64), value :: trial_u2_p2 - integer(i64), value :: n_element_1 - integer(i64), value :: n_element_2 - integer(i64), value :: k1 - integer(i64), value :: k2 - integer(i64), value :: pad1 - integer(i64), value :: pad2 - real(f64), intent(inout) :: g_mat_u2_v2_wti60kr7(0:,0:,0:,0:) - real(f64), allocatable :: local_x1(:) - real(f64), allocatable :: local_x2(:) - real(f64), allocatable :: l_mat_u2_v2_wti60kr7(:,:,:,:) - integer(i64) :: i_element_1 - integer(i64) :: span_v2_1 - integer(i64) :: i_element_2 - integer(i64) :: span_v2_2 - integer(i64) :: i_quad_1 - real(f64) :: x1 - integer(i64) :: i_quad_2 - real(f64) :: x2 - integer(i64) :: i_basis_1 - integer(i64) :: i_basis_2 - integer(i64) :: j_basis_1 - real(f64) :: v2_1 - real(f64) :: v2_1_x1 - real(f64) :: u2_1 - real(f64) :: u2_1_x1 - integer(i64) :: j_basis_2 - real(f64) :: v2_2 - real(f64) :: v2_2_x2 - real(f64) :: u2_2 - real(f64) :: u2_2_x2 - real(f64) :: v2 - real(f64) :: v2_x2 - real(f64) :: v2_x1 - real(f64) :: u2 - real(f64) :: u2_x2 - real(f64) :: u2_x1 - real(f64) :: temp_v2_u2_0 - real(f64) :: temp_v2_u2_1 - real(f64) :: temp_v2_u2_2 - real(f64) :: temp_v2_u2_3 - real(f64) :: contribution_v2_u2_wti60kr7 - - allocate(local_x1(0:size(global_x1, 1_i64, i64) - 1_i64)) - local_x1 = 0.0_f64 - allocate(local_x2(0:size(global_x2, 1_i64, i64) - 1_i64)) - local_x2 = 0.0_f64 - allocate(l_mat_u2_v2_wti60kr7(0:4_i64, 0:4_i64, 0:2_i64, 0:2_i64)) - l_mat_u2_v2_wti60kr7 = 0.0_f64 - do i_element_1 = 0_i64, n_element_1 - 1_i64 - local_x1(:) = global_x1(:, i_element_1) - span_v2_1 = global_span_v2_1(i_element_1) - do i_element_2 = 0_i64, n_element_2 - 1_i64 - local_x2(:) = global_x2(:, i_element_2) - span_v2_2 = global_span_v2_2(i_element_2) - l_mat_u2_v2_wti60kr7(:, :, :, :) = 0.0_f64 - do i_quad_1 = 0_i64, 3_i64 - x1 = local_x1(i_quad_1) - do i_quad_2 = 0_i64, 3_i64 - x2 = local_x2(i_quad_2) - do i_basis_1 = 0_i64, 2_i64 - do i_basis_2 = 0_i64, 2_i64 - do j_basis_1 = 0_i64, 2_i64 - v2_1 = global_test_basis_v2_1(i_quad_1, 0_i64, & - i_basis_1, i_element_1) - v2_1_x1 = global_test_basis_v2_1(i_quad_1, 1_i64, & - i_basis_1, i_element_1) - u2_1 = global_trial_basis_u2_1(i_quad_1, 0_i64, & - j_basis_1, i_element_1) - u2_1_x1 = global_trial_basis_u2_1(i_quad_1, 1_i64, & - j_basis_1, i_element_1) - do j_basis_2 = 0_i64, 2_i64 - v2_2 = global_test_basis_v2_2(i_quad_2, 0_i64, & - i_basis_2, i_element_2) - v2_2_x2 = global_test_basis_v2_2(i_quad_2, 1_i64, & - i_basis_2, i_element_2) - u2_2 = global_trial_basis_u2_2(i_quad_2, 0_i64, & - j_basis_2, i_element_2) - u2_2_x2 = global_trial_basis_u2_2(i_quad_2, 1_i64, & - j_basis_2, i_element_2) - v2 = v2_1 * v2_2 - v2_x2 = v2_1 * v2_2_x2 - v2_x1 = v2_1_x1 * v2_2 - u2 = u2_1 * u2_2 - u2_x2 = u2_1 * u2_2_x2 - u2_x1 = u2_1_x1 * u2_2 - temp_v2_u2_0 = 2_i64 * 3.141592653589793_f64 - temp_v2_u2_1 = temp_v2_u2_0 * x1 - temp_v2_u2_2 = temp_v2_u2_0 * x2 - temp_v2_u2_3 = (0.25_f64 * sin(temp_v2_u2_1) * cos( & - temp_v2_u2_2) + 0.25_f64 * sin(temp_v2_u2_2) & - * cos(temp_v2_u2_1) + 1.0_f64) ** 2_i64 - contribution_v2_u2_wti60kr7 = 0.25_f64 * u2 * v2 / & - sqrt(temp_v2_u2_3) - l_mat_u2_v2_wti60kr7(2_i64 - i_basis_2 + j_basis_2, & - 2_i64 - i_basis_1 + j_basis_1, i_basis_2, & - i_basis_1) = l_mat_u2_v2_wti60kr7(2_i64 - & - i_basis_2 + j_basis_2, 2_i64 - i_basis_1 + & - j_basis_1, i_basis_2, i_basis_1) + & - contribution_v2_u2_wti60kr7 - end do - end do - end do - end do - end do - end do - g_mat_u2_v2_wti60kr7(:, :, pad2 + span_v2_2 - test_v2_p2:1_i64 + & - pad2 + span_v2_2 - 1_i64, pad1 + span_v2_1 - test_v2_p1: & - 1_i64 + pad1 + span_v2_1 - 1_i64) = g_mat_u2_v2_wti60kr7( & - :, :, pad2 + span_v2_2 - test_v2_p2:1_i64 + pad2 + & - span_v2_2 - 1_i64, pad1 + span_v2_1 - test_v2_p1:1_i64 + & - pad1 + span_v2_1 - 1_i64) + l_mat_u2_v2_wti60kr7(:, :, :, & - :) - end do - end do - if (allocated(l_mat_u2_v2_wti60kr7)) then - deallocate(l_mat_u2_v2_wti60kr7) - end if - if (allocated(local_x2)) then - deallocate(local_x2) - end if - if (allocated(local_x1)) then - deallocate(local_x1) - end if - return - - end subroutine assemble_matrix_wti60kr7 - !........................................ - -end module dependencies_wti60kr7_6feykyplisif diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.f90.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.f90.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.mod b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.mod deleted file mode 100644 index 3ce918e7e596e9ef29ba58b8a5d234e9ef6ede9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 809 zcmV+^1J?W>iwFP!000006YW^Ra-u*Gz0X(l4L$4@Gb-wlD4V5L!2(G(rzwqNic--M zlTH498xTZAqo^Be%K~)<7$}76!@5igg(93|Cvl@lu$l2;AaU;c zQ~u2Rt~YSK7b)wA1QZH|w%K%A8aT!;!+bQp=|)#Gx+Ly)EVB`xOMYeC@H$I3Y`qa- zNuLU~Wgqbr!+r!=UeRD67fA`Ep6`oEe=PWIT==?%TRmsKD=lmj*uP@oDmr~{ROQlN~`63{Zx z3Qz@T6=)4;9heM^0%O2Rn?lHe5UhLU*#KvowhTT>1DO;DW^O9;( z*xGO^@;a*0D52~fBcjzhI zfGi)8G^wWE)-XSq1~i>^`zd-{7@As$PEO*KBnX5}RNHpiT9ey9)sD7{+cE*gN(9{G zgj<2+8I&=GRAd~KKVH_u;K`Ff(f zKkIo%=l4YVos!2;V%68_L~!UigfAvVNX!ijuuXDD`RTgJ(S+Q4u8;+{AvxX>EYo3w z&p&efwtFdCiI6L_|Ah$npDC;q(BHFcE9@yhGn40o+H$mGjh^Aratc{?e7*`9R=3eq z^LllnDQRfer5aX99v5RV5#D0QMDbP7YH4WKr5et$qugSxG8H)qQ95HVOemw=8eIet z&StaT;AEA^iE)dYB*4T%OegDfR!o@dUxJ0PAUR-GO|6Y(&3&eGfX#1}@97?#yia+#REEvUa%BmdN|F2phEuvXcNPEuEs%+* diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.o b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif.o deleted file mode 100644 index 18995c699d3eb3f1d7fc9e2262aa4638bb8115b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8296 zcmd5>e{d94p6^Zu2us%PA()K|9D}m!WPv4FBPO++WL&cMTDk>Ya?YIMB!mgc5kgER zkQh=ssYzSu>uZg5mn*K$RE<|~g;h(Lt20;8-JCNx15s`@s7rEks{^<$!Cz5M1ta7> z-`Cv;T-|Nmf7?~v@B6;*`{VQ8`@Zjc-TnGkA6=Oz2x6{)2W}7Uyc|4yxN+TryN??F zm#b#6-QXu3Ty7mU1-i)|UEy#v(h;?3yS}9=xaFI=OFda+Q)G{H`<4pAGGcjz7!~dn z4%f9sTN|5qIE--kdVBqjo$oogM!qWu)JOMn*lrd0ni`{#*4n0Wn{}f-(x=NYD`b~k zZ_n+gEk*r}G=%G0Yj;I#&W-lQ9ee$b!bQhk>`w%Nuq_aT2GpFY&x7K>3$10&CCDy3REk`8>-c`LT2&zvVqz5i`C5dUEsmM zp9iV~TYjb*$63#ZevGhUR^zTJ(#)+Tni(nA%#gpnH6{7b)T-m039RiY(HE&4~A`KVu$HhiEOk)&qUmTUSK z&=$yuxn4DPjc8^u+AnA;Yk@$4=IA+Y`f$lC0ch~6Mti?%wxK-O!dX6;Rn1&xhPh=} zBm=5pT_iHVhRShZTcUAK~ zKQr%E&7TG}^RXZ^1}D+T%#dHxU(w75S|C0~Hl+>6nb`r^Jus*T0SGQsv$9+@2F4-4 zz3G7Ag}<08RlTd4N|2cfEDR^P&6Y}aWn~Fm)R49r+zjZOL1LtRd|Zmy${>Ti5fV47 zAr$bnA8oMF&x=7nDVUpss(EiYGb;gRYoBUV?^jpe3)8xf+q241NPYiuGiKVlUt}+! zO4l-0@v8LX`a(fq){@^)bTQ-Ib5yEkRUgxnu+RZHsdqnAnQ@F6ZTE7cWpm-%4=1X5m`|@UoX2gQhRW|fs=0N9neF|U=Sr|QSis#I@wsNagJGr-6*|h4 z_!Uvo7fBd;bAbBK%u$LSEP#=Ft+KO-n`GwVUN^py7_kvV3QY@)_)#DS6-ZCKhBT;} z10~!7&n$pVGi(FYlcaD=?;r(S_geW2@3S6WD1sMrc+7a6%_gysWRflZl9|KP_9&Ed zt9%qNLWekWxP_$5;Yq3;(~DeJR@qTz>gTx3V394_K!rI>Lx)+Gsb+bm!Le7Gp2x-X z8Y-mczC;2PKx)PnEZNPrn{q0QX|?#IW<6NLipN;-Nv!fi#1^lp;-q4|G(DHbV3g*9 z?Ht<(s6MjTcru8+12f#mZ47KCrn3S&%2~X-A2Sff45%g_F-$}yL@)ywZL0(wqcywH zDocGc5n2+lOe2sE%zyBUbfDY2RyA*k`fCiDNbBSrQKm(UM={c@_#FiFIg&N1Mii`7W7v-- zES8H9M4rp?;_xI21Zt*B{!;`Of_m7_Cy``kMn;N92U5AAd6}7oW0@JRUI{FjOAjV9 zmx`@vSWoxt4CTL%MCqiQ!{h{-IGw^6HgfV}TK(WMvl=$N`UqF63$6HsoN;llHRLeM zUPtbxiN*YmbKTKCt~*GJ6DU4}iG$;i27Lu64%ZN(8E^X#D%}b613MA*V{0GbOb5E; zDk0r-M=1YnrpsHEfMkVESU=`>K8ogs^0r?C{6ZjPSzoOsAjj$@G~|pN*A}^G^R6+^?q3oH*3)<0wuaN{nMf z)7zeUwm-`W<51s4PV_vxKaZ4VyteYG(6P)VFW1YQ3ca7{^m0`UC)Y%sD{{|WUR&2e zK#n;IJ_Lkd8yxp@1aO?-1RV32AaHz?w*kSJgMcf}EKHME(u2kK$TO*e9;Xf@_&@^& zpTti8zo)kuhx#dw2{)O{Tq4PyXIWqR%;`h@w4z|dcGBf_^{=Wp?IeBTP-TL8P=omL zRwghgHAAdoQgZUt0G%4J1qdi`n9;=FDB?*a{q>~cO(*xnQ*LTqm~hGE_; zzNHzjZn9P!z)rRqQrPbjO8m^%YVlFc7*mVi!HU}-h-Y(=sqY3%+BWGl!Wxf^@%5}|9b9Z;m_W{}{EP*sc*OgvhO1JI>=t#x?}sS4@~6yv{;yl7H!2BqbJR1a;mJl|)=$G_b(l?aU)Es3t6^NgnC-puL zG)nxEDD^&JQ#sLg)N`W`dkb^1uyy_mRTLl%XE7efZ-{~j0V@q znakdF1uTBVm$@vL6=Z%LTt%!^HmjRhR&WWimbk1{1(};kvHKgv{DMq7Np-tYm*o`& zncoIIr0C&_YQ=e}H$@OG%Zm!&e@lT6&kY5YU_=XQKtEp)qxNq37X=Ah@UIJ!HgTXJ zOT@0=3K?BcWgoEblPdwYNv;9Hr{x&6-yHmvoFJkdoFoyy4fe`eBD%dm)a_N_^|E&# zdG$8I>t*lLj#uxmY_HwmaMjD+Uhb9k91(ENpbqHkX%gezNo)yksK!JzgcO-jiccsN z6VV^wWu=gbuVSuFDb}KsnM-m(dU<1T#jRNLw*|gPi8LLjacX-VhvgB~%D;P)m5&72 zC3`7anD|vXurio`5*+V*7EjG#@uXiBkFpAFOwvCAHRSkd2uiH!vyMl-=veRL-5xQ){~}B8xI8@4r~oP5(sZqtjKg=>lB7q zD1D=JcIsws`YiyUoP!zIk53HAO_t{Xv~Dq_EtOESlUt0vg&5wH+8Hs730m!&fp41*9WdvF@x^~1f)xrRqHS2Wf1=p*wONAUj%U9 zMBeofnA3Oq4*y1qM{xC-6#iBo9(9F1>+f zI)2QriRT$`>VJiqK;Z0W@uRn}o|kF;DdH7Y(LN&STX~y3gLsdErh*S<<{)2iCZ9ws zW~{sFA=Zp4KNAvb=EdIXgdjpCUb4dUsEuETRq)Q9I>N#6wX zn3?YYo1A{8v2e+ksz_&~;54|m+uTs$Du>%Z+`DY9Qn=3Hc1&aP=5g-wio$%(?esF@ z+IE*0J9azCZkJJmA@4wkpuGIUt zHsy&nqh(H%;W;;YD|Qn3$NW=~Sq*>Pv2;o-^jyF|)* z>7GXm7rmTLb$TC|R>V`(zF0LQPP>No+QJn$-FJGoq5U|uuOtt)el`y?XGhkAT1z(_w?g^q;QeT zTg*F+cOZ1o<*no$9pasGc|YczOY)9z9(93tXq8s z*m#Mudg-aFo7^?uW%cg!&^6v>)}4^SmsS3rTx!2a*7skhNndj*K)G8GZjBPdnbOO{#p$aYrw)>QutAYAA8MgE2MI!GM6pfpD#J0h*V-FqUf z^-a6?`t~+NntgS(O?B-}wNd;R@>8+nb}l-Sxg*kzKo6JAKjJzS^dy-F3Cm zh)~tqy1Uh_lE(L%+I`zPqmee?RhoVEjZG2X?Q5#rBCTy}T59pPscvUe?T*^k*2W#} zku@!Co!e{c!h3hO?rdwRt&6N_>)h3{J+dYo-qF%oR~Kmthe1cKp|6tLBQ25U?UClX z#zwj2ZQF8k#Uu`S!Z}&AdHb;DS@p<_p#B~?V z?;jzq3c_Vy=8WpekDk`dm84-QqGzq^N&ID~;A8RXzXNzG&%inPdle;I zto}!*{*Y5&>(qVd6ihrqB~0H$Th>izbN}Dcxs~c~qJMP#0yovCo%$iC-bX*GaUH-- z?LO!KYJ%z*DEI&E(@s6UXzBTWg!cyW7GM%3)5SGd5yawcAF5c zi*&RI_!S+Azy?o#Leo#mVJG~D(@{yE))v{dttkR+ -#include -#include "ndarrays.h" - - -/*........................................*/ - - -/*........................................*/ - -/*........................................*/ -static PyObject* bind_c_assemble_matrix_wti60kr7_wrapper(PyObject* self, PyObject* args, PyObject* kwargs) -{ - PyObject* global_test_basis_v2_1_obj; - PyObject* global_test_basis_v2_2_obj; - PyObject* global_trial_basis_u2_1_obj; - PyObject* global_trial_basis_u2_2_obj; - PyObject* global_span_v2_1_obj; - PyObject* global_span_v2_2_obj; - PyObject* global_x1_obj; - PyObject* global_x2_obj; - PyObject* test_v2_p1_obj; - PyObject* test_v2_p2_obj; - PyObject* trial_u2_p1_obj; - PyObject* trial_u2_p2_obj; - PyObject* n_element_1_obj; - PyObject* n_element_2_obj; - PyObject* k1_obj; - PyObject* k2_obj; - PyObject* pad1_obj; - PyObject* pad2_obj; - PyObject* g_mat_u2_v2_wti60kr7_obj; - t_ndarray global_test_basis_v2_1 = {.shape = NULL}; - void* bound_global_test_basis_v2_1; - int64_t bound_global_test_basis_v2_1_shape_1; - int64_t bound_global_test_basis_v2_1_shape_2; - int64_t bound_global_test_basis_v2_1_shape_3; - int64_t bound_global_test_basis_v2_1_shape_4; - int64_t bound_global_test_basis_v2_1_stride_1; - int64_t bound_global_test_basis_v2_1_stride_2; - int64_t bound_global_test_basis_v2_1_stride_3; - int64_t bound_global_test_basis_v2_1_stride_4; - t_ndarray global_test_basis_v2_2 = {.shape = NULL}; - void* bound_global_test_basis_v2_2; - int64_t bound_global_test_basis_v2_2_shape_1; - int64_t bound_global_test_basis_v2_2_shape_2; - int64_t bound_global_test_basis_v2_2_shape_3; - int64_t bound_global_test_basis_v2_2_shape_4; - int64_t bound_global_test_basis_v2_2_stride_1; - int64_t bound_global_test_basis_v2_2_stride_2; - int64_t bound_global_test_basis_v2_2_stride_3; - int64_t bound_global_test_basis_v2_2_stride_4; - t_ndarray global_trial_basis_u2_1 = {.shape = NULL}; - void* bound_global_trial_basis_u2_1; - int64_t bound_global_trial_basis_u2_1_shape_1; - int64_t bound_global_trial_basis_u2_1_shape_2; - int64_t bound_global_trial_basis_u2_1_shape_3; - int64_t bound_global_trial_basis_u2_1_shape_4; - int64_t bound_global_trial_basis_u2_1_stride_1; - int64_t bound_global_trial_basis_u2_1_stride_2; - int64_t bound_global_trial_basis_u2_1_stride_3; - int64_t bound_global_trial_basis_u2_1_stride_4; - t_ndarray global_trial_basis_u2_2 = {.shape = NULL}; - void* bound_global_trial_basis_u2_2; - int64_t bound_global_trial_basis_u2_2_shape_1; - int64_t bound_global_trial_basis_u2_2_shape_2; - int64_t bound_global_trial_basis_u2_2_shape_3; - int64_t bound_global_trial_basis_u2_2_shape_4; - int64_t bound_global_trial_basis_u2_2_stride_1; - int64_t bound_global_trial_basis_u2_2_stride_2; - int64_t bound_global_trial_basis_u2_2_stride_3; - int64_t bound_global_trial_basis_u2_2_stride_4; - t_ndarray global_span_v2_1 = {.shape = NULL}; - void* bound_global_span_v2_1; - int64_t bound_global_span_v2_1_shape_1; - int64_t bound_global_span_v2_1_stride_1; - t_ndarray global_span_v2_2 = {.shape = NULL}; - void* bound_global_span_v2_2; - int64_t bound_global_span_v2_2_shape_1; - int64_t bound_global_span_v2_2_stride_1; - t_ndarray global_x1 = {.shape = NULL}; - void* bound_global_x1; - int64_t bound_global_x1_shape_1; - int64_t bound_global_x1_shape_2; - int64_t bound_global_x1_stride_1; - int64_t bound_global_x1_stride_2; - t_ndarray global_x2 = {.shape = NULL}; - void* bound_global_x2; - int64_t bound_global_x2_shape_1; - int64_t bound_global_x2_shape_2; - int64_t bound_global_x2_stride_1; - int64_t bound_global_x2_stride_2; - int64_t test_v2_p1; - int64_t test_v2_p2; - int64_t trial_u2_p1; - int64_t trial_u2_p2; - int64_t n_element_1; - int64_t n_element_2; - int64_t k1; - int64_t k2; - int64_t pad1; - int64_t pad2; - t_ndarray g_mat_u2_v2_wti60kr7 = {.shape = NULL}; - void* bound_g_mat_u2_v2_wti60kr7; - int64_t bound_g_mat_u2_v2_wti60kr7_shape_1; - int64_t bound_g_mat_u2_v2_wti60kr7_shape_2; - int64_t bound_g_mat_u2_v2_wti60kr7_shape_3; - int64_t bound_g_mat_u2_v2_wti60kr7_shape_4; - int64_t bound_g_mat_u2_v2_wti60kr7_stride_1; - int64_t bound_g_mat_u2_v2_wti60kr7_stride_2; - int64_t bound_g_mat_u2_v2_wti60kr7_stride_3; - int64_t bound_g_mat_u2_v2_wti60kr7_stride_4; - static char *kwlist[] = { - "global_test_basis_v2_1", - "global_test_basis_v2_2", - "global_trial_basis_u2_1", - "global_trial_basis_u2_2", - "global_span_v2_1", - "global_span_v2_2", - "global_x1", - "global_x2", - "test_v2_p1", - "test_v2_p2", - "trial_u2_p1", - "trial_u2_p2", - "n_element_1", - "n_element_2", - "k1", - "k2", - "pad1", - "pad2", - "g_mat_u2_v2_wti60kr7", - NULL - }; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOOOOOOOOOOOOOOOOOO", kwlist, &global_test_basis_v2_1_obj, &global_test_basis_v2_2_obj, &global_trial_basis_u2_1_obj, &global_trial_basis_u2_2_obj, &global_span_v2_1_obj, &global_span_v2_2_obj, &global_x1_obj, &global_x2_obj, &test_v2_p1_obj, &test_v2_p2_obj, &trial_u2_p1_obj, &trial_u2_p2_obj, &n_element_1_obj, &n_element_2_obj, &k1_obj, &k2_obj, &pad1_obj, &pad2_obj, &g_mat_u2_v2_wti60kr7_obj)) - { - return NULL; - } - if (pyarray_check(global_test_basis_v2_1_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - global_test_basis_v2_1 = pyarray_to_ndarray(global_test_basis_v2_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_test_basis_v2_1"); - return NULL; - } - bound_global_test_basis_v2_1 = nd_data(&global_test_basis_v2_1); - bound_global_test_basis_v2_1_shape_1 = nd_ndim(&global_test_basis_v2_1, INT64_C(0)); - bound_global_test_basis_v2_1_shape_2 = nd_ndim(&global_test_basis_v2_1, INT64_C(1)); - bound_global_test_basis_v2_1_shape_3 = nd_ndim(&global_test_basis_v2_1, INT64_C(2)); - bound_global_test_basis_v2_1_shape_4 = nd_ndim(&global_test_basis_v2_1, INT64_C(3)); - bound_global_test_basis_v2_1_stride_1 = nd_nstep_C(&global_test_basis_v2_1, INT64_C(0)); - bound_global_test_basis_v2_1_stride_2 = nd_nstep_C(&global_test_basis_v2_1, INT64_C(1)); - bound_global_test_basis_v2_1_stride_3 = nd_nstep_C(&global_test_basis_v2_1, INT64_C(2)); - bound_global_test_basis_v2_1_stride_4 = nd_nstep_C(&global_test_basis_v2_1, INT64_C(3)); - if (pyarray_check(global_test_basis_v2_2_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - global_test_basis_v2_2 = pyarray_to_ndarray(global_test_basis_v2_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_test_basis_v2_2"); - return NULL; - } - bound_global_test_basis_v2_2 = nd_data(&global_test_basis_v2_2); - bound_global_test_basis_v2_2_shape_1 = nd_ndim(&global_test_basis_v2_2, INT64_C(0)); - bound_global_test_basis_v2_2_shape_2 = nd_ndim(&global_test_basis_v2_2, INT64_C(1)); - bound_global_test_basis_v2_2_shape_3 = nd_ndim(&global_test_basis_v2_2, INT64_C(2)); - bound_global_test_basis_v2_2_shape_4 = nd_ndim(&global_test_basis_v2_2, INT64_C(3)); - bound_global_test_basis_v2_2_stride_1 = nd_nstep_C(&global_test_basis_v2_2, INT64_C(0)); - bound_global_test_basis_v2_2_stride_2 = nd_nstep_C(&global_test_basis_v2_2, INT64_C(1)); - bound_global_test_basis_v2_2_stride_3 = nd_nstep_C(&global_test_basis_v2_2, INT64_C(2)); - bound_global_test_basis_v2_2_stride_4 = nd_nstep_C(&global_test_basis_v2_2, INT64_C(3)); - if (pyarray_check(global_trial_basis_u2_1_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - global_trial_basis_u2_1 = pyarray_to_ndarray(global_trial_basis_u2_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_trial_basis_u2_1"); - return NULL; - } - bound_global_trial_basis_u2_1 = nd_data(&global_trial_basis_u2_1); - bound_global_trial_basis_u2_1_shape_1 = nd_ndim(&global_trial_basis_u2_1, INT64_C(0)); - bound_global_trial_basis_u2_1_shape_2 = nd_ndim(&global_trial_basis_u2_1, INT64_C(1)); - bound_global_trial_basis_u2_1_shape_3 = nd_ndim(&global_trial_basis_u2_1, INT64_C(2)); - bound_global_trial_basis_u2_1_shape_4 = nd_ndim(&global_trial_basis_u2_1, INT64_C(3)); - bound_global_trial_basis_u2_1_stride_1 = nd_nstep_C(&global_trial_basis_u2_1, INT64_C(0)); - bound_global_trial_basis_u2_1_stride_2 = nd_nstep_C(&global_trial_basis_u2_1, INT64_C(1)); - bound_global_trial_basis_u2_1_stride_3 = nd_nstep_C(&global_trial_basis_u2_1, INT64_C(2)); - bound_global_trial_basis_u2_1_stride_4 = nd_nstep_C(&global_trial_basis_u2_1, INT64_C(3)); - if (pyarray_check(global_trial_basis_u2_2_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - global_trial_basis_u2_2 = pyarray_to_ndarray(global_trial_basis_u2_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_trial_basis_u2_2"); - return NULL; - } - bound_global_trial_basis_u2_2 = nd_data(&global_trial_basis_u2_2); - bound_global_trial_basis_u2_2_shape_1 = nd_ndim(&global_trial_basis_u2_2, INT64_C(0)); - bound_global_trial_basis_u2_2_shape_2 = nd_ndim(&global_trial_basis_u2_2, INT64_C(1)); - bound_global_trial_basis_u2_2_shape_3 = nd_ndim(&global_trial_basis_u2_2, INT64_C(2)); - bound_global_trial_basis_u2_2_shape_4 = nd_ndim(&global_trial_basis_u2_2, INT64_C(3)); - bound_global_trial_basis_u2_2_stride_1 = nd_nstep_C(&global_trial_basis_u2_2, INT64_C(0)); - bound_global_trial_basis_u2_2_stride_2 = nd_nstep_C(&global_trial_basis_u2_2, INT64_C(1)); - bound_global_trial_basis_u2_2_stride_3 = nd_nstep_C(&global_trial_basis_u2_2, INT64_C(2)); - bound_global_trial_basis_u2_2_stride_4 = nd_nstep_C(&global_trial_basis_u2_2, INT64_C(3)); - if (pyarray_check(global_span_v2_1_obj, NPY_LONG, INT64_C(1), NO_ORDER_CHECK)) - { - global_span_v2_1 = pyarray_to_ndarray(global_span_v2_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument global_span_v2_1"); - return NULL; - } - bound_global_span_v2_1 = nd_data(&global_span_v2_1); - bound_global_span_v2_1_shape_1 = nd_ndim(&global_span_v2_1, INT64_C(0)); - bound_global_span_v2_1_stride_1 = nd_nstep_F(&global_span_v2_1, INT64_C(0)); - if (pyarray_check(global_span_v2_2_obj, NPY_LONG, INT64_C(1), NO_ORDER_CHECK)) - { - global_span_v2_2 = pyarray_to_ndarray(global_span_v2_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument global_span_v2_2"); - return NULL; - } - bound_global_span_v2_2 = nd_data(&global_span_v2_2); - bound_global_span_v2_2_shape_1 = nd_ndim(&global_span_v2_2, INT64_C(0)); - bound_global_span_v2_2_stride_1 = nd_nstep_F(&global_span_v2_2, INT64_C(0)); - if (pyarray_check(global_x1_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) - { - global_x1 = pyarray_to_ndarray(global_x1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_x1"); - return NULL; - } - bound_global_x1 = nd_data(&global_x1); - bound_global_x1_shape_1 = nd_ndim(&global_x1, INT64_C(0)); - bound_global_x1_shape_2 = nd_ndim(&global_x1, INT64_C(1)); - bound_global_x1_stride_1 = nd_nstep_C(&global_x1, INT64_C(0)); - bound_global_x1_stride_2 = nd_nstep_C(&global_x1, INT64_C(1)); - if (pyarray_check(global_x2_obj, NPY_DOUBLE, INT64_C(2), NPY_ARRAY_C_CONTIGUOUS)) - { - global_x2 = pyarray_to_ndarray(global_x2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument global_x2"); - return NULL; - } - bound_global_x2 = nd_data(&global_x2); - bound_global_x2_shape_1 = nd_ndim(&global_x2, INT64_C(0)); - bound_global_x2_shape_2 = nd_ndim(&global_x2, INT64_C(1)); - bound_global_x2_stride_1 = nd_nstep_C(&global_x2, INT64_C(0)); - bound_global_x2_stride_2 = nd_nstep_C(&global_x2, INT64_C(1)); - if (PyIs_Int64(test_v2_p1_obj)) - { - test_v2_p1 = PyInt64_to_Int64(test_v2_p1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument test_v2_p1"); - return NULL; - } - if (PyIs_Int64(test_v2_p2_obj)) - { - test_v2_p2 = PyInt64_to_Int64(test_v2_p2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument test_v2_p2"); - return NULL; - } - if (PyIs_Int64(trial_u2_p1_obj)) - { - trial_u2_p1 = PyInt64_to_Int64(trial_u2_p1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument trial_u2_p1"); - return NULL; - } - if (PyIs_Int64(trial_u2_p2_obj)) - { - trial_u2_p2 = PyInt64_to_Int64(trial_u2_p2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument trial_u2_p2"); - return NULL; - } - if (PyIs_Int64(n_element_1_obj)) - { - n_element_1 = PyInt64_to_Int64(n_element_1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n_element_1"); - return NULL; - } - if (PyIs_Int64(n_element_2_obj)) - { - n_element_2 = PyInt64_to_Int64(n_element_2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument n_element_2"); - return NULL; - } - if (PyIs_Int64(k1_obj)) - { - k1 = PyInt64_to_Int64(k1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument k1"); - return NULL; - } - if (PyIs_Int64(k2_obj)) - { - k2 = PyInt64_to_Int64(k2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument k2"); - return NULL; - } - if (PyIs_Int64(pad1_obj)) - { - pad1 = PyInt64_to_Int64(pad1_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument pad1"); - return NULL; - } - if (PyIs_Int64(pad2_obj)) - { - pad2 = PyInt64_to_Int64(pad2_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type int for argument pad2"); - return NULL; - } - if (pyarray_check(g_mat_u2_v2_wti60kr7_obj, NPY_DOUBLE, INT64_C(4), NPY_ARRAY_C_CONTIGUOUS)) - { - g_mat_u2_v2_wti60kr7 = pyarray_to_ndarray(g_mat_u2_v2_wti60kr7_obj); - } - else - { - PyErr_SetString(PyExc_TypeError, "Expected an argument of type float for argument g_mat_u2_v2_wti60kr7"); - return NULL; - } - bound_g_mat_u2_v2_wti60kr7 = nd_data(&g_mat_u2_v2_wti60kr7); - bound_g_mat_u2_v2_wti60kr7_shape_1 = nd_ndim(&g_mat_u2_v2_wti60kr7, INT64_C(0)); - bound_g_mat_u2_v2_wti60kr7_shape_2 = nd_ndim(&g_mat_u2_v2_wti60kr7, INT64_C(1)); - bound_g_mat_u2_v2_wti60kr7_shape_3 = nd_ndim(&g_mat_u2_v2_wti60kr7, INT64_C(2)); - bound_g_mat_u2_v2_wti60kr7_shape_4 = nd_ndim(&g_mat_u2_v2_wti60kr7, INT64_C(3)); - bound_g_mat_u2_v2_wti60kr7_stride_1 = nd_nstep_C(&g_mat_u2_v2_wti60kr7, INT64_C(0)); - bound_g_mat_u2_v2_wti60kr7_stride_2 = nd_nstep_C(&g_mat_u2_v2_wti60kr7, INT64_C(1)); - bound_g_mat_u2_v2_wti60kr7_stride_3 = nd_nstep_C(&g_mat_u2_v2_wti60kr7, INT64_C(2)); - bound_g_mat_u2_v2_wti60kr7_stride_4 = nd_nstep_C(&g_mat_u2_v2_wti60kr7, INT64_C(3)); - bind_c_assemble_matrix_wti60kr7(bound_global_test_basis_v2_1, bound_global_test_basis_v2_1_shape_1, bound_global_test_basis_v2_1_shape_2, bound_global_test_basis_v2_1_shape_3, bound_global_test_basis_v2_1_shape_4, bound_global_test_basis_v2_1_stride_1, bound_global_test_basis_v2_1_stride_2, bound_global_test_basis_v2_1_stride_3, bound_global_test_basis_v2_1_stride_4, bound_global_test_basis_v2_2, bound_global_test_basis_v2_2_shape_1, bound_global_test_basis_v2_2_shape_2, bound_global_test_basis_v2_2_shape_3, bound_global_test_basis_v2_2_shape_4, bound_global_test_basis_v2_2_stride_1, bound_global_test_basis_v2_2_stride_2, bound_global_test_basis_v2_2_stride_3, bound_global_test_basis_v2_2_stride_4, bound_global_trial_basis_u2_1, bound_global_trial_basis_u2_1_shape_1, bound_global_trial_basis_u2_1_shape_2, bound_global_trial_basis_u2_1_shape_3, bound_global_trial_basis_u2_1_shape_4, bound_global_trial_basis_u2_1_stride_1, bound_global_trial_basis_u2_1_stride_2, bound_global_trial_basis_u2_1_stride_3, bound_global_trial_basis_u2_1_stride_4, bound_global_trial_basis_u2_2, bound_global_trial_basis_u2_2_shape_1, bound_global_trial_basis_u2_2_shape_2, bound_global_trial_basis_u2_2_shape_3, bound_global_trial_basis_u2_2_shape_4, bound_global_trial_basis_u2_2_stride_1, bound_global_trial_basis_u2_2_stride_2, bound_global_trial_basis_u2_2_stride_3, bound_global_trial_basis_u2_2_stride_4, bound_global_span_v2_1, bound_global_span_v2_1_shape_1, bound_global_span_v2_1_stride_1, bound_global_span_v2_2, bound_global_span_v2_2_shape_1, bound_global_span_v2_2_stride_1, bound_global_x1, bound_global_x1_shape_1, bound_global_x1_shape_2, bound_global_x1_stride_1, bound_global_x1_stride_2, bound_global_x2, bound_global_x2_shape_1, bound_global_x2_shape_2, bound_global_x2_stride_1, bound_global_x2_stride_2, test_v2_p1, test_v2_p2, trial_u2_p1, trial_u2_p2, n_element_1, n_element_2, k1, k2, pad1, pad2, bound_g_mat_u2_v2_wti60kr7, bound_g_mat_u2_v2_wti60kr7_shape_1, bound_g_mat_u2_v2_wti60kr7_shape_2, bound_g_mat_u2_v2_wti60kr7_shape_3, bound_g_mat_u2_v2_wti60kr7_shape_4, bound_g_mat_u2_v2_wti60kr7_stride_1, bound_g_mat_u2_v2_wti60kr7_stride_2, bound_g_mat_u2_v2_wti60kr7_stride_3, bound_g_mat_u2_v2_wti60kr7_stride_4); - free_pointer(&global_test_basis_v2_1); - free_pointer(&global_test_basis_v2_2); - free_pointer(&global_trial_basis_u2_1); - free_pointer(&global_trial_basis_u2_2); - free_pointer(&global_span_v2_1); - free_pointer(&global_span_v2_2); - free_pointer(&global_x1); - free_pointer(&global_x2); - free_pointer(&g_mat_u2_v2_wti60kr7); - Py_INCREF(Py_None); - return Py_None; -} -/*........................................*/ - -/*........................................*/ - -static PyMethodDef dependencies_wti60kr7_6feykyplisif_methods[] = { - { - "assemble_matrix_wti60kr7", - (PyCFunction)bind_c_assemble_matrix_wti60kr7_wrapper, - METH_VARARGS | METH_KEYWORDS, - "" - }, - { NULL, NULL, 0, NULL} -}; - -/*........................................*/ - -static struct PyModuleDef dependencies_wti60kr7_6feykyplisif_module = { - PyModuleDef_HEAD_INIT, - /* name of module */ - "dependencies_wti60kr7_6feykyplisif", - /* module documentation, may be NULL */ - NULL, - /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */ - 0, - dependencies_wti60kr7_6feykyplisif_methods, -}; - -/*........................................*/ - -PyMODINIT_FUNC PyInit_dependencies_wti60kr7_6feykyplisif(void) -{ - PyObject* mod; - static void* Pydependencies_wti60kr7_6feykyplisif_API[0]; - PyObject* c_api_object_0001; - mod = PyModule_Create(&dependencies_wti60kr7_6feykyplisif_module); - if (mod == NULL) - { - return NULL; - } - c_api_object_0001 = PyCapsule_New((void *)Pydependencies_wti60kr7_6feykyplisif_API, "dependencies_wti60kr7_6feykyplisif._C_API", NULL); - if (PyModule_AddObject(mod, "_C_API", c_api_object_0001) < INT64_C(0)) - { - Py_DECREF(mod); - return NULL; - } - Py_INCREF(c_api_object_0001); - import_array(); - return mod; -} diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.c.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.c.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.h b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.h deleted file mode 100644 index 33fb8c32..00000000 --- a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef DEPENDENCIES_WTI60KR7_6FEYKYPLISIF_WRAPPER_H -#define DEPENDENCIES_WTI60KR7_6FEYKYPLISIF_WRAPPER_H - -#include "numpy_version.h" -#include "numpy/arrayobject.h" -#include "cwrapper.h" -#include "cwrapper_ndarrays.h" - - -#ifdef DEPENDENCIES_WTI60KR7_6FEYKYPLISIF_WRAPPER - -void bind_c_assemble_matrix_wti60kr7(void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, void*, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t); - -#else - -static void** Pydependencies_wti60kr7_6feykyplisif_API; - - -/*........................................*/ -static int dependencies_wti60kr7_6feykyplisif_import(void) -{ - PyObject* current_path; - PyObject* stash_path; - current_path = PySys_GetObject("path"); - stash_path = PyList_GetItem(current_path, 0); - Py_INCREF(stash_path); - PyList_SetItem(current_path, 0, PyUnicode_FromString("/Users/patricklagarrigue/psydac_workspace/sympde/__gpyccel__/__epyccel__")); - Pydependencies_wti60kr7_6feykyplisif_API = (void**)PyCapsule_Import("dependencies_wti60kr7_6feykyplisif._C_API", 0); - PyList_SetItem(current_path, 0, stash_path); - return Pydependencies_wti60kr7_6feykyplisif_API != NULL ? 0 : -1; -} -/*........................................*/ - -#endif -#endif // DEPENDENCIES_WTI60KR7_6FEYKYPLISIF_WRAPPER_H diff --git a/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.o.lock b/__gpyccel__/__epyccel__/__pyccel__/dependencies_wti60kr7_6feykyplisif_wrapper.o.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/ndarrays.lock b/__gpyccel__/__epyccel__/__pyccel__/ndarrays.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.c b/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.c deleted file mode 100644 index bceaeea4..00000000 --- a/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.c +++ /dev/null @@ -1,822 +0,0 @@ -/* -------------------------------------------------------------------------------------- */ -/* This file is part of Pyccel which is released under MIT License. See the LICENSE file */ -/* or go to https://github.com/pyccel/pyccel/blob/devel/LICENSE for full license details. */ -/* -------------------------------------------------------------------------------------- */ - -# include "ndarrays.h" -# include -# include -# include -# include -# include -# include -# include -# include - -/* - * Takes an array, and prints its elements the way they are laid out in memory (similar to ravel) -*/ - -void print_ndarray_memory(t_ndarray nd) -{ - int i; - - for (i = 0; i < nd.length; ++i) - { - switch (nd.type) - { - case nd_int8: - printf("[%"PRId8"]", nd.nd_int8[i]); - break; - case nd_int16: - printf("[%"PRId16"]", nd.nd_int16[i]); - break; - case nd_int32: - printf("[%"PRId32"]", nd.nd_int32[i]); - break; - case nd_int64: - printf("[%"PRId64"]", nd.nd_int64[i]); - break; - case nd_float: - printf("[%f]", nd.nd_float[i]); - break; - case nd_double: - printf("[%lf]", nd.nd_double[i]); - break; - case nd_bool: - printf("[%d]", nd.nd_bool[i]); - break; - case nd_cfloat: - { - double real = creal(nd.nd_cfloat[i]); - double imag = cimag(nd.nd_cfloat[i]); - printf("[%lf%+lfj]", real, imag); - break; - } - case nd_cdouble: - { - double real = creal(nd.nd_cdouble[i]); - double imag = cimag(nd.nd_cdouble[i]); - printf("[%lf%+lfj]", real, imag); - break; - } - } - ++i; - } - if (i) - printf("\n"); -} - -/* -** allocation -*/ - -t_ndarray array_create(int32_t nd, int64_t *shape, - t_types type, bool is_view, t_order order) -{ - t_ndarray arr; - - arr.nd = nd; - arr.type = type; - arr.order = order; - switch (type) - { - case nd_int8: - arr.type_size = sizeof(int8_t); - break; - case nd_int16: - arr.type_size = sizeof(int16_t); - break; - case nd_int32: - arr.type_size = sizeof(int32_t); - break; - case nd_int64: - arr.type_size = sizeof(int64_t); - break; - case nd_float: - arr.type_size = sizeof(float); - break; - case nd_double: - arr.type_size = sizeof(double); - break; - case nd_bool: - arr.type_size = sizeof(bool); - break; - case nd_cfloat: - arr.type_size = sizeof(float complex); - break; - case nd_cdouble: - arr.type_size = sizeof(double complex); - break; - } - arr.is_view = is_view; - arr.length = 1; - arr.shape = malloc(arr.nd * sizeof(int64_t)); - for (int32_t i = 0; i < arr.nd; i++) - { - arr.length *= shape[i]; - arr.shape[i] = shape[i]; - } - arr.buffer_size = arr.length * arr.type_size; - arr.strides = malloc(nd * sizeof(int64_t)); - if (arr.order == order_c) - { - for (int32_t i = 0; i < arr.nd; i++) - { - arr.strides[i] = 1; - for (int32_t j = i + 1; j < arr.nd; j++) - arr.strides[i] *= arr.shape[j]; - } - } - else if (arr.order == order_f) - { - for (int32_t i = 0; i < arr.nd; i++) - { - arr.strides[i] = 1; - for (int32_t j = 0; j < i; j++) - arr.strides[i] *= arr.shape[j]; - } - } - if (!is_view) - arr.raw_data = malloc(arr.buffer_size); - return (arr); -} - -void stack_array_init(t_ndarray *arr) -{ - switch (arr->type) - { - case nd_int8: - arr->type_size = sizeof(int8_t); - break; - case nd_int16: - arr->type_size = sizeof(int16_t); - break; - case nd_int32: - arr->type_size = sizeof(int32_t); - break; - case nd_int64: - arr->type_size = sizeof(int64_t); - break; - case nd_float: - arr->type_size = sizeof(float); - break; - case nd_double: - arr->type_size = sizeof(double); - break; - case nd_bool: - arr->type_size = sizeof(bool); - break; - case nd_cfloat: - arr->type_size = sizeof(float complex); - break; - case nd_cdouble: - arr->type_size = sizeof(double complex); - break; - } - arr->length = 1; - for (int32_t i = 0; i < arr->nd; i++) - arr->length *= arr->shape[i]; - arr->buffer_size = arr->length * arr->type_size; - for (int32_t i = 0; i < arr->nd; i++) - { - arr->strides[i] = 1; - for (int32_t j = i + 1; j < arr->nd; j++) - arr->strides[i] *= arr->shape[j]; - } -} - -void _array_fill_int8(int8_t c, t_ndarray arr) -{ - if (c == 0) - memset(arr.raw_data, 0, arr.buffer_size); - else - for (int32_t i = 0; i < arr.length; i++) - arr.nd_int8[i] = c; -} - -void _array_fill_int16(int16_t c, t_ndarray arr) -{ - if (c == 0) - memset(arr.raw_data, 0, arr.buffer_size); - else - for (int32_t i = 0; i < arr.length; i++) - arr.nd_int16[i] = c; -} - -void _array_fill_int32(int32_t c, t_ndarray arr) -{ - if (c == 0) - memset(arr.raw_data, 0, arr.buffer_size); - else - for (int32_t i = 0; i < arr.length; i++) - arr.nd_int32[i] = c; -} - -void _array_fill_int64(int64_t c, t_ndarray arr) -{ - if (c == 0) - memset(arr.raw_data, 0, arr.buffer_size); - else - for (int32_t i = 0; i < arr.length; i++) - arr.nd_int64[i] = c; -} - -void _array_fill_bool(bool c, t_ndarray arr) -{ - if (c == 0) - memset(arr.raw_data, 0, arr.buffer_size); - else - for (int32_t i = 0; i < arr.length; i++) - arr.nd_bool[i] = c; -} - -void _array_fill_float(float c, t_ndarray arr) -{ - if (c == 0) - memset(arr.raw_data, 0, arr.buffer_size); - else - for (int32_t i = 0; i < arr.length; i++) - arr.nd_float[i] = c; -} - -void _array_fill_double(double c, t_ndarray arr) -{ - if (c == 0) - memset(arr.raw_data, 0, arr.buffer_size); - else - for (int32_t i = 0; i < arr.length; i++) - arr.nd_double[i] = c; -} - -void _array_fill_cfloat(float complex c, t_ndarray arr) -{ - if (c == 0) - memset(arr.raw_data, 0, arr.buffer_size); - else - for (int32_t i = 0; i < arr.length; i++) - arr.nd_cfloat[i] = c; -} - - -void _array_fill_cdouble(double complex c, t_ndarray arr) -{ - if (c == 0) - memset(arr.raw_data, 0, arr.buffer_size); - else - for (int32_t i = 0; i < arr.length; i++) - arr.nd_cdouble[i] = c; -} - -/* -** deallocation -*/ - -int32_t free_array(t_ndarray* arr) -{ - if (arr->shape == NULL) - return (0); - free(arr->raw_data); - arr->raw_data = NULL; - free(arr->shape); - arr->shape = NULL; - free(arr->strides); - arr->strides = NULL; - return (1); -} - - -int32_t free_pointer(t_ndarray* arr) -{ - if (arr->is_view == false || arr->shape == NULL) - return (0); - free(arr->shape); - arr->shape = NULL; - free(arr->strides); - arr->strides = NULL; - return (1); -} - -/* -** slices -*/ - -t_slice new_slice(int32_t start, int32_t end, int32_t step, t_slice_type type) -{ - t_slice slice; - - slice.start = start; - slice.end = end; - slice.step = step; - slice.type = type; - return (slice); -} - -t_ndarray array_slicing(t_ndarray arr, int n, ...) -{ - t_ndarray view; - va_list va; - t_slice slice; - int32_t start = 0; - int32_t j = 0; - t_order order = arr.order; - - view.nd = n; - view.type = arr.type; - view.type_size = arr.type_size; - view.shape = malloc(sizeof(int64_t) * view.nd); - view.strides = malloc(sizeof(int64_t) * view.nd); - view.order = order; - view.is_view = true; - - va_start(va, n); - for (int32_t i = 0; i < arr.nd; i++) - { - slice = va_arg(va, t_slice); - if (slice.type == RANGE) - { - view.shape[j] = (slice.end - slice.start + (slice.step - 1)) / slice.step; - view.strides[j] = arr.strides[i] * slice.step; - j++; - } - start += slice.start * arr.strides[i]; - } - va_end(va); - - view.raw_data = (unsigned char*)arr.raw_data + start * arr.type_size; - view.length = 1; - for (int32_t i = 0; i < view.nd; i++) - view.length *= view.shape[i]; - view.buffer_size = view.length * view.type_size; - - return (view); -} - -/* -** assigns -*/ - -void alias_assign(t_ndarray *dest, t_ndarray src) -{ - /* - ** copy src to dest - ** allocate new memory for shape and strides - ** setting is_view to true for the garbage collector to deallocate - */ - - *dest = src; - dest->shape = malloc(sizeof(int64_t) * src.nd); - memcpy(dest->shape, src.shape, sizeof(int64_t) * src.nd); - dest->strides = malloc(sizeof(int64_t) * src.nd); - memcpy(dest->strides, src.strides, sizeof(int64_t) * src.nd); - dest->is_view = true; -} - -void transpose_alias_assign(t_ndarray *dest, t_ndarray src) -{ - /* - ** copy src to dest - ** allocate new memory for shape and strides - ** setting is_view to true for the garbage collector to deallocate - */ - - *dest = src; - dest->shape = malloc(sizeof(int64_t) * src.nd); - dest->strides = malloc(sizeof(int64_t) * src.nd); - for (int32_t i = 0; i < src.nd; i++) - { - dest->shape[i] = src.shape[src.nd-1-i]; - dest->strides[i] = src.strides[src.nd-1-i]; - } - dest->is_view = true; -} - -/* -** indexing -*/ - -int64_t get_index(t_ndarray arr, ...) -{ - va_list va; - int32_t index; - - va_start(va, arr); - index = 0; - for (int32_t i = 0; i < arr.nd; i++) - { - index += va_arg(va, int64_t) * arr.strides[i]; - } - va_end(va); - return (index); -} - -/* -** convert numpy strides to nd_array strides, and return it in a new array, to -** avoid the problem of different implementations of strides in numpy and ndarray. -*/ -int64_t *numpy_to_ndarray_strides(int64_t *np_strides, int type_size, int32_t nd) -{ - int64_t *ndarray_strides; - - ndarray_strides = (int64_t*)malloc(sizeof(int64_t) * nd); - for (int i = 0; i < nd; i++) - ndarray_strides[i] = np_strides[i] / type_size; - return ndarray_strides; - -} - -/* -** copy numpy shape to nd_array shape, and return it in a new array, to -** avoid the problem of variation of system architecture because numpy shape -** is not saved in fixed length type. -*/ -int64_t *numpy_to_ndarray_shape(int64_t *np_shape, int32_t nd) -{ - int64_t *nd_shape; - - nd_shape = (int64_t*)malloc(sizeof(int64_t) * nd); - for (int i = 0; i < nd; i++) - nd_shape[i] = np_shape[i]; - return nd_shape; -} - -/** -** takes an array containing the shape of an array 'shape', number of a -** certain dimension 'nd', and the number of the array's dimensions -** returns the stride (number of single elements to jump in a dimension -** to get to this dimension's next element) of the 'nd`th dimension -*/ -int64_t get_dimension_stride(int64_t *shape, int32_t nd, int32_t max_nd) -{ - int64_t product = 1; - - for (int i = nd; i < max_nd; ++i) - product *= shape[i]; - return (product); -} - -/** -** arr : Takes an array needed to do the calculations -** flat_c_idx : An element number, representing an element's index if it were -** in a flattened (order_c/row major) array -** nd : representing the number of dimensions -** -** Returns the element's index depending on its required memory layout -** (order_f/column major or order_c/row major) -*/ -int64_t element_index(t_ndarray arr, int64_t flat_c_idx, int32_t nd) -{ - if (arr.order == order_c && !arr.is_view) - return flat_c_idx; - if (nd == 0) - return (0); - if (nd == arr.nd) - return (flat_c_idx % arr.shape[nd - 1]) * arr.strides[nd - 1] + element_index(arr, flat_c_idx, nd - 1); - int64_t true_index = (flat_c_idx / get_dimension_stride(arr.shape, nd, arr.nd)); - if (true_index >= arr.shape[nd - 1]) - true_index = true_index % arr.shape[nd - 1]; - return (true_index * arr.strides[nd - 1] + element_index(arr, flat_c_idx, nd - 1)); -} - -bool is_same_shape(t_ndarray a, t_ndarray b) -{ - if (a.nd != b.nd) - return (false); - for (int i = 0; i < a.nd; ++i) - { - if (a.shape[i] != b.shape[i]) - return (false); - } - return (true); -} - -#define COPY_DATA_FROM_(SRC_TYPE) \ - void copy_data_from_##SRC_TYPE(t_ndarray **ds, t_ndarray src, uint32_t offset, bool elem_wise_cp) \ - { \ - t_ndarray *dest = *ds; \ - switch(dest->type) \ - { \ - case nd_bool: \ - if(elem_wise_cp == false)\ - { \ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_bool[i + offset] = (bool)src.nd_##SRC_TYPE[i]; \ - }\ - else \ - {\ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_bool[element_index(*dest, i, dest->nd) + offset] = (bool)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ - }\ - break; \ - case nd_int8: \ - if(elem_wise_cp == false)\ - { \ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_int8[i + offset] = (int8_t)src.nd_##SRC_TYPE[i]; \ - }\ - else \ - {\ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_int8[element_index(*dest, i, dest->nd) + offset] = (int8_t)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ - }\ - break; \ - case nd_int16: \ - if(elem_wise_cp == false)\ - { \ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_int16[i + offset] = (int16_t)src.nd_##SRC_TYPE[i]; \ - }\ - else \ - {\ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_int16[element_index(*dest, i, dest->nd) + offset] = (int16_t)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ - }\ - break; \ - case nd_int32: \ - if(elem_wise_cp == false)\ - { \ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_int32[i + offset] = (int32_t)src.nd_##SRC_TYPE[i]; \ - }\ - else \ - {\ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_int32[element_index(*dest, i, dest->nd) + offset] = (int32_t)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ - }\ - break; \ - case nd_int64: \ - if(elem_wise_cp == false)\ - { \ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_int64[i + offset] = (int64_t)src.nd_##SRC_TYPE[i]; \ - }\ - else \ - {\ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_int64[element_index(*dest, i, dest->nd) + offset] = (int64_t)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ - }\ - break; \ - case nd_float: \ - if(elem_wise_cp == false)\ - { \ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_float[i + offset] = (float)src.nd_##SRC_TYPE[i]; \ - }\ - else \ - {\ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_float[element_index(*dest, i, dest->nd) + offset] = (float)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ - }\ - break; \ - case nd_double: \ - if(elem_wise_cp == false)\ - { \ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_double[i + offset] = (double)src.nd_##SRC_TYPE[i]; \ - }\ - else \ - {\ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_double[element_index(*dest, i, dest->nd) + offset] = (double)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ - }\ - break; \ - case nd_cfloat: \ - if(elem_wise_cp == false)\ - { \ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_cfloat[i + offset] = (float complex)src.nd_##SRC_TYPE[i]; \ - }\ - else \ - {\ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_cfloat[element_index(*dest, i, dest->nd) + offset] = (float complex)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ - }\ - break; \ - case nd_cdouble: \ - if(elem_wise_cp == false)\ - { \ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_cdouble[i + offset] = (double complex)src.nd_##SRC_TYPE[i]; \ - }\ - else \ - {\ - for(int64_t i = 0; i < src.length; i++) \ - dest->nd_cdouble[element_index(*dest, i, dest->nd) + offset] = (double complex)src.nd_##SRC_TYPE[element_index(src, i, src.nd)]; \ - }\ - break; \ - } \ - } - -COPY_DATA_FROM_(bool) -COPY_DATA_FROM_(int8) -COPY_DATA_FROM_(int16) -COPY_DATA_FROM_(int32) -COPY_DATA_FROM_(int64) -COPY_DATA_FROM_(float) -COPY_DATA_FROM_(double) -COPY_DATA_FROM_(cfloat) -COPY_DATA_FROM_(cdouble) - -void copy_data(t_ndarray **ds, t_ndarray src, uint32_t offset, bool elem_wise_cp) -{ - switch(src.type) - { - case nd_bool: - copy_data_from_bool(ds, src, offset, elem_wise_cp); - break; - - case nd_int8: - copy_data_from_int8(ds, src, offset, elem_wise_cp); - break; - - case nd_int16: - copy_data_from_int16(ds, src, offset, elem_wise_cp); - break; - - case nd_int32: - copy_data_from_int32(ds, src, offset, elem_wise_cp); - break; - - case nd_int64: - copy_data_from_int64(ds, src, offset, elem_wise_cp); - break; - - case nd_float: - copy_data_from_float(ds, src, offset, elem_wise_cp); - break; - - case nd_double: - copy_data_from_double(ds, src, offset, elem_wise_cp); - break; - - case nd_cfloat: - copy_data_from_cfloat(ds, src, offset, elem_wise_cp); - break; - - case nd_cdouble: - copy_data_from_cdouble(ds, src, offset, elem_wise_cp); - break; - } -} - -void array_copy_data(t_ndarray *dest, t_ndarray src, uint32_t offset) -{ - unsigned char *d = (unsigned char*)dest->raw_data; - unsigned char *s = (unsigned char*)src.raw_data; - - if (!src.is_view && dest->order == src.order - && (src.order == order_c - || (src.order == order_f && is_same_shape(*dest, src)))) - { - copy_data(&dest, src, offset, false); - } - else - { - copy_data(&dest, src, offset, true); - } -} - -/* -** sum of ndarray -*/ - -static int64_t get_index_from_array(t_ndarray arr, int64_t *nd_indices) -{ - /* - ** returns the one dimentional index equivalent to - ** the indices in each dimension stored in nd_indices - */ - int64_t idx = 0; - for (int64_t dim = 0; dim no carry -** iteration 1: -** nd_indices = [1, 0] -> no carry -** iteration 2: -** nd_indices = [2, 0] -> nd_indices[0] == shape[0] -** -> carry -> [0, 1] -** iteration 3: -** nd_indices = [1, 1] -> no carry -** iteration 4: -** nd_indices = [2, 1] -> nd_indices[0] == shape[0] -** -> carry -> [0, 2] -** iteration 5: -** nd_indices = [1, 2] -> no carry -*/ -#define NUMPY_SUM_(NAME, TYPE, CTYPE) \ - TYPE numpy_sum_##NAME(t_ndarray arr) \ - { \ - int64_t nd_indices[arr.nd]; \ - memset(nd_indices, 0, sizeof(int64_t) * arr.nd); \ - TYPE output = 0; \ - for (int32_t i = 0; i < arr.length; i++) \ - { \ - output += arr.nd_##CTYPE[get_index_from_array(arr, nd_indices)]; \ - nd_indices[0]++; \ - for (int32_t j = 0; j < arr.nd - 1; j++) \ - if (nd_indices[j] == arr.shape[j]) \ - { \ - nd_indices[j] = 0; \ - nd_indices[j + 1]++; \ - } \ - } \ - return output; \ - } - -NUMPY_SUM_(bool, int64_t, bool) -NUMPY_SUM_(int8, int64_t, int8) -NUMPY_SUM_(int16, int64_t, int16) -NUMPY_SUM_(int32, int64_t, int32) -NUMPY_SUM_(int64, int64_t, int64) -NUMPY_SUM_(float32, float, float) -NUMPY_SUM_(float64, double, double) -NUMPY_SUM_(complex64, float complex, cfloat) -NUMPY_SUM_(complex128, double complex, cdouble) - -#define NUMPY_AMAX_(NAME, TYPE, CTYPE) \ - TYPE numpy_amax_##NAME(t_ndarray arr) \ - { \ - int64_t nd_indices[arr.nd]; \ - memset(nd_indices, 0, sizeof(int64_t) * arr.nd); \ - TYPE output = arr.nd_##CTYPE[get_index_from_array(arr, nd_indices)]; \ - for (int32_t i = 0; i < arr.length; i++) \ - { \ - TYPE current_value = arr.nd_##CTYPE[get_index_from_array(arr, nd_indices)]; \ - if (creal(current_value) > creal(output) || \ - (creal(current_value) == creal(output) && cimag(current_value) > cimag(output))) \ - { \ - output = current_value; \ - } \ - nd_indices[0]++; \ - for (int32_t j = 0; j < arr.nd - 1; j++) \ - if (nd_indices[j] == arr.shape[j]) \ - { \ - nd_indices[j] = 0; \ - nd_indices[j + 1]++; \ - } \ - } \ - return output; \ - } - -NUMPY_AMAX_(bool, int64_t, bool) -NUMPY_AMAX_(int8, int64_t, int8) -NUMPY_AMAX_(int16, int64_t, int16) -NUMPY_AMAX_(int32, int64_t, int32) -NUMPY_AMAX_(int64, int64_t, int64) -NUMPY_AMAX_(float32, float, float) -NUMPY_AMAX_(float64, double, double) -NUMPY_AMAX_(complex64, float complex, cfloat) -NUMPY_AMAX_(complex128, double complex, cdouble) - -#define NUMPY_AMIN_(NAME, TYPE, CTYPE) \ - TYPE numpy_amin_##NAME(t_ndarray arr) \ - { \ - int64_t nd_indices[arr.nd]; \ - memset(nd_indices, 0, sizeof(int64_t) * arr.nd); \ - TYPE output = arr.nd_##CTYPE[get_index_from_array(arr, nd_indices)]; \ - for (int32_t i = 0; i < arr.length; i++) \ - { \ - TYPE current_value = arr.nd_##CTYPE[get_index_from_array(arr, nd_indices)]; \ - if (creal(current_value) < creal(output) || \ - (creal(current_value) == creal(output) && cimag(current_value) < cimag(output))) \ - { \ - output = current_value; \ - } \ - nd_indices[0]++; \ - for (int32_t j = 0; j < arr.nd - 1; j++) \ - if (nd_indices[j] == arr.shape[j]) \ - { \ - nd_indices[j] = 0; \ - nd_indices[j + 1]++; \ - } \ - } \ - return output; \ - } - -NUMPY_AMIN_(bool, int64_t, bool) -NUMPY_AMIN_(int8, int64_t, int8) -NUMPY_AMIN_(int16, int64_t, int16) -NUMPY_AMIN_(int32, int64_t, int32) -NUMPY_AMIN_(int64, int64_t, int64) -NUMPY_AMIN_(float32, float, float) -NUMPY_AMIN_(float64, double, double) -NUMPY_AMIN_(complex64, float complex, cfloat) -NUMPY_AMIN_(complex128, double complex, cdouble) - diff --git a/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.c.lock b/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.c.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.h b/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.h deleted file mode 100644 index 11bbfbf4..00000000 --- a/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.h +++ /dev/null @@ -1,194 +0,0 @@ -/* -------------------------------------------------------------------------------------- */ -/* This file is part of Pyccel which is released under MIT License. See the LICENSE file */ -/* or go to https://github.com/pyccel/pyccel/blob/devel/LICENSE for full license details. */ -/* -------------------------------------------------------------------------------------- */ - -#ifndef NDARRAYS_H -# define NDARRAYS_H - -# include -# include -# include -# include - -/* mapping the function array_fill to the correct type */ -# define array_fill(c, arr) _Generic((c), int64_t : _array_fill_int64,\ - int32_t : _array_fill_int32,\ - int16_t : _array_fill_int16,\ - int8_t : _array_fill_int8,\ - float : _array_fill_float,\ - double : _array_fill_double,\ - bool : _array_fill_bool,\ - float complex : _array_fill_cfloat,\ - double complex : _array_fill_cdouble)(c, arr) - -typedef enum e_slice_type { ELEMENT, RANGE } t_slice_type; - -typedef struct s_slice -{ - int32_t start; - int32_t end; - int32_t step; - t_slice_type type; -} t_slice; - -#define GET_INDEX_EXP1(t, arr, a) t(arr, 0, a) -#define GET_INDEX_EXP2(t, arr, a, b) GET_INDEX_EXP1(t, arr, a) + t(arr, 1, b) -#define GET_INDEX_EXP3(t, arr, a, b, c) GET_INDEX_EXP2(t, arr, a, b) + t(arr, 2, c) -#define GET_INDEX_EXP4(t, arr, a, b, c, d) GET_INDEX_EXP3(t, arr, a, b, c) + t(arr, 3, d) -#define GET_INDEX_EXP5(t, arr, a, b, c, d, e) GET_INDEX_EXP4(t, arr, a, b, c, d) + t(arr, 4, e) -#define GET_INDEX_EXP6(t, arr, a, b, c, d, e, f) GET_INDEX_EXP5(t, arr, a, b, c, d, e) + t(arr, 5, f) -#define GET_INDEX_EXP7(t, arr, a, b, c, d, e, f, g) GET_INDEX_EXP6(t, arr, a, b, c, d, e, f) + t(arr, 6, g) -#define GET_INDEX_EXP8(t, arr, a, b, c, d, e, f, g, h) GET_INDEX_EXP7(t, arr, a, b, c, d, e, f, g) + t(arr, 7, h) -#define GET_INDEX_EXP9(t, arr, a, b, c, d, e, f, g, h, i) GET_INDEX_EXP8(t, arr, a, b, c, d, e, f, g, h) + t(arr, 8, i) -#define GET_INDEX_EXP10(t, arr, a, b, c, d, e, f, g, h, i, j) GET_INDEX_EXP9(t, arr, a, b, c, d, e, f, g, h, i) + t(arr, 9, j) -#define GET_INDEX_EXP11(t, arr, a, b, c, d, e, f, g, h, i, j, k) GET_INDEX_EXP10(t, arr, a, b, c, d, e, f, g, h, i, j) + t(arr, 10, k) -#define GET_INDEX_EXP12(t, arr, a, b, c, d, e, f, g, h, i, j, k, l) GET_INDEX_EXP11(t, arr, a, b, c, d, e, f, g, h, i, j, k) + t(arr, 11, l) -#define GET_INDEX_EXP13(t, arr, a, b, c, d, e, f, g, h, i, j, k, l, m) GET_INDEX_EXP12(t, arr, a, b, c, d, e, f, g, h, i, j, k, l) + t(arr, 12, m) -#define GET_INDEX_EXP14(t, arr, a, b, c, d, e, f, g, h, i, j, k, l, m, n) GET_INDEX_EXP13(t, arr, a, b, c, d, e, f, g, h, i, j, k, l, m) + t(arr, 13, n) -#define GET_INDEX_EXP15(t, arr, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) GET_INDEX_EXP14(t, arr, a, b, c, d, e, f, g, h, i, j, k, l, m, n) + t(arr, 14, o) - -#define NUM_ARGS_H1(dummy, x15, x14, x13, x12, x11, x10, x9, x8, x7, x6, x5, x4, x3, x2, x1, x0, ...) x0 -#define NUM_ARGS(...) NUM_ARGS_H1(dummy, __VA_ARGS__, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) -#define GET_INDEX_FUNC_H2(t, arr, ndim, ...) GET_INDEX_EXP##ndim(t, arr, __VA_ARGS__) -#define GET_INDEX_FUNC(t, arr, ndim, ...) GET_INDEX_FUNC_H2(t, arr, ndim, __VA_ARGS__) - -#define GET_INDEX(arr, ...) GET_INDEX_FUNC(INDEX, arr, NUM_ARGS(__VA_ARGS__), __VA_ARGS__) -#define INDEX(arr, dim, a) (arr.strides[dim] * (a)) -#define GET_ELEMENT(arr, type, ...) arr.type[GET_INDEX(arr, __VA_ARGS__)] - -/* -** Map e_types enum to numpy NPY_TYPES enum -** ref: numpy_repo: numpy/numpy/core/include/numpy/ndarraytypes.h -*/ -typedef enum e_types -{ - nd_bool = 0, - nd_int8 = 1, - nd_int16 = 3, - nd_int32 = 5, - nd_int64 = 7, - nd_float = 11, - nd_double = 12, - nd_cfloat = 14, - nd_cdouble = 15 -} t_types; - -typedef enum e_order -{ - order_f, - order_c, -} t_order; - -typedef struct s_ndarray -{ - /* raw data buffer*/ - union { - void *raw_data; - int8_t *nd_int8; - int16_t *nd_int16; - int32_t *nd_int32; - int64_t *nd_int64; - float *nd_float; - double *nd_double; - bool *nd_bool; - double complex *nd_cdouble; - float complex *nd_cfloat; - }; - /* number of dimensions */ - int32_t nd; - /* shape 'size of each dimension' */ - int64_t *shape; - /* strides 'number of elements to skip to get the next element' */ - int64_t *strides; - /* type of the array elements */ - t_types type; - /* type size of the array elements */ - int32_t type_size; - /* number of element in the array */ - int32_t length; - /* size of the array */ - int32_t buffer_size; - /* True if the array does not own the data */ - bool is_view; - /* stores the order of the array: order_f or order_c */ - t_order order; -} t_ndarray; - -/* functions prototypes */ - -/* allocations */ -void stack_array_init(t_ndarray *arr); -t_ndarray array_create(int32_t nd, int64_t *shape, - t_types type, bool is_view, t_order order); -void _array_fill_int8(int8_t c, t_ndarray arr); -void _array_fill_int16(int16_t c, t_ndarray arr); -void _array_fill_int32(int32_t c, t_ndarray arr); -void _array_fill_int64(int64_t c, t_ndarray arr); -void _array_fill_float(float c, t_ndarray arr); -void _array_fill_double(double c, t_ndarray arr); -void _array_fill_bool(bool c, t_ndarray arr); -void _array_fill_cfloat(float complex c, t_ndarray arr); -void _array_fill_cdouble(double complex c, t_ndarray arr); - -/* slicing */ - /* creating a Slice object */ -t_slice new_slice(int32_t start, int32_t end, int32_t step, t_slice_type type); - /* creating an array view */ -t_ndarray array_slicing(t_ndarray arr, int n, ...); - -/* assigns */ -void alias_assign(t_ndarray *dest, t_ndarray src); -void transpose_alias_assign(t_ndarray *dest, t_ndarray src); - -/* free */ -int32_t free_array(t_ndarray* dump); -int32_t free_pointer(t_ndarray* dump); - -/* indexing */ -int64_t get_index(t_ndarray arr, ...); - -/* data converting between numpy and ndarray */ -int64_t *numpy_to_ndarray_strides(int64_t *np_strides, int type_size, int nd); -int64_t *numpy_to_ndarray_shape(int64_t *np_shape, int nd); -void print_ndarray_memory(t_ndarray nd); -/* copy data from ndarray */ -void array_copy_data(t_ndarray* dest, t_ndarray src, uint32_t offset); - -/* numpy sum */ - -int64_t numpy_sum_bool(t_ndarray arr); -int64_t numpy_sum_int8(t_ndarray arr); -int64_t numpy_sum_int16(t_ndarray arr); -int64_t numpy_sum_int32(t_ndarray arr); -int64_t numpy_sum_int64(t_ndarray arr); -float numpy_sum_float32(t_ndarray arr); -double numpy_sum_float64(t_ndarray arr); -float complex numpy_sum_complex64(t_ndarray arr); -double complex numpy_sum_complex128(t_ndarray arr); - -/*numpy max/amax */ - -int64_t numpy_amax_bool(t_ndarray arr); -int64_t numpy_amax_int8(t_ndarray arr); -int64_t numpy_amax_int16(t_ndarray arr); -int64_t numpy_amax_int32(t_ndarray arr); -int64_t numpy_amax_int64(t_ndarray arr); -float numpy_amax_float32(t_ndarray arr); -double numpy_amax_float64(t_ndarray arr); -float complex numpy_amax_complex64(t_ndarray arr); -double complex numpy_amax_complex128(t_ndarray arr); - -/* numpy min/amin */ - -int64_t numpy_amin_bool(t_ndarray arr); -int64_t numpy_amin_int8(t_ndarray arr); -int64_t numpy_amin_int16(t_ndarray arr); -int64_t numpy_amin_int32(t_ndarray arr); -int64_t numpy_amin_int64(t_ndarray arr); -float numpy_amin_float32(t_ndarray arr); -double numpy_amin_float64(t_ndarray arr); -float complex numpy_amin_complex64(t_ndarray arr); -double complex numpy_amin_complex128(t_ndarray arr); - -#endif diff --git a/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.o b/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.o deleted file mode 100644 index 21197f922d406b79d63c2794477a0db7f8ed1d20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74392 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 diff --git a/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.o.lock b/__gpyccel__/__epyccel__/__pyccel__/ndarrays/ndarrays.o.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/dependencies_e0el77nq_mx2lvwh9fed2.lock b/__gpyccel__/__epyccel__/dependencies_e0el77nq_mx2lvwh9fed2.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/dependencies_e0el77nq_mx2lvwh9fed2.py b/__gpyccel__/__epyccel__/dependencies_e0el77nq_mx2lvwh9fed2.py deleted file mode 100644 index 71bf464c..00000000 --- a/__gpyccel__/__epyccel__/dependencies_e0el77nq_mx2lvwh9fed2.py +++ /dev/null @@ -1,170 +0,0 @@ -def assemble_matrix_e0el77nq(global_test_basis_v1_0_1 : "float64[:,:,:,:]", global_test_basis_v1_0_2 : "float64[:,:,:,:]", global_test_basis_v1_1_1 : "float64[:,:,:,:]", global_test_basis_v1_1_2 : "float64[:,:,:,:]", global_trial_basis_u1_0_1 : "float64[:,:,:,:]", global_trial_basis_u1_0_2 : "float64[:,:,:,:]", global_trial_basis_u1_1_1 : "float64[:,:,:,:]", global_trial_basis_u1_1_2 : "float64[:,:,:,:]", global_span_v1_0_1 : "int64[:]", global_span_v1_0_2 : "int64[:]", global_span_v1_1_1 : "int64[:]", global_span_v1_1_2 : "int64[:]", global_x1 : "float64[:,:]", global_x2 : "float64[:,:]", test_v1_0_p1 : "int64", test_v1_0_p2 : "int64", test_v1_1_p1 : "int64", test_v1_1_p2 : "int64", trial_u1_0_p1 : "int64", trial_u1_0_p2 : "int64", trial_u1_1_p1 : "int64", trial_u1_1_p2 : "int64", n_element_1 : "int64", n_element_2 : "int64", k1 : "int64", k2 : "int64", pad1 : "int64", pad2 : "int64", g_mat_u1_0_v1_0_e0el77nq : "float64[:,:,:,:]", g_mat_u1_1_v1_0_e0el77nq : "float64[:,:,:,:]", g_mat_u1_0_v1_1_e0el77nq : "float64[:,:,:,:]", g_mat_u1_1_v1_1_e0el77nq : "float64[:,:,:,:]"): - - from numpy import array, zeros, zeros_like, floor - from math import cos, sqrt, sin, pi - local_x1 = zeros_like(global_x1[0,:]) - local_x2 = zeros_like(global_x2[0,:]) - - l_mat_u1_0_v1_0_e0el77nq = zeros((3, 4, 5, 7), dtype='float64') - l_mat_u1_0_v1_1_e0el77nq = zeros((4, 3, 7, 7), dtype='float64') - l_mat_u1_1_v1_0_e0el77nq = zeros((3, 4, 7, 7), dtype='float64') - l_mat_u1_1_v1_1_e0el77nq = zeros((4, 3, 7, 5), dtype='float64') - for i_element_1 in range(0, n_element_1, 1): - local_x1[:] = global_x1[i_element_1,:] - span_v1_0_1 = global_span_v1_0_1[i_element_1] - span_v1_1_1 = global_span_v1_1_1[i_element_1] - for i_element_2 in range(0, n_element_2, 1): - local_x2[:] = global_x2[i_element_2,:] - span_v1_0_2 = global_span_v1_0_2[i_element_2] - span_v1_1_2 = global_span_v1_1_2[i_element_2] - l_mat_u1_0_v1_0_e0el77nq[:,:,:,:] = 0.0 - l_mat_u1_1_v1_0_e0el77nq[:,:,:,:] = 0.0 - l_mat_u1_0_v1_1_e0el77nq[:,:,:,:] = 0.0 - l_mat_u1_1_v1_1_e0el77nq[:,:,:,:] = 0.0 - for i_quad_1 in range(0, 4, 1): - x1 = local_x1[i_quad_1] - for i_quad_2 in range(0, 4, 1): - x2 = local_x2[i_quad_2] - for i_basis_1 in range(0, 3, 1): - for i_basis_2 in range(0, 4, 1): - for j_basis_1 in range(0, 3, 1): - v1_0_1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,0,i_quad_1] - v1_0_1_x1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,1,i_quad_1] - u1_0_1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,0,i_quad_1] - u1_0_1_x1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,1,i_quad_1] - for j_basis_2 in range(0, 4, 1): - v1_0_2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,0,i_quad_2] - v1_0_2_x2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,1,i_quad_2] - u1_0_2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,0,i_quad_2] - u1_0_2_x2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,1,i_quad_2] - v1_0 = v1_0_1*v1_0_2 - v1_0_x2 = v1_0_1*v1_0_2_x2 - v1_0_x1 = v1_0_1_x1*v1_0_2 - u1_0 = u1_0_1*u1_0_2 - u1_0_x2 = u1_0_1*u1_0_2_x2 - u1_0_x1 = u1_0_1_x1*u1_0_2 - temp_v1_0_u1_0_0 = 2*pi - temp_v1_0_u1_0_1 = temp_v1_0_u1_0_0*x2 - temp_v1_0_u1_0_2 = temp_v1_0_u1_0_0*x1 - temp_v1_0_u1_0_3 = 0.25*sin(temp_v1_0_u1_0_1)*cos(temp_v1_0_u1_0_2) - temp_v1_0_u1_0_4 = sin(temp_v1_0_u1_0_2) - temp_v1_0_u1_0_5 = cos(temp_v1_0_u1_0_1) - temp_v1_0_u1_0_6 = 0.25*temp_v1_0_u1_0_4*temp_v1_0_u1_0_5 - temp_v1_0_u1_0_7 = temp_v1_0_u1_0_6 + 1.0 - temp_v1_0_u1_0_8 = u1_0*v1_0/(temp_v1_0_u1_0_3 + temp_v1_0_u1_0_6 + 1)**2 - contribution_v1_0_u1_0_e0el77nq = 4.0*(0.015625*temp_v1_0_u1_0_4**2*temp_v1_0_u1_0_5**2*temp_v1_0_u1_0_8 + 0.25*temp_v1_0_u1_0_7**2*temp_v1_0_u1_0_8)*sqrt((temp_v1_0_u1_0_3 + temp_v1_0_u1_0_7)**2) - l_mat_u1_0_v1_0_e0el77nq[i_basis_1,i_basis_2,2 - i_basis_1 + j_basis_1,3 - i_basis_2 + j_basis_2] += contribution_v1_0_u1_0_e0el77nq - - - - - for i_basis_1 in range(0, 3, 1): - for i_basis_2 in range(0, 4, 1): - for j_basis_1 in range(0, 4, 1): - v1_0_1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,0,i_quad_1] - v1_0_1_x1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,1,i_quad_1] - u1_1_1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,0,i_quad_1] - u1_1_1_x1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,1,i_quad_1] - for j_basis_2 in range(0, 3, 1): - v1_0_2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,0,i_quad_2] - v1_0_2_x2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,1,i_quad_2] - u1_1_2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,0,i_quad_2] - u1_1_2_x2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,1,i_quad_2] - v1_0 = v1_0_1*v1_0_2 - v1_0_x2 = v1_0_1*v1_0_2_x2 - v1_0_x1 = v1_0_1_x1*v1_0_2 - u1_1 = u1_1_1*u1_1_2 - u1_1_x2 = u1_1_1*u1_1_2_x2 - u1_1_x1 = u1_1_1_x1*u1_1_2 - temp_v1_0_u1_1_0 = 2*pi - temp_v1_0_u1_1_1 = temp_v1_0_u1_1_0*x1 - temp_v1_0_u1_1_2 = temp_v1_0_u1_1_0*x2 - temp_v1_0_u1_1_3 = sin(temp_v1_0_u1_1_2)*cos(temp_v1_0_u1_1_1) - temp_v1_0_u1_1_4 = sin(temp_v1_0_u1_1_1)*cos(temp_v1_0_u1_1_2) - temp_v1_0_u1_1_5 = 0.25*temp_v1_0_u1_1_4 - temp_v1_0_u1_1_6 = temp_v1_0_u1_1_5 + 1.0 - temp_v1_0_u1_1_7 = 0.5*temp_v1_0_u1_1_3 - temp_v1_0_u1_1_8 = temp_v1_0_u1_1_7 + 2.0 - temp_v1_0_u1_1_9 = u1_1*v1_0/((0.5*temp_v1_0_u1_1_4 + temp_v1_0_u1_1_8)*(1.0*temp_v1_0_u1_1_3 + 1.0*temp_v1_0_u1_1_4 + 4.0)) - contribution_v1_0_u1_1_e0el77nq = 4.0*(-temp_v1_0_u1_1_5*temp_v1_0_u1_1_8*temp_v1_0_u1_1_9 - temp_v1_0_u1_1_6*temp_v1_0_u1_1_7*temp_v1_0_u1_1_9)*sqrt((0.25*temp_v1_0_u1_1_3 + temp_v1_0_u1_1_6)**2) - l_mat_u1_1_v1_0_e0el77nq[i_basis_1,i_basis_2,3 - i_basis_1 + j_basis_1,3 - i_basis_2 + j_basis_2] += contribution_v1_0_u1_1_e0el77nq - - - - - for i_basis_1 in range(0, 4, 1): - for i_basis_2 in range(0, 3, 1): - for j_basis_1 in range(0, 3, 1): - v1_1_1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,0,i_quad_1] - v1_1_1_x1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,1,i_quad_1] - u1_0_1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,0,i_quad_1] - u1_0_1_x1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,1,i_quad_1] - for j_basis_2 in range(0, 4, 1): - v1_1_2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,0,i_quad_2] - v1_1_2_x2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,1,i_quad_2] - u1_0_2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,0,i_quad_2] - u1_0_2_x2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,1,i_quad_2] - v1_1 = v1_1_1*v1_1_2 - v1_1_x2 = v1_1_1*v1_1_2_x2 - v1_1_x1 = v1_1_1_x1*v1_1_2 - u1_0 = u1_0_1*u1_0_2 - u1_0_x2 = u1_0_1*u1_0_2_x2 - u1_0_x1 = u1_0_1_x1*u1_0_2 - temp_v1_1_u1_0_0 = 2*pi - temp_v1_1_u1_0_1 = temp_v1_1_u1_0_0*x1 - temp_v1_1_u1_0_2 = temp_v1_1_u1_0_0*x2 - temp_v1_1_u1_0_3 = sin(temp_v1_1_u1_0_2)*cos(temp_v1_1_u1_0_1) - temp_v1_1_u1_0_4 = sin(temp_v1_1_u1_0_1)*cos(temp_v1_1_u1_0_2) - temp_v1_1_u1_0_5 = 0.25*temp_v1_1_u1_0_4 - temp_v1_1_u1_0_6 = temp_v1_1_u1_0_5 + 1.0 - temp_v1_1_u1_0_7 = 0.5*temp_v1_1_u1_0_3 - temp_v1_1_u1_0_8 = temp_v1_1_u1_0_7 + 2.0 - temp_v1_1_u1_0_9 = u1_0*v1_1/((0.5*temp_v1_1_u1_0_4 + temp_v1_1_u1_0_8)*(1.0*temp_v1_1_u1_0_3 + 1.0*temp_v1_1_u1_0_4 + 4.0)) - contribution_v1_1_u1_0_e0el77nq = 4.0*(-temp_v1_1_u1_0_5*temp_v1_1_u1_0_8*temp_v1_1_u1_0_9 - temp_v1_1_u1_0_6*temp_v1_1_u1_0_7*temp_v1_1_u1_0_9)*sqrt((0.25*temp_v1_1_u1_0_3 + temp_v1_1_u1_0_6)**2) - l_mat_u1_0_v1_1_e0el77nq[i_basis_1,i_basis_2,3 - i_basis_1 + j_basis_1,3 - i_basis_2 + j_basis_2] += contribution_v1_1_u1_0_e0el77nq - - - - - for i_basis_1 in range(0, 4, 1): - for i_basis_2 in range(0, 3, 1): - for j_basis_1 in range(0, 4, 1): - v1_1_1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,0,i_quad_1] - v1_1_1_x1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,1,i_quad_1] - u1_1_1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,0,i_quad_1] - u1_1_1_x1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,1,i_quad_1] - for j_basis_2 in range(0, 3, 1): - v1_1_2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,0,i_quad_2] - v1_1_2_x2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,1,i_quad_2] - u1_1_2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,0,i_quad_2] - u1_1_2_x2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,1,i_quad_2] - v1_1 = v1_1_1*v1_1_2 - v1_1_x2 = v1_1_1*v1_1_2_x2 - v1_1_x1 = v1_1_1_x1*v1_1_2 - u1_1 = u1_1_1*u1_1_2 - u1_1_x2 = u1_1_1*u1_1_2_x2 - u1_1_x1 = u1_1_1_x1*u1_1_2 - temp_v1_1_u1_1_0 = 2*pi - temp_v1_1_u1_1_1 = temp_v1_1_u1_1_0*x1 - temp_v1_1_u1_1_2 = temp_v1_1_u1_1_0*x2 - temp_v1_1_u1_1_3 = 0.25*sin(temp_v1_1_u1_1_1)*cos(temp_v1_1_u1_1_2) - temp_v1_1_u1_1_4 = sin(temp_v1_1_u1_1_2) - temp_v1_1_u1_1_5 = cos(temp_v1_1_u1_1_1) - temp_v1_1_u1_1_6 = 0.25*temp_v1_1_u1_1_4*temp_v1_1_u1_1_5 - temp_v1_1_u1_1_7 = temp_v1_1_u1_1_6 + 1 - temp_v1_1_u1_1_8 = u1_1*v1_1/(temp_v1_1_u1_1_3 + temp_v1_1_u1_1_7)**2 - contribution_v1_1_u1_1_e0el77nq = 4.0*(0.015625*temp_v1_1_u1_1_4**2*temp_v1_1_u1_1_5**2*temp_v1_1_u1_1_8 + 0.25*temp_v1_1_u1_1_7**2*temp_v1_1_u1_1_8)*sqrt((temp_v1_1_u1_1_3 + temp_v1_1_u1_1_6 + 1.0)**2) - l_mat_u1_1_v1_1_e0el77nq[i_basis_1,i_basis_2,3 - i_basis_1 + j_basis_1,2 - i_basis_2 + j_basis_2] += contribution_v1_1_u1_1_e0el77nq - - - - - - - g_mat_u1_0_v1_0_e0el77nq[pad1 + span_v1_0_1 - test_v1_0_p1:1 + pad1 + span_v1_0_1,pad2 + span_v1_0_2 - test_v1_0_p2:1 + pad2 + span_v1_0_2,:,:] += l_mat_u1_0_v1_0_e0el77nq[:,:,:,:] - g_mat_u1_1_v1_0_e0el77nq[pad1 + span_v1_0_1 - test_v1_0_p1:1 + pad1 + span_v1_0_1,pad2 + span_v1_0_2 - test_v1_0_p2:1 + pad2 + span_v1_0_2,:,:] += l_mat_u1_1_v1_0_e0el77nq[:,:,:,:] - g_mat_u1_0_v1_1_e0el77nq[pad1 + span_v1_1_1 - test_v1_1_p1:1 + pad1 + span_v1_1_1,pad2 + span_v1_1_2 - test_v1_1_p2:1 + pad2 + span_v1_1_2,:,:] += l_mat_u1_0_v1_1_e0el77nq[:,:,:,:] - g_mat_u1_1_v1_1_e0el77nq[pad1 + span_v1_1_1 - test_v1_1_p1:1 + pad1 + span_v1_1_1,pad2 + span_v1_1_2 - test_v1_1_p2:1 + pad2 + span_v1_1_2,:,:] += l_mat_u1_1_v1_1_e0el77nq[:,:,:,:] - - - return diff --git a/__gpyccel__/__epyccel__/dependencies_vga8r193_6xftl47r79t3.lock b/__gpyccel__/__epyccel__/dependencies_vga8r193_6xftl47r79t3.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/dependencies_vga8r193_6xftl47r79t3.py b/__gpyccel__/__epyccel__/dependencies_vga8r193_6xftl47r79t3.py deleted file mode 100644 index 657eba4b..00000000 --- a/__gpyccel__/__epyccel__/dependencies_vga8r193_6xftl47r79t3.py +++ /dev/null @@ -1,136 +0,0 @@ -def lo_dot_vga8r193(mat00 : "float64[:,:,:,:]", mat01 : "float64[:,:,:,:]", mat10 : "float64[:,:,:,:]", mat11 : "float64[:,:,:,:]", x0 : "float64[:,:]", x1 : "float64[:,:]", out0 : "float64[:,:]", out1 : "float64[:,:]", s00_1 : "int64", s00_2 : "int64", s01_1 : "int64", s01_2 : "int64", s10_1 : "int64", s10_2 : "int64", s11_1 : "int64", s11_2 : "int64", n00_1 : "int64", n00_2 : "int64", n01_1 : "int64", n01_2 : "int64", n10_1 : "int64", n10_2 : "int64", n11_1 : "int64", n11_2 : "int64", ne00_1 : "int64", ne00_2 : "int64", ne01_1 : "int64", ne01_2 : "int64", ne10_1 : "int64", ne10_2 : "int64", ne11_1 : "int64", ne11_2 : "int64"): - - - for i1 in range(0, n00_1, 1): - for i2 in range(0, n00_2, 1): - v00 = 0.0 - for k1 in range(0, 5, 1): - for k2 in range(0, 7, 1): - v00 += mat00[3 + i1,3 + i2,k1,k2]*x0[1 + i1 + k1,i2 + k2] - - - out0[3 + i1,3 + i2] = v00 - - - for i1 in range(0, ne00_1, 1): - for i2 in range(0, n00_2, 1): - v00 = 0.0 - for k1 in range(0, 4 - i1, 1): - for k2 in range(0, 7, 1): - v00 += x0[1 + i1 + k1 + n00_1,i2 + k2]*mat00[3 + i1 + n00_1,3 + i2,k1,k2] - - - out0[3 + i1 + n00_1,3 + i2] = v00 - - - for i1 in range(0, n00_1 + ne00_1, 1): - for i2 in range(0, ne00_2, 1): - v00 = 0.0 - for k1 in range(0, 5 - max(0, i1 - n00_1 + 1), 1): - for k2 in range(0, 6 - i2, 1): - v00 += x0[1 + i1 + k1,i2 + k2 + n00_2]*mat00[3 + i1,3 + i2 + n00_2,k1,k2] - - - out0[3 + i1,3 + i2 + n00_2] = v00 - - - for i1 in range(0, n11_1, 1): - for i2 in range(0, n11_2, 1): - v11 = 0.0 - for k1 in range(0, 7, 1): - for k2 in range(0, 5, 1): - v11 += mat11[3 + i1,3 + i2,k1,k2]*x1[i1 + k1,1 + i2 + k2] - - - out1[3 + i1,3 + i2] = v11 - - - for i1 in range(0, ne11_1, 1): - for i2 in range(0, n11_2, 1): - v11 = 0.0 - for k1 in range(0, 6 - i1, 1): - for k2 in range(0, 5, 1): - v11 += x1[i1 + k1 + n11_1,1 + i2 + k2]*mat11[3 + i1 + n11_1,3 + i2,k1,k2] - - - out1[3 + i1 + n11_1,3 + i2] = v11 - - - for i1 in range(0, n11_1 + ne11_1, 1): - for i2 in range(0, ne11_2, 1): - v11 = 0.0 - for k1 in range(0, 7 - max(0, i1 - n11_1 + 1), 1): - for k2 in range(0, 4 - i2, 1): - v11 += x1[i1 + k1,1 + i2 + k2 + n11_2]*mat11[3 + i1,3 + i2 + n11_2,k1,k2] - - - out1[3 + i1,3 + i2 + n11_2] = v11 - - - for i1 in range(0, n01_1, 1): - for i2 in range(0, n01_2, 1): - v01 = 0.0 - for k1 in range(0, 7, 1): - for k2 in range(0, 7, 1): - v01 += mat01[3 + i1,3 + i2,k1,k2]*x1[i1 + k1,i2 + k2] - - - out0[3 + i1,3 + i2] += v01 - - - for i1 in range(0, ne01_1, 1): - for i2 in range(0, n01_2, 1): - v01 = 0.0 - for k1 in range(0, 6 - i1, 1): - for k2 in range(0, 7, 1): - v01 += x1[i1 + k1 + n01_1,i2 + k2]*mat01[3 + i1 + n01_1,3 + i2,k1,k2] - - - out0[3 + i1 + n01_1,3 + i2] += v01 - - - for i1 in range(0, n01_1 + ne01_1, 1): - for i2 in range(0, ne01_2, 1): - v01 = 0.0 - for k1 in range(0, 7 - max(0, i1 - n01_1 + 1), 1): - for k2 in range(0, 6 - i2, 1): - v01 += x1[i1 + k1,i2 + k2 + n01_2]*mat01[3 + i1,3 + i2 + n01_2,k1,k2] - - - out0[3 + i1,3 + i2 + n01_2] += v01 - - - for i1 in range(0, n10_1, 1): - for i2 in range(0, n10_2, 1): - v10 = 0.0 - for k1 in range(0, 7, 1): - for k2 in range(0, 7, 1): - v10 += mat10[3 + i1,3 + i2,k1,k2]*x0[i1 + k1,i2 + k2] - - - out1[3 + i1,3 + i2] += v10 - - - for i1 in range(0, ne10_1, 1): - for i2 in range(0, n10_2, 1): - v10 = 0.0 - for k1 in range(0, 6 - i1, 1): - for k2 in range(0, 7, 1): - v10 += x0[i1 + k1 + n10_1,i2 + k2]*mat10[3 + i1 + n10_1,3 + i2,k1,k2] - - - out1[3 + i1 + n10_1,3 + i2] += v10 - - - for i1 in range(0, n10_1 + ne10_1, 1): - for i2 in range(0, ne10_2, 1): - v10 = 0.0 - for k1 in range(0, 7 - max(0, i1 - n10_1 + 1), 1): - for k2 in range(0, 6 - i2, 1): - v10 += x0[i1 + k1,i2 + k2 + n10_2]*mat10[3 + i1,3 + i2 + n10_2,k1,k2] - - - out1[3 + i1,3 + i2 + n10_2] += v10 - - - return diff --git a/__gpyccel__/__epyccel__/dependencies_wti60kr7_6feykyplisif.lock b/__gpyccel__/__epyccel__/dependencies_wti60kr7_6feykyplisif.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/__gpyccel__/__epyccel__/dependencies_wti60kr7_6feykyplisif.py b/__gpyccel__/__epyccel__/dependencies_wti60kr7_6feykyplisif.py deleted file mode 100644 index 1af3e379..00000000 --- a/__gpyccel__/__epyccel__/dependencies_wti60kr7_6feykyplisif.py +++ /dev/null @@ -1,53 +0,0 @@ -def assemble_matrix_wti60kr7(global_test_basis_v2_1 : "float64[:,:,:,:]", global_test_basis_v2_2 : "float64[:,:,:,:]", global_trial_basis_u2_1 : "float64[:,:,:,:]", global_trial_basis_u2_2 : "float64[:,:,:,:]", global_span_v2_1 : "int64[:]", global_span_v2_2 : "int64[:]", global_x1 : "float64[:,:]", global_x2 : "float64[:,:]", test_v2_p1 : "int64", test_v2_p2 : "int64", trial_u2_p1 : "int64", trial_u2_p2 : "int64", n_element_1 : "int64", n_element_2 : "int64", k1 : "int64", k2 : "int64", pad1 : "int64", pad2 : "int64", g_mat_u2_v2_wti60kr7 : "float64[:,:,:,:]"): - - from numpy import array, zeros, zeros_like, floor - from math import cos, sqrt, sin, pi - local_x1 = zeros_like(global_x1[0,:]) - local_x2 = zeros_like(global_x2[0,:]) - - l_mat_u2_v2_wti60kr7 = zeros((3, 3, 5, 5), dtype='float64') - for i_element_1 in range(0, n_element_1, 1): - local_x1[:] = global_x1[i_element_1,:] - span_v2_1 = global_span_v2_1[i_element_1] - for i_element_2 in range(0, n_element_2, 1): - local_x2[:] = global_x2[i_element_2,:] - span_v2_2 = global_span_v2_2[i_element_2] - l_mat_u2_v2_wti60kr7[:,:,:,:] = 0.0 - for i_quad_1 in range(0, 4, 1): - x1 = local_x1[i_quad_1] - for i_quad_2 in range(0, 4, 1): - x2 = local_x2[i_quad_2] - for i_basis_1 in range(0, 3, 1): - for i_basis_2 in range(0, 3, 1): - for j_basis_1 in range(0, 3, 1): - v2_1 = global_test_basis_v2_1[i_element_1,i_basis_1,0,i_quad_1] - v2_1_x1 = global_test_basis_v2_1[i_element_1,i_basis_1,1,i_quad_1] - u2_1 = global_trial_basis_u2_1[i_element_1,j_basis_1,0,i_quad_1] - u2_1_x1 = global_trial_basis_u2_1[i_element_1,j_basis_1,1,i_quad_1] - for j_basis_2 in range(0, 3, 1): - v2_2 = global_test_basis_v2_2[i_element_2,i_basis_2,0,i_quad_2] - v2_2_x2 = global_test_basis_v2_2[i_element_2,i_basis_2,1,i_quad_2] - u2_2 = global_trial_basis_u2_2[i_element_2,j_basis_2,0,i_quad_2] - u2_2_x2 = global_trial_basis_u2_2[i_element_2,j_basis_2,1,i_quad_2] - v2 = v2_1*v2_2 - v2_x2 = v2_1*v2_2_x2 - v2_x1 = v2_1_x1*v2_2 - u2 = u2_1*u2_2 - u2_x2 = u2_1*u2_2_x2 - u2_x1 = u2_1_x1*u2_2 - temp_v2_u2_0 = 2*pi - temp_v2_u2_1 = temp_v2_u2_0*x1 - temp_v2_u2_2 = temp_v2_u2_0*x2 - temp_v2_u2_3 = (0.25*sin(temp_v2_u2_1)*cos(temp_v2_u2_2) + 0.25*sin(temp_v2_u2_2)*cos(temp_v2_u2_1) + 1.0)**2 - contribution_v2_u2_wti60kr7 = 0.25*u2*v2/sqrt(temp_v2_u2_3) - l_mat_u2_v2_wti60kr7[i_basis_1,i_basis_2,2 - i_basis_1 + j_basis_1,2 - i_basis_2 + j_basis_2] += contribution_v2_u2_wti60kr7 - - - - - - - g_mat_u2_v2_wti60kr7[pad1 + span_v2_1 - test_v2_p1:1 + pad1 + span_v2_1,pad2 + span_v2_2 - test_v2_p2:1 + pad2 + span_v2_2,:,:] += l_mat_u2_v2_wti60kr7[:,:,:,:] - - - return diff --git a/__psydac__/__init__.py b/__psydac__/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/__psydac__/dependencies_e0el77nq.py b/__psydac__/dependencies_e0el77nq.py deleted file mode 100644 index 3d0b057c..00000000 --- a/__psydac__/dependencies_e0el77nq.py +++ /dev/null @@ -1,170 +0,0 @@ -def assemble_matrix_e0el77nq(global_test_basis_v1_0_1 : "float64[:,:,:,:]", global_test_basis_v1_0_2 : "float64[:,:,:,:]", global_test_basis_v1_1_1 : "float64[:,:,:,:]", global_test_basis_v1_1_2 : "float64[:,:,:,:]", global_trial_basis_u1_0_1 : "float64[:,:,:,:]", global_trial_basis_u1_0_2 : "float64[:,:,:,:]", global_trial_basis_u1_1_1 : "float64[:,:,:,:]", global_trial_basis_u1_1_2 : "float64[:,:,:,:]", global_span_v1_0_1 : "int64[:]", global_span_v1_0_2 : "int64[:]", global_span_v1_1_1 : "int64[:]", global_span_v1_1_2 : "int64[:]", global_x1 : "float64[:,:]", global_x2 : "float64[:,:]", test_v1_0_p1 : "int64", test_v1_0_p2 : "int64", test_v1_1_p1 : "int64", test_v1_1_p2 : "int64", trial_u1_0_p1 : "int64", trial_u1_0_p2 : "int64", trial_u1_1_p1 : "int64", trial_u1_1_p2 : "int64", n_element_1 : "int64", n_element_2 : "int64", k1 : "int64", k2 : "int64", pad1 : "int64", pad2 : "int64", g_mat_u1_0_v1_0_e0el77nq : "float64[:,:,:,:]", g_mat_u1_1_v1_0_e0el77nq : "float64[:,:,:,:]", g_mat_u1_0_v1_1_e0el77nq : "float64[:,:,:,:]", g_mat_u1_1_v1_1_e0el77nq : "float64[:,:,:,:]"): - - from numpy import array, zeros, zeros_like, floor - from math import cos, sqrt, sin, pi - local_x1 = zeros_like(global_x1[0,:]) - local_x2 = zeros_like(global_x2[0,:]) - - l_mat_u1_0_v1_0_e0el77nq = zeros((3, 4, 5, 7), dtype='float64') - l_mat_u1_0_v1_1_e0el77nq = zeros((4, 3, 7, 7), dtype='float64') - l_mat_u1_1_v1_0_e0el77nq = zeros((3, 4, 7, 7), dtype='float64') - l_mat_u1_1_v1_1_e0el77nq = zeros((4, 3, 7, 5), dtype='float64') - for i_element_1 in range(0, n_element_1, 1): - local_x1[:] = global_x1[i_element_1,:] - span_v1_0_1 = global_span_v1_0_1[i_element_1] - span_v1_1_1 = global_span_v1_1_1[i_element_1] - for i_element_2 in range(0, n_element_2, 1): - local_x2[:] = global_x2[i_element_2,:] - span_v1_0_2 = global_span_v1_0_2[i_element_2] - span_v1_1_2 = global_span_v1_1_2[i_element_2] - l_mat_u1_0_v1_0_e0el77nq[:,:,:,:] = 0.0 - l_mat_u1_1_v1_0_e0el77nq[:,:,:,:] = 0.0 - l_mat_u1_0_v1_1_e0el77nq[:,:,:,:] = 0.0 - l_mat_u1_1_v1_1_e0el77nq[:,:,:,:] = 0.0 - for i_quad_1 in range(0, 4, 1): - x1 = local_x1[i_quad_1] - for i_quad_2 in range(0, 4, 1): - x2 = local_x2[i_quad_2] - for i_basis_1 in range(0, 3, 1): - for i_basis_2 in range(0, 4, 1): - for j_basis_1 in range(0, 3, 1): - v1_0_1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,0,i_quad_1] - v1_0_1_x1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,1,i_quad_1] - u1_0_1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,0,i_quad_1] - u1_0_1_x1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,1,i_quad_1] - for j_basis_2 in range(0, 4, 1): - v1_0_2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,0,i_quad_2] - v1_0_2_x2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,1,i_quad_2] - u1_0_2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,0,i_quad_2] - u1_0_2_x2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,1,i_quad_2] - v1_0 = v1_0_1*v1_0_2 - v1_0_x2 = v1_0_1*v1_0_2_x2 - v1_0_x1 = v1_0_1_x1*v1_0_2 - u1_0 = u1_0_1*u1_0_2 - u1_0_x2 = u1_0_1*u1_0_2_x2 - u1_0_x1 = u1_0_1_x1*u1_0_2 - temp_v1_0_u1_0_0 = 2*pi - temp_v1_0_u1_0_1 = temp_v1_0_u1_0_0*x2 - temp_v1_0_u1_0_2 = temp_v1_0_u1_0_0*x1 - temp_v1_0_u1_0_3 = 0.25*sin(temp_v1_0_u1_0_1)*cos(temp_v1_0_u1_0_2) - temp_v1_0_u1_0_4 = sin(temp_v1_0_u1_0_2) - temp_v1_0_u1_0_5 = cos(temp_v1_0_u1_0_1) - temp_v1_0_u1_0_6 = 0.25*temp_v1_0_u1_0_4*temp_v1_0_u1_0_5 - temp_v1_0_u1_0_7 = temp_v1_0_u1_0_6 + 1.0 - temp_v1_0_u1_0_8 = u1_0*v1_0/(temp_v1_0_u1_0_3 + temp_v1_0_u1_0_6 + 1)**2 - contribution_v1_0_u1_0_e0el77nq = 4.0*(0.015625*temp_v1_0_u1_0_4**2*temp_v1_0_u1_0_5**2*temp_v1_0_u1_0_8 + 0.25*temp_v1_0_u1_0_7**2*temp_v1_0_u1_0_8)*sqrt((temp_v1_0_u1_0_3 + temp_v1_0_u1_0_7)**2) - l_mat_u1_0_v1_0_e0el77nq[i_basis_1,i_basis_2,2 - i_basis_1 + j_basis_1,3 - i_basis_2 + j_basis_2] += contribution_v1_0_u1_0_e0el77nq - - - - - for i_basis_1 in range(0, 3, 1): - for i_basis_2 in range(0, 4, 1): - for j_basis_1 in range(0, 4, 1): - v1_0_1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,0,i_quad_1] - v1_0_1_x1 = global_test_basis_v1_0_1[i_element_1,i_basis_1,1,i_quad_1] - u1_1_1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,0,i_quad_1] - u1_1_1_x1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,1,i_quad_1] - for j_basis_2 in range(0, 3, 1): - v1_0_2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,0,i_quad_2] - v1_0_2_x2 = global_test_basis_v1_0_2[i_element_2,i_basis_2,1,i_quad_2] - u1_1_2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,0,i_quad_2] - u1_1_2_x2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,1,i_quad_2] - v1_0 = v1_0_1*v1_0_2 - v1_0_x2 = v1_0_1*v1_0_2_x2 - v1_0_x1 = v1_0_1_x1*v1_0_2 - u1_1 = u1_1_1*u1_1_2 - u1_1_x2 = u1_1_1*u1_1_2_x2 - u1_1_x1 = u1_1_1_x1*u1_1_2 - temp_v1_0_u1_1_0 = 2*pi - temp_v1_0_u1_1_1 = temp_v1_0_u1_1_0*x1 - temp_v1_0_u1_1_2 = temp_v1_0_u1_1_0*x2 - temp_v1_0_u1_1_3 = sin(temp_v1_0_u1_1_2)*cos(temp_v1_0_u1_1_1) - temp_v1_0_u1_1_4 = sin(temp_v1_0_u1_1_1)*cos(temp_v1_0_u1_1_2) - temp_v1_0_u1_1_5 = 0.25*temp_v1_0_u1_1_4 - temp_v1_0_u1_1_6 = temp_v1_0_u1_1_5 + 1.0 - temp_v1_0_u1_1_7 = 0.5*temp_v1_0_u1_1_3 - temp_v1_0_u1_1_8 = temp_v1_0_u1_1_7 + 2.0 - temp_v1_0_u1_1_9 = u1_1*v1_0/((0.5*temp_v1_0_u1_1_4 + temp_v1_0_u1_1_8)*(1.0*temp_v1_0_u1_1_3 + 1.0*temp_v1_0_u1_1_4 + 4.0)) - contribution_v1_0_u1_1_e0el77nq = 4.0*(-temp_v1_0_u1_1_5*temp_v1_0_u1_1_8*temp_v1_0_u1_1_9 - temp_v1_0_u1_1_6*temp_v1_0_u1_1_7*temp_v1_0_u1_1_9)*sqrt((0.25*temp_v1_0_u1_1_3 + temp_v1_0_u1_1_6)**2) - l_mat_u1_1_v1_0_e0el77nq[i_basis_1,i_basis_2,3 - i_basis_1 + j_basis_1,3 - i_basis_2 + j_basis_2] += contribution_v1_0_u1_1_e0el77nq - - - - - for i_basis_1 in range(0, 4, 1): - for i_basis_2 in range(0, 3, 1): - for j_basis_1 in range(0, 3, 1): - v1_1_1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,0,i_quad_1] - v1_1_1_x1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,1,i_quad_1] - u1_0_1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,0,i_quad_1] - u1_0_1_x1 = global_trial_basis_u1_0_1[i_element_1,j_basis_1,1,i_quad_1] - for j_basis_2 in range(0, 4, 1): - v1_1_2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,0,i_quad_2] - v1_1_2_x2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,1,i_quad_2] - u1_0_2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,0,i_quad_2] - u1_0_2_x2 = global_trial_basis_u1_0_2[i_element_2,j_basis_2,1,i_quad_2] - v1_1 = v1_1_1*v1_1_2 - v1_1_x2 = v1_1_1*v1_1_2_x2 - v1_1_x1 = v1_1_1_x1*v1_1_2 - u1_0 = u1_0_1*u1_0_2 - u1_0_x2 = u1_0_1*u1_0_2_x2 - u1_0_x1 = u1_0_1_x1*u1_0_2 - temp_v1_1_u1_0_0 = 2*pi - temp_v1_1_u1_0_1 = temp_v1_1_u1_0_0*x1 - temp_v1_1_u1_0_2 = temp_v1_1_u1_0_0*x2 - temp_v1_1_u1_0_3 = sin(temp_v1_1_u1_0_2)*cos(temp_v1_1_u1_0_1) - temp_v1_1_u1_0_4 = sin(temp_v1_1_u1_0_1)*cos(temp_v1_1_u1_0_2) - temp_v1_1_u1_0_5 = 0.25*temp_v1_1_u1_0_4 - temp_v1_1_u1_0_6 = temp_v1_1_u1_0_5 + 1.0 - temp_v1_1_u1_0_7 = 0.5*temp_v1_1_u1_0_3 - temp_v1_1_u1_0_8 = temp_v1_1_u1_0_7 + 2.0 - temp_v1_1_u1_0_9 = u1_0*v1_1/((0.5*temp_v1_1_u1_0_4 + temp_v1_1_u1_0_8)*(1.0*temp_v1_1_u1_0_3 + 1.0*temp_v1_1_u1_0_4 + 4.0)) - contribution_v1_1_u1_0_e0el77nq = 4.0*(-temp_v1_1_u1_0_5*temp_v1_1_u1_0_8*temp_v1_1_u1_0_9 - temp_v1_1_u1_0_6*temp_v1_1_u1_0_7*temp_v1_1_u1_0_9)*sqrt((0.25*temp_v1_1_u1_0_3 + temp_v1_1_u1_0_6)**2) - l_mat_u1_0_v1_1_e0el77nq[i_basis_1,i_basis_2,3 - i_basis_1 + j_basis_1,3 - i_basis_2 + j_basis_2] += contribution_v1_1_u1_0_e0el77nq - - - - - for i_basis_1 in range(0, 4, 1): - for i_basis_2 in range(0, 3, 1): - for j_basis_1 in range(0, 4, 1): - v1_1_1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,0,i_quad_1] - v1_1_1_x1 = global_test_basis_v1_1_1[i_element_1,i_basis_1,1,i_quad_1] - u1_1_1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,0,i_quad_1] - u1_1_1_x1 = global_trial_basis_u1_1_1[i_element_1,j_basis_1,1,i_quad_1] - for j_basis_2 in range(0, 3, 1): - v1_1_2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,0,i_quad_2] - v1_1_2_x2 = global_test_basis_v1_1_2[i_element_2,i_basis_2,1,i_quad_2] - u1_1_2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,0,i_quad_2] - u1_1_2_x2 = global_trial_basis_u1_1_2[i_element_2,j_basis_2,1,i_quad_2] - v1_1 = v1_1_1*v1_1_2 - v1_1_x2 = v1_1_1*v1_1_2_x2 - v1_1_x1 = v1_1_1_x1*v1_1_2 - u1_1 = u1_1_1*u1_1_2 - u1_1_x2 = u1_1_1*u1_1_2_x2 - u1_1_x1 = u1_1_1_x1*u1_1_2 - temp_v1_1_u1_1_0 = 2*pi - temp_v1_1_u1_1_1 = temp_v1_1_u1_1_0*x1 - temp_v1_1_u1_1_2 = temp_v1_1_u1_1_0*x2 - temp_v1_1_u1_1_3 = 0.25*sin(temp_v1_1_u1_1_1)*cos(temp_v1_1_u1_1_2) - temp_v1_1_u1_1_4 = sin(temp_v1_1_u1_1_2) - temp_v1_1_u1_1_5 = cos(temp_v1_1_u1_1_1) - temp_v1_1_u1_1_6 = 0.25*temp_v1_1_u1_1_4*temp_v1_1_u1_1_5 - temp_v1_1_u1_1_7 = temp_v1_1_u1_1_6 + 1 - temp_v1_1_u1_1_8 = u1_1*v1_1/(temp_v1_1_u1_1_3 + temp_v1_1_u1_1_7)**2 - contribution_v1_1_u1_1_e0el77nq = 4.0*(0.015625*temp_v1_1_u1_1_4**2*temp_v1_1_u1_1_5**2*temp_v1_1_u1_1_8 + 0.25*temp_v1_1_u1_1_7**2*temp_v1_1_u1_1_8)*sqrt((temp_v1_1_u1_1_3 + temp_v1_1_u1_1_6 + 1.0)**2) - l_mat_u1_1_v1_1_e0el77nq[i_basis_1,i_basis_2,3 - i_basis_1 + j_basis_1,2 - i_basis_2 + j_basis_2] += contribution_v1_1_u1_1_e0el77nq - - - - - - - g_mat_u1_0_v1_0_e0el77nq[pad1 + span_v1_0_1 - test_v1_0_p1:1 + pad1 + span_v1_0_1,pad2 + span_v1_0_2 - test_v1_0_p2:1 + pad2 + span_v1_0_2,:,:] += l_mat_u1_0_v1_0_e0el77nq[:,:,:,:] - g_mat_u1_1_v1_0_e0el77nq[pad1 + span_v1_0_1 - test_v1_0_p1:1 + pad1 + span_v1_0_1,pad2 + span_v1_0_2 - test_v1_0_p2:1 + pad2 + span_v1_0_2,:,:] += l_mat_u1_1_v1_0_e0el77nq[:,:,:,:] - g_mat_u1_0_v1_1_e0el77nq[pad1 + span_v1_1_1 - test_v1_1_p1:1 + pad1 + span_v1_1_1,pad2 + span_v1_1_2 - test_v1_1_p2:1 + pad2 + span_v1_1_2,:,:] += l_mat_u1_0_v1_1_e0el77nq[:,:,:,:] - g_mat_u1_1_v1_1_e0el77nq[pad1 + span_v1_1_1 - test_v1_1_p1:1 + pad1 + span_v1_1_1,pad2 + span_v1_1_2 - test_v1_1_p2:1 + pad2 + span_v1_1_2,:,:] += l_mat_u1_1_v1_1_e0el77nq[:,:,:,:] - - - return \ No newline at end of file diff --git a/__psydac__/dependencies_vga8r193.py b/__psydac__/dependencies_vga8r193.py deleted file mode 100644 index 483a4a17..00000000 --- a/__psydac__/dependencies_vga8r193.py +++ /dev/null @@ -1,136 +0,0 @@ -def lo_dot_vga8r193(mat00 : "float64[:,:,:,:]", mat01 : "float64[:,:,:,:]", mat10 : "float64[:,:,:,:]", mat11 : "float64[:,:,:,:]", x0 : "float64[:,:]", x1 : "float64[:,:]", out0 : "float64[:,:]", out1 : "float64[:,:]", s00_1 : "int64", s00_2 : "int64", s01_1 : "int64", s01_2 : "int64", s10_1 : "int64", s10_2 : "int64", s11_1 : "int64", s11_2 : "int64", n00_1 : "int64", n00_2 : "int64", n01_1 : "int64", n01_2 : "int64", n10_1 : "int64", n10_2 : "int64", n11_1 : "int64", n11_2 : "int64", ne00_1 : "int64", ne00_2 : "int64", ne01_1 : "int64", ne01_2 : "int64", ne10_1 : "int64", ne10_2 : "int64", ne11_1 : "int64", ne11_2 : "int64"): - - - for i1 in range(0, n00_1, 1): - for i2 in range(0, n00_2, 1): - v00 = 0.0 - for k1 in range(0, 5, 1): - for k2 in range(0, 7, 1): - v00 += mat00[3 + i1,3 + i2,k1,k2]*x0[1 + i1 + k1,i2 + k2] - - - out0[3 + i1,3 + i2] = v00 - - - for i1 in range(0, ne00_1, 1): - for i2 in range(0, n00_2, 1): - v00 = 0.0 - for k1 in range(0, 4 - i1, 1): - for k2 in range(0, 7, 1): - v00 += x0[1 + i1 + k1 + n00_1,i2 + k2]*mat00[3 + i1 + n00_1,3 + i2,k1,k2] - - - out0[3 + i1 + n00_1,3 + i2] = v00 - - - for i1 in range(0, n00_1 + ne00_1, 1): - for i2 in range(0, ne00_2, 1): - v00 = 0.0 - for k1 in range(0, 5 - max(0, i1 - n00_1 + 1), 1): - for k2 in range(0, 6 - i2, 1): - v00 += x0[1 + i1 + k1,i2 + k2 + n00_2]*mat00[3 + i1,3 + i2 + n00_2,k1,k2] - - - out0[3 + i1,3 + i2 + n00_2] = v00 - - - for i1 in range(0, n11_1, 1): - for i2 in range(0, n11_2, 1): - v11 = 0.0 - for k1 in range(0, 7, 1): - for k2 in range(0, 5, 1): - v11 += mat11[3 + i1,3 + i2,k1,k2]*x1[i1 + k1,1 + i2 + k2] - - - out1[3 + i1,3 + i2] = v11 - - - for i1 in range(0, ne11_1, 1): - for i2 in range(0, n11_2, 1): - v11 = 0.0 - for k1 in range(0, 6 - i1, 1): - for k2 in range(0, 5, 1): - v11 += x1[i1 + k1 + n11_1,1 + i2 + k2]*mat11[3 + i1 + n11_1,3 + i2,k1,k2] - - - out1[3 + i1 + n11_1,3 + i2] = v11 - - - for i1 in range(0, n11_1 + ne11_1, 1): - for i2 in range(0, ne11_2, 1): - v11 = 0.0 - for k1 in range(0, 7 - max(0, i1 - n11_1 + 1), 1): - for k2 in range(0, 4 - i2, 1): - v11 += x1[i1 + k1,1 + i2 + k2 + n11_2]*mat11[3 + i1,3 + i2 + n11_2,k1,k2] - - - out1[3 + i1,3 + i2 + n11_2] = v11 - - - for i1 in range(0, n01_1, 1): - for i2 in range(0, n01_2, 1): - v01 = 0.0 - for k1 in range(0, 7, 1): - for k2 in range(0, 7, 1): - v01 += mat01[3 + i1,3 + i2,k1,k2]*x1[i1 + k1,i2 + k2] - - - out0[3 + i1,3 + i2] += v01 - - - for i1 in range(0, ne01_1, 1): - for i2 in range(0, n01_2, 1): - v01 = 0.0 - for k1 in range(0, 6 - i1, 1): - for k2 in range(0, 7, 1): - v01 += x1[i1 + k1 + n01_1,i2 + k2]*mat01[3 + i1 + n01_1,3 + i2,k1,k2] - - - out0[3 + i1 + n01_1,3 + i2] += v01 - - - for i1 in range(0, n01_1 + ne01_1, 1): - for i2 in range(0, ne01_2, 1): - v01 = 0.0 - for k1 in range(0, 7 - max(0, i1 - n01_1 + 1), 1): - for k2 in range(0, 6 - i2, 1): - v01 += x1[i1 + k1,i2 + k2 + n01_2]*mat01[3 + i1,3 + i2 + n01_2,k1,k2] - - - out0[3 + i1,3 + i2 + n01_2] += v01 - - - for i1 in range(0, n10_1, 1): - for i2 in range(0, n10_2, 1): - v10 = 0.0 - for k1 in range(0, 7, 1): - for k2 in range(0, 7, 1): - v10 += mat10[3 + i1,3 + i2,k1,k2]*x0[i1 + k1,i2 + k2] - - - out1[3 + i1,3 + i2] += v10 - - - for i1 in range(0, ne10_1, 1): - for i2 in range(0, n10_2, 1): - v10 = 0.0 - for k1 in range(0, 6 - i1, 1): - for k2 in range(0, 7, 1): - v10 += x0[i1 + k1 + n10_1,i2 + k2]*mat10[3 + i1 + n10_1,3 + i2,k1,k2] - - - out1[3 + i1 + n10_1,3 + i2] += v10 - - - for i1 in range(0, n10_1 + ne10_1, 1): - for i2 in range(0, ne10_2, 1): - v10 = 0.0 - for k1 in range(0, 7 - max(0, i1 - n10_1 + 1), 1): - for k2 in range(0, 6 - i2, 1): - v10 += x0[i1 + k1,i2 + k2 + n10_2]*mat10[3 + i1,3 + i2 + n10_2,k1,k2] - - - out1[3 + i1,3 + i2 + n10_2] += v10 - - - return \ No newline at end of file diff --git a/__psydac__/dependencies_wti60kr7.py b/__psydac__/dependencies_wti60kr7.py deleted file mode 100644 index 6d28262e..00000000 --- a/__psydac__/dependencies_wti60kr7.py +++ /dev/null @@ -1,53 +0,0 @@ -def assemble_matrix_wti60kr7(global_test_basis_v2_1 : "float64[:,:,:,:]", global_test_basis_v2_2 : "float64[:,:,:,:]", global_trial_basis_u2_1 : "float64[:,:,:,:]", global_trial_basis_u2_2 : "float64[:,:,:,:]", global_span_v2_1 : "int64[:]", global_span_v2_2 : "int64[:]", global_x1 : "float64[:,:]", global_x2 : "float64[:,:]", test_v2_p1 : "int64", test_v2_p2 : "int64", trial_u2_p1 : "int64", trial_u2_p2 : "int64", n_element_1 : "int64", n_element_2 : "int64", k1 : "int64", k2 : "int64", pad1 : "int64", pad2 : "int64", g_mat_u2_v2_wti60kr7 : "float64[:,:,:,:]"): - - from numpy import array, zeros, zeros_like, floor - from math import cos, sqrt, sin, pi - local_x1 = zeros_like(global_x1[0,:]) - local_x2 = zeros_like(global_x2[0,:]) - - l_mat_u2_v2_wti60kr7 = zeros((3, 3, 5, 5), dtype='float64') - for i_element_1 in range(0, n_element_1, 1): - local_x1[:] = global_x1[i_element_1,:] - span_v2_1 = global_span_v2_1[i_element_1] - for i_element_2 in range(0, n_element_2, 1): - local_x2[:] = global_x2[i_element_2,:] - span_v2_2 = global_span_v2_2[i_element_2] - l_mat_u2_v2_wti60kr7[:,:,:,:] = 0.0 - for i_quad_1 in range(0, 4, 1): - x1 = local_x1[i_quad_1] - for i_quad_2 in range(0, 4, 1): - x2 = local_x2[i_quad_2] - for i_basis_1 in range(0, 3, 1): - for i_basis_2 in range(0, 3, 1): - for j_basis_1 in range(0, 3, 1): - v2_1 = global_test_basis_v2_1[i_element_1,i_basis_1,0,i_quad_1] - v2_1_x1 = global_test_basis_v2_1[i_element_1,i_basis_1,1,i_quad_1] - u2_1 = global_trial_basis_u2_1[i_element_1,j_basis_1,0,i_quad_1] - u2_1_x1 = global_trial_basis_u2_1[i_element_1,j_basis_1,1,i_quad_1] - for j_basis_2 in range(0, 3, 1): - v2_2 = global_test_basis_v2_2[i_element_2,i_basis_2,0,i_quad_2] - v2_2_x2 = global_test_basis_v2_2[i_element_2,i_basis_2,1,i_quad_2] - u2_2 = global_trial_basis_u2_2[i_element_2,j_basis_2,0,i_quad_2] - u2_2_x2 = global_trial_basis_u2_2[i_element_2,j_basis_2,1,i_quad_2] - v2 = v2_1*v2_2 - v2_x2 = v2_1*v2_2_x2 - v2_x1 = v2_1_x1*v2_2 - u2 = u2_1*u2_2 - u2_x2 = u2_1*u2_2_x2 - u2_x1 = u2_1_x1*u2_2 - temp_v2_u2_0 = 2*pi - temp_v2_u2_1 = temp_v2_u2_0*x1 - temp_v2_u2_2 = temp_v2_u2_0*x2 - temp_v2_u2_3 = (0.25*sin(temp_v2_u2_1)*cos(temp_v2_u2_2) + 0.25*sin(temp_v2_u2_2)*cos(temp_v2_u2_1) + 1.0)**2 - contribution_v2_u2_wti60kr7 = 0.25*u2*v2/sqrt(temp_v2_u2_3) - l_mat_u2_v2_wti60kr7[i_basis_1,i_basis_2,2 - i_basis_1 + j_basis_1,2 - i_basis_2 + j_basis_2] += contribution_v2_u2_wti60kr7 - - - - - - - g_mat_u2_v2_wti60kr7[pad1 + span_v2_1 - test_v2_p1:1 + pad1 + span_v2_1,pad2 + span_v2_2 - test_v2_p2:1 + pad2 + span_v2_2,:,:] += l_mat_u2_v2_wti60kr7[:,:,:,:] - - - return \ No newline at end of file From 156bc4820f12cd34cce1f269d33851a6ff31ce96 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Tue, 6 Aug 2024 11:16:55 +0200 Subject: [PATCH 23/39] test_api_feec_2d and test_2d_multipatch_mapping_maxwell run with domain undefined mapping --- sympde/topology/analytic_mappings.py | 10 ++++++++++ sympde/topology/base_mapping.py | 7 +------ sympde/topology/basic.py | 2 +- sympde/topology/domain.py | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/sympde/topology/analytic_mappings.py b/sympde/topology/analytic_mappings.py index 0773ec1b..c00b0349 100644 --- a/sympde/topology/analytic_mappings.py +++ b/sympde/topology/analytic_mappings.py @@ -74,6 +74,16 @@ class CollelaMapping2D(BaseAnalyticMapping): _expressions = {'x': 'a * (x1 + eps / (2*pi) * sin(2*pi*x1) * sin(2*pi*x2))', 'y': 'b * (x2 + eps / (2*pi) * sin(2*pi*x1) * sin(2*pi*x2))'} +#============================================================================== +class CollelaMapping3D(BaseAnalyticMapping): + + _expressions = {'x': 'k1*(x1 + eps*sin(2.*pi*x1)*sin(2.*pi*x2))', + 'y': 'k2*(x2 + eps*sin(2.*pi*x1)*sin(2.*pi*x2))', + 'z': 'k3*x3'} + + _ldim = 3 + _pdim = 3 + #============================================================================== class TorusMapping(BaseAnalyticMapping): """ diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index 41602830..39c781b3 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -309,7 +309,6 @@ def copy(self): obj._inv_jac = self._inv_jac obj._metric = self._metric obj._metric_det = self._metric_det - obj.__callable_map = self._callable_map obj._is_plus = self._is_plus obj._is_minus = self._is_minus return obj @@ -490,10 +489,6 @@ def ldim(self): def pdim(self): return list(self.mappings.values())[0].pdim - @property - def is_analytical(self): - return all(e.is_analytical for e in self.mappings.values()) - def _eval_subs(self, old, new): return self @@ -612,6 +607,7 @@ def __new__(cls, u, mapping=None): else: mapping = space.domain.mapping + J = mapping.jacobian if isinstance(kind, (UndefinedSpaceType, H1SpaceType)): expr = el @@ -1127,7 +1123,6 @@ def eval(cls, expr, domain, **options): domain = expr.domain mapping = domain.mapping - assert domain is not None if expr.is_domain_integral: diff --git a/sympde/topology/basic.py b/sympde/topology/basic.py index b2fb05c3..b40c8049 100644 --- a/sympde/topology/basic.py +++ b/sympde/topology/basic.py @@ -329,7 +329,7 @@ def rotate(self, *directions): raise NotImplementedError('only 2d case is available') def join(self, boundary, ornt=None): - from sympde.sympde.topology.base_mapping import InterfaceMapping + from sympde.topology.base_mapping import InterfaceMapping # TODO be careful with '|' in psydac if self.mapping and boundary.mapping: int_map = InterfaceMapping(self.mapping , boundary.mapping) diff --git a/sympde/topology/domain.py b/sympde/topology/domain.py index e47d0092..77a0179f 100644 --- a/sympde/topology/domain.py +++ b/sympde/topology/domain.py @@ -408,7 +408,7 @@ def join(cls, patches, connectivity, name): assert all(p.dim==patches[0].dim for p in patches) dim = int(patches[0].dim) - from sympde.sympde.topology.base_mapping import MultiPatchMapping + from sympde.topology.base_mapping import MultiPatchMapping # ... connectivity interfaces = {} boundaries = [] From 543d57251605409260feea55cf8913f863cfda67 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Thu, 15 Aug 2024 09:23:36 +0200 Subject: [PATCH 24/39] removed .DS_Store, repo cleaned --- .DS_Store | Bin 8196 -> 0 bytes sympde/topology/.DS_Store | Bin 6148 -> 6148 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 1b40271ff946e9a375f1f93764cd53af6f5155e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMJ#Q016r4Rhm&>r9)Q^ z<2N71GaJ7{F_xX@Pi;C(=1@m&WpCyV3sr((qjvn-tw{Z(Q^^*UI1A z*t>l3!_7E8I5a*T1r8V~9jp@yfg2G9E!tcC;UnG}_h)G31pA4PWBde%l#WYs)op znNB@s9!rOA0oV0k+|Z^D9G?RXN8OSA|E=ZE|Bp|gGOGjXz#n(OG`kyJ`B~wX<~m=( usg!+_U7F;T4s8hsNs)QG9VgEJFywLSW0}X&AtP-1L%`aggF5h69ry)B`mu~2NHo}w@d0|Nsi1A_nqLvc>JVQ_MOZo$ODm5eN#_b_?0ZVq7H iz_^*6gP#MaVY4Iicjn3bB9B)qu~2NHo}wrR0|Nsi1A_nqLo!1m5N9x?GQ@A5$he%b9wf!h5D$a} z43)^z4DmVXhQZ1CxdlKK3=FK9Ww=%5=DWBg<>V&;RdA@@C^0!Kb<7c;>J+$YBf`oH rGLW5dfMGKaqc`hjb`E|Hpa+4T_|80;U&N9F=szH0VAvcWvV|D{GUqnQ From 3158ea000bd34e1d493661706b6827d58a9637ff Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Tue, 20 Aug 2024 11:51:11 +0200 Subject: [PATCH 25/39] supported changes made in commit --- sympde/topology/base_mapping.py | 9 +++++- sympde/topology/tests/test_mapping.py | 40 ++++++++++++++++++++++----- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index 39c781b3..61cb89d9 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -38,6 +38,7 @@ from .derivatives import _logical_partial_derivatives from .derivatives import get_atom_logical_derivatives, get_index_logical_derivatives_atom from .derivatives import LogicalGrad_1d, LogicalGrad_2d, LogicalGrad_3d +import numpy as np # TODO fix circular dependency between sympde.topology.domain and sympde.topology.mapping # TODO fix circular dependency between sympde.expr.evaluation and sympde.topology.mapping @@ -58,6 +59,7 @@ 'SymbolicExpr', 'SymbolicWeightedVolume', 'get_logical_test_function', + 'numpy_to_native_python', ) #============================================================================== @@ -82,6 +84,11 @@ def get_logical_test_function(u): el = l_space.element(u.name) return el +def numpy_to_native_python(a): + if isinstance(a, np.generic): + return a.item() + return a + #============================================================================== class BaseMapping(IndexedBase): """ @@ -173,7 +180,7 @@ def __new__(cls, name, dim=None, **kwargs): constants_values = {a.name:Constant(a.name) for a in constants} # subs constants as Constant objects instead of Symbol constants_values.update( kwargs ) - d = {a:constants_values[a.name] for a in constants} + d = {a:numpy_to_native_python(constants_values[a.name]) for a in constants} args = args.subs(d) obj._expressions = args diff --git a/sympde/topology/tests/test_mapping.py b/sympde/topology/tests/test_mapping.py index 84ede14e..71c5a743 100644 --- a/sympde/topology/tests/test_mapping.py +++ b/sympde/topology/tests/test_mapping.py @@ -1,23 +1,25 @@ # coding: utf-8 +import numpy as np + from sympy.core.containers import Tuple from sympy import Matrix from sympy.tensor import IndexedBase from sympy import symbols, simplify -from sympde.topology import Mapping, MappedDomain +from sympde.topology import BaseMapping, MappedDomain, AffineMapping from sympde.topology import dx, dy, dz from sympde.topology import dx1, dx2, dx3 from sympde.topology import Domain -from sympde.topology.mapping import Jacobian, Covariant, Contravariant +from sympde.topology.base_mapping import Jacobian, Covariant, Contravariant # ... def test_mapping_1d(): print('============ test_mapping_1d ==============') dim = 1 - F = Mapping('F', dim=dim) + F = BaseMapping('F', dim=dim) assert(F.name == 'F') @@ -38,7 +40,7 @@ def test_mapping_2d(): dim = 2 - F = Mapping('F', dim=dim) + F = BaseMapping('F', dim=dim) a,b = symbols('a b') ab = Tuple(a, b) @@ -78,7 +80,7 @@ def test_mapping_3d(): dim = 3 - F = Mapping('F', dim=dim) + F = BaseMapping('F', dim=dim) a,b,c = symbols('a b c') abc = Tuple(a, b, c) @@ -123,7 +125,25 @@ def test_mapping_2d_2(): print('============ test_mapping_2d_2 ==============') dim = 2 - F = Mapping('F', dim=dim) + F = BaseMapping('F', dim=dim) + domain = Domain('Omega', dim=dim) + D = F(domain) + +# ... +def test_AffineMapping(): + print('============ test_AffineMapping ==============') + + dim = 2 + alpha = np.pi/2 + c1 = 0.2 + c2 = 1.5 + + F = AffineMapping( + name='F', dim=2, c1=c1, c2=c2, + a11=np.cos(alpha), a12=-np.sin(alpha), + a21=np.sin(alpha), a22=np.cos(alpha), + ) + domain = Domain('Omega', dim=dim) D = F(domain) @@ -138,4 +158,10 @@ def teardown_module(): def teardown_function(): from sympy.core import cache cache.clear_cache() - + +if __name__ == '__main__' : + test_mapping_1d() + test_mapping_2d() + test_mapping_3d() + test_mapping_2d_2() + test_AffineMapping() From b741067d47d78b6e157e03cae9a8f0068379752c Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Tue, 20 Aug 2024 12:02:37 +0200 Subject: [PATCH 26/39] merged branch master into feature-lagarrigue --- sympde/topology/domain.py | 96 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 93 insertions(+), 3 deletions(-) diff --git a/sympde/topology/domain.py b/sympde/topology/domain.py index 77a0179f..60a76a6b 100644 --- a/sympde/topology/domain.py +++ b/sympde/topology/domain.py @@ -400,6 +400,87 @@ def from_file( cls, filename ): @classmethod def join(cls, patches, connectivity, name): + """ + creates a multipatch domain by joining two or more patches in 2D or 3D + + Parameters + ---------- + patches : list + list of patches + + connectivity : list + list of interfaces, identified by a tuple of 2 boundaries and an orientation: (bound_minus, bound_plus, ornt) + where + - each boundary is identified by a tuple of 3 integers: (patch, axis, ext) + with patches given as objects (or by their indices in the patches list) + and + - In 2D, ornt is an integer that can take the value of 1 or -1 + - In 3D, ornt is a tuple of 3 integers that can take the value of 1 or -1 + (see below for more details) + + + name : str + name of the domain + + Returns + ------- + domain : Domain + multipatch domain + + Notes + ----- + The orientations are specified in the same manner as in GeoPDES, see e.g. + + and + T. Dokken, E. Quak, V. Skytt. Requirements from Isogeometric Analysis for changes in product design ontologies, 2010. + + Example + ------- + # list of patches (mapped domains) + Omega_0 = F0(A) + Omega_1 = F1(A) + Omega_2 = F2(A) + Omega_3 = F3(A) + + patches = [Omega_0, Omega_1, Omega_2, Omega_3] + + # integers representing the axes + axis_0 = 0 + axis_1 = 1 + axis_2 = 2 + + # integers representing the extremities: left (-1) or right (+1) + ext_0 = -1 + ext_1 = +1 + + # A connectivity list in 2D + connectivity = [((Omega_0, axis_0, ext_0), (Omega_1, axis_0, ext_1), 1), + ((Omega_1, axis_1, ext_0), (Omega_3, axis_1, ext_1), -1), + ((Omega_0, axis_1, ext_0), (Omega_2, axis_1, ext_1), 1), + ((Omega_2, axis_0, ext_0), (Omega_3, axis_0, ext_1), -1)] + + # alternative option (passing interface patches by their indices in the patches list): + connectivity = [((0, axis_0, ext_0), (1, axis_0, ext_1), 1), + ((1, axis_1, ext_0), (3, axis_1, ext_1), -1), + ((0, axis_1, ext_0), (2, axis_1, ext_1), 1), + ((2, axis_0, ext_0), (3, axis_0, ext_1), -1)] + + # A connectivity list in 3D + connectivity = [((Omega_0, axis_0, ext_1), (Omega_1, axis_0, ext_0), ( 1, 1, 1)), + ((Omega_0, axis_1, ext_1), (Omega_2, axis_1, ext_0), ( 1, -1, 1)), + ((Omega_1, axis_1, ext_1), (Omega_3, axis_1, ext_0), (-1, 1, -1)), + ((Omega_2, axis_0, ext_1), (Omega_3, axis_0, ext_0), (-1, 1, 1))] + + # alternative option (passing interface patches by their indices in the patches list): + connectivity = [((0, axis_0, ext_1), (1, axis_0, ext_0), ( 1, 1, 1)), + ((0, axis_1, ext_1), (2, axis_1, ext_0), ( 1, -1, 1)), + ((1, axis_1, ext_1), (3, axis_1, ext_0), (-1, 1, -1)), + ((2, axis_0, ext_1), (3, axis_0, ext_0), (-1, 1, 1))] + + # the multi-patch domain + Omega = Domain.join(patches=patches, connectivity=connectivity, name='Omega') + + """ assert isinstance(patches, (tuple, list)) assert isinstance(connectivity, (tuple, list)) @@ -409,12 +490,21 @@ def join(cls, patches, connectivity, name): dim = int(patches[0].dim) from sympde.topology.base_mapping import MultiPatchMapping + + patch_given_by_indices = (len(connectivity) > 0 and isinstance(connectivity[0][0][0], int)) + # ... connectivity interfaces = {} boundaries = [] for cn in connectivity: - bnd_minus = patches[cn[0][0]].get_boundary(axis=cn[0][1], ext=cn[0][2]) - bnd_plus = patches[cn[1][0]].get_boundary(axis=cn[1][1], ext=cn[1][2]) + if patch_given_by_indices: + patch_minus = patches[cn[0][0]] + patch_plus = patches[cn[1][0]] + else: + patch_minus = cn[0][0] + patch_plus = cn[1][0] + bnd_minus = patch_minus.get_boundary(axis=cn[0][1], ext=cn[0][2]) + bnd_plus = patch_plus.get_boundary(axis=cn[1][1], ext=cn[1][2]) if dim == 1: ornt = None elif dim == 2: ornt = 1 if len(cn) == 2 else cn[2] elif dim == 3: @@ -755,7 +845,7 @@ def __new__(cls, name, dim, min_coords, max_coords): raise ValueError("Min coordinates must be smaller than max") coord_names = 'x1:{}'.format(dim + 1) - coordinates = symbols(coord_names) + coordinates = symbols(coord_names) # [MCP 24.07.2024] we should be able to pass real=True but requires additional testing as it breaks some calls to TerminalExpr # Choose which type to use: # a) if dim <= 3, use Line, Square or Cube; From bd61b532a8e3b862d3b55e956bc7f974c6de4e88 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Wed, 21 Aug 2024 13:32:53 +0200 Subject: [PATCH 27/39] adapting few changes in sympde tests --- ...e_mapping.py => test_mapping_evaluation.py} | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) rename sympde/topology/tests/{test_callable_mapping.py => test_mapping_evaluation.py} (96%) diff --git a/sympde/topology/tests/test_callable_mapping.py b/sympde/topology/tests/test_mapping_evaluation.py similarity index 96% rename from sympde/topology/tests/test_callable_mapping.py rename to sympde/topology/tests/test_mapping_evaluation.py index 23462c3d..37d701a7 100644 --- a/sympde/topology/tests/test_callable_mapping.py +++ b/sympde/topology/tests/test_mapping_evaluation.py @@ -12,7 +12,6 @@ def test_identity_mapping_1d(): F = IdentityMapping('F', dim=1) - f = F.get_callable_mapping() assert f.ldim == 1 assert f.pdim == 1 @@ -30,7 +29,6 @@ def test_identity_mapping_1d(): def test_identity_mapping_2d(): F = IdentityMapping('F', dim=2) - f = F.get_callable_mapping() assert f.ldim == 2 assert f.pdim == 2 @@ -53,7 +51,6 @@ def test_identity_mapping_2d(): def test_identity_mapping_3d(): F = IdentityMapping('F', dim=3) - f = F.get_callable_mapping() assert f.ldim == 3 assert f.pdim == 3 @@ -83,7 +80,6 @@ def test_affine_mapping_1d(): params = {'c1': 1, 'a11': -1} F = AffineMapping('F', **params, dim=1) - f = F.get_callable_mapping() assert f.ldim == 1 assert f.pdim == 1 @@ -107,7 +103,6 @@ def test_affine_mapping_2d(): params = dict(c1=c1, c2=c2, a11=a11, a12=a12, a21=a21, a22=a22) F = AffineMapping('F', **params, dim=2) - f = F.get_callable_mapping() assert f.ldim == 2 assert f.pdim == 2 @@ -148,7 +143,6 @@ def test_affine_mapping_3d(): a31=a31, a32=a32, a33=a33,) F = AffineMapping('F', **params, dim=3) - f = F.get_callable_mapping() assert f.ldim == 3 assert f.pdim == 3 @@ -233,7 +227,6 @@ def test_polar_mapping(): def test_identity_mapping_array_1d(): F = IdentityMapping('F', dim=1) - f = F.get_callable_mapping() assert f.ldim == 1 assert f.pdim == 1 @@ -249,7 +242,6 @@ def test_identity_mapping_array_1d(): def test_identity_mapping_array_2d(): F = IdentityMapping('F', dim=2) - f = F.get_callable_mapping() assert f.ldim == 2 assert f.pdim == 2 @@ -274,7 +266,6 @@ def test_identity_mapping_array_2d(): def test_identity_mapping_array_3d(): F = IdentityMapping('F', dim=3) - f = F.get_callable_mapping() assert f.ldim == 3 assert f.pdim == 3 @@ -305,7 +296,6 @@ def test_affine_mapping_array_1d(): params = {'c1': 1, 'a11': -1} F = AffineMapping('F', **params, dim=1) - f = F.get_callable_mapping() assert f.ldim == 1 assert f.pdim == 1 @@ -327,7 +317,6 @@ def test_affine_mapping_array_2d(): params = dict(c1=c1, c2=c2, a11=a11, a12=a12, a21=a21, a22=a22) F = AffineMapping('F', **params, dim=2) - f = F.get_callable_mapping() assert f.ldim == 2 assert f.pdim == 2 @@ -377,7 +366,6 @@ def test_affine_mapping_array_3d(): a31=a31, a32=a32, a33=a33,) F = AffineMapping('F', **params, dim=3) - f = F.get_callable_mapping() assert f.ldim == 3 assert f.pdim == 3 @@ -431,7 +419,6 @@ def test_polar_mapping_array(): params = dict(c1=c1, c2=c2, rmin=rmin, rmax=rmax) F = PolarMapping('F', **params) - f = F.get_callable_mapping() assert f.ldim == 2 assert f.pdim == 2 @@ -469,7 +456,8 @@ def test_polar_mapping_array(): assert np.allclose(f.metric_det (xx1, xx2), G_det, rtol=RTOL, atol=ATOL) #============================================================================== -def test_user_defined_callable_mapping(): +#not sure if this test should still exist as there are no more callable mappings. +'''def test_user_defined_callable_mapping(): class UserIdentity(BasicCallableMapping): """ Identity in N dimensions. @@ -517,4 +505,4 @@ def pdim(self): assert np.array_equal(f.metric(0, 1, 1) , [[1, 0, 0], [0, 1, 0], [0, 0, 1]]) assert f.metric_det(-5, 8, -9) == 1.0 assert f.ldim == 3 - assert f.pdim == 3 + assert f.pdim == 3''' From e71dd993e09dabdb4afdba3d55b4f2ae8c0945ec Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Wed, 21 Aug 2024 13:37:20 +0200 Subject: [PATCH 28/39] test_mapping_evaluation last version --- .../topology/tests/test_mapping_evaluation.py | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/sympde/topology/tests/test_mapping_evaluation.py b/sympde/topology/tests/test_mapping_evaluation.py index 37d701a7..e2a0ce6b 100644 --- a/sympde/topology/tests/test_mapping_evaluation.py +++ b/sympde/topology/tests/test_mapping_evaluation.py @@ -11,7 +11,7 @@ #============================================================================== def test_identity_mapping_1d(): - F = IdentityMapping('F', dim=1) + f = IdentityMapping('F', dim=1) assert f.ldim == 1 assert f.pdim == 1 @@ -28,7 +28,7 @@ def test_identity_mapping_1d(): def test_identity_mapping_2d(): - F = IdentityMapping('F', dim=2) + f = IdentityMapping('F', dim=2) assert f.ldim == 2 assert f.pdim == 2 @@ -50,7 +50,7 @@ def test_identity_mapping_2d(): def test_identity_mapping_3d(): - F = IdentityMapping('F', dim=3) + f = IdentityMapping('F', dim=3) assert f.ldim == 3 assert f.pdim == 3 @@ -79,7 +79,7 @@ def test_affine_mapping_1d(): # x = 1 - x1 params = {'c1': 1, 'a11': -1} - F = AffineMapping('F', **params, dim=1) + f = AffineMapping('F', **params, dim=1) assert f.ldim == 1 assert f.pdim == 1 @@ -102,7 +102,7 @@ def test_affine_mapping_2d(): params = dict(c1=c1, c2=c2, a11=a11, a12=a12, a21=a21, a22=a22) - F = AffineMapping('F', **params, dim=2) + f = AffineMapping('F', **params, dim=2) assert f.ldim == 2 assert f.pdim == 2 @@ -142,7 +142,7 @@ def test_affine_mapping_3d(): a21=a21, a22=a22, a23=a23, a31=a31, a32=a32, a33=a33,) - F = AffineMapping('F', **params, dim=3) + f = AffineMapping('F', **params, dim=3) assert f.ldim == 3 assert f.pdim == 3 @@ -186,8 +186,7 @@ def test_polar_mapping(): params = dict(c1=c1, c2=c2, rmin=rmin, rmax=rmax) - F = PolarMapping('F', **params) - f = F.get_callable_mapping() + f = PolarMapping('F', **params) assert f.ldim == 2 assert f.pdim == 2 @@ -226,7 +225,7 @@ def test_polar_mapping(): def test_identity_mapping_array_1d(): - F = IdentityMapping('F', dim=1) + f = IdentityMapping('F', dim=1) assert f.ldim == 1 assert f.pdim == 1 @@ -241,7 +240,7 @@ def test_identity_mapping_array_1d(): def test_identity_mapping_array_2d(): - F = IdentityMapping('F', dim=2) + f = IdentityMapping('F', dim=2) assert f.ldim == 2 assert f.pdim == 2 @@ -265,7 +264,7 @@ def test_identity_mapping_array_2d(): def test_identity_mapping_array_3d(): - F = IdentityMapping('F', dim=3) + f = IdentityMapping('F', dim=3) assert f.ldim == 3 assert f.pdim == 3 @@ -295,7 +294,7 @@ def test_affine_mapping_array_1d(): # x = 1 - x1 params = {'c1': 1, 'a11': -1} - F = AffineMapping('F', **params, dim=1) + f = AffineMapping('F', **params, dim=1) assert f.ldim == 1 assert f.pdim == 1 @@ -316,7 +315,7 @@ def test_affine_mapping_array_2d(): params = dict(c1=c1, c2=c2, a11=a11, a12=a12, a21=a21, a22=a22) - F = AffineMapping('F', **params, dim=2) + f = AffineMapping('F', **params, dim=2) assert f.ldim == 2 assert f.pdim == 2 @@ -365,7 +364,7 @@ def test_affine_mapping_array_3d(): a21=a21, a22=a22, a23=a23, a31=a31, a32=a32, a33=a33,) - F = AffineMapping('F', **params, dim=3) + f = AffineMapping('F', **params, dim=3) assert f.ldim == 3 assert f.pdim == 3 @@ -418,7 +417,7 @@ def test_polar_mapping_array(): params = dict(c1=c1, c2=c2, rmin=rmin, rmax=rmax) - F = PolarMapping('F', **params) + f = PolarMapping('F', **params) assert f.ldim == 2 assert f.pdim == 2 From 5a51f542e90e87820bd819fac60ba876b3d63efe Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Fri, 6 Sep 2024 18:40:20 +0100 Subject: [PATCH 29/39] deleting .DS_Store --- sympde/topology/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 sympde/topology/.DS_Store diff --git a/sympde/topology/.DS_Store b/sympde/topology/.DS_Store deleted file mode 100644 index 428dcf85e85463c09dbef64ceb1361c739343e18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOG*Pl5UolkFd#yfuB5M!8;oJRfVn`35nUuqAiD3 Date: Sat, 7 Sep 2024 11:25:29 +0100 Subject: [PATCH 30/39] changes to make CI pass --- .gitignore | 2 +- sympde/expr/evaluation.py | 4 +- sympde/expr/tests/test_expr.py | 4 +- sympde/expr/tests/test_tensor_2d.py | 10 ++-- sympde/topology/analytic_mappings.py | 16 +++--- sympde/topology/base_analytic_mapping.py | 20 +++---- sympde/topology/base_mapping.py | 7 ++- sympde/topology/basic.py | 1 + sympde/topology/derivatives.py | 4 -- sympde/topology/domain.py | 7 +-- .../{test_mapping.py => test_base_mapping.py} | 0 sympde/topology/tests/test_derivatives.py | 6 +- sympde/topology/tests/test_logical_expr.py | 32 +++++------ .../topology/tests/test_mapping_evaluation.py | 56 +------------------ sympde/topology/tests/test_symbolic_expr.py | 4 +- sympde/topology/tests/test_topology.py | 6 +- sympde/utilities/tests/test_utilities.py | 2 +- 17 files changed, 61 insertions(+), 120 deletions(-) rename sympde/topology/tests/{test_mapping.py => test_base_mapping.py} (100%) diff --git a/.gitignore b/.gitignore index ef6f7968..4227e33b 100644 --- a/.gitignore +++ b/.gitignore @@ -113,4 +113,4 @@ doc/utils/*.png *.swp __gpyccel__/* -__psydac__/* \ No newline at end of file +__psydac__/* diff --git a/sympde/expr/evaluation.py b/sympde/expr/evaluation.py index 24c444bf..a86b1a5d 100644 --- a/sympde/expr/evaluation.py +++ b/sympde/expr/evaluation.py @@ -31,7 +31,9 @@ from sympde.topology.basic import Boundary, Interface from sympde.topology.basic import InteriorDomain from sympde.topology.domain import NormalVector, TangentVector, NCube, NCubeInterior -from sympde.topology import JacobianSymbol, InterfaceMapping, MultiPatchMapping, JacobianInverseSymbol, LogicalExpr, PullBack +from sympde.topology.base_mapping import JacobianSymbol, JacobianInverseSymbol +from sympde.topology.base_mapping import LogicalExpr, PullBack +from sympde.topology.base_mapping import InterfaceMapping, MultiPatchMapping # TODO fix circular dependency between sympde.expr.evaluation and sympde.topology.mapping diff --git a/sympde/expr/tests/test_expr.py b/sympde/expr/tests/test_expr.py index efca3a98..5ef1856f 100644 --- a/sympde/expr/tests/test_expr.py +++ b/sympde/expr/tests/test_expr.py @@ -16,7 +16,7 @@ from sympde.topology import dx1, dx2, dx3 from sympde.topology import dx, dy, dz -from sympde.topology import Mapping +from sympde.topology import BaseMapping from sympde.topology import ScalarFunctionSpace, VectorFunctionSpace from sympde.topology import element_of, elements_of from sympde.topology import InteriorDomain, Union @@ -867,7 +867,7 @@ def test_terminal_expr_bilinear_2d_4(): def test_terminal_expr_bilinear_3d_1(): domain = Domain('Omega', dim=3) - M = Mapping('M', dim=3) + M = BaseMapping('M', dim=3) mapped_domain = M(domain) diff --git a/sympde/expr/tests/test_tensor_2d.py b/sympde/expr/tests/test_tensor_2d.py index 0fc9e31d..f68e8667 100644 --- a/sympde/expr/tests/test_tensor_2d.py +++ b/sympde/expr/tests/test_tensor_2d.py @@ -12,7 +12,7 @@ from sympde.topology import elements_of from sympde.topology import Boundary from sympde.topology import Domain -from sympde.topology import Mapping +from sympde.topology import BaseMapping from sympde.expr.expr import BilinearForm, integral from sympde.expr.evaluation import TensorExpr @@ -59,11 +59,11 @@ def test_tensorize_2d_2(): # ... #============================================================================== -def test_tensorize_2d_1_mapping(): +def test_tensorize_2d_1_BaseMapping(): DIM = 2 - M = Mapping('Map', dim=DIM) + M = BaseMapping('Map', dim=DIM) domain = M(Domain('Omega', dim=DIM)) @@ -85,10 +85,10 @@ def test_tensorize_2d_1_mapping(): # ... #============================================================================== -def test_tensorize_2d_2_mapping(): +def test_tensorize_2d_2_BaseMapping(): DIM = 2 - M = Mapping('M', dim=DIM) + M = BaseMapping('M', dim=DIM) domain = M(Domain('Omega', dim=DIM)) V = VectorFunctionSpace('V', domain) diff --git a/sympde/topology/analytic_mappings.py b/sympde/topology/analytic_mappings.py index c00b0349..2148f7c6 100644 --- a/sympde/topology/analytic_mappings.py +++ b/sympde/topology/analytic_mappings.py @@ -165,14 +165,15 @@ class SphericalMapping(BaseAnalyticMapping): _ldim = 3 _pdim = 3 -class Collela3D( BaseAnalyticMapping ): +#============================================================================== +class Collela3D(BaseAnalyticMapping): _expressions = {'x':'2.*(x1 + 0.1*sin(2.*pi*x1)*sin(2.*pi*x2)) - 1.', 'y':'2.*(x2 + 0.1*sin(2.*pi*x1)*sin(2.*pi*x2)) - 1.', 'z':'2.*x3 - 1.'} - - -class TransposedPolarMapping( BaseAnalyticMapping ): + +#============================================================================== +class TransposedPolarMapping(BaseAnalyticMapping): """ Represents a Transposed (x1 <> x2) Polar 2D Mapping object (Annulus). @@ -184,8 +185,9 @@ class TransposedPolarMapping( BaseAnalyticMapping ): _ldim = 2 _pdim = 2 - -class TransposedPolarMapping( BaseAnalyticMapping ): + +#============================================================================== +class TransposedPolarMapping(BaseAnalyticMapping): """ Represents a Transposed (x1 <> x2) Polar 2D Mapping object (Annulus). @@ -196,4 +198,4 @@ class TransposedPolarMapping( BaseAnalyticMapping ): 'y': 'c2 + (rmin*(1-x2)+rmax*x2)*sin(x1)'} _ldim = 2 - _pdim = 2 \ No newline at end of file + _pdim = 2 diff --git a/sympde/topology/base_analytic_mapping.py b/sympde/topology/base_analytic_mapping.py index 477f2fbb..583363b4 100644 --- a/sympde/topology/base_analytic_mapping.py +++ b/sympde/topology/base_analytic_mapping.py @@ -20,7 +20,6 @@ - def lambdify_sympde(variables, expr): """ Custom lambify function that covers the @@ -98,8 +97,8 @@ def f_vec_v(*XYZ): result[multi_index] = scalar_functions[multi_index](*XYZ) return result return f_vec_v - - + + #============================================================================== class BaseAnalyticMapping(BaseMapping): """ @@ -124,11 +123,9 @@ def __new__(cls, name, dim=None, **kwargs): return obj - #-------------------------------------------------------------------------- #Abstract Interface : - - + def _evaluate_domain( self, domain ): assert(isinstance(domain, BasicDomain)) return MappedDomain(self, domain) @@ -154,7 +151,7 @@ def _jacobian_evaluate( self, *Xs ): for X in Xs: assert np.shape(X) == Xshape return self._jac_eval( *Xs ) - + def _jacobian_inv_evaluate( self, *Xs ): #int, float or numpy arrays if self._inv_jac_eval is None: @@ -193,8 +190,7 @@ def __call__( self, *args ): return self._evaluate(*args) else: raise TypeError("Invalid arguments for __call__") - - + def jacobian_eval( self, *args ): if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): return self._jacobian_evaluate(*args) @@ -212,12 +208,10 @@ def metric_eval( self, *args ): return self._metric_evaluate(*args) else: raise TypeError("Invalid arguments for metric_eval") - - + def metric_det_eval( self, *args ): if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): return self._metric_det_evaluate(*args) else: raise TypeError("Invalid arguments for metric_det_eval") - - + diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index 61cb89d9..300b203e 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -14,6 +14,7 @@ from sympy import sqrt, symbols from sympy.core.exprtools import factor_terms from sympy.polys.polytools import parallel_poly_from_expr +import numpy as np from sympde.core import Constant from sympde.core.basic import CalculusFunction @@ -38,12 +39,13 @@ from .derivatives import _logical_partial_derivatives from .derivatives import get_atom_logical_derivatives, get_index_logical_derivatives_atom from .derivatives import LogicalGrad_1d, LogicalGrad_2d, LogicalGrad_3d -import numpy as np + # TODO fix circular dependency between sympde.topology.domain and sympde.topology.mapping # TODO fix circular dependency between sympde.expr.evaluation and sympde.topology.mapping __all__ = ( + 'BaseMapping', 'Contravariant', 'Covariant', 'InterfaceMapping', @@ -614,7 +616,6 @@ def __new__(cls, u, mapping=None): else: mapping = space.domain.mapping - J = mapping.jacobian if isinstance(kind, (UndefinedSpaceType, H1SpaceType)): expr = el @@ -675,7 +676,7 @@ def eval(cls, F): expr : ImmutableDenseMatrix the jacobian matrix """ - + if not isinstance(F, BaseMapping): raise TypeError('> Expecting a BaseMapping object') diff --git a/sympde/topology/basic.py b/sympde/topology/basic.py index b40c8049..102e7c02 100644 --- a/sympde/topology/basic.py +++ b/sympde/topology/basic.py @@ -88,6 +88,7 @@ def mapping(self): @mapping.setter def mapping(self, value): + assert(isinstance(value, BaseMapping)) self._mapping = value diff --git a/sympde/topology/derivatives.py b/sympde/topology/derivatives.py index 3ea4154b..4a1f5c42 100644 --- a/sympde/topology/derivatives.py +++ b/sympde/topology/derivatives.py @@ -30,7 +30,6 @@ from .space import ScalarFunction, VectorFunction, IndexedVectorFunction - #============================================================================== class DifferentialOperator(LinearOperator): """ @@ -107,8 +106,6 @@ def eval(cls, expr): elif isinstance(expr, Expr): x = Symbol(cls.coordinate) if cls.logical: - - M = expr.atoms(BaseMapping) if len(M)>0: M = list(M)[0] @@ -955,7 +952,6 @@ def eval(cls, *_args): return u = _args[0] - du = (dx1(u), dx2(u)) if isinstance(du[0], (Tuple, Matrix, ImmutableDenseMatrix)): diff --git a/sympde/topology/domain.py b/sympde/topology/domain.py index 60a76a6b..214a53d6 100644 --- a/sympde/topology/domain.py +++ b/sympde/topology/domain.py @@ -353,7 +353,7 @@ def from_file( cls, filename ): d_interior = yml['interior'] d_boundary = yml['boundary'] d_connectivity = yml['connectivity'] - + if dtype == 'None': dtype = None assert dtype is not None @@ -361,7 +361,7 @@ def from_file( cls, filename ): if isinstance(d_interior, dict): d_interior = [d_interior] dtype = [dtype] - + constructors = [globals()[dt['type']] for dt in dtype] interiors = [cs(i['name'], **dt['parameters']) for cs,i,dt in zip(constructors, d_interior, dtype)] mappings = [BaseMapping(I['mapping'], dim=dim) if I.get('mapping', "None") != "None" else None for I in d_interior] @@ -489,8 +489,6 @@ def join(cls, patches, connectivity, name): assert all(p.dim==patches[0].dim for p in patches) dim = int(patches[0].dim) - from sympde.topology.base_mapping import MultiPatchMapping - patch_given_by_indices = (len(connectivity) > 0 and isinstance(connectivity[0][0][0], int)) # ... connectivity @@ -542,6 +540,7 @@ def join(cls, patches, connectivity, name): for k,v in connectivity.items(): logical_connectivity[v.logical_domain.name] = v.logical_domain + from sympde.topology.base_mapping import MultiPatchMapping mapping = MultiPatchMapping({e.logical_domain: e.mapping for e in interiors}) logical_domain = Domain(name, interiors=logical_interiors, diff --git a/sympde/topology/tests/test_mapping.py b/sympde/topology/tests/test_base_mapping.py similarity index 100% rename from sympde/topology/tests/test_mapping.py rename to sympde/topology/tests/test_base_mapping.py diff --git a/sympde/topology/tests/test_derivatives.py b/sympde/topology/tests/test_derivatives.py index 3694adfe..3f88d112 100644 --- a/sympde/topology/tests/test_derivatives.py +++ b/sympde/topology/tests/test_derivatives.py @@ -12,7 +12,7 @@ from sympde.topology import get_max_partial_derivatives from sympde.topology import ScalarFunctionSpace from sympde.topology import (dx, dy, dz) -from sympde.topology import Mapping +from sympde.topology import BaseMapping def indices_as_str(a): @@ -30,7 +30,7 @@ def test_partial_derivatives_1(): # ... domain = Domain('Omega', dim=2) - M = Mapping('M', dim=2) + M = BaseMapping('M', dim=2) mapped_domain = M(domain) @@ -78,7 +78,7 @@ def test_partial_derivatives_2(): # ... domain = Domain('Omega', dim=2) - M = Mapping('M', dim=2) + M = BaseMapping('M', dim=2) mapped_domain = M(domain) diff --git a/sympde/topology/tests/test_logical_expr.py b/sympde/topology/tests/test_logical_expr.py index 99108c4d..7825676d 100644 --- a/sympde/topology/tests/test_logical_expr.py +++ b/sympde/topology/tests/test_logical_expr.py @@ -9,7 +9,7 @@ from sympde.calculus import grad, dot, inner, rot, div from sympde.calculus import laplace, bracket, convect from sympde.calculus import jump, avg, Dn, minus, plus -from sympde.topology import Domain, Mapping, Square +from sympde.topology import Domain, BaseMapping, Square from sympde.topology import dx, dy from sympde.topology import dx1, dx2, dx3 from sympde.topology import ScalarFunctionSpace, VectorFunctionSpace @@ -27,13 +27,13 @@ from sympde.expr import BilinearForm, integral from sympde.calculus import grad, div, curl, dot -from sympde.topology.mapping import Jacobian +from sympde.topology.base_mapping import Jacobian #============================================================================== def test_logical_expr_1d_1(): dim = 1 - M = Mapping('M', dim=dim) + M = BaseMapping('M', dim=dim) domain = M(Domain('Omega', dim=dim)) alpha = Constant('alpha') @@ -80,7 +80,7 @@ def test_logical_expr_1d_1(): def test_symbolic_expr_1d_1(): dim = 1 - M = Mapping('M', dim=dim) + M = BaseMapping('M', dim=dim) domain = M(Domain('Omega', dim=dim)) V = ScalarFunctionSpace('V', domain, kind='h1') @@ -149,7 +149,7 @@ def test_symbolic_expr_1d_1(): def test_logical_expr_2d_1(): dim = 2 - M = Mapping('M', dim=dim) + M = BaseMapping('M', dim=dim) domain = M(Domain('Omega', dim=dim)) alpha = Constant('alpha') @@ -215,8 +215,8 @@ def test_logical_expr_2d_2(): A = Square('A') B = Square('B') - M1 = Mapping('M1', dim=dim) - M2 = Mapping('M2', dim=dim) + M1 = BaseMapping('M1', dim=dim) + M2 = BaseMapping('M2', dim=dim) D1 = M1(A) D2 = M2(B) @@ -268,8 +268,8 @@ def test_logical_expr_2d_3(): A = Square('A') B = Square('B') - M1 = Mapping('M1', dim=dim) - M2 = Mapping('M2', dim=dim) + M1 = BaseMapping('M1', dim=dim) + M2 = BaseMapping('M2', dim=dim) D1 = M1(A) D2 = M2(B) @@ -292,7 +292,7 @@ def test_logical_expr_2d_3(): #============================================================================== def test_symbolic_expr_2d_1(): dim = 2 - M = Mapping('M', dim=dim) + M = BaseMapping('M', dim=dim) domain = M(Domain('Omega', dim=dim)) V = ScalarFunctionSpace('V', domain, kind='h1') @@ -368,7 +368,7 @@ def test_symbolic_expr_2d_1(): def test_logical_expr_3d_1(): dim = 3 - M = Mapping('M', dim=dim) + M = BaseMapping('M', dim=dim) domain = M(Domain('Omega', dim=dim)) alpha = Constant('alpha') @@ -421,7 +421,7 @@ def test_logical_expr_3d_2(): dim = 3 domain = Domain('Omega', dim=dim) - M = Mapping('M', dim=dim) + M = BaseMapping('M', dim=dim) mapped_domain = M(domain) @@ -443,7 +443,7 @@ def test_logical_expr_3d_3(): dim = 3 domain = Domain('Omega', dim=dim) - M = Mapping('M', dim=dim) + M = BaseMapping('M', dim=dim) mapped_domain = M(domain) @@ -464,7 +464,7 @@ def test_logical_expr_3d_4(): dim = 3 domain = Domain('Omega', dim=dim) - M = Mapping('M', dim=dim) + M = BaseMapping('M', dim=dim) mapped_domain = M(domain) @@ -485,7 +485,7 @@ def test_logical_expr_3d_5(): dim = 3 domain = Domain('Omega', dim=dim) - M = Mapping('M', dim=dim) + M = BaseMapping('M', dim=dim) mapped_domain = M(domain) @@ -509,7 +509,7 @@ def test_logical_expr_3d_5(): #============================================================================== def test_symbolic_expr_3d_1(): dim = 3 - M = Mapping('M', dim=dim) + M = BaseMapping('M', dim=dim) domain = M(Domain('Omega', dim=dim)) V = ScalarFunctionSpace('V', domain, kind='h1') diff --git a/sympde/topology/tests/test_mapping_evaluation.py b/sympde/topology/tests/test_mapping_evaluation.py index e2a0ce6b..494eaf5f 100644 --- a/sympde/topology/tests/test_mapping_evaluation.py +++ b/sympde/topology/tests/test_mapping_evaluation.py @@ -1,8 +1,6 @@ import numpy as np -from sympde.topology.mapping import Mapping, BasicCallableMapping -from sympde.topology.analytical_mapping import IdentityMapping, AffineMapping -from sympde.topology.analytical_mapping import PolarMapping +from sympde.topology.analytic_mappings import IdentityMapping, AffineMapping, PolarMapping # Tolerance for testing float equality RTOL = 1e-15 @@ -453,55 +451,3 @@ def test_polar_mapping_array(): assert np.allclose(f.jacobian_inv(xx1, xx2), J_inv, rtol=RTOL, atol=ATOL) assert np.allclose(f.metric (xx1, xx2), G , rtol=RTOL, atol=ATOL) assert np.allclose(f.metric_det (xx1, xx2), G_det, rtol=RTOL, atol=ATOL) - -#============================================================================== -#not sure if this test should still exist as there are no more callable mappings. -'''def test_user_defined_callable_mapping(): - - class UserIdentity(BasicCallableMapping): - """ Identity in N dimensions. - """ - - def __init__(self, ndim): - self._ndim = ndim - - def __call__(self, *eta): - assert len(eta) == self._ndim - return eta - - def jacobian(self, *eta): - assert len(eta) == self._ndim - return np.eye(self._ndim) - - def jacobian_inv(self, *eta): - assert len(eta) == self._ndim - return np.eye(self._ndim) - - def metric(self, *eta): - assert len(eta) == self._ndim - return np.eye(self._ndim) - - def metric_det(self, *eta): - assert len(eta) == self._ndim - return 1.0 - - @property - def ldim(self): - return self._ndim - - @property - def pdim(self): - return self._ndim - - F = Mapping('F', ldim = 3, pdim = 3) # Declare undefined symbolic mapping - f = UserIdentity(3) # Create user-defined callable mapping - F.set_callable_mapping(f) # Attach callable mapping to symbolic mapping - - assert F.get_callable_mapping() is f - assert f(4, 5, 6) == (4, 5, 6) - assert np.array_equal(f.jacobian(1, 2, 3) , [[1, 0, 0], [0, 1, 0], [0, 0, 1]]) - assert np.array_equal(f.jacobian_inv(-7, 0, 7), [[1, 0, 0], [0, 1, 0], [0, 0, 1]]) - assert np.array_equal(f.metric(0, 1, 1) , [[1, 0, 0], [0, 1, 0], [0, 0, 1]]) - assert f.metric_det(-5, 8, -9) == 1.0 - assert f.ldim == 3 - assert f.pdim == 3''' diff --git a/sympde/topology/tests/test_symbolic_expr.py b/sympde/topology/tests/test_symbolic_expr.py index 43d1151c..cf4a7322 100644 --- a/sympde/topology/tests/test_symbolic_expr.py +++ b/sympde/topology/tests/test_symbolic_expr.py @@ -4,7 +4,7 @@ from sympde.topology import Domain, ScalarFunctionSpace, element_of from sympde.topology import dx, dy, dz from sympde.topology import dx1, dx2, dx3 -from sympde.topology import Mapping, Jacobian +from sympde.topology import BaseMapping, Jacobian from sympde.topology import LogicalExpr from sympde.topology import SymbolicExpr @@ -43,7 +43,7 @@ def test_derivatives_2d_without_mapping(): def test_derivatives_2d_with_mapping(): dim = 2 - M = Mapping('M', dim=dim) + M = BaseMapping('M', dim=dim) O = M(Domain('Omega', dim=dim)) V = ScalarFunctionSpace('V', O, kind='h1') u = element_of(V, 'u') diff --git a/sympde/topology/tests/test_topology.py b/sympde/topology/tests/test_topology.py index adf2cd7b..a380f5f8 100644 --- a/sympde/topology/tests/test_topology.py +++ b/sympde/topology/tests/test_topology.py @@ -6,7 +6,7 @@ from sympde.topology import Boundary, NormalVector, TangentVector from sympde.topology import Connectivity, Edge from sympde.topology import Domain, ElementDomain -from sympde.topology import Area, Mapping +from sympde.topology import Area, BaseMapping from sympde.topology import Interface from sympde.topology import Line, Square, Cube from sympde.topology import IdentityMapping @@ -43,8 +43,8 @@ def test_topology_1(): B = Square('B') # ... - M1 = Mapping('M1', dim=2) - M2 = Mapping('M2', dim=2) + M1 = BaseMapping('M1', dim=2) + M2 = BaseMapping('M2', dim=2) D1 = M1(A) D2 = M2(B) diff --git a/sympde/utilities/tests/test_utilities.py b/sympde/utilities/tests/test_utilities.py index f6fbfe55..b2ddc9c1 100644 --- a/sympde/utilities/tests/test_utilities.py +++ b/sympde/utilities/tests/test_utilities.py @@ -3,7 +3,7 @@ from sympy import Matrix, symbols, Array from sympy import S -from sympde.utilities.utils import lambdify_sympde +from sympde.topology.base_analytic_mapping import lambdify_sympde From 6d06f8ba2ca9f466601ae08201faf325ba548404 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Sat, 7 Sep 2024 16:56:22 +0100 Subject: [PATCH 31/39] test_mapping_evaluation.py should work now --- .../topology/tests/test_mapping_evaluation.py | 112 +++++++++--------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/sympde/topology/tests/test_mapping_evaluation.py b/sympde/topology/tests/test_mapping_evaluation.py index 494eaf5f..535d342a 100644 --- a/sympde/topology/tests/test_mapping_evaluation.py +++ b/sympde/topology/tests/test_mapping_evaluation.py @@ -18,10 +18,10 @@ def test_identity_mapping_1d(): for x1 in x1_pts: assert f(x1) == (x1,) - assert f.jacobian(x1) == 1.0 - assert f.jacobian_inv(x1) == 1.0 - assert f.metric(x1) == 1.0 - assert f.metric_det(x1) == 1.0 + assert f.jacobian_eval(x1) == 1.0 + assert f.jacobian_inv_eval(x1) == 1.0 + assert f.metric_eval(x1) == 1.0 + assert f.metric_det_eval(x1) == 1.0 def test_identity_mapping_2d(): @@ -40,10 +40,10 @@ def test_identity_mapping_2d(): for x1 in x1_pts: for x2 in x2_pts: assert f(x1, x2) == (x1, x2) - assert np.array_equal(f.jacobian (x1, x2), I) - assert np.array_equal(f.jacobian_inv(x1, x2), I) - assert np.array_equal(f.metric (x1, x2), I) - assert f.metric_det(x1, x2) == 1.0 + assert np.array_equal(f.jacobian_eval (x1, x2), I) + assert np.array_equal(f.jacobian_inv_eval(x1, x2), I) + assert np.array_equal(f.metric_eval (x1, x2), I) + assert f.metric_det_eval(x1, x2) == 1.0 def test_identity_mapping_3d(): @@ -65,10 +65,10 @@ def test_identity_mapping_3d(): for x2 in x2_pts: for x3 in x3_pts: assert f(x1, x2, x3) == (x1, x2, x3) - assert np.array_equal(f.jacobian (x1, x2, x3), I) - assert np.array_equal(f.jacobian_inv(x1, x2, x3), I) - assert np.array_equal(f.metric (x1, x2, x3), I) - assert f.metric_det(x1, x2, x3) == 1.0 + assert np.array_equal(f.jacobian_eval (x1, x2, x3), I) + assert np.array_equal(f.jacobian_inv_eval(x1, x2, x3), I) + assert np.array_equal(f.metric_eval (x1, x2, x3), I) + assert f.metric_det_eval(x1, x2, x3) == 1.0 #------------------------------------------------------------------------------ @@ -87,10 +87,10 @@ def test_affine_mapping_1d(): assert f(1 ) == (0 ,) for x1 in [0, 0.5, 1]: - assert f.jacobian(x1) == -1 - assert f.jacobian_inv(x1) == -1 - assert f.metric(x1) == 1 - assert f.metric_det(x1) == 1 + assert f.jacobian_eval(x1) == -1 + assert f.jacobian_inv_eval(x1) == -1 + assert f.metric_eval(x1) == 1 + assert f.metric_det_eval(x1) == 1 def test_affine_mapping_2d(): @@ -121,10 +121,10 @@ def test_affine_mapping_2d(): x = c1 + a11 * x1 + a12 * x2 y = c2 + a21 * x1 + a22 * x2 assert f(x1, x2) == (x, y) - assert np.array_equal(f.jacobian (x1, x2), J ) - assert np.array_equal(f.jacobian_inv(x1, x2), J_inv) - assert np.array_equal(f.metric (x1, x2), G ) - assert f.metric_det(x1, x2) == G_det + assert np.array_equal(f.jacobian_eval (x1, x2), J ) + assert np.array_equal(f.jacobian_inv_eval(x1, x2), J_inv) + assert np.array_equal(f.metric_eval (x1, x2), G ) + assert f.metric_det_eval(x1, x2) == G_det def test_affine_mapping_3d(): @@ -170,10 +170,10 @@ def test_affine_mapping_3d(): y = c2 + a21 * x1 + a22 * x2 + a23 * x3 z = c3 + a31 * x1 + a32 * x2 + a33 * x3 assert np.allclose(f(x1, x2, x3), (x, y, z), rtol=RTOL, atol=ATOL) - assert np.array_equal(f.jacobian (x1, x2, x3), J ) - assert np.array_equal(f.jacobian_inv(x1, x2, x3), J_inv) - assert np.array_equal(f.metric (x1, x2, x3), G ) - assert f.metric_det(x1, x2, x3) == G_det + assert np.array_equal(f.jacobian_eval (x1, x2, x3), J ) + assert np.array_equal(f.jacobian_inv_eval(x1, x2, x3), J_inv) + assert np.array_equal(f.metric_eval (x1, x2, x3), G ) + assert f.metric_det_eval(x1, x2, x3) == G_det #------------------------------------------------------------------------------ @@ -212,10 +212,10 @@ def test_polar_mapping(): [-J[1][0] / J_det, J[0][0] / J_det]] assert f(x1, x2) == (x, y) - assert np.allclose(f.jacobian (x1, x2), J , rtol=RTOL, atol=ATOL) - assert np.allclose(f.jacobian_inv(x1, x2), J_inv, rtol=RTOL, atol=ATOL) - assert np.allclose(f.metric (x1, x2), G , rtol=RTOL, atol=ATOL) - assert np.allclose(f.metric_det (x1, x2), G_det, rtol=RTOL, atol=ATOL) + assert np.allclose(f.jacobian_eval (x1, x2), J , rtol=RTOL, atol=ATOL) + assert np.allclose(f.jacobian_inv_eval(x1, x2), J_inv, rtol=RTOL, atol=ATOL) + assert np.allclose(f.metric_eval (x1, x2), G , rtol=RTOL, atol=ATOL) + assert np.allclose(f.metric_det_eval (x1, x2), G_det, rtol=RTOL, atol=ATOL) #------------------------------------------------------------------------------ @@ -231,10 +231,10 @@ def test_identity_mapping_array_1d(): x1 = np.array([-0.7, 0.5, 33]) assert np.array_equal(f(x1)[0], x1) - assert np.array_equal(f.jacobian(x1), np.ones((1, 1, 3))) - assert np.array_equal(f.jacobian_inv(x1),np.ones((1, 1, 3))) - assert np.array_equal(f.metric(x1), np.ones((1, 1, 3))) - assert np.array_equal(f.metric_det(x1), np.ones(3)) + assert np.array_equal(f.jacobian_eval(x1), np.ones((1, 1, 3))) + assert np.array_equal(f.jacobian_inv_eval(x1),np.ones((1, 1, 3))) + assert np.array_equal(f.metric_eval(x1), np.ones((1, 1, 3))) + assert np.array_equal(f.metric_det_eval(x1), np.ones(3)) def test_identity_mapping_array_2d(): @@ -254,10 +254,10 @@ def test_identity_mapping_array_2d(): assert np.array_equal(r1, xx1) assert np.array_equal(r2, xx2) - assert np.array_equal(f.jacobian (xx1, xx2), I) - assert np.array_equal(f.jacobian_inv(xx1, xx2), I) - assert np.array_equal(f.metric (xx1, xx2), I) - assert np.array_equal(f.metric_det (xx1, xx2), np.ones((3, 3))) + assert np.array_equal(f.jacobian_eval (xx1, xx2), I) + assert np.array_equal(f.jacobian_inv_eval(xx1, xx2), I) + assert np.array_equal(f.metric_eval (xx1, xx2), I) + assert np.array_equal(f.metric_det_eval (xx1, xx2), np.ones((3, 3))) def test_identity_mapping_array_3d(): @@ -280,10 +280,10 @@ def test_identity_mapping_array_3d(): assert np.array_equal(r1, xx1) assert np.array_equal(r2, xx2) assert np.array_equal(r3, xx3) - assert np.array_equal(f.jacobian (xx1, xx2, xx3), I) - assert np.array_equal(f.jacobian_inv(xx1, xx2, xx3), I) - assert np.array_equal(f.metric (xx1, xx2, xx3), I) - assert np.array_equal(f.metric_det (xx1, xx2, xx3), np.ones((2, 2, 2))) + assert np.array_equal(f.jacobian_eval (xx1, xx2, xx3), I) + assert np.array_equal(f.jacobian_inv_eval(xx1, xx2, xx3), I) + assert np.array_equal(f.metric_eval (xx1, xx2, xx3), I) + assert np.array_equal(f.metric_det_eval (xx1, xx2, xx3), np.ones((2, 2, 2))) #------------------------------------------------------------------------------ @@ -300,10 +300,10 @@ def test_affine_mapping_array_1d(): x1 = np.array([0, 0.5, 1]) assert np.array_equal(f(x1)[0], [1, 0.5, 0]) - assert np.array_equal(f.jacobian(x1), [[[-1, -1, -1]]]) - assert np.array_equal(f.jacobian_inv(x1), [[[-1, -1, -1]]]) - assert np.array_equal(f.metric(x1), [[[1, 1, 1]]]) - assert np.array_equal(f.metric_det(x1), [1, 1, 1]) + assert np.array_equal(f.jacobian_eval(x1), [[[-1, -1, -1]]]) + assert np.array_equal(f.jacobian_inv_eval(x1), [[[-1, -1, -1]]]) + assert np.array_equal(f.metric_eval(x1), [[[1, 1, 1]]]) + assert np.array_equal(f.metric_det_eval(x1), [1, 1, 1]) def test_affine_mapping_array_2d(): @@ -343,10 +343,10 @@ def test_affine_mapping_array_2d(): assert np.array_equal(r1, x) assert np.array_equal(r2, y) - assert np.array_equal(f.jacobian (xx1, xx2), J ) - assert np.array_equal(f.jacobian_inv(xx1, xx2), J_inv) - assert np.array_equal(f.metric (xx1, xx2), G ) - assert np.array_equal(f.metric_det (xx1, xx2), G_det) + assert np.array_equal(f.jacobian_eval (xx1, xx2), J ) + assert np.array_equal(f.jacobian_inv_eval(xx1, xx2), J_inv) + assert np.array_equal(f.metric_eval (xx1, xx2), G ) + assert np.array_equal(f.metric_det_eval (xx1, xx2), G_det) def test_affine_mapping_array_3d(): @@ -401,10 +401,10 @@ def test_affine_mapping_array_3d(): assert np.allclose(r1, x, rtol=RTOL, atol=ATOL) assert np.allclose(r2, y, rtol=RTOL, atol=ATOL) assert np.allclose(r3, z, rtol=RTOL, atol=ATOL) - assert np.array_equal(f.jacobian (xx1, xx2, xx3), J ) - assert np.array_equal(f.jacobian_inv(xx1, xx2, xx3), J_inv) - assert np.array_equal(f.metric (xx1, xx2, xx3), G ) - assert np.array_equal(f.metric_det (xx1, xx2, xx3), G_det) + assert np.array_equal(f.jacobian_eval (xx1, xx2, xx3), J ) + assert np.array_equal(f.jacobian_inv_eval(xx1, xx2, xx3), J_inv) + assert np.array_equal(f.metric_eval (xx1, xx2, xx3), G ) + assert np.array_equal(f.metric_det_eval (xx1, xx2, xx3), G_det) #------------------------------------------------------------------------------ @@ -447,7 +447,7 @@ def test_polar_mapping_array(): assert np.array_equal(r1, x) assert np.array_equal(r2, y) - assert np.allclose(f.jacobian (xx1, xx2), J , rtol=RTOL, atol=ATOL) - assert np.allclose(f.jacobian_inv(xx1, xx2), J_inv, rtol=RTOL, atol=ATOL) - assert np.allclose(f.metric (xx1, xx2), G , rtol=RTOL, atol=ATOL) - assert np.allclose(f.metric_det (xx1, xx2), G_det, rtol=RTOL, atol=ATOL) + assert np.allclose(f.jacobian_eval (xx1, xx2), J , rtol=RTOL, atol=ATOL) + assert np.allclose(f.jacobian_inv_eval(xx1, xx2), J_inv, rtol=RTOL, atol=ATOL) + assert np.allclose(f.metric_eval (xx1, xx2), G , rtol=RTOL, atol=ATOL) + assert np.allclose(f.metric_det_eval (xx1, xx2), G_det, rtol=RTOL, atol=ATOL) From dffd49bfc5af7c5cb83fea6ba227525191bf3c93 Mon Sep 17 00:00:00 2001 From: Martin Campos Pinto Date: Tue, 17 Sep 2024 14:43:19 +0200 Subject: [PATCH 32/39] use previous Collela Mapping --- sympde/topology/analytic_mappings.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/sympde/topology/analytic_mappings.py b/sympde/topology/analytic_mappings.py index 2148f7c6..6e70dc8d 100644 --- a/sympde/topology/analytic_mappings.py +++ b/sympde/topology/analytic_mappings.py @@ -69,20 +69,22 @@ class CzarnyMapping(BaseAnalyticMapping): #============================================================================== class CollelaMapping2D(BaseAnalyticMapping): + _expressions = {'x': '2.*(x1 + eps*sin(2.*pi*k1*x1)*sin(2.*pi*k2*x2)) - 1.', + 'y': '2.*(x2 + eps*sin(2.*pi*k1*x1)*sin(2.*pi*k2*x2)) - 1.'} + _ldim = 2 _pdim = 2 - _expressions = {'x': 'a * (x1 + eps / (2*pi) * sin(2*pi*x1) * sin(2*pi*x2))', - 'y': 'b * (x2 + eps / (2*pi) * sin(2*pi*x1) * sin(2*pi*x2))'} + #============================================================================== class CollelaMapping3D(BaseAnalyticMapping): - _expressions = {'x': 'k1*(x1 + eps*sin(2.*pi*x1)*sin(2.*pi*x2))', - 'y': 'k2*(x2 + eps*sin(2.*pi*x1)*sin(2.*pi*x2))', - 'z': 'k3*x3'} + _expressions = {'x': 'k1*(x1 + eps*sin(2.*pi*x1)*sin(2.*pi*x2))', + 'y': 'k2*(x2 + eps*sin(2.*pi*x1)*sin(2.*pi*x2))', + 'z': 'k3*x3'} - _ldim = 3 - _pdim = 3 + _ldim = 3 + _pdim = 3 #============================================================================== class TorusMapping(BaseAnalyticMapping): From 7bd08f6b239e94e72baa7ae9b6a1dc6769993621 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Wed, 18 Sep 2024 21:47:40 +0200 Subject: [PATCH 33/39] trailing whitespace solving --- sympde/expr/evaluation.py | 2 +- sympde/topology/analytic_mappings.py | 16 +------------- sympde/topology/base_analytic_mapping.py | 25 +++++++++++----------- sympde/topology/base_mapping.py | 2 +- sympde/topology/basic.py | 8 ++----- sympde/topology/domain.py | 6 +++--- sympde/topology/tests/test_base_mapping.py | 11 +++++----- 7 files changed, 26 insertions(+), 44 deletions(-) diff --git a/sympde/expr/evaluation.py b/sympde/expr/evaluation.py index a86b1a5d..7c3c2ee7 100644 --- a/sympde/expr/evaluation.py +++ b/sympde/expr/evaluation.py @@ -33,7 +33,7 @@ from sympde.topology.domain import NormalVector, TangentVector, NCube, NCubeInterior from sympde.topology.base_mapping import JacobianSymbol, JacobianInverseSymbol from sympde.topology.base_mapping import LogicalExpr, PullBack -from sympde.topology.base_mapping import InterfaceMapping, MultiPatchMapping +from sympde.topology.base_mapping import InterfaceMapping, MultiPatchMapping # TODO fix circular dependency between sympde.expr.evaluation and sympde.topology.mapping diff --git a/sympde/topology/analytic_mappings.py b/sympde/topology/analytic_mappings.py index 6e70dc8d..ba998915 100644 --- a/sympde/topology/analytic_mappings.py +++ b/sympde/topology/analytic_mappings.py @@ -174,21 +174,7 @@ class Collela3D(BaseAnalyticMapping): 'y':'2.*(x2 + 0.1*sin(2.*pi*x1)*sin(2.*pi*x2)) - 1.', 'z':'2.*x3 - 1.'} -#============================================================================== -class TransposedPolarMapping(BaseAnalyticMapping): - """ - Represents a Transposed (x1 <> x2) Polar 2D Mapping object (Annulus). - - Examples - - """ - _expressions = {'x': 'c1 + (rmin*(1-x2)+rmax*x2)*cos(x1)', - 'y': 'c2 + (rmin*(1-x2)+rmax*x2)*sin(x1)'} - - _ldim = 2 - _pdim = 2 - -#============================================================================== +#============================================================================== class TransposedPolarMapping(BaseAnalyticMapping): """ Represents a Transposed (x1 <> x2) Polar 2D Mapping object (Annulus). diff --git a/sympde/topology/base_analytic_mapping.py b/sympde/topology/base_analytic_mapping.py index 583363b4..004c8142 100644 --- a/sympde/topology/base_analytic_mapping.py +++ b/sympde/topology/base_analytic_mapping.py @@ -1,6 +1,6 @@ # coding: utf-8 -import numpy as np +import numpy as np import itertools as it from sympy import lambdify @@ -19,7 +19,6 @@ ) - def lambdify_sympde(variables, expr): """ Custom lambify function that covers the @@ -120,18 +119,18 @@ def __new__(cls, name, dim=None, **kwargs): obj._metric_det_eval = lambdify_sympde( obj._logical_coordinates, obj._metric_det) else: raise TypeError("BaseAnalyticMapping should have an expression") - + return obj #-------------------------------------------------------------------------- - #Abstract Interface : + #Abstract Interface : def _evaluate_domain( self, domain ): assert(isinstance(domain, BasicDomain)) return MappedDomain(self, domain) def _evaluate( self, *Xs ): - #int, float or numpy arrays + #int, float or numpy arrays if self._func_eval is None : raise TypeError("not a callable object") else : @@ -140,7 +139,7 @@ def _evaluate( self, *Xs ): for X in Xs: assert np.shape(X) == Xshape return tuple( f( *Xs ) for f in self._func_eval) - + def _jacobian_evaluate( self, *Xs ): #int, float or numpy arrays if self._jac_eval is None: @@ -150,7 +149,7 @@ def _jacobian_evaluate( self, *Xs ): Xshape = np.shape(Xs[0]) for X in Xs: assert np.shape(X) == Xshape - return self._jac_eval( *Xs ) + return self._jac_eval(*Xs) def _jacobian_inv_evaluate( self, *Xs ): #int, float or numpy arrays @@ -161,7 +160,7 @@ def _jacobian_inv_evaluate( self, *Xs ): Xshape = np.shape(Xs[0]) for X in Xs: assert np.shape(X) == Xshape - return self._inv_jac_eval( *Xs ) + return self._inv_jac_eval(*Xs) def _metric_evaluate( self, *Xs ): if self._metric_eval is None: @@ -171,7 +170,7 @@ def _metric_evaluate( self, *Xs ): Xshape = np.shape(Xs[0]) for X in Xs: assert np.shape(X) == Xshape - return self._metric_eval( *Xs ) + return self._metric_eval(*Xs) def _metric_det_evaluate( self, *Xs ): if self._metric_det_eval is None: @@ -181,7 +180,7 @@ def _metric_det_evaluate( self, *Xs ): Xshape = np.shape(Xs[0]) for X in Xs: assert np.shape(X) == Xshape - return self._metric_det_eval( *Xs ) + return self._metric_det_eval(*Xs) def __call__( self, *args ): if len(args) == 1 and isinstance(args[0], BasicDomain): @@ -196,18 +195,18 @@ def jacobian_eval( self, *args ): return self._jacobian_evaluate(*args) else: raise TypeError("Invalid arguments for jacobian_eval") - + def jacobian_inv_eval( self, *args ): if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): return self._jacobian_inv_evaluate(*args) else: raise TypeError("Invalid arguments for jacobian_inv_eval") - + def metric_eval( self, *args ): if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): return self._metric_evaluate(*args) else: - raise TypeError("Invalid arguments for metric_eval") + raise TypeError("Invalid arguments for metric_eval") def metric_det_eval( self, *args ): if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): diff --git a/sympde/topology/base_mapping.py b/sympde/topology/base_mapping.py index 300b203e..c77a788d 100644 --- a/sympde/topology/base_mapping.py +++ b/sympde/topology/base_mapping.py @@ -214,7 +214,7 @@ def __new__(cls, name, dim=None, **kwargs): return obj - + #-------------------------------------------------------------------------- @property def name( self ): diff --git a/sympde/topology/basic.py b/sympde/topology/basic.py index 102e7c02..31c8d7e3 100644 --- a/sympde/topology/basic.py +++ b/sympde/topology/basic.py @@ -8,6 +8,8 @@ from sympy.core.containers import Tuple from sympy.tensor import IndexedBase +from sympde.topology.base_mapping import BaseMapping + #============================================================================== class BasicDomain(Basic): _dim = None @@ -86,12 +88,6 @@ def target(self): def mapping(self): return self._mapping - @mapping.setter - def mapping(self, value): - assert(isinstance(value, BaseMapping)) - self._mapping = value - - @property def logical_domain(self): return self._logical_domain diff --git a/sympde/topology/domain.py b/sympde/topology/domain.py index 214a53d6..79b104f5 100644 --- a/sympde/topology/domain.py +++ b/sympde/topology/domain.py @@ -26,7 +26,7 @@ # TODO fix circular dependency between domain and mapping if TYPE_CHECKING: from sympde.topology.base_mapping import BaseMapping -# TODO add pdim''' +# TODO add pdim iterable_types = (tuple, list, Tuple, Union) @@ -179,7 +179,7 @@ def boundary(self) -> TypeUnion[Union, Boundary]: def mapping(self) -> Optional[BaseMapping]: """The mapping that maps the logical domain to the physical domain""" return self._mapping - + @mapping.setter def mapping(self, value: BaseMapping): """Set the mapping that maps the logical domain to the physical domain""" @@ -342,7 +342,7 @@ def from_file( cls, filename ): if not(ext == '.h5'): raise ValueError('> Only h5 files are supported') # ... - from sympde.topology import BaseMapping + from sympde.topology.base_mapping import BaseMapping h5 = h5py.File( filename, mode='r' ) yml = yaml.load( h5['topology.yml'][()], Loader=yaml.SafeLoader ) diff --git a/sympde/topology/tests/test_base_mapping.py b/sympde/topology/tests/test_base_mapping.py index 71c5a743..66131d9f 100644 --- a/sympde/topology/tests/test_base_mapping.py +++ b/sympde/topology/tests/test_base_mapping.py @@ -7,10 +7,11 @@ from sympy.tensor import IndexedBase from sympy import symbols, simplify -from sympde.topology import BaseMapping, MappedDomain, AffineMapping -from sympde.topology import dx, dy, dz -from sympde.topology import dx1, dx2, dx3 -from sympde.topology import Domain +from sympde.topology.domain import Domain +from sympde.topology.base_mapping import BaseMapping, MappedDomain +from sympde.topology.analytic_mappings import AffineMapping +from sympde.topology.derivatives import dx, dy, dz +from sympde.topology.derivatives import dx1, dx2, dx3 from sympde.topology.base_mapping import Jacobian, Covariant, Contravariant # ... @@ -128,7 +129,7 @@ def test_mapping_2d_2(): F = BaseMapping('F', dim=dim) domain = Domain('Omega', dim=dim) D = F(domain) - + # ... def test_AffineMapping(): print('============ test_AffineMapping ==============') From 786b1c1f3e949ad7ff0621638c2b4a7af5e71789 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Wed, 18 Sep 2024 21:53:03 +0200 Subject: [PATCH 34/39] circular imports --- sympde/topology/basic.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/sympde/topology/basic.py b/sympde/topology/basic.py index 31c8d7e3..e770defc 100644 --- a/sympde/topology/basic.py +++ b/sympde/topology/basic.py @@ -8,8 +8,6 @@ from sympy.core.containers import Tuple from sympy.tensor import IndexedBase -from sympde.topology.base_mapping import BaseMapping - #============================================================================== class BasicDomain(Basic): _dim = None From 59c11e2786c7ca82ade5decd2aa89c9d1c8fb18d Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Wed, 18 Sep 2024 22:01:21 +0200 Subject: [PATCH 35/39] trailing whitespaces --- sympde/topology/base_analytic_mapping.py | 18 +++++++++--------- sympde/topology/tests/test_base_mapping.py | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/sympde/topology/base_analytic_mapping.py b/sympde/topology/base_analytic_mapping.py index 004c8142..96f7f6d8 100644 --- a/sympde/topology/base_analytic_mapping.py +++ b/sympde/topology/base_analytic_mapping.py @@ -128,20 +128,20 @@ def __new__(cls, name, dim=None, **kwargs): def _evaluate_domain( self, domain ): assert(isinstance(domain, BasicDomain)) return MappedDomain(self, domain) - + def _evaluate( self, *Xs ): #int, float or numpy arrays if self._func_eval is None : raise TypeError("not a callable object") else : assert len(Xs)==self.ldim - Xshape = np.shape(Xs[0]) + Xshape = np.shape(Xs[0]) for X in Xs: assert np.shape(X) == Xshape return tuple( f( *Xs ) for f in self._func_eval) def _jacobian_evaluate( self, *Xs ): - #int, float or numpy arrays + #int, float or numpy arrays if self._jac_eval is None: raise TypeError("not a callable object") else : @@ -149,7 +149,7 @@ def _jacobian_evaluate( self, *Xs ): Xshape = np.shape(Xs[0]) for X in Xs: assert np.shape(X) == Xshape - return self._jac_eval(*Xs) + return self._jac_eval(*Xs) def _jacobian_inv_evaluate( self, *Xs ): #int, float or numpy arrays @@ -160,7 +160,7 @@ def _jacobian_inv_evaluate( self, *Xs ): Xshape = np.shape(Xs[0]) for X in Xs: assert np.shape(X) == Xshape - return self._inv_jac_eval(*Xs) + return self._inv_jac_eval(*Xs) def _metric_evaluate( self, *Xs ): if self._metric_eval is None: @@ -170,7 +170,7 @@ def _metric_evaluate( self, *Xs ): Xshape = np.shape(Xs[0]) for X in Xs: assert np.shape(X) == Xshape - return self._metric_eval(*Xs) + return self._metric_eval(*Xs) def _metric_det_evaluate( self, *Xs ): if self._metric_det_eval is None: @@ -180,7 +180,7 @@ def _metric_det_evaluate( self, *Xs ): Xshape = np.shape(Xs[0]) for X in Xs: assert np.shape(X) == Xshape - return self._metric_det_eval(*Xs) + return self._metric_det_eval(*Xs) def __call__( self, *args ): if len(args) == 1 and isinstance(args[0], BasicDomain): @@ -194,13 +194,13 @@ def jacobian_eval( self, *args ): if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): return self._jacobian_evaluate(*args) else: - raise TypeError("Invalid arguments for jacobian_eval") + raise TypeError("Invalid arguments for jacobian_eval") def jacobian_inv_eval( self, *args ): if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): return self._jacobian_inv_evaluate(*args) else: - raise TypeError("Invalid arguments for jacobian_inv_eval") + raise TypeError("Invalid arguments for jacobian_inv_eval") def metric_eval( self, *args ): if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): diff --git a/sympde/topology/tests/test_base_mapping.py b/sympde/topology/tests/test_base_mapping.py index 66131d9f..e192d32d 100644 --- a/sympde/topology/tests/test_base_mapping.py +++ b/sympde/topology/tests/test_base_mapping.py @@ -159,7 +159,7 @@ def teardown_module(): def teardown_function(): from sympy.core import cache cache.clear_cache() - + if __name__ == '__main__' : test_mapping_1d() test_mapping_2d() From 15e7ad6fa821f22ce48f65c0bedbd17edfae4e0c Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Wed, 18 Sep 2024 22:29:13 +0200 Subject: [PATCH 36/39] trailing whitespace --- sympde/topology/base_analytic_mapping.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sympde/topology/base_analytic_mapping.py b/sympde/topology/base_analytic_mapping.py index 96f7f6d8..376f73a7 100644 --- a/sympde/topology/base_analytic_mapping.py +++ b/sympde/topology/base_analytic_mapping.py @@ -146,13 +146,13 @@ def _jacobian_evaluate( self, *Xs ): raise TypeError("not a callable object") else : assert len(Xs)==self.ldim - Xshape = np.shape(Xs[0]) + Xshape = np.shape(Xs[0]) for X in Xs: assert np.shape(X) == Xshape return self._jac_eval(*Xs) - + def _jacobian_inv_evaluate( self, *Xs ): - #int, float or numpy arrays + #int, float or numpy arrays if self._inv_jac_eval is None: raise TypeError("not a callable object") else : @@ -194,7 +194,7 @@ def jacobian_eval( self, *args ): if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): return self._jacobian_evaluate(*args) else: - raise TypeError("Invalid arguments for jacobian_eval") + raise TypeError("Invalid arguments for jacobian_eval") def jacobian_inv_eval( self, *args ): if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): From fc51c95b3aedd930d317b1e752c61109d8913d5d Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Wed, 18 Sep 2024 22:35:34 +0200 Subject: [PATCH 37/39] trailing whitespace --- sympde/topology/base_analytic_mapping.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sympde/topology/base_analytic_mapping.py b/sympde/topology/base_analytic_mapping.py index 376f73a7..0740e713 100644 --- a/sympde/topology/base_analytic_mapping.py +++ b/sympde/topology/base_analytic_mapping.py @@ -157,11 +157,11 @@ def _jacobian_inv_evaluate( self, *Xs ): raise TypeError("not a callable object") else : assert len(Xs)==self.ldim - Xshape = np.shape(Xs[0]) + Xshape = np.shape(Xs[0]) for X in Xs: assert np.shape(X) == Xshape return self._inv_jac_eval(*Xs) - + def _metric_evaluate( self, *Xs ): if self._metric_eval is None: raise TypeError("not a callable object") @@ -194,7 +194,7 @@ def jacobian_eval( self, *args ): if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): return self._jacobian_evaluate(*args) else: - raise TypeError("Invalid arguments for jacobian_eval") + raise TypeError("Invalid arguments for jacobian_eval") def jacobian_inv_eval( self, *args ): if all(isinstance(arg, (int, float, Symbol, np.ndarray)) for arg in args): From 49dc124397e2c6310d719ffefca1456c1d0e8a37 Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Wed, 18 Sep 2024 22:43:12 +0200 Subject: [PATCH 38/39] trailing whitespace --- sympde/topology/base_analytic_mapping.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sympde/topology/base_analytic_mapping.py b/sympde/topology/base_analytic_mapping.py index 0740e713..51fa99fa 100644 --- a/sympde/topology/base_analytic_mapping.py +++ b/sympde/topology/base_analytic_mapping.py @@ -167,11 +167,11 @@ def _metric_evaluate( self, *Xs ): raise TypeError("not a callable object") else : assert len(Xs)==self.ldim - Xshape = np.shape(Xs[0]) + Xshape = np.shape(Xs[0]) for X in Xs: assert np.shape(X) == Xshape return self._metric_eval(*Xs) - + def _metric_det_evaluate( self, *Xs ): if self._metric_det_eval is None: raise TypeError("not a callable object") @@ -181,7 +181,7 @@ def _metric_det_evaluate( self, *Xs ): for X in Xs: assert np.shape(X) == Xshape return self._metric_det_eval(*Xs) - + def __call__( self, *args ): if len(args) == 1 and isinstance(args[0], BasicDomain): return self._evaluate_domain(args[0]) From 4638b8e2227e341b5970642335c5caca5ff2964b Mon Sep 17 00:00:00 2001 From: Lagarrigue Patrick Date: Wed, 18 Sep 2024 22:49:09 +0200 Subject: [PATCH 39/39] trailing whitespace --- sympde/topology/base_analytic_mapping.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sympde/topology/base_analytic_mapping.py b/sympde/topology/base_analytic_mapping.py index 51fa99fa..55c49710 100644 --- a/sympde/topology/base_analytic_mapping.py +++ b/sympde/topology/base_analytic_mapping.py @@ -177,7 +177,7 @@ def _metric_det_evaluate( self, *Xs ): raise TypeError("not a callable object") else : assert len(Xs)==self.ldim - Xshape = np.shape(Xs[0]) + Xshape = np.shape(Xs[0]) for X in Xs: assert np.shape(X) == Xshape return self._metric_det_eval(*Xs)