def applyOperation( self, input_variable, operation ): result = None try: self.setTimeBounds( input_variable ) operator = None # pydevd.settrace('localhost', port=8030, stdoutToServer=False, stderrToServer=True) wpsLog.debug( " $$$ ApplyOperation: %s " % str( operation ) ) if operation is not None: type = operation.get('type','').lower() bounds = operation.get('bounds','').lower() op_start_time = time.clock() # time.time() if not bounds: if type == 'departures': ave = cdutil.averager( input_variable, axis='t', weights='equal' ) result = input_variable - ave elif type == 'climatology': result = cdutil.averager( input_variable, axis='t', weights='equal' ) else: result = input_variable time_axis = input_variable.getTime() elif bounds == 'np': if type == 'departures': result = ma.anomalies( input_variable ).squeeze() elif type == 'climatology': result = ma.average( input_variable ).squeeze() else: result = input_variable time_axis = input_variable.getTime() else: if bounds == 'djf': operator = cdutil.DJF elif bounds == 'mam': operator = cdutil.MAM elif bounds == 'jja': operator = cdutil.JJA elif bounds == 'son': operator = cdutil.SON elif bounds == 'year': operator = cdutil.YEAR elif bounds == 'annualcycle': operator = cdutil.ANNUALCYCLE elif bounds == 'seasonalcycle': operator = cdutil.SEASONALCYCLE if operator <> None: if type == 'departures': result = operator.departures( input_variable ).squeeze() elif type == 'climatology': result = operator.climatology( input_variable ).squeeze() else: result = operator( input_variable ).squeeze() time_axis = result.getTime() op_end_time = time.clock() # time.time() wpsLog.debug( " ---> Base Operation Time: %.5f" % (op_end_time-op_start_time) ) else: result = input_variable time_axis = input_variable.getTime() if isinstance( result, float ): result_data = [ result ] elif result is not None: if result.__class__.__name__ == 'TransientVariable': result = ma.masked_equal( result.squeeze().getValue(), input_variable.getMissing() ) result_data = result.tolist( numpy.nan ) else: result_data = None except Exception, err: wpsLog.debug( "Exception applying Operation '%s':\n %s" % ( str(operation), traceback.format_exc() ) ) return ( None, None )
def applyOperation( self, input_variables, operation ): result = None result_mdata = {} rshape = None t0 = time.time() input_variable = input_variables[0] try: self.setTimeBounds( input_variable ) operator = None time_axis = None if operation is not None: method = operation.get('method','').lower() bounds = operation.get('bounds','').lower() op_start_time = time.clock() # time.time() if not bounds: if method == 'departures': result = ma.anomalies( input_variable ).squeeze() elif method == 'climatology': result = cdutil.averager( input_variable, axis='t', weights='equal' ) elif method == 'value': result = input_variable else: result = input_variable time_axis = input_variable.getTime() elif bounds == 'np': if method == 'departures': result = ma.anomalies( input_variable ).squeeze() elif method == 'climatology': result = ma.average( input_variable ).squeeze() elif method == 'annualcycle': result = self.annual_cycle( input_variable ) else: result = input_variable time_axis = input_variable.getTime() else: if bounds == 'djf': operator = cdutil.DJF elif bounds == 'mam': operator = cdutil.MAM elif bounds == 'jja': operator = cdutil.JJA elif bounds == 'son': operator = cdutil.SON elif bounds == 'year': operator = cdutil.YEAR elif bounds == 'annualcycle': operator = cdutil.ANNUALCYCLE elif bounds == 'seasonalcycle': operator = cdutil.SEASONALCYCLE if operator <> None: if method == 'departures': result = operator.departures( input_variable ).squeeze() elif method == 'climatology': if bounds == 'annualcycle': result = self.annual_cycle( input_variable ) # result = operator.climatology( input_variable ).squeeze() time_axis = cdms2.createAxis( range( len(result) ) ) time_axis.units = "months" elif bounds == 'seasonalcycle': result = operator.climatology( input_variable ).squeeze() time_axis = cdms2.createAxis( range( len(result) ) ) time_axis.units = "seasons" else: result = operator( input_variable ).squeeze() if time_axis is None: time_axis = result.getTime() op_end_time = time.clock() # time.time() # if math.isnan( result[0] ): # pp = pprint.PrettyPrinter(indent=4) # print "\n ---------- NaN in Result, Input: ---------- " # print str( input_variable.data ) else: result = input_variable time_axis = input_variable.getTime() if isinstance( result, float ): result_data = [ result ] rshape = [ 1 ] elif result is not None: if result.__class__.__name__ == 'TransientVariable': result = ma.masked_equal( result.squeeze().getValue(), input_variable.getMissing() ) result_data = result.tolist( numpy.nan ) rshape = result.shape else: result_data = None time_axis = input_variable.getTime() rshape = "None" except Exception, err: wpsLog.debug( "Exception applying Operation '%s':\n %s" % ( str(operation), traceback.format_exc() ) ) return ( None, None )