docs: def compute_function_aligned(funct, data_collections, data_type, unit):
          """Compute a function with a list of aligned data collections or individual values.
  
          Args:
              funct: A function with a single numerical value as output and one or
                  more numerical values as input.
              data_collections: A list with a length equal to the number of arguments
                  for the function. Items of the list can be either Data Collections
                  or individual values to be used at each datetime of other collections.
              data_type: An instance of a Ladybug data type that describes the results
                  of the funct.
              unit: The units of the funct results.
  
          Return:
              A Data Collection with the results function. If all items in this list of
              data_collections are individual values, only a single value will be returned.
  
          Usage:
              from ladybug.datacollection import HourlyContinuousCollection
              from ladybug.epw import EPW
              from ladybug.psychrometrics import humid_ratio_from_db_rh
              from ladybug.datatype.percentage import HumidityRatio
  
              epw_file_path = './epws/denver.epw'
              denver_epw = EPW(epw_file_path)
              pressure_at_denver = 85000
              hr_inputs = [denver_epw.dry_bulb_temperature,
                           denver_epw.relative_humidity,
                           pressure_at_denver]
              humid_ratio = HourlyContinuousCollection.compute_function_aligned(
                  humid_ratio_from_db_rh, hr_inputs, HumidityRatio(), 'fraction')
              # humid_ratio will be a Data Colleciton of humidity ratios at Denver
          """
          # check that all inputs are either data collections or floats
          data_colls = []
          for i, func_input in enumerate(data_collections):
              if isinstance(func_input, BaseCollection):
                  data_colls.append(func_input)
              else:
                  try:
                      data_collections[i] = float(func_input)
                  except ValueError:
                      raise TypeError('Expected a number or a Data Colleciton. '
                                      'Got {}'.format(type(func_input)))
  
          # run the function and return the result
          if len(data_colls) == 0:
              return funct(*data_collections)
          else:
              BaseCollection.are_collections_aligned(data_colls)
              val_len = len(data_colls[0].values)
              for i, col in enumerate(data_collections):
                  data_collections[i] = [col] * val_len if isinstance(col, float) else col
              result = data_colls[0].get_aligned_collection(data_type=data_type, unit=unit)
              for i in xrange(val_len):
                  result[i] = funct(*[col[i] for col in data_collections])
              return result