code: def on_source(self, time, price, size):
      if not self.bars:
          return
      bar = self.bars[-1]
      if isNan(bar.open):
          bar.open = bar.high = bar.low = price
      bar.high = max(bar.high, price)
      bar.low = min(bar.low, price)
      bar.close = price
      bar.volume += size
      bar.count += 1
      self.bars.updateEvent.emit(self.bars, False)
  
imports: from dataclasses import dataclass, field
  from datetime import datetime
  from typing import ClassVar, List, Optional, Union
  from eventkit import Event, Op
  from ib_insync.contract import Contract
  from ib_insync.objects import DOMLevel, Dividends, FundamentalRatios, MktDepthData, OptionComputation, TickByTickAllLast, TickByTickBidAsk, TickByTickMidPoint, TickData
  from ib_insync.util import dataclassRepr, isNan
label_desc: Use image node_id 2 for calling the TimeBars obj's underlying member method code with example usage: obj.on_source(time, price, size) without return types