Пример #1
0
def variable(table_entry,units,axis_ids,type='f',missing_value=None,tolerance = 1.e-4,positive=None,original_name=None,history=None,comment=None):

    if not isinstance(table_entry,str):
        raise Exception, "Error you must pass a string for the variable table_entry"

    if not isinstance(units,str):
        raise Exception, "Error you must pass a string for the variable units"

    if original_name is not None:
        if not isinstance(original_name,str):
            raise Exception, "Error you must pass a string for the variable original_name"
    else:
        original_name = ""

    if history is not None:
        if not isinstance(history,str):
            raise Exception, "Error you must pass a string for the variable history"
    else:
        history = ""

    if comment is not None:
        if not isinstance(comment,str):
            raise Exception, "Error you must pass a string for the variable comment"
    else:
        comment = ""

    if numpy.ma.isMA(axis_ids):
        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
    elif has_oldma and numpy.oldnumeric.ma.isMA(axis_ids):
        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
    elif has_cdms2 and cdms2.isVariable(axis_ids):
        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
    elif isinstance(axis_ids,(list,tuple)):
        axis_ids = numpy.ascontiguousarray(axis_ids)
    elif not isinstance(axis_ids, numpy.ndarray):
        raise Exception, "Error could not convert axis_ids list to a numpy array"

    if numpy.ndim(axis_ids)>1:
        raise Exception, "error axis_ids list/array must be 1D"

    if not isinstance(type,str):
        raise Exception, "error tpye must a a string"
    type = type.lower()
    if type == 's':
        type ='c'
    if not type in ["c","d","f","l","i"]:
        raise Exception, 'error unknown type: "%s", must be one of: "c","d","f","l","i"'

    ndims = len(axis_ids)

    if positive is None:
        positive = ""
    else:
        positive = str(positive)

    if history is None:
        history = ""
    else:
        history = str(history)

    if comment is None:
        comment = ""
    else:
        comment = str(comment)

    if not isinstance(tolerance,(float,int,numpy.float,numpy.float32,numpy.int,numpy.int32)):
        raise Exception, "error tolerance must be a number"

    tolerance = float(tolerance)

    if missing_value is not None:
        if not isinstance(missing_value,(float,int,numpy.float,numpy.float32,numpy.int,numpy.int32)):
            raise Exception, "error missing_value must be a number, you passed: %s" % repr(missing_value)

        missing_value = float(missing_value)

    axis_ids=axis_ids.astype('i')
    return _cmor.variable(table_entry,units,ndims,axis_ids,type,missing_value,tolerance,positive,original_name,history,comment)
Пример #2
0
def variable(table_entry,
             units,
             axis_ids,
             type='f',
             missing_value=None,
             tolerance=1.e-4,
             positive=None,
             original_name=None,
             history=None,
             comment=None):

    if not isinstance(table_entry, str):
        raise Exception, "Error you must pass a string for the variable table_entry"

    if not isinstance(units, str):
        raise Exception, "Error you must pass a string for the variable units"

    if original_name is not None:
        if not isinstance(original_name, str):
            raise Exception, "Error you must pass a string for the variable original_name"
    else:
        original_name = ""

    if history is not None:
        if not isinstance(history, str):
            raise Exception, "Error you must pass a string for the variable history"
    else:
        history = ""

    if comment is not None:
        if not isinstance(comment, str):
            raise Exception, "Error you must pass a string for the variable comment"
    else:
        comment = ""

    if numpy.ma.isMA(axis_ids):
        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
    elif has_oldma and numpy.oldnumeric.ma.isMA(axis_ids):
        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
    elif has_cdms2 and cdms2.isVariable(axis_ids):
        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
    elif isinstance(axis_ids, (list, tuple)):
        axis_ids = numpy.ascontiguousarray(axis_ids)
    elif not isinstance(axis_ids, numpy.ndarray):
        raise Exception, "Error could not convert axis_ids list to a numpy array"

    if numpy.ndim(axis_ids) > 1:
        raise Exception, "error axis_ids list/array must be 1D"

    if not isinstance(type, str):
        raise Exception, "error tpye must a a string"
    type = type.lower()
    if type == 's':
        type = 'c'
    if not type in ["c", "d", "f", "l", "i"]:
        raise Exception, 'error unknown type: "%s", must be one of: "c","d","f","l","i"'

    ndims = len(axis_ids)

    if positive is None:
        positive = ""
    else:
        positive = str(positive)

    if history is None:
        history = ""
    else:
        history = str(history)

    if comment is None:
        comment = ""
    else:
        comment = str(comment)

    if not isinstance(
            tolerance,
        (float, int, numpy.float, numpy.float32, numpy.int, numpy.int32)):
        raise Exception, "error tolerance must be a number"

    tolerance = float(tolerance)

    if missing_value is not None:
        if not isinstance(
                missing_value,
            (float, int, numpy.float, numpy.float32, numpy.int, numpy.int32)):
            raise Exception, "error missing_value must be a number, you passed: %s" % repr(
                missing_value)

        missing_value = float(missing_value)

    axis_ids = axis_ids.astype('i')
    return _cmor.variable(table_entry, units, ndims, axis_ids, type,
                          missing_value, tolerance, positive, original_name,
                          history, comment)