
"""simple docstring"""


from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


_lowercase				 =					{
    '''configuration_megatron_bert''': ['''MEGATRON_BERT_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''MegatronBertConfig'''],
}

try:
		if not is_torch_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		_lowercase				 =					[
		    '''MEGATRON_BERT_PRETRAINED_MODEL_ARCHIVE_LIST''',
		    '''MegatronBertForCausalLM''',
		    '''MegatronBertForMaskedLM''',
		    '''MegatronBertForMultipleChoice''',
		    '''MegatronBertForNextSentencePrediction''',
		    '''MegatronBertForPreTraining''',
		    '''MegatronBertForQuestionAnswering''',
		    '''MegatronBertForSequenceClassification''',
		    '''MegatronBertForTokenClassification''',
		    '''MegatronBertModel''',
		    '''MegatronBertPreTrainedModel''',
		]

if TYPE_CHECKING:
		from .configuration_megatron_bert import MEGATRON_BERT_PRETRAINED_CONFIG_ARCHIVE_MAP, MegatronBertConfig

		try:
				if not is_torch_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_megatron_bert import (
				    MEGATRON_BERT_PRETRAINED_MODEL_ARCHIVE_LIST,
				    MegatronBertForCausalLM,
				    MegatronBertForMaskedLM,
				    MegatronBertForMultipleChoice,
				    MegatronBertForNextSentencePrediction,
				    MegatronBertForPreTraining,
				    MegatronBertForQuestionAnswering,
				    MegatronBertForSequenceClassification,
				    MegatronBertForTokenClassification,
				    MegatronBertModel,
				    MegatronBertPreTrainedModel,
				)

else:
		import sys

		_lowercase				 =					_LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)

"""simple docstring"""


from __future__ import annotations






def    _snake_case					(		snake_case__ :  tuple[int, int]						,   snake_case__ :  int  ):
	A ,   A     = position
	A     = [
	    (y + 1, x + 2),
	    (y - 1, x + 2),
	    (y + 1, x - 2),
	    (y - 1, x - 2),
	    (y + 2, x + 1),
	    (y + 2, x - 1),
	    (y - 2, x + 1),
	    (y - 2, x - 1),
	]
	A     = []

	for position in positions:
		A ,   A     = position
		if 0 <= y_test < n and 0 <= x_test < n:
			permissible_positions.append(snake_case__  )

	return permissible_positions






def    _snake_case					(		snake_case__ :  list[list[int]]  ):
	return not any(elem == 0 for row in board for elem in row  )






def    _snake_case					(		snake_case__ :  list[list[int]]						,   snake_case__ :  tuple[int, int]						,   snake_case__ :  int  ):

	if is_complete(snake_case__  ):
		return True

	for position in get_valid_pos(snake_case__						,   len(snake_case__  )  ):
		A ,   A     = position

		if board[y][x] == 0:
			A     = curr + 1
			if open_knight_tour_helper(snake_case__						,   snake_case__						,   curr + 1  ):
				return True
			A     = 0

	return False






def    _snake_case					(		snake_case__ :  int  ):
	A     = [[0 for i in range(snake_case__  )] for j in range(snake_case__  )]

	for i in range(snake_case__  ):
		for j in range(snake_case__  ):
			A     = 1
			if open_knight_tour_helper(snake_case__						,   (i, j)						,   1  ):
				return board
			A     = 0

	A     = F'Open Kight Tour cannot be performed on a board of size {n}'
	raise ValueError(snake_case__  )


if __name__ == "__main__":
		import doctest

		doctest.testmod()