docs: def nvmlDeviceGetSupportedMemoryClocks(handle):
      r"""
      /**
       * Retrieves the list of possible memory clocks that can be used as an argument for \ref nvmlDeviceSetApplicationsClocks.
       *
       * For Kepler &tm; or newer fully supported devices.
       *
       * @param device                               The identifier of the target device
       * @param count                                Reference in which to provide the \a clocksMHz array size, and
       *                                             to return the number of elements
       * @param clocksMHz                            Reference in which to return the clock in MHz
       *
       * @return
       *         - \ref NVML_SUCCESS                 if \a count and \a clocksMHz have been populated
       *         - \ref NVML_ERROR_UNINITIALIZED     if the library has not been successfully initialized
       *         - \ref NVML_ERROR_INVALID_ARGUMENT  if \a device is invalid or \a count is NULL
       *         - \ref NVML_ERROR_NOT_SUPPORTED     if the device does not support this feature
       *         - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a count is too small (\a count is set to the number of
       *                                                required elements)
       *         - \ref NVML_ERROR_GPU_IS_LOST       if the target GPU has fallen off the bus or is otherwise inaccessible
       *         - \ref NVML_ERROR_UNKNOWN           on any unexpected error
       *
       * @see nvmlDeviceSetApplicationsClocks
       * @see nvmlDeviceGetSupportedGraphicsClocks
       */
      nvmlReturn_t DECLDIR nvmlDeviceGetSupportedMemoryClocks
      """
      # first call to get the size
      c_count = c_uint(0)
      fn = _nvmlGetFunctionPointer("nvmlDeviceGetSupportedMemoryClocks")
      ret = fn(handle, byref(c_count), None)
  
      if (ret == NVML_SUCCESS):
          # special case, no clocks
          return []
      elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
          # typical case
          clocks_array = c_uint * c_count.value
          c_clocks = clocks_array()
  
          # make the call again
          ret = fn(handle, byref(c_count), c_clocks)
          _nvmlCheckReturn(ret)
  
          procs = []
          for i in range(c_count.value):
              procs.append(c_clocks[i])
  
          return procs
      else:
          # error case
          raise NVMLError(ret)