
import numpy as np

# Importing the Keras libraries and packages
import tensorflow as tf
from tensorflow.keras import layers, models

if __name__ == "__main__":
			# Initialising the CNN
			# (Sequential- Building the model layer by layer)
			_lowerCamelCase	:    Optional[Any]          =      models.Sequential()

			# Step 1 - Convolution
			# Here 64,64 is the length & breadth of dataset images and 3 is for the RGB channel
			# (3,3) is the kernel size (filter matrix)
			classifier.add(
			    layers.ConvaD(32, (3, 3), input_shape=(64, 64, 3), activation='''relu''')
			)

			# Step 2 - Pooling
			classifier.add(layers.MaxPoolingaD(pool_size=(2, 2)))

			# Adding a second convolutional layer
			classifier.add(layers.ConvaD(32, (3, 3), activation='''relu'''))
			classifier.add(layers.MaxPoolingaD(pool_size=(2, 2)))

			# Step 3 - Flattening
			classifier.add(layers.Flatten())

			# Step 4 - Full connection
			classifier.add(layers.Dense(units=128, activation='''relu'''))
			classifier.add(layers.Dense(units=1, activation='''sigmoid'''))

			# Compiling the CNN
			classifier.compile(
			    optimizer='''adam''', loss='''binary_crossentropy''', metrics=['''accuracy''']
			)

			# Part 2 - Fitting the CNN to the images

			# Load Trained model weights

			# from keras.models import load_model
			# regressor=load_model('cnn.h5')

			_lowerCamelCase	:    Union[str, Any]          =      tf.keras.preprocessing.image.ImageDataGenerator(
			    rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True
			)

			_lowerCamelCase	:    Optional[Any]          =      tf.keras.preprocessing.image.ImageDataGenerator(rescale=1.0 / 255)

			_lowerCamelCase	:    Union[str, Any]          =      train_datagen.flow_from_directory(
			    '''dataset/training_set''', target_size=(64, 64), batch_size=32, class_mode='''binary'''
			)

			_lowerCamelCase	:    str          =      test_datagen.flow_from_directory(
			    '''dataset/test_set''', target_size=(64, 64), batch_size=32, class_mode='''binary'''
			)

			classifier.fit_generator(
			    training_set, steps_per_epoch=5, epochs=30, validation_data=test_set
			)

			classifier.save('''cnn.h5''')

			# Part 3 - Making new predictions

			_lowerCamelCase	:    List[str]          =      tf.keras.preprocessing.image.load_img(
			    '''dataset/single_prediction/image.png''', target_size=(64, 64)
			)
			_lowerCamelCase	:    List[Any]          =      tf.keras.preprocessing.image.img_to_array(test_image)
			_lowerCamelCase	:    Any          =      np.expand_dims(test_image, axis=0)
			_lowerCamelCase	:    int          =      classifier.predict(test_image)
			# training_set.class_indices
			if result[0][0] == 0:
						_lowerCamelCase	:    Optional[Any]          =      '''Normal'''
			if result[0][0] == 1:
						_lowerCamelCase	:    Optional[int]          =      '''Abnormality detected'''

def 	a_		(	__lowercase       :     int = 50_000_000			)			->  int:
			_snake_case          =      set()
			_snake_case          =      int((limit - 24) ** (1 / 2)			)

			_snake_case          =      set(range(3	, prime_square_limit + 1	, 2			)			)
			primes.add(2			)
			for p in range(3	, prime_square_limit + 1	, 2			):
						if p not in primes:
									continue
						primes.difference_update(set(range(p * p	, prime_square_limit + 1	, __lowercase			)			)			)

			for primea in primes:
						_snake_case          =      primea * primea
						for primea in primes:
									_snake_case          =      primea * primea * primea
									if square + cube >= limit - 16:
												break
									for primea in primes:
												_snake_case          =      primea * primea * primea * primea
												_snake_case          =      square + cube + tetr
												if total >= limit:
															break
												ret.add(__lowercase			)

			return len(__lowercase			)


if __name__ == "__main__":
			print(F'{solution() = }')