




from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


UpperCamelCase__    			=			{
    """configuration_x_clip""": [
        """XCLIP_PRETRAINED_CONFIG_ARCHIVE_MAP""",
        """XCLIPConfig""",
        """XCLIPTextConfig""",
        """XCLIPVisionConfig""",
    ],
    """processing_x_clip""": ["""XCLIPProcessor"""],
}

try:
					if not is_torch_available():
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					pass
else:
					UpperCamelCase__    			=			[
					    """XCLIP_PRETRAINED_MODEL_ARCHIVE_LIST""",
					    """XCLIPModel""",
					    """XCLIPPreTrainedModel""",
					    """XCLIPTextModel""",
					    """XCLIPVisionModel""",
					]

if TYPE_CHECKING:
					from .configuration_x_clip import (
					    XCLIP_PRETRAINED_CONFIG_ARCHIVE_MAP,
					    XCLIPConfig,
					    XCLIPTextConfig,
					    XCLIPVisionConfig,
					)
					from .processing_x_clip import XCLIPProcessor

					try:
										if not is_torch_available():
															raise OptionalDependencyNotAvailable()
					except OptionalDependencyNotAvailable:
										pass
					else:
										from .modeling_x_clip import (
										    XCLIP_PRETRAINED_MODEL_ARCHIVE_LIST,
										    XCLIPModel,
										    XCLIPPreTrainedModel,
										    XCLIPTextModel,
										    XCLIPVisionModel,
										)

else:
					import sys

					UpperCamelCase__    			=			_LazyModule(__name__, globals()["""__file__"""], _import_structure, module_spec=__spec__)





'''simple docstring'''

def 			__UpperCamelCase       (   UpperCAmelCase		,     UpperCAmelCase		,     UpperCAmelCase     ):

 def update_area_of_max_square(UpperCAmelCase		,     UpperCAmelCase     ) -> int:
  # BASE CASE
  if row >= rows or col >= cols:
   return 0

  lowercase__				:    int  =					update_area_of_max_square(UpperCAmelCase		,     col + 1     )
  lowercase__				:    Any  =					update_area_of_max_square(row + 1		,     col + 1     )
  lowercase__				:    str  =					update_area_of_max_square(row + 1		,     UpperCAmelCase     )

  if mat[row][col]:
   lowercase__				:    List[Any]  =					1 + min([right, diagonal, down]     )
   lowercase__				:    List[Any]  =					max(largest_square_area[0]		,     UpperCAmelCase     )
   return sub_problem_sol
  else:
   return 0

 lowercase__				:    Dict  =					[0]
 update_area_of_max_square(0		,     0     )
 return largest_square_area[0]
def 			__UpperCamelCase       (   UpperCAmelCase		,     UpperCAmelCase		,     UpperCAmelCase     ):

 def update_area_of_max_square_using_dp_array(
     UpperCAmelCase		,     UpperCAmelCase		,     UpperCAmelCase     ) -> int:
  if row >= rows or col >= cols:
   return 0
  if dp_array[row][col] != -1:
   return dp_array[row][col]

  lowercase__				:    int  =					update_area_of_max_square_using_dp_array(UpperCAmelCase		,     col + 1		,     UpperCAmelCase     )
  lowercase__				:    Optional[int]  =					update_area_of_max_square_using_dp_array(row + 1		,     col + 1		,     UpperCAmelCase     )
  lowercase__				:    Any  =					update_area_of_max_square_using_dp_array(row + 1		,     UpperCAmelCase		,     UpperCAmelCase     )

  if mat[row][col]:
   lowercase__				:    Optional[int]  =					1 + min([right, diagonal, down]     )
   lowercase__				:    Any  =					max(largest_square_area[0]		,     UpperCAmelCase     )
   lowercase__				:    int  =					sub_problem_sol
   return sub_problem_sol
  else:
   return 0

 lowercase__				:    Any  =					[0]
 lowercase__				:    List[Any]  =					[[-1] * cols for _ in range(UpperCAmelCase     )]
 update_area_of_max_square_using_dp_array(0		,     0		,     UpperCAmelCase     )

 return largest_square_area[0]
def 			__UpperCamelCase       (   UpperCAmelCase		,     UpperCAmelCase		,     UpperCAmelCase     ):
 lowercase__				:    Optional[int]  =					[[0] * (cols + 1) for _ in range(rows + 1     )]
 lowercase__				:    str  =					0
 for row in range(rows - 1		,     -1		,     -1     ):
  for col in range(cols - 1		,     -1		,     -1     ):
   lowercase__				:    str  =					dp_array[row][col + 1]
   lowercase__				:    Optional[Any]  =					dp_array[row + 1][col + 1]
   lowercase__				:    str  =					dp_array[row + 1][col]

   if mat[row][col] == 1:
    lowercase__				:    Dict  =					1 + min(UpperCAmelCase		,     UpperCAmelCase		,     UpperCAmelCase     )
    lowercase__				:    str  =					max(dp_array[row][col]		,     UpperCAmelCase     )
   else:
    lowercase__				:    Any  =					0

 return largest_square_area
def 			__UpperCamelCase       (   UpperCAmelCase		,     UpperCAmelCase		,     UpperCAmelCase     ):
 lowercase__				:    List[str]  =					[0] * (cols + 1)
 lowercase__				:    str  =					[0] * (cols + 1)
 lowercase__				:    Tuple  =					0
 for row in range(rows - 1		,     -1		,     -1     ):
  for col in range(cols - 1		,     -1		,     -1     ):
   lowercase__				:    List[Any]  =					current_row[col + 1]
   lowercase__				:    Any  =					next_row[col + 1]
   lowercase__				:    Optional[Any]  =					next_row[col]

   if mat[row][col] == 1:
    lowercase__				:    List[str]  =					1 + min(UpperCAmelCase		,     UpperCAmelCase		,     UpperCAmelCase     )
    lowercase__				:    List[str]  =					max(current_row[col]		,     UpperCAmelCase     )
   else:
    lowercase__				:    int  =					0
  lowercase__				:    int  =					current_row

 return largest_square_area


if __name__ == "__main__":
  import doctest

  doctest.testmod()
  print(largest_square_area_in_matrix_bottom_up(2, 2, [[1, 1], [1, 1]]))

