docs: def save(self, file_path):
          """Save epw object as an epw file.
  
          args:
              file_path: A string representing the path to write the epw file to.
          """
          # load data if it's  not loaded convert to SI if it is in IP
          if not self.is_data_loaded:
              self._import_data()
          originally_ip = False
          if self.is_ip is True:
              self.convert_to_si()
              originally_ip = True
  
          # write the file
          lines = self.header
          try:
              # if the first value is at 1AM, move first item to end position
              for field in xrange(0, self._num_of_fields):
                  point_in_time = self._data[field].header.data_type.point_in_time
                  if point_in_time is True:
                      first_hour = self._data[field]._values.pop(0)
                      self._data[field]._values.append(first_hour)
  
              annual_a_per = AnalysisPeriod(is_leap_year=self.is_leap_year)
              for hour in xrange(0, len(annual_a_per.datetimes)):
                  line = []
                  for field in xrange(0, self._num_of_fields):
                      line.append(str(self._data[field]._values[hour]))
                  lines.append(",".join(line) + "\n")
          except IndexError:
              # cleaning up
              length_error_msg = 'Data length is not for a full year and cannot be ' + \
                  'saved as an EPW file.'
              raise ValueError(length_error_msg)
          else:
              file_data = ''.join(lines)
              write_to_file(file_path, file_data, True)
          finally:
              del(lines)
              # move last item to start position for fields on the hour
              for field in xrange(0, self._num_of_fields):
                  point_in_time = self._data[field].header.data_type.point_in_time
                  if point_in_time is True:
                      last_hour = self._data[field]._values.pop()
                      self._data[field]._values.insert(0, last_hour)
  
          if originally_ip is True:
              self.convert_to_ip()
  
          return file_path