






from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_torch_available,
)


__UpperCAmelCase							:   int							=  {
    "configuration_mega": ["MEGA_PRETRAINED_CONFIG_ARCHIVE_MAP", "MegaConfig", "MegaOnnxConfig"],
}

try:
	if not is_torch_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	__UpperCAmelCase							:   Tuple							=  [
	    "MEGA_PRETRAINED_MODEL_ARCHIVE_LIST",
	    "MegaForCausalLM",
	    "MegaForMaskedLM",
	    "MegaForMultipleChoice",
	    "MegaForQuestionAnswering",
	    "MegaForSequenceClassification",
	    "MegaForTokenClassification",
	    "MegaModel",
	    "MegaPreTrainedModel",
	]

if TYPE_CHECKING:
	from .configuration_mega import MEGA_PRETRAINED_CONFIG_ARCHIVE_MAP, MegaConfig, MegaOnnxConfig

	try:
		if not is_torch_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_mega import (
		    MEGA_PRETRAINED_MODEL_ARCHIVE_LIST,
		    MegaForCausalLM,
		    MegaForMaskedLM,
		    MegaForMultipleChoice,
		    MegaForQuestionAnswering,
		    MegaForSequenceClassification,
		    MegaForTokenClassification,
		    MegaModel,
		    MegaPreTrainedModel,
		)

else:
	import sys

	__UpperCAmelCase							:   Any							=  _LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)







from __future__ import annotations


class 					_snake_case						:






	def __init__(		self					,UpperCamelCase       )						->    None:
					snake_case__      :Union[str, Any]         =   data
					snake_case__      :Node | None         =   None
					snake_case__      :Node | None         =   None





def 					lowercase_ (    __snake_case     :							Node | None      )     -> None:  # In Order traversal of the tree





				'''simple docstring'''


				if tree:
								display(tree.left      )
								print(tree.data      )
								display(tree.right      )





def 					lowercase_ (    __snake_case     :							Node | None      )     -> int:





				'''simple docstring'''


				return 1 + max(depth_of_tree(tree.left      )	,	depth_of_tree(tree.right      )      ) if tree else 0





def 					lowercase_ (    __snake_case     :							Node      )     -> bool:





				'''simple docstring'''


				if not tree:
								return True
				if tree.left and tree.right:
								return is_full_binary_tree(tree.left      ) and is_full_binary_tree(tree.right      )
				else:
								return not tree.left and not tree.right





def 					lowercase_ (    )     -> None:  # Main function for testing.





				'''simple docstring'''


				snake_case__      :Dict         =   Node(1      )
				snake_case__      :int         =   Node(2      )
				snake_case__      :Optional[Any]         =   Node(3      )
				snake_case__      :Tuple         =   Node(4      )
				snake_case__      :str         =   Node(5      )
				snake_case__      :Optional[Any]         =   Node(6      )
				snake_case__      :List[Any]         =   Node(7      )
				snake_case__      :List[str]         =   Node(8      )
				snake_case__      :Tuple         =   Node(9      )

				print(is_full_binary_tree(__snake_case      )      )
				print(depth_of_tree(__snake_case      )      )
				print("Tree is: "      )
				display(__snake_case      )


if __name__ == "__main__":
	main()