text: # Released under the MIT License. See LICENSE for details.
  #
  """Entity functionality.
  
  ****************************************************************************
  NOTE: This is largely being replaced by dataclassio, which offers similar
  functionality in a cleaner way. Ideally we should remove this completely at
  some point, but for now we should at least try to avoid using it in new code.
  ****************************************************************************
  
  A system for defining structured data, supporting both static and runtime
  type safety, serialization, efficient/sparse storage, per-field value
  limits, etc. This is a heavyweight option in comparison to things such as
  dataclasses, but the increased features can make the overhead worth it for
  certain use cases.
  
  Advantages compared to raw nested dataclasses:
  - Field names separated from their data representation so can get more
    concise json data, change variable names while preserving back-compat, etc.
  - Can wrap and preserve unmapped data (so fields can be added to new versions
    of something without breaking old versions' ability to read the data)
  - Incorrectly typed data is caught at runtime (for dataclasses we rely on
    type-checking and explicit validation calls)
  
  Disadvantages compared to raw nested dataclasses:
  - More complex to use
  - Significantly more heavyweight (roughly 10 times slower in quick tests)
  - Can't currently be initialized in constructors (this would probably require
    a Mypy plugin to do in a type-safe way)
  """
  # pylint: disable=unused-import
  
  from efro.entity._entity import EntityMixin, Entity
  from efro.entity._field import (Field, CompoundField, ListField, DictField,
                                  CompoundListField, CompoundDictField)
  from efro.entity._value import (
      EnumValue, OptionalEnumValue, IntValue, OptionalIntValue, StringValue,
      OptionalStringValue, BoolValue, OptionalBoolValue, FloatValue,
      OptionalFloatValue, DateTimeValue, OptionalDateTimeValue, Float3Value,
      CompoundValue)
  
  from efro.entity._support import FieldInspector
  