Guest User

Untitled

a guest
Mar 19th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. from IPython.lib.backgroundjobs import BackgroundJobManager
  2. from IPython.core.magic import register_line_magic
  3. from IPython.display import display
  4. from IPython import get_ipython
  5. from itertools import islice, chain
  6. from ipywidgets import IntProgress, HTML, VBox
  7.  
  8. # Iterate through a generator without peaking, yeilding a list of elements
  9. #
  10. def chunks(iterable, size):
  11. iterator = iter(iterable)
  12. for first in iterator:
  13. yield list(chain([first], islice(iterator, (len(iterable)//size) - 1)))
  14.  
  15. # Magics for interacting with jobs
  16. #
  17. def jobs_manager():
  18. jobs = BackgroundJobManager()
  19.  
  20. @register_line_magic
  21. def job(line):
  22. ip = get_ipython()
  23. jobs.new(line, ip.user_global_ns)
  24.  
  25. return jobs
  26.  
  27. # Pretty progress bars for for jupyter notebook
  28. #
  29. def log_progress(sequence, every=None, size=None, name='Jobs'):
  30. is_iterator = False
  31. if size is None:
  32. try:
  33. size = len(sequence)
  34. except TypeError:
  35. is_iterator = True
  36. if size is not None:
  37. if every is None:
  38. if size <= 200:
  39. every = 1
  40. else:
  41. every = int(size / 200) # every 0.5%
  42. else:
  43. assert every is not None, 'sequence is iterator, set every'
  44.  
  45. if is_iterator:
  46. progress = IntProgress(min=0, max=1, value=1)
  47. progress.bar_style = 'info'
  48. else:
  49. progress = IntProgress(min=0, max=size, value=0)
  50. label = HTML()
  51. box = VBox(children=[label, progress])
  52. display(box)
  53.  
  54. index = 0
  55. try:
  56. for index, record in enumerate(sequence, 1):
  57. if index == 1 or index % every == 0:
  58. if is_iterator:
  59. label.value = '{name}: {index} / ?'.format(
  60. name=name,
  61. index=index
  62. )
  63. else:
  64. progress.value = index
  65. label.value = u'{name}: {index} / {size}'.format(
  66. name=name,
  67. index=index,
  68. size=size
  69. )
  70. yield record
  71. except:
  72. progress.bar_style = 'danger'
  73. raise
  74. else:
  75. progress.bar_style = 'success'
  76. progress.value = index
  77. label.value = "{name}: {index}".format(
  78. name=name,
  79. index=str(index or '?')
  80. )
Add Comment
Please, Sign In to add comment