      >>> full_path_split(path)
      >>> ["foo", "baz", "bar"]
      """
      logger = logging.getLogger(__name__)  # pylint:disable=invalid-name
      allparts = list()
      while True:
          parts = os.path.split(path)
          if parts[0] == path:   # sentinel for absolute paths
              allparts.insert(0, parts[0])
              break
 
</s> remove     dir_contents = list()
 </s> add     dir_contents = [] </s> remove                 with open(self._config_file, "r") as cnf:
 </s> add                 with open(self._config_file, "r", encoding="utf8") as cnf: </s> remove class DSSIMObjective(tf.keras.losses.Loss):
 </s> add class DSSIMObjective(tf.keras.losses.Loss):  # pylint:disable=too-few-public-methods </s> remove                 print("'{}' is not a valid selection. Please try again".format(selection))
 </s> add                 print(f"'{selection}' is not a valid selection. Please try again") </s> remove         msg += " {}".format(additional_info)
 </s> add         msg += f" {additional_info}"
    allparts = []
      >>> full_path_split(path)
      >>> ["foo", "baz", "bar"]
      """
      logger = logging.getLogger(__name__)  # pylint:disable=invalid-name
    allparts = []
      while True:
          parts = os.path.split(path)
          if parts[0] == path:   # sentinel for absolute paths
              allparts.insert(0, parts[0])
              break
keep keep keep keep replace keep keep keep keep keep
 Update code to support Tensorflow versions up to 2.8 (#1213)

* Update maximum tf version in setup + requirements

* - bump max version of tf version in launcher
- standardise tf version check

* update keras get_custom_objects  for tf>2.6

* bugfix: force black text in GUI file dialogs (linux)

* dssim loss - Move to stock tf.ssim function

* Update optimizer imports for compatibility

* fix logging for tf2.8

* Fix GUI graphing for TF2.8

* update tests

* bump requirements.txt versions

* Remove limit on nvidia-ml-py

* Graphing bugfixes
  - Prevent live graph from displaying if data not yet available

* bugfix: Live graph. Collect loss labels correctly

* fix: live graph - swallow inconsistent loss errors

* Bugfix: Prevent live graph from clearing during training

* Fix graphing for AMD 
lib/utils.py