# Path: cloudvolume/exceptions.py
# class MeshDecodeError(ValueError):
#   """Unable to decode a mesh object."""
#   pass
# 
# Path: cloudvolume/lib.py
# def yellow(text):
#   return colorize('yellow', text)
# 
# class Vec(np.ndarray):
#     def __new__(cls, *args, **kwargs):
#       if 'dtype' in kwargs:
#         dtype = kwargs['dtype']
#       elif floating(args):
#         dtype = float
#       else:
#         dtype = int
# 
#       return super(Vec, cls).__new__(cls, shape=(len(args),), buffer=np.array(args).astype(dtype), dtype=dtype)
# 
#     @classmethod
#     def clamp(cls, val, minvec, maxvec):
#       x = np.minimum.reduce([
#         np.maximum.reduce([val,minvec]), 
#         maxvec
#       ])
#       return Vec(*x)
# 
#     def clone(self):
#       return Vec(*self[:], dtype=self.dtype)
# 
#     def null(self):
#         return self.length() <= 10 * np.finfo(np.float32).eps
# 
#     def dot(self, vec):
#       return sum(self * vec)
# 
#     def length2(self):
#         return self.dot(self)
# 
#     def length(self):
#         return math.sqrt(self.dot(self))
# 
#     def rectVolume(self):
#         return reduce(operator.mul, self)
# 
#     def __hash__(self):
#       return int(''.join(map(str, self)))
# 
#     def __repr__(self):
#       values = ",".join([ str(x) for x in self ])
#       return f"Vec({values}, dtype={self.dtype})"


import copy
import re
import struct
import numpy as np
    import DracoPy
      import vtk
from .exceptions import MeshDecodeError
from .lib import yellow, Vec



NOTICE = {
  'vertices': 0,
  'num_vertices': 0,
  'faces': 0,
}

def deprecation_notice(key):
  if NOTICE[key] < 1:

# Path: cloudvolume/exceptions.py
# class MeshDecodeError(ValueError):
#   """Unable to decode a mesh object."""
#   pass
# 
# Path: cloudvolume/lib.py
# def yellow(text):
#   return colorize('yellow', text)
# 
# class Vec(np.ndarray):
#     def __new__(cls, *args, **kwargs):
#       if 'dtype' in kwargs:
#         dtype = kwargs['dtype']
#       elif floating(args):
#         dtype = float
#       else:
#         dtype = int
# 
#       return super(Vec, cls).__new__(cls, shape=(len(args),), buffer=np.array(args).astype(dtype), dtype=dtype)
# 
#     @classmethod
#     def clamp(cls, val, minvec, maxvec):
#       x = np.minimum.reduce([
#         np.maximum.reduce([val,minvec]), 
#         maxvec
#       ])
#       return Vec(*x)
# 
#     def clone(self):
#       return Vec(*self[:], dtype=self.dtype)
# 
#     def null(self):
#         return self.length() <= 10 * np.finfo(np.float32).eps
# 
#     def dot(self, vec):
#       return sum(self * vec)
# 
#     def length2(self):
#         return self.dot(self)
# 
#     def length(self):
#         return math.sqrt(self.dot(self))
# 
#     def rectVolume(self):
#         return reduce(operator.mul, self)
# 
#     def __hash__(self):
#       return int(''.join(map(str, self)))
# 
#     def __repr__(self):
#       values = ",".join([ str(x) for x in self ])
#       return f"Vec({values}, dtype={self.dtype})"


# Path: cloudvolume/mesh.py
import copy
import re
import struct
import numpy as np
    import DracoPy
      import vtk
from .exceptions import MeshDecodeError
from .lib import yellow, Vec




NOTICE = {
  'vertices': 0,
  'num_vertices': 0,
  'faces': 0,
}

def deprecation_notice(key):
  if NOTICE[key] < 1:

    print(yellow("""