text: #!/usr/bin/python3
  
  
  
  import os
  import datetime
  import time
  import typing
  import collections
  
  import jk_utils
  
  
  
  
  
  
  StackTraceTuple = collections.namedtuple("StackTraceTuple",
  	[
  		"filePath",
  		"lineNo",
  		"moduleName",
  		"sourceCode",
  	]
  )
  
  
  
  
  
  
  
  
  class StackTraceStruct(collections.namedtuple("StackTraceStruct",
  		[
  			"filePath",
  			"lineNo",
  			"moduleName",
  			"sourceCode",
  		]
  	)):
  
  	################################################################################################################################
  	## Constants
  	################################################################################################################################
  
  	################################################################################################################################
  	## Constructor
  	################################################################################################################################
  
  	################################################################################################################################
  	## Properties
  	################################################################################################################################
  
  	################################################################################################################################
  	## Helper Methods
  	################################################################################################################################
  
  	################################################################################################################################
  	## Public Methods
  	################################################################################################################################
  
  	################################################################################################################################
  	## Static Methods
  	################################################################################################################################
  
  	pass
  
  #
  
  
  
  
  
  
  class StackTraceClass:
  
  	__slots__ = (
  		"_file",
  		"_line",
  		"_module",
  		"_sourcecode",
  	)
  
  	################################################################################################################################
  	## Constants
  	################################################################################################################################
  
  	################################################################################################################################
  	## Constructor
  	################################################################################################################################
  
  	def __init__(self, file:str, line:int, module:str, sourcecode:str) -> None:
  		self._file = file
  		self._line = line
  		self._module = module
  		self._sourcecode = sourcecode
  	#
  
  	################################################################################################################################
  	## Properties
  	################################################################################################################################
  
  	@property
  	def file(self) -> str:
  		return self._file
  	#
  
  	@property
  	def line(self) -> int:
  		return self._line
  	#
  
  	@property
  	def module(self) -> str:
  		return self._module
  	#
  
  	@property
  	def sourcecode(self) -> str:
  		return self._sourcecode
  	#
  
  	################################################################################################################################
  	## Helper Methods
  	################################################################################################################################
  
  	################################################################################################################################
  	## Public Methods
  	################################################################################################################################
  
  	################################################################################################################################
  	## Static Methods
  	################################################################################################################################
  
  #
  
  
  
  
  
  
  
  
  
  
  
  class Timer:
  
  	def __init__(self, name:str, repeats:int = 1) -> None:
  		self.__name = name
  		self.__t = None
  		self.repeats = repeats
  	#
  
  	def __enter__(self):
  		self.__t = time.time()
  		return self
  	#
  
  	def __exit__(self, ex_type, ex_value, ex_traceback):
  		if ex_type != None:
  			return False
  			
  		dt = time.time() - self.__t
  		s = jk_utils.formatTime(dt, withMilliseconds=True)
  		if self.repeats > 1:
  			s += " (" + str(round(dt * 1000000000 / self.repeats)) + " nanoseconds per action)"
  		print(self.__name + ": " + s)
  		return True
  	#
  
  #
  
  
  
  
  
  REPEATS = 100000000
  
  with Timer("instantiate 10.000.000 tuples", repeats=REPEATS) as timer:
  	for i in range(0, timer.repeats):
  		x = ()
  
  with Timer("instantiate 10.000.000 lists", repeats=REPEATS) as timer:
  	for i in range(0, timer.repeats):
  		x = []
  
  with Timer("instantiate 10.000.000 named tuples", repeats=REPEATS) as timer:
  	for i in range(0, timer.repeats):
  		x = StackTraceTuple("", 123, "", "")
  
  with Timer("instantiate 10.000.000 named tuple classes", repeats=REPEATS) as timer:
  	for i in range(0, timer.repeats):
  		x = StackTraceStruct("", 123, "", "")
  
  with Timer("instantiate 10.000.000 regular classes", repeats=REPEATS) as timer:
  	for i in range(0, timer.repeats):
  		x = StackTraceClass("", 123, "", "")
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  