text: # Example on using enumerated types under PyTables.
  # This file is intended to be run in an interactive Python session,
  # since it contains some statements that raise exceptions.
  # To run it, paste it as the input of ``python``.
  
  
  def COMMENT(string):
      pass
  
  
  COMMENT("**** Usage of the ``Enum`` class. ****")
  
  COMMENT("Create an enumeration of colors with automatic concrete values.")
  import tables
  colorList = ['red', 'green', 'blue', 'white', 'black']
  colors = tables.Enum(colorList)
  
  COMMENT("Take a look at the name-value pairs.")
  print "Colors:", [v for v in colors]
  
  COMMENT("Access values as attributes.")
  print "Value of 'red' and 'white':", (colors.red, colors.white)
  print "Value of 'yellow':", colors.yellow
  
  COMMENT("Access values as items.")
  print "Value of 'red' and 'white':", (colors['red'], colors['white'])
  print "Value of 'yellow':", colors['yellow']
  
  COMMENT("Access names.")
  print "Name of value %s:" % colors.red, colors(colors.red)
  print "Name of value 1234:", colors(1234)
  
  
  COMMENT("**** Enumerated columns. ****")
  
  COMMENT("Create a new PyTables file.")
  h5f = tables.open_file('enum.h5', 'w')
  
  COMMENT("This describes a ball extraction.")
  class BallExt(tables.IsDescription):
      ballTime = tables.Time32Col()
      ballColor = tables.EnumCol(colors, 'black', base='uint8')
  
  COMMENT("Create a table of ball extractions.")
  tbl = h5f.create_table(
      '/', 'extractions', BallExt, title="Random ball extractions")
  
  COMMENT("Simulate some ball extractions.")
  import time
  import random
  now = time.time()
  row = tbl.row
  for i in range(10):
      row['ballTime'] = now + i
      row['ballColor'] = colors[random.choice(colorList)]  # notice this
      row.append()
  
  COMMENT("Try to append an invalid value.")
  row['ballTime'] = now + 42
  row['ballColor'] = 1234
  
  tbl.flush()
  
  COMMENT("Now print them!")
  for r in tbl:
      ballTime = r['ballTime']
      ballColor = colors(r['ballColor'])  # notice this
      print "Ball extracted on %d is of color %s." % (ballTime, ballColor)
  
  
  COMMENT("**** Enumerated arrays. ****")
  
  COMMENT("This describes a range of working days.")
  workingDays = {'Mon': 1, 'Tue': 2, 'Wed': 3, 'Thu': 4, 'Fri': 5}
  dayRange = tables.EnumAtom(workingDays, 'Mon', base='uint16', shape=(0, 2))
  
  COMMENT("Create an EArray of day ranges within a week.")
  earr = h5f.create_earray('/', 'days', dayRange, title="Working day ranges")
  earr.flavor = 'python'
  
  COMMENT("Throw some day ranges in.")
  wdays = earr.get_enum()
  earr.append([(wdays.Mon, wdays.Fri), (wdays.Wed, wdays.Fri)])
  
  COMMENT("The append method does not check values!")
  earr.append([(wdays.Mon, 1234)])
  
  COMMENT("Print the values.")
  for (d1, d2) in earr:
      print "From %s to %s (%d days)." % (wdays(d1), wdays(d2), d2-d1+1)
  
  COMMENT("Close the PyTables file and remove it.")
  import os
  h5f.close()
  os.remove('enum.h5')
  