"""simple docstring"""





from binascii import hexlify
from hashlib import shaaaa
from os import urandom

# RFC 3526 - More Modular Exponential (MODP) Diffie-Hellman groups for
# Internet Key Exchange (IKE) https://tools.ietf.org/html/rfc3526

__A  =				{
    # 1536-bit
    5: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 2048-bit
    14: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AACAA68FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 3072-bit
    15: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64'''
            + '''ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7'''
            + '''ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B'''
            + '''F12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31'''
            + '''43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 4096-bit
    16: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64'''
            + '''ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7'''
            + '''ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B'''
            + '''F12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31'''
            + '''43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7'''
            + '''88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA'''
            + '''2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6'''
            + '''287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED'''
            + '''1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9'''
            + '''93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199'''
            + '''FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 6144-bit
    17: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08'''
            + '''8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B'''
            + '''302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9'''
            + '''A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6'''
            + '''49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8'''
            + '''FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C'''
            + '''180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718'''
            + '''3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D'''
            + '''04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D'''
            + '''B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226'''
            + '''1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC'''
            + '''E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26'''
            + '''99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB'''
            + '''04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2'''
            + '''233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127'''
            + '''D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492'''
            + '''36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406'''
            + '''AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918'''
            + '''DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151'''
            + '''2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03'''
            + '''F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F'''
            + '''BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA'''
            + '''CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B'''
            + '''B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632'''
            + '''387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E'''
            + '''6DCC4024FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 8192-bit
    18: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64'''
            + '''ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7'''
            + '''ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B'''
            + '''F12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31'''
            + '''43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7'''
            + '''88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA'''
            + '''2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6'''
            + '''287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED'''
            + '''1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9'''
            + '''93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492'''
            + '''36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD'''
            + '''F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831'''
            + '''179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B'''
            + '''DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF'''
            + '''5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6'''
            + '''D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3'''
            + '''23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA'''
            + '''CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328'''
            + '''06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C'''
            + '''DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE'''
            + '''12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4'''
            + '''38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300'''
            + '''741FA7BF8AFC47ED2576F6936BA424663AAB639C5AE4F568'''
            + '''3423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9'''
            + '''22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B'''
            + '''4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A'''
            + '''062B3CF5B3A278A66D2A13F83F44F82DDF310EE074AB6A36'''
            + '''4597E899A0255DC164F31CC50846851DF9AB48195DED7EA1'''
            + '''B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92'''
            + '''4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E47'''
            + '''9558E4475677E9AA9E3050E2765694DFC81F56E880B96E71'''
            + '''60C980DD98EDD3DFFFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
}
class  _snake_case     :






						def __init__(       self      :			Any							,					UpperCAmelCase      :			int = 14    ):
													if group not in primes:
																				raise ValueError("Unsupported Group"    )
													__lowerCamelCase					:		int		   =     primes[group]["prime"]
													__lowerCamelCase					:		str		   =     primes[group]["generator"]

													__lowerCamelCase					:		Optional[Any]		   =     int(hexlify(urandom(32    )    )							,					base=16    )






						def       lowerCamelCase__     (       self      :			Tuple    ):
													return hex(self.__private_key    )[2:]






						def       lowerCamelCase__     (       self      :			List[Any]    ):
													__lowerCamelCase					:		Any		   =     pow(self.generator							,					self.__private_key							,					self.prime    )
													return hex(UpperCAmelCase    )[2:]






						def       lowerCamelCase__     (       self      :			List[Any]							,					UpperCAmelCase      :			int    ):
													# check if the other public key is valid based on NIST SP800-56
													return (
													    2 <= key <= self.prime - 2
													    and pow(UpperCAmelCase							,					(self.prime - 1) // 2							,					self.prime    ) == 1
													)






						def       lowerCamelCase__     (       self      :			Optional[int]							,					UpperCAmelCase      :			str    ):
													__lowerCamelCase					:		Optional[int]		   =     int(UpperCAmelCase							,					base=16    )
													if not self.is_valid_public_key(UpperCAmelCase    ):
																				raise ValueError("Invalid public key"    )
													__lowerCamelCase					:		int		   =     pow(UpperCAmelCase							,					self.__private_key							,					self.prime    )
													return shaaaa(str(UpperCAmelCase    ).encode()    ).hexdigest()






						@staticmethod
						def       lowerCamelCase__     (       UpperCAmelCase      :			int							,					UpperCAmelCase      :			int    ):
													# check if the other public key is valid based on NIST SP800-56
													return (
													    2 <= remote_public_key_str <= prime - 2
													    and pow(UpperCAmelCase							,					(prime - 1) // 2							,					UpperCAmelCase    ) == 1
													)







						@staticmethod
						def       lowerCamelCase__     (       UpperCAmelCase      :			str							,					UpperCAmelCase      :			str							,					UpperCAmelCase      :			int = 14    ):
													__lowerCamelCase					:		Optional[Any]		   =     int(UpperCAmelCase							,					base=16    )
													__lowerCamelCase					:		Tuple		   =     int(UpperCAmelCase							,					base=16    )
													__lowerCamelCase					:		List[Any]		   =     primes[group]["prime"]
													if not DiffieHellman.is_valid_public_key_static(UpperCAmelCase							,					UpperCAmelCase    ):
																				raise ValueError("Invalid public key"    )
													__lowerCamelCase					:		Optional[Any]		   =     pow(UpperCAmelCase							,					UpperCAmelCase							,					UpperCAmelCase    )
													return shaaaa(str(UpperCAmelCase    ).encode()    ).hexdigest()


if __name__ == "__main__":
				import doctest

				doctest.testmod()
"""simple docstring"""





import glob
import os
import random
from string import ascii_lowercase, digits

import cva
import numpy as np

# Parrameters
__A  =				(720, 1280)  # Height, Width
__A  =				(0.4, 0.6)  # if height or width lower than this scale, drop it.
__A  =				1 / 100
__A  =				''''''
__A  =				''''''
__A  =				''''''
__A  =				250


def    lowercase_   (   ) ->      None:



							'''simple docstring'''

							__lowerCamelCase   ,  __lowerCamelCase					:		List[Any]		   =     get_dataset(_lowerCamelCase						,   _lowerCamelCase      )
							for index in range(_lowerCamelCase      ):
														__lowerCamelCase					:		Optional[Any]		   =     random.sample(range(len(_lowerCamelCase      )      )						,   4      )
														__lowerCamelCase   ,  __lowerCamelCase   ,  __lowerCamelCase					:		Optional[Any]		   =     update_image_and_anno(
														    _lowerCamelCase						,   _lowerCamelCase						,   _lowerCamelCase						,   _lowerCamelCase						,   _lowerCamelCase						,   filter_scale=_lowerCamelCase						,   )

														# Get random string code: '7b7ad245cdff75241935e4dd860f3bad'
														__lowerCamelCase					:		Tuple		   =     random_chars(32      )
														__lowerCamelCase					:		Dict		   =     path.split(os.sep      )[-1].rsplit("."						,   1      )[0]
														__lowerCamelCase					:		List[str]		   =     F"""{OUTPUT_DIR}/{file_name}_MOSAIC_{letter_code}"""
														cva.imwrite(F"""{file_root}.jpg"""						,   _lowerCamelCase						,   [cva.IMWRITE_JPEG_QUALITY, 85]      )
														print(F"""Succeeded {index+1}/{NUMBER_IMAGES} with {file_name}"""      )
														__lowerCamelCase					:		List[Any]		   =     []
														for anno in new_annos:
																					__lowerCamelCase					:		Any		   =     anno[3] - anno[1]
																					__lowerCamelCase					:		Optional[int]		   =     anno[4] - anno[2]
																					__lowerCamelCase					:		Optional[int]		   =     anno[1] + width / 2
																					__lowerCamelCase					:		Union[str, Any]		   =     anno[2] + height / 2
																					__lowerCamelCase					:		int		   =     F"""{anno[0]} {x_center} {y_center} {width} {height}"""
																					annos_list.append(_lowerCamelCase      )
														with open(F"""{file_root}.txt"""						,   "w"      ) as outfile:
																					outfile.write("\n".join(line for line in annos_list      )      )


def    lowercase_   (   _lowerCamelCase:	str						,   _lowerCamelCase:	str      ) ->      tuple[list, list]:



							'''simple docstring'''

							__lowerCamelCase					:		Optional[int]		   =     []
							__lowerCamelCase					:		Any		   =     []
							for label_file in glob.glob(os.path.join(_lowerCamelCase						,   "*.txt"      )      ):
														__lowerCamelCase					:		List[Any]		   =     label_file.split(os.sep      )[-1].rsplit("."						,   1      )[0]
														with open(_lowerCamelCase      ) as in_file:
																					__lowerCamelCase					:		Tuple		   =     in_file.readlines()
														__lowerCamelCase					:		List[str]		   =     os.path.join(_lowerCamelCase						,   F"""{label_name}.jpg"""      )

														__lowerCamelCase					:		Union[str, Any]		   =     []
														for obj_list in obj_lists:
																					__lowerCamelCase					:		str		   =     obj_list.rstrip("\n"      ).split(" "      )
																					__lowerCamelCase					:		Union[str, Any]		   =     float(obj[1]      ) - float(obj[3]      ) / 2
																					__lowerCamelCase					:		Tuple		   =     float(obj[2]      ) - float(obj[4]      ) / 2
																					__lowerCamelCase					:		Union[str, Any]		   =     float(obj[1]      ) + float(obj[3]      ) / 2
																					__lowerCamelCase					:		Any		   =     float(obj[2]      ) + float(obj[4]      ) / 2

																					boxes.append([int(obj[0]      ), xmin, ymin, xmax, ymax]      )
														if not boxes:
																					continue
														img_paths.append(_lowerCamelCase      )
														labels.append(_lowerCamelCase      )
							return img_paths, labels


def    lowercase_   (   _lowerCamelCase:	list						,   _lowerCamelCase:	list						,   _lowerCamelCase:	list[int]						,   _lowerCamelCase:	tuple[int, int]						,   _lowerCamelCase:	tuple[float, float]						,   _lowerCamelCase:	float = 0.0						,   ) ->      tuple[list, list, str]:



							'''simple docstring'''

							__lowerCamelCase					:		Union[str, Any]		   =     np.zeros([output_size[0], output_size[1], 3]						,   dtype=np.uinta      )
							__lowerCamelCase					:		Optional[Any]		   =     scale_range[0] + random.random() * (scale_range[1] - scale_range[0])
							__lowerCamelCase					:		List[str]		   =     scale_range[0] + random.random() * (scale_range[1] - scale_range[0])
							__lowerCamelCase					:		int		   =     int(scale_x * output_size[1]      )
							__lowerCamelCase					:		Optional[Any]		   =     int(scale_y * output_size[0]      )

							__lowerCamelCase					:		List[Any]		   =     []
							__lowerCamelCase					:		Optional[Any]		   =     []
							for i, index in enumerate(_lowerCamelCase      ):
														__lowerCamelCase					:		List[str]		   =     all_img_list[index]
														path_list.append(_lowerCamelCase      )
														__lowerCamelCase					:		Optional[Any]		   =     all_annos[index]
														__lowerCamelCase					:		List[str]		   =     cva.imread(_lowerCamelCase      )
														if i == 0:  # top-left
																					__lowerCamelCase					:		List[str]		   =     cva.resize(_lowerCamelCase						,   (divid_point_x, divid_point_y)      )
																					__lowerCamelCase					:		Any		   =     img
																					for bbox in img_annos:
																												__lowerCamelCase					:		str		   =     bbox[1] * scale_x
																												__lowerCamelCase					:		Union[str, Any]		   =     bbox[2] * scale_y
																												__lowerCamelCase					:		Optional[int]		   =     bbox[3] * scale_x
																												__lowerCamelCase					:		Union[str, Any]		   =     bbox[4] * scale_y
																												new_anno.append([bbox[0], xmin, ymin, xmax, ymax]      )
														elif i == 1:  # top-right
																					__lowerCamelCase					:		str		   =     cva.resize(_lowerCamelCase						,   (output_size[1] - divid_point_x, divid_point_y)      )
																					__lowerCamelCase					:		Any		   =     img
																					for bbox in img_annos:
																												__lowerCamelCase					:		List[Any]		   =     scale_x + bbox[1] * (1 - scale_x)
																												__lowerCamelCase					:		List[Any]		   =     bbox[2] * scale_y
																												__lowerCamelCase					:		Tuple		   =     scale_x + bbox[3] * (1 - scale_x)
																												__lowerCamelCase					:		Union[str, Any]		   =     bbox[4] * scale_y
																												new_anno.append([bbox[0], xmin, ymin, xmax, ymax]      )
														elif i == 2:  # bottom-left
																					__lowerCamelCase					:		Any		   =     cva.resize(_lowerCamelCase						,   (divid_point_x, output_size[0] - divid_point_y)      )
																					__lowerCamelCase					:		List[str]		   =     img
																					for bbox in img_annos:
																												__lowerCamelCase					:		Any		   =     bbox[1] * scale_x
																												__lowerCamelCase					:		Optional[int]		   =     scale_y + bbox[2] * (1 - scale_y)
																												__lowerCamelCase					:		Dict		   =     bbox[3] * scale_x
																												__lowerCamelCase					:		Tuple		   =     scale_y + bbox[4] * (1 - scale_y)
																												new_anno.append([bbox[0], xmin, ymin, xmax, ymax]      )
														else:  # bottom-right
																					__lowerCamelCase					:		int		   =     cva.resize(
																					    _lowerCamelCase						,   (output_size[1] - divid_point_x, output_size[0] - divid_point_y)      )
																					__lowerCamelCase					:		Optional[Any]		   =     img
																					for bbox in img_annos:
																												__lowerCamelCase					:		Union[str, Any]		   =     scale_x + bbox[1] * (1 - scale_x)
																												__lowerCamelCase					:		Union[str, Any]		   =     scale_y + bbox[2] * (1 - scale_y)
																												__lowerCamelCase					:		int		   =     scale_x + bbox[3] * (1 - scale_x)
																												__lowerCamelCase					:		int		   =     scale_y + bbox[4] * (1 - scale_y)
																												new_anno.append([bbox[0], xmin, ymin, xmax, ymax]      )

    # Remove bounding box small than scale of filter
							if filter_scale > 0:
														__lowerCamelCase					:		str		   =     [
														    anno
														    for anno in new_anno
														    if filter_scale < (anno[3] - anno[1]) and filter_scale < (anno[4] - anno[2])
														]

							return output_img, new_anno, path_list[0]


def    lowercase_   (   _lowerCamelCase:	int      ) ->      str:



							'''simple docstring'''

							assert number_char > 1, "The number of character should greater than 1"
							__lowerCamelCase					:		Tuple		   =     ascii_lowercase + digits
							return "".join(random.choice(_lowerCamelCase      ) for _ in range(_lowerCamelCase      )      )


if __name__ == "__main__":
				main()
				print('''DONE ✅''')