

'''simple docstring'''
import os


def        _lowerCAmelCase					(						_UpperCamelCase						:     Union[str, Any]				)      ->			Optional[Any]:
     """simple docstring"""




     _SCREAMING_SNAKE_CASE							    =len(grid[0]				)
     _SCREAMING_SNAKE_CASE							    =len(_UpperCamelCase				)

     _SCREAMING_SNAKE_CASE							    =0
     _SCREAMING_SNAKE_CASE							    =0
     _SCREAMING_SNAKE_CASE							    =0

     # Check vertically, horizontally, diagonally at the same time (only works
     # for nxn grid)
     for i in range(_UpperCamelCase				):
          for j in range(n_rows - 3				):
               _SCREAMING_SNAKE_CASE							    =grid[j][i] * grid[j + 1][i] * grid[j + 2][i] * grid[j + 3][i]
               _SCREAMING_SNAKE_CASE							    =grid[i][j] * grid[i][j + 1] * grid[i][j + 2] * grid[i][j + 3]

               # Left-to-right diagonal (\) product
               if i < n_columns - 3:
                    _SCREAMING_SNAKE_CASE							    =(
                        grid[i][j]
                        * grid[i + 1][j + 1]
                        * grid[i + 2][j + 2]
                        * grid[i + 3][j + 3]
                    )

               # Right-to-left diagonal(/) product
               if i > 2:
                    _SCREAMING_SNAKE_CASE							    =(
                        grid[i][j]
                        * grid[i - 1][j + 1]
                        * grid[i - 2][j + 2]
                        * grid[i - 3][j + 3]
                    )

               _SCREAMING_SNAKE_CASE							    =max(
                   _UpperCamelCase							, _UpperCamelCase							, _UpperCamelCase							, _UpperCamelCase				)
               if max_product > largest:
                    _SCREAMING_SNAKE_CASE							    =max_product

     return largest


def        _lowerCAmelCase					(						)      ->			Any:
     """simple docstring"""




     _SCREAMING_SNAKE_CASE							    =[]
     with open(os.path.dirname(_UpperCamelCase				) + '/grid.txt'				) as file:
          for line in file:
               grid.append(line.strip('\n'				).split(' '				)				)

     _SCREAMING_SNAKE_CASE							    =[[int(_UpperCamelCase				) for i in grid[j]] for j in range(len(_UpperCamelCase				)				)]

     return largest_product(_UpperCamelCase				)


if __name__ == "__main__":
     print(solution())



'''simple docstring'''
from typing import List, Optional, Union

from ...configuration_utils import PretrainedConfig
from ...utils import logging


lowerCamelCase :      List[Any]					 =     logging.get_logger(__name__)

lowerCamelCase :      str					 =     {
    "huggingface/time-series-transformer-tourism-monthly": (
        "https://huggingface.co/huggingface/time-series-transformer-tourism-monthly/resolve/main/config.json"
    ),
    # See all TimeSeriesTransformer models at https://huggingface.co/models?filter=time_series_transformer
}







class 							A__    (       A__  ):
  A__		 =				'time_series_transformer'
  A__		 =				{
      'hidden_size': 'd_model',
      'num_attention_heads': 'encoder_attention_heads',
      'num_hidden_layers': 'encoder_layers',
  }





  def __init__(		self      :	Optional[int]							,					_a      :	Optional[int] = None							,					_a      :	Optional[int] = None							,					_a      :	str = "student_t"							,					_a      :	str = "nll"							,					_a      :	int = 1							,					_a      :	List[int] = [1, 2, 3, 4, 5, 6, 7]							,					_a      :	Optional[Union[str, bool]] = "mean"							,					_a      :	int = 0							,					_a      :	int = 0							,					_a      :	int = 0							,					_a      :	int = 0							,					_a      :	Optional[List[int]] = None							,					_a      :	Optional[List[int]] = None							,					_a      :	int = 32							,					_a      :	int = 32							,					_a      :	int = 2							,					_a      :	int = 2							,					_a      :	int = 2							,					_a      :	int = 2							,					_a      :	bool = True							,					_a      :	str = "gelu"							,					_a      :	int = 64							,					_a      :	float = 0.1							,					_a      :	float = 0.1							,					_a      :	float = 0.1							,					_a      :	float = 0.1							,					_a      :	float = 0.1							,					_a      :	int = 100							,					_a      :	float = 0.02							,					_a      :	Union[str, Any]=True							,					**_a      :	Optional[Any]							,					)	->    Optional[Any]:





       '''simple docstring'''






       _SCREAMING_SNAKE_CASE							    =prediction_length
       _SCREAMING_SNAKE_CASE							    =context_length or prediction_length
       _SCREAMING_SNAKE_CASE							    =distribution_output
       _SCREAMING_SNAKE_CASE							    =loss
       _SCREAMING_SNAKE_CASE							    =input_size
       _SCREAMING_SNAKE_CASE							    =num_time_features
       _SCREAMING_SNAKE_CASE							    =lags_sequence
       _SCREAMING_SNAKE_CASE							    =scaling
       _SCREAMING_SNAKE_CASE							    =num_dynamic_real_features
       _SCREAMING_SNAKE_CASE							    =num_static_real_features
       _SCREAMING_SNAKE_CASE							    =num_static_categorical_features
       if cardinality and num_static_categorical_features > 0:
            if len(_a ) != num_static_categorical_features:
                 raise ValueError(
                     'The cardinality should be a list of the same length as `num_static_categorical_features`' )
            _SCREAMING_SNAKE_CASE							    =cardinality
       else:
            _SCREAMING_SNAKE_CASE							    =[0]
       if embedding_dimension and num_static_categorical_features > 0:
            if len(_a ) != num_static_categorical_features:
                 raise ValueError(
                     'The embedding dimension should be a list of the same length as `num_static_categorical_features`' )
            _SCREAMING_SNAKE_CASE							    =embedding_dimension
       else:
            _SCREAMING_SNAKE_CASE							    =[min(50							,					(cat + 1) // 2 ) for cat in self.cardinality]
       _SCREAMING_SNAKE_CASE							    =num_parallel_samples

       # Transformer architecture configuration
       _SCREAMING_SNAKE_CASE							    =input_size * len(_a ) + self._number_of_features
       _SCREAMING_SNAKE_CASE							    =d_model
       _SCREAMING_SNAKE_CASE							    =encoder_attention_heads
       _SCREAMING_SNAKE_CASE							    =decoder_attention_heads
       _SCREAMING_SNAKE_CASE							    =encoder_ffn_dim
       _SCREAMING_SNAKE_CASE							    =decoder_ffn_dim
       _SCREAMING_SNAKE_CASE							    =encoder_layers
       _SCREAMING_SNAKE_CASE							    =decoder_layers

       _SCREAMING_SNAKE_CASE							    =dropout
       _SCREAMING_SNAKE_CASE							    =attention_dropout
       _SCREAMING_SNAKE_CASE							    =activation_dropout
       _SCREAMING_SNAKE_CASE							    =encoder_layerdrop
       _SCREAMING_SNAKE_CASE							    =decoder_layerdrop

       _SCREAMING_SNAKE_CASE							    =activation_function
       _SCREAMING_SNAKE_CASE							    =init_std

       _SCREAMING_SNAKE_CASE							    =use_cache

       super().__init__(is_encoder_decoder=_a							,					**_a )





  @property
  def 						A  (		self      :	List[Any] )	->    int:





       '''simple docstring'''






       return (
           sum(self.embedding_dimension )
           + self.num_dynamic_real_features
           + self.num_time_features
           + self.num_static_real_features
           + self.input_size * 2  # the log1p(abs(loc)) and log(scale) features
       )
