Ejemplo n.º 1
0
    def __init__(self, fn_input, fn_condition, fn_print=None, *args, **kwargs):

        _fn_input = _Function.convert(fn_input)
        if _fn_input == None:
            raise ValueError( "provided 'fn_input' must a 'Function' or convertible.")
        self._fn_input = _fn_input

        _fn_condition = _Function.convert(fn_condition)
        if _fn_condition == None:
            raise ValueError( "provided 'fn_condition' must a 'Function' or convertible.")
        self._fn_condition = _fn_condition

        if fn_print != None:
            _fn_print = _Function.convert(fn_print)
            if _fn_print == None:
                raise ValueError( "provided 'fn_print' must a 'Function' or convertible.")
            self._fn_print = _fn_print

        # create instance
        if not fn_print:
            self._fncself = _cfn.CustomException( self._fn_input._fncself, self._fn_condition._fncself )
        else:
            self._fncself = _cfn.CustomException( self._fn_input._fncself, self._fn_condition._fncself, self._fn_print._fncself )

        # build parent
        # note that we only pass in _fn_input as the argument_fns, as _fn_condition & _fn_print are
        # not dynamically relevant... it is only used for performing the exception check.
        super(CustomException,self).__init__(argument_fns=[_fn_input,],**kwargs)
Ejemplo n.º 2
0
    def __init__(self, fn_stress, fn_stresslimit, fn_inputviscosity, *args, **kwargs):

        _fn_stress = _Function.convert(fn_stress)
        if _fn_stress == None:
            raise ValueError( "Provided 'fn_stress' must a 'Function' or convertible type.")
        self._fn_stress = _fn_stress
        
        _fn_stresslimit = _Function.convert(fn_stresslimit)
        if _fn_stresslimit == None:
            raise ValueError( "Provided 'fn_stresslimit' must a 'Function' or convertible type.")
        self._fn_stresslimit = _fn_stresslimit
        
        _fn_inputviscosity = _Function.convert(fn_inputviscosity)
        if _fn_inputviscosity == None:
            raise ValueError( "Provided 'fn_inputviscosity' must a 'Function' or convertible type.")
        self._fn_inputviscosity = _fn_inputviscosity

        # grab second inv of stress
        secondInvFn = _tensor.second_invariant(self._fn_stress)

        # create conditional
        self._conditional = _branching.conditional( [ ( secondInvFn > _fn_stresslimit , fn_inputviscosity*_fn_stresslimit/secondInvFn ),    # if over limit, reduce viscosity
                                                      ( True                          , fn_inputviscosity                             ) ] ) # else return viscosity

        # this function is not based on a c function itself, so instead point the c pointer to the conditionals.
        self._fncself = self._conditional._fncself
        
        # build parent
        super(stress_limiting_viscosity,self).__init__(argument_fns=[_fn_stress,_fn_stresslimit,_fn_inputviscosity],**kwargs)
Ejemplo n.º 3
0
    def __init__(self, clauses, *args, **kwargs):
        # error check mapping
        if not isinstance(clauses, (list, tuple)):
            raise TypeError(
                "'clauses' object passed in must be of python type 'list' or 'tuple'"
            )

        self._clauses = []
        funcSet = set()
        for clause in clauses:
            if not isinstance(clause, (list, tuple)):
                raise TypeError(
                    "Clauses within the clause list must be of python type 'list' or 'tuple'"
                )
            if len(clause) != 2:
                raise ValueError("Clauses tuples must be of length 2.")
            conditionFn = _Function.convert(clause[0])
            funcSet.add(conditionFn)
            resultantFn = _Function.convert(clause[1])
            funcSet.add(resultantFn)
            self._clauses.append((conditionFn, resultantFn))

        # build parent
        self._fncself = _cfn.Conditional()

        super(conditional, self).__init__(argument_fns=funcSet, **kwargs)

        # insert clause into c object now
        for clause in self._clauses:
            self._fncself.insert(clause[0]._fncself, clause[1]._fncself)
Ejemplo n.º 4
0
    def __init__(self, fn_stress, fn_stresslimit, fn_inputviscosity, *args, **kwargs):

        _fn_stress = _Function.convert(fn_stress)
        if _fn_stress == None:
            raise ValueError( "Provided 'fn_stress' must a 'Function' or convertible type.")
        self._fn_stress = _fn_stress
        
        _fn_stresslimit = _Function.convert(fn_stresslimit)
        if _fn_stresslimit == None:
            raise ValueError( "Provided 'fn_stresslimit' must a 'Function' or convertible type.")
        self._fn_stresslimit = _fn_stresslimit
        
        _fn_inputviscosity = _Function.convert(fn_inputviscosity)
        if _fn_inputviscosity == None:
            raise ValueError( "Provided 'fn_inputviscosity' must a 'Function' or convertible type.")
        self._fn_inputviscosity = _fn_inputviscosity

        # grab second inv of stress
        secondInvFn = _tensor.second_invariant(self._fn_stress)

        # create conditional
        self._conditional = _branching.conditional( [ ( secondInvFn > _fn_stresslimit , fn_inputviscosity*_fn_stresslimit/secondInvFn ),    # if over limit, reduce viscosity
                                                      ( True                          , fn_inputviscosity                             ) ] ) # else return viscosity

        # this function is not based on a c function itself, so instead point the c pointer to the conditionals.
        self._fncself = self._conditional._fncself
        
        # build parent
        super(stress_limiting_viscosity,self).__init__(argument_fns=[_fn_stress,_fn_stresslimit,_fn_inputviscosity],**kwargs)
Ejemplo n.º 5
0
    def __init__(self, clauses, *args, **kwargs):
        # error check mapping
        if not isinstance(clauses, (list,tuple)):
            raise TypeError("'clauses' object passed in must be of python type 'list' or 'tuple'")

        self._clauses = []
        funcSet = set()
        for clause in clauses:
            if not isinstance(clause, (list,tuple)):
                raise TypeError("Clauses within the clause list must be of python type 'list' or 'tuple'")
            if len(clause) != 2:
                raise ValueError("Clauses tuples must be of length 2.")
            conditionFn = _Function.convert(clause[0])
            funcSet.add(conditionFn)
            resultantFn    = _Function.convert(clause[1])
            funcSet.add(resultantFn)
            self._clauses.append( (conditionFn,resultantFn) )
        
        # build parent
        self._fncself = _cfn.Conditional()

        super(conditional,self).__init__(argument_fns=funcSet,**kwargs)

        # insert clause into c object now
        for clause in self._clauses:
            self._fncself.insert( clause[0]._fncself, clause[1]._fncself )
Ejemplo n.º 6
0
 def __init__(self, fn1, fn2, **kwargs):
     fn1fn = _Function._CheckIsFnOrConvertOrThrow( fn1 )
     if not isinstance( fn1fn, _Function ):
         raise TypeError("Functions must be of type (or convertible to) 'Function'.")
     fn2fn = _Function._CheckIsFnOrConvertOrThrow( fn2 )
     if not isinstance( fn2fn, _Function ):
         raise TypeError("Functions must be of type (or convertible to) 'Function'.")
     
     self._fn1 = fn1fn
     self._fn2 = fn2fn
     # ok finally lets create the fn
     self._fncself = _cfn.MathBinary(self._fn1._fncself, self._fn2._fncself,  _cfn.MathBinary.fmax )
     # build parent
     super(max,self).__init__(argument_fns=[fn1fn,fn2fn],**kwargs)
Ejemplo n.º 7
0
    def __init__(self,
                 fn_key=None,
                 mapping=None,
                 fn_default=None,
                 *args,
                 **kwargs):

        if not mapping:
            raise ValueError(
                "You must specify a mapping via the 'mapping' parameter.")
        if not isinstance(mapping, dict):
            raise TypeError(
                "'mapping' object passed in must be of python type 'dict'")

        if not fn_key:
            raise ValueError(
                "You must specify a key function via the 'fn_key' parameter.")
        fn_key = _Function.convert(fn_key)

        self.fn_default = _Function.convert(fn_default)
        if self.fn_default == None:
            fn_defaultCself = None
        else:
            fn_defaultCself = self.fn_default._fncself
        # create instance
        self._fncself = _cfn.Map(fn_key._fncself, fn_defaultCself)

        self._fn_key = fn_key
        self._mapping = mapping

        # build parent
        super(map, self).__init__(argument_fns=[fn_key, self.fn_default],
                                  **kwargs)

        self._map = {}

        for key, value in mapping.iteritems():
            if not isinstance(key, int) or key < 0:
                raise ValueError(
                    "Key '{}' not valid. Mapping keys must be unsigned integers."
                    .format(key))
            funcVal = _Function.convert(value)
            if funcVal == None:
                raise ValueError("'None' is not valid for mapped functions.")

            self._underlyingDataItems.update(
                funcVal._underlyingDataItems)  # update dictionary
            # insert mapping and keep handles in py dict
            self._map[key] = funcVal
            self._fncself.insert(key, funcVal._fncself)
Ejemplo n.º 8
0
    def __init__(self, fn1, fn2, **kwargs):
        fn1fn = _Function.convert( fn1 )
        if not isinstance( fn1fn, _Function ):
            raise TypeError("Functions must be of type (or convertible to) 'Function'.")
        fn2fn = _Function.convert( fn2 )
        if not isinstance( fn2fn, _Function ):
            raise TypeError("Functions must be of type (or convertible to) 'Function'.")

        self._fn1 = fn1fn
        self._fn2 = fn2fn
        # ok finally lets create the fn
        self._fncself = _cfn.Min(self._fn1._fncself, self._fn2._fncself )
        # build parent
        super(min,self).__init__(argument_fns=[fn1fn,fn2fn],**kwargs)
Ejemplo n.º 9
0
    def __init__(self, vertices, fn=None, *args, **kwargs):

        if fn:
            self._fn = _Function.convert(fn)
        else:
            self._fn = _input()

        if not isinstance(vertices, _np.ndarray):
            raise TypeError("Provided 'vertices' must be a numpy array.")
        if len(vertices.shape) != 2:
            raise TypeError("Provided 'vertices' array must be 2 dimensional.")
        if vertices.shape[0] < 3:
            raise TypeError(
                "Provided 'vertices' array must contain at least 3 vertices.")
        if vertices.shape[1] != 2:
            raise TypeError(
                "Provided 'vertices' array must contain 2d vectors.")

        # ok, need to create a 3d array from the 2d array.. create array of required size
        threedeearray = _np.zeros((vertices.shape[0], 3))
        # now copy
        threedeearray[:, 0:2] = vertices[:, 0:2]

        # create instance
        self._fncself = _cfn.Polygon(self._fn._fncself, threedeearray)

        # build parent
        super(Polygon, self).__init__(argument_fns=[
            fn,
        ], *args, **kwargs)
Ejemplo n.º 10
0
    def __init__(self, vertices, fn=None, *args, **kwargs):

        if fn:
            self._fn = _Function._CheckIsFnOrConvertOrThrow(fn)
        else:
            self._fn = input()
        
        if not isinstance(vertices, np.ndarray):
            raise TypeError( "Provided 'vertices' must be a numpy array." )
        if len(vertices.shape) != 2:
            raise TypeError( "Provided 'vertices' array must be 2 dimensional." )
        if vertices.shape[0] < 3:
            raise TypeError( "Provided 'vertices' array must contain at least 3 vertices." )
        if vertices.shape[1] != 2:
            raise TypeError( "Provided 'vertices' array must contain 2d vectors." )
        
        # ok, need to create a 3d array from the 2d array.. create array of required size
        threedeearray = np.zeros( (vertices.shape[0],3) )
        # now copy
        threedeearray[:,0:2] = vertices[:,0:2]

        # create instance
        import random
        import string
        self._id = "".join(random.choice(string.ascii_uppercase + string.digits) for _ in range(8))
        self._fncself = _cfn.Polygon( self._fn._fncself, threedeearray, self._id )

        # build parent
        super(Polygon,self).__init__(argument_fns=[fn,], *args, **kwargs)
Ejemplo n.º 11
0
    def __init__(self, vertices, fn=None, *args, **kwargs):

        if fn:
            self._fn = _Function.convert(fn)
        else:
            self._fn = _input()
        
        if not isinstance(vertices, _np.ndarray):
            raise TypeError( "Provided 'vertices' must be a numpy array." )
        if len(vertices.shape) != 2:
            raise TypeError( "Provided 'vertices' array must be 2 dimensional." )
        if vertices.shape[0] < 3:
            raise TypeError( "Provided 'vertices' array must contain at least 3 vertices." )
        if vertices.shape[1] != 2:
            raise TypeError( "Provided 'vertices' array must contain 2d vectors." )
        
        # ok, need to create a 3d array from the 2d array.. create array of required size
        threedeearray = _np.zeros( (vertices.shape[0],3) )
        # now copy
        threedeearray[:,0:2] = vertices[:,0:2]

        # create instance
        self._fncself = _cfn.Polygon( self._fn._fncself, threedeearray)

        # build parent
        super(Polygon,self).__init__(argument_fns=[fn,], *args, **kwargs)
Ejemplo n.º 12
0
    def __init__(self, fn_key=None, mapping=None, fn_default=None, keyFunc=None, mappingDict=None, defaultFunc=None, *args, **kwargs):
        
        #DEPRECATE
        if keyFunc:
            raise RuntimeError("Note that the 'keyFunc' parameter has been renamed to 'fn_key'.")
        if mappingDict:
            raise RuntimeError("Note that the 'mappingDict' parameter has been renamed to 'mapping'.")
        if defaultFunc:
            raise RuntimeError("Note that the 'defaultFunc' parameter has been renamed to 'fn_default'.")
            
        if not mapping:
            raise ValueError("You must specify a mapping via the 'mapping' parameter.")
        if not isinstance(mapping, dict):
            raise TypeError("'mapping' object passed in must be of python type 'dict'")

        if not fn_key:
            raise ValueError("You must specify a key function via the 'fn_key' parameter.")
        fn_key = _Function._CheckIsFnOrConvertOrThrow(fn_key)

        self.fn_default = _Function._CheckIsFnOrConvertOrThrow(fn_default)
        if self.fn_default == None:
            fn_defaultCself = None
        else:
            fn_defaultCself = self.fn_default._fncself
        # create instance
        self._fncself = _cfn.Map( fn_key._fncself, fn_defaultCself )

        self._fn_key  = fn_key
        self._mapping = mapping

        # build parent
        super(map,self).__init__(argument_fns=[fn_key,self.fn_default],**kwargs)
        
        self._map = {}

        for key, value in mapping.iteritems():
            if not isinstance(key, int) or key < 0:
                raise ValueError("Key '{}' not valid. Mapping keys must be unsigned integers.".format(key))
            funcVal = _Function._CheckIsFnOrConvertOrThrow(value)
            if funcVal == None:
                raise ValueError("'None' is not valid for mapped functions.")
            
            self._underlyingDataItems.update(funcVal._underlyingDataItems) # update dictionary
            # insert mapping and keep handles in py dict
            self._map[key] = funcVal
            self._fncself.insert( key, funcVal._fncself )
Ejemplo n.º 13
0
    def __init__(self, fn1, fn2, **kwargs):
        # lets convert integer powers to floats
        if isinstance(fn2, int):
            fn2 = float(fn2)
        fn1fn = _Function.convert( fn1 )
        if not isinstance( fn1fn, _Function ):
            raise TypeError("Functions must be of type (or convertible to) 'Function'.")
        fn2fn = _Function.convert( fn2 )
        if not isinstance( fn2fn, _Function ):
            raise TypeError("Functions must be of type (or convertible to) 'Function'.")

        self._fn1 = fn1fn
        self._fn2 = fn2fn
        # ok finally lets create the fn
        self._fncself = _cfn.MathBinary(self._fn1._fncself, self._fn2._fncself,  _cfn.MathBinary.pow )
        # build parent
        super(pow,self).__init__(argument_fns=[fn1fn,fn2fn],**kwargs)
Ejemplo n.º 14
0
    def __init__(self, fn1, fn2, **kwargs):
        fn1fn = _Function._CheckIsFnOrConvertOrThrow(fn1)
        if not isinstance(fn1fn, _Function):
            raise TypeError(
                "Functions must be of type (or convertible to) 'Function'.")
        fn2fn = _Function._CheckIsFnOrConvertOrThrow(fn2)
        if not isinstance(fn2fn, _Function):
            raise TypeError(
                "Functions must be of type (or convertible to) 'Function'.")

        self._fn1 = fn1fn
        self._fn2 = fn2fn
        # ok finally lets create the fn
        self._fncself = _cfn.MathBinary(self._fn1._fncself, self._fn2._fncself,
                                        _cfn.MathBinary.fmax)
        # build parent
        super(max, self).__init__(argument_fns=[fn1fn, fn2fn], **kwargs)
Ejemplo n.º 15
0
    def __init__(self, fn, *args, **kwargs):

        _fn = _Function._CheckIsFnOrConvertOrThrow(fn)
        if _fn == None:
            raise ValueError( "provided 'fn' must a 'Function' or convertible.")
        self._fn = _fn

        # create instance
        self._fncself = _cfn.TensorFunc( self._fn._fncself, _cfn.TensorFunc.second_invariant )

        # build parent
        super(second_invariant,self).__init__(argument_fns=[fn,],**kwargs)
Ejemplo n.º 16
0
    def __init__(self, fn, *args, **kwargs):

        _fn = _Function._CheckIsFnOrConvertOrThrow(fn)
        if _fn == None:
            raise ValueError( "provided 'fn' must a 'Function' or convertible.")
        self._fn = _fn

        # create instance
        self._fncself = _cfn.SafeMaths( self._fn._fncself )

        # build parent
        super(SafeMaths,self).__init__(argument_fns=[_fn,],**kwargs)
Ejemplo n.º 17
0
    def __init__(self, fn, *args, **kwargs):

        _fn = _Function.convert(fn)
        if _fn == None:
            raise ValueError( "provided 'fn' must a 'Function' or convertible.")
        self._fn = _fn

        # create instance
        self._fncself = _cfn.TensorFunc( self._fn._fncself, _cfn.TensorFunc.get_antisymmetric )

        # build parent
        super(antisymmetric,self).__init__(argument_fns=[fn,],**kwargs)
Ejemplo n.º 18
0
    def __init__(self, fn, *args, **kwargs):

        _fn = _Function.convert(fn)
        if _fn == None:
            raise ValueError( "provided 'fn' must a 'Function' or convertible.")
        self._fn = _fn

        # create instance
        self._fncself = _cfn.MinMax( self._fn._fncself )

        # build parent
        super(min_max,self).__init__(argument_fns=[fn,],**kwargs)
Ejemplo n.º 19
0
    def __init__(self, fn=None, *args, **kwargs):

        self._fn = _Function._CheckIsFnOrConvertOrThrow(fn)

        fncself = None
        if self._fn:
            fncself = self._fn._fncself

        # create instance
        self._fncself = _cfn.MathUnary_abs( fncself )

        # build parent
        super(abs,self).__init__(argument_fns=[fn,],**kwargs)
Ejemplo n.º 20
0
    def __init__(self, fn=None, *args, **kwargs):

        self._fn = _Function.convert(fn)

        fncself = None
        if self._fn:
            fncself = self._fn._fncself

        # create instance
        self._fncself = _cfn.MathUnary_sin( fncself )

        # build parent
        super(sin,self).__init__(argument_fns=[fn,],**kwargs)
Ejemplo n.º 21
0
    def __init__(self, fn=None, *args, **kwargs):

        self._fn = _Function.convert(fn)

        fncself = None
        if self._fn:
            fncself = self._fn._fncself

        # create instance
        self._fncself = _cfn.MathUnary_sin( fncself )

        # build parent
        super(sin,self).__init__(argument_fns=[fn,],**kwargs)
Ejemplo n.º 22
0
    def __init__(self, fn, *args, **kwargs):

        _fn = _Function.convert(fn)
        if _fn == None:
            raise ValueError("provided 'fn' must a 'Function' or convertible.")
        self._fn = _fn

        # create instance
        self._fncself = _cfn.MinMax(self._fn._fncself)

        # build parent
        super(min_max, self).__init__(argument_fns=[
            fn,
        ], **kwargs)
Ejemplo n.º 23
0
    def __init__(self, fn, *args, **kwargs):

        _fn = _Function._CheckIsFnOrConvertOrThrow(fn)
        if _fn == None:
            raise ValueError("provided 'fn' must a 'Function' or convertible.")
        self._fn = _fn

        # create instance
        self._fncself = _cfn.SafeMaths(self._fn._fncself)

        # build parent
        super(SafeMaths, self).__init__(argument_fns=[
            _fn,
        ], **kwargs)
Ejemplo n.º 24
0
    def __init__(self, fn_stress, fn_stresslimit, fn_inputviscosity, stressFn=None, stressLimitFn=None, inputViscosityFn=None, *args, **kwargs):

        # DEPRECATE 1/16
        if stressFn:
            raise RuntimeError("Note that the 'stressFn' parameter has been renamed to 'fn_stress'.")
        if stressLimitFn:
            raise RuntimeError("Note that the 'stressLimitFn' parameter has been renamed to 'fn_stresslimit'.")
        if inputViscosityFn:
            raise RuntimeError("Note that the 'inputViscosityFn' parameter has been renamed to 'fn_inputviscosity'.")

        _fn_stress = _Function._CheckIsFnOrConvertOrThrow(fn_stress)
        if _fn_stress == None:
            raise ValueError( "Provided 'fn_stress' must a 'Function' or convertible type.")
        self._fn_stress = _fn_stress
        
        _fn_stresslimit = _Function._CheckIsFnOrConvertOrThrow(fn_stresslimit)
        if _fn_stresslimit == None:
            raise ValueError( "Provided 'fn_stresslimit' must a 'Function' or convertible type.")
        self._fn_stresslimit = _fn_stresslimit
        
        _fn_inputviscosity = _Function._CheckIsFnOrConvertOrThrow(fn_inputviscosity)
        if _fn_inputviscosity == None:
            raise ValueError( "Provided 'fn_inputviscosity' must a 'Function' or convertible type.")
        self._fn_inputviscosity = _fn_inputviscosity

        # grab second inv of stress
        secondInvFn = _tensor.second_invariant(self._fn_stress)

        # create conditional
        self._conditional = _branching.conditional( [ ( secondInvFn > _fn_stresslimit , fn_inputviscosity*_fn_stresslimit/secondInvFn ),    # if over limit, reduce viscosity
                                                      ( True                          , fn_inputviscosity                             ) ] ) # else return viscosity

        # this function is not based on a c function itself, so instead point the c pointer to the conditionals.
        self._fncself = self._conditional._fncself
        
        # build parent
        super(stress_limiting_viscosity,self).__init__(argument_fns=[_fn_stress,_fn_stresslimit,_fn_inputviscosity],**kwargs)
Ejemplo n.º 25
0
    def __init__(self, fn_input, fn_condition, fn_print=None, *args, **kwargs):

        _fn_input = _Function.convert(fn_input)
        if _fn_input == None:
            raise ValueError(
                "provided 'fn_input' must a 'Function' or convertible.")
        self._fn_input = _fn_input

        _fn_condition = _Function.convert(fn_condition)
        if _fn_condition == None:
            raise ValueError(
                "provided 'fn_condition' must a 'Function' or convertible.")
        self._fn_condition = _fn_condition

        if fn_print != None:
            _fn_print = _Function.convert(fn_print)
            if _fn_print == None:
                raise ValueError(
                    "provided 'fn_print' must a 'Function' or convertible.")
            self._fn_print = _fn_print

        # create instance
        if not fn_print:
            self._fncself = _cfn.CustomException(self._fn_input._fncself,
                                                 self._fn_condition._fncself)
        else:
            self._fncself = _cfn.CustomException(self._fn_input._fncself,
                                                 self._fn_condition._fncself,
                                                 self._fn_print._fncself)

        # build parent
        # note that we only pass in _fn_input as the argument_fns, as _fn_condition & _fn_print are
        # not dynamically relevant... it is only used for performing the exception check.
        super(CustomException, self).__init__(argument_fns=[
            _fn_input,
        ],
                                              **kwargs)
Ejemplo n.º 26
0
    def __init__(self, fn, *args, **kwargs):

        _fn = _Function._CheckIsFnOrConvertOrThrow(fn)
        if _fn == None:
            raise ValueError("provided 'fn' must a 'Function' or convertible.")
        self._fn = _fn

        # create instance
        self._fncself = _cfn.TensorFunc(self._fn._fncself,
                                        _cfn.TensorFunc.second_invariant)

        # build parent
        super(second_invariant, self).__init__(argument_fns=[
            fn,
        ], **kwargs)
Ejemplo n.º 27
0
    def __init__(self, fn=None, *args, **kwargs):

        self._fn = _Function._CheckIsFnOrConvertOrThrow(fn)

        fncself = None
        if self._fn:
            fncself = self._fn._fncself

        # create instance
        self._fncself = _cfn.MathUnary_abs(fncself)

        # build parent
        super(abs, self).__init__(argument_fns=[
            fn,
        ], **kwargs)
Ejemplo n.º 28
0
    def __init__(self, vertices, fn=None, *args, **kwargs):

        if fn:
            self._fn = _Function._CheckIsFnOrConvertOrThrow(fn)
        else:
            self._fn = input()

        if not isinstance(vertices, np.ndarray):
            raise TypeError("Provided 'vertices' must be a numpy array.")
        if len(vertices.shape) != 2:
            raise TypeError("Provided 'vertices' array must be 2 dimensional.")
        if vertices.shape[0] < 3:
            raise TypeError(
                "Provided 'vertices' array must contain at least 3 vertices.")
        if vertices.shape[1] != 2:
            raise TypeError(
                "Provided 'vertices' array must contain 2d vectors.")

        # ok, need to create a 3d array from the 2d array.. create array of required size
        threedeearray = np.zeros((vertices.shape[0], 3))
        # now copy
        threedeearray[:, 0:2] = vertices[:, 0:2]

        # create instance
        import random
        import string
        self._id = "".join(
            random.choice(string.ascii_uppercase + string.digits)
            for _ in range(8))
        self._fncself = _cfn.Polygon(self._fn._fncself, threedeearray,
                                     self._id)

        # build parent
        super(Polygon, self).__init__(argument_fns=[
            fn,
        ], *args, **kwargs)
Ejemplo n.º 29
0
    def __init__(self,
                 fn_stress,
                 fn_stresslimit,
                 fn_inputviscosity,
                 stressFn=None,
                 stressLimitFn=None,
                 inputViscosityFn=None,
                 *args,
                 **kwargs):

        # DEPRECATE 1/16
        if stressFn:
            raise RuntimeError(
                "Note that the 'stressFn' parameter has been renamed to 'fn_stress'."
            )
        if stressLimitFn:
            raise RuntimeError(
                "Note that the 'stressLimitFn' parameter has been renamed to 'fn_stresslimit'."
            )
        if inputViscosityFn:
            raise RuntimeError(
                "Note that the 'inputViscosityFn' parameter has been renamed to 'fn_inputviscosity'."
            )

        _fn_stress = _Function._CheckIsFnOrConvertOrThrow(fn_stress)
        if _fn_stress == None:
            raise ValueError(
                "Provided 'fn_stress' must a 'Function' or convertible type.")
        self._fn_stress = _fn_stress

        _fn_stresslimit = _Function._CheckIsFnOrConvertOrThrow(fn_stresslimit)
        if _fn_stresslimit == None:
            raise ValueError(
                "Provided 'fn_stresslimit' must a 'Function' or convertible type."
            )
        self._fn_stresslimit = _fn_stresslimit

        _fn_inputviscosity = _Function._CheckIsFnOrConvertOrThrow(
            fn_inputviscosity)
        if _fn_inputviscosity == None:
            raise ValueError(
                "Provided 'fn_inputviscosity' must a 'Function' or convertible type."
            )
        self._fn_inputviscosity = _fn_inputviscosity

        # grab second inv of stress
        secondInvFn = _tensor.second_invariant(self._fn_stress)

        # create conditional
        self._conditional = _branching.conditional([
            (secondInvFn > _fn_stresslimit, fn_inputviscosity *
             _fn_stresslimit / secondInvFn),  # if over limit, reduce viscosity
            (True, fn_inputviscosity)
        ])  # else return viscosity

        # this function is not based on a c function itself, so instead point the c pointer to the conditionals.
        self._fncself = self._conditional._fncself

        # build parent
        super(stress_limiting_viscosity, self).__init__(
            argument_fns=[_fn_stress, _fn_stresslimit, _fn_inputviscosity],
            **kwargs)