#defences.py

from art.defences.detector.evasion.binary_input_detector import BinaryInputDetector #fit x: np.ndarray, y: np.ndarray, batch_size: int = 128,
from art.defences.detector.evasion.binary_activation_detector import BinaryActivationDetector  #fit x: np.ndarray, y: np.ndarray, batch_size: int = 128,
from art.defences.detector.evasion.subsetscanning.detector import SubsetScanningDetector 
#  scan
#       clean_x: np.ndarray,
#         adv_x: np.ndarray,
#         clean_size: int | None = None,
#         adv_size: int | None = None,
#         run: int = 10,


from art.defences.postprocessor.class_labels import ClassLabels  # __call__preds: np.ndarray
from art.defences.postprocessor.gaussian_noise import GaussianNoise #__call__ preds: np.ndarray
from art.defences.postprocessor.high_confidence import HighConfidence #__call__ preds: np.ndarray
from art.defences.postprocessor.postprocessor import Postprocessor #__call__ preds: np.ndarray
from art.defences.postprocessor.reverse_sigmoid import ReverseSigmoid #__call__ preds: np.ndarray
from art.defences.postprocessor.rounded import Rounded #__call__ preds: np.ndarray

# -----
# installation below
#  num_classes: int, or  clip_values: "CLIP_VALUES_TYPE",or both come case
# or     length: int,
from art.defences.preprocessor.cutmix.cutmix import CutMix  #__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.cutmix.cutmix_pytorch import CutMixPyTorch #__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.cutmix.cutmix_tensorflow import CutMixTensorFlowV2#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.cutout.cutout import Cutout#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.cutout.cutout_pytorch import CutoutPyTorch#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.cutout.cutout_tensorflow import CutoutTensorFlowV2#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.feature_squeezing import FeatureSqueezing#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.gaussian_augmentation import GaussianAugmentation#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.inverse_gan import DefenseGAN, InverseGAN#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.jpeg_compression import JpegCompression#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.label_smoothing import LabelSmoothing#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.mixup.mixup import Mixup#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.mixup.mixup_pytorch import MixupPyTorch#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.mixup.mixup_tensorflow import MixupTensorFlowV2#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.mp3_compression import Mp3Compression#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.mp3_compression_pytorch import Mp3CompressionPyTorch#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.pixel_defend import PixelDefend#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.preprocessor import Preprocessor#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.resample import Resample#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.spatial_smoothing import SpatialSmoothing#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.spatial_smoothing_pytorch import SpatialSmoothingPyTorch#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.spatial_smoothing_tensorflow import SpatialSmoothingTensorFlowV2#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.thermometer_encoding import ThermometerEncoding#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.variance_minimization import TotalVarMin#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.video_compression import VideoCompression#__call__  x: np.ndarray, y: np.ndarray 
from art.defences.preprocessor.video_compression_pytorch import VideoCompressionPyTorch#__call__  x: np.ndarray, y: np.ndarray 


# -----
# installation below

# classifier: "CLASSIFIER_LOSS_GRADIENTS_TYPE",

   

from art.defences.trainer.trainer import Trainer #.fit  x: np.ndarray, y: np.ndarray
from art.defences.trainer.adversarial_trainer import AdversarialTrainer #.fit  x: np.ndarray, y: np.ndarray
from art.defences.trainer.certified_adversarial_trainer_pytorch import AdversarialTrainerCertifiedPytorch#.fit  x: np.ndarray, y: np.ndarray
from art.defences.trainer.ibp_certified_trainer_pytorch import AdversarialTrainerCertifiedIBPPyTorch#.fit  x: np.ndarray, y: np.ndarray
from art.defences.trainer.adversarial_trainer_madry_pgd import AdversarialTrainerMadryPGD#.fit  x: np.ndarray, y: np.ndarray
from art.defences.trainer.adversarial_trainer_fbf import AdversarialTrainerFBF#.fit  x: np.ndarray, y: np.ndarray
from art.defences.trainer.adversarial_trainer_fbf_pytorch import AdversarialTrainerFBFPyTorch#.fit  x: np.ndarray, y: np.ndarray
from art.defences.trainer.adversarial_trainer_trades import AdversarialTrainerTRADES#.fit  x: np.ndarray, y: np.ndarray
from art.defences.trainer.adversarial_trainer_trades_pytorch import AdversarialTrainerTRADESPyTorch#.fit  x: np.ndarray, y: np.ndarray
from art.defences.trainer.adversarial_trainer_awp import AdversarialTrainerAWP#.fit  x: np.ndarray, y: np.ndarray
from art.defences.trainer.adversarial_trainer_awp_pytorch import AdversarialTrainerAWPPyTorch#.fit  x: np.ndarray, y: np.ndarray
from art.defences.trainer.adversarial_trainer_oaat import AdversarialTrainerOAAT#.fit  x: np.ndarray, y: np.ndarray
from art.defences.trainer.adversarial_trainer_oaat_pytorch import AdversarialTrainerOAATPyTorch#.fit  x: np.ndarray, y: np.ndarray
from art.defences.trainer.dp_instahide_trainer import DPInstaHideTrainer#.fit  x: np.ndarray, y: np.ndarray