docstr: We expect that exactly one of `y` values is not None, and according to that we try to determine value type
docstr_tok: ["We","expect","that","exactly","one","of","`","y","`","values","is","not","None",",","and","according","to","that","we","try","to","determine","value","type"]
code: def value_type(self) -> ChannelValueType:
      """We expect that exactly one of `y` values is not None, and according to that we try to determine value type"""
      unique_channel_value_types = set(
          [
              ch_value_type
              for ch_value_type in ChannelValueType
              if self.y.get(ch_value_type.value) is not None
          ]
      )
      if len(unique_channel_value_types) > 1:
          raise NeptuneException(
              f"There are mixed value types in {self}"
          )
      if not unique_channel_value_types:
          raise NeptuneException(f"Can't determine type of {self}")
  
      return next(iter(unique_channel_value_types))
  
imports: import time
  from collections import namedtuple
  from enum import Enum
  from typing import List
  from neptune.legacy.exceptions import NeptuneException
label_desc: Use image node_id 6 for calling the ChannelValue obj's underlying member method code with example usage: obj.value_type() and returns: next