# ─────────────────────────────── CONFIGURATION ──────────────────────────────────────────────────────────────────────────────────────────────
proc_model_cfg = {
    'type': 'mlp3',              # one of: 'mlp100', 'mlp3', 'rf', 'rf_depth'
    'mlp100_hidden': (100,),
    'mlp3_hidden':   (128, 64, 32),
    'rf_n_estimators': 100,
    'rf_max_depth':    10,       # for 'rf'
    'rf_depth_max_depth': 20,    # for 'rf_depth'
}

attack_model_cfg = {
    'type': 'mlp3',          # one of: 'mlp100', 'mlp3', 'rf', 'rf_depth'
    'mlp100_hidden':   (100,),
    'mlp3_hidden':     (128, 64, 32),
    'rf_n_estimators': 200,
    'rf_max_depth':    5,        # for 'rf'
    'rf_depth_max_depth': 15,    # for 'rf_depth'
}  : choose the model for adadetect and surrogate score_function

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
datasets_config = {
    'creditcard': {
        'openml_name': 'creditcard',
        'version': 1,
        'm0': 900,  # inliers in test
        'm1': 100,  # outliers in test
        'description': 'Credit Card Fraud Detection'
    },
    'shuttle': {
        'openml_name': 'shuttle',
        'version': 1,
        'm0': 900,
        'm1': 100,
        'description': 'NASA Shuttle Dataset'
    },
    'kddcup99': {
        'openml_name': 'KDDCup99',
        'version': 1,
        'm0': 900,
        'm1': 100,
        'description': 'Network Intrusion Detection'
    },
    'exchangeable_gaussian': {
        'type': 'synthetic',
        'n_features': 20,
        'm0': 900,  # inliers in test
        'm1': 100,  # outliers in test
        'description': 'Synthetic Exchangeable Gaussian Data'
    },
    'mammography': {
        'openml_name': 'mammography',
        'version': 1,
        'm0': 900,
        'm1': 100,
        'description': 'Mammography - microcalcifications detection'
    },
    'musk': {
        'openml_name': 'musk',
        'version': 1,
        'm0': 581,  # Adjusted to available normal samples (5581 - 5000 calibration)
        'm1': 100,
        'description': 'Musk molecules - musk vs non-musk classification'
    }
}  : define the dataset to use, you need to write it here for new dataset. Or you can change the dataloading like below 
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
For example:
dataset = fetch_openml(name='mammography', version=1, as_frame=False)
X, y = dataset.data, dataset.target
#X=X[:, 4:] 

outliers = X[y == '1']
inliers  = X[y == '-1']

m1, m0 = 100, 900
test1, test0 = outliers[:m1], inliers[:m0]
x = np.vstack([test0, test1])

n_calib = 5000
xnull = inliers[m0 : m0 + n_calib]
print(f"✓ Data loaded: {len(x)} samples ({m0} inliers, {m1} outliers)")
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────  

datasets_to_test = ['creditcard', 'kddcup99', 'mammography', 'shuttle']  :choose which dataset to use

───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

attack2 = HopSkipJump( #attack2 means unused
    classifier=art_surrogate,
    targeted=True,
    verbose=True,  # Enable verbose to see internal progress
    norm=2,
    max_iter=150,    # Increased to match scoreattack.py
    max_eval=100,    # Increased to match scoreattack.py
    init_eval=80,   # Increased to match scoreattack.py
    init_size=80    # Increased to match scoreattack.py
)
attack = BoundaryAttack(
    estimator=art_surrogate,
    targeted=True,   # Use targeted attack
    max_iter=1000,   # More iterations
    num_trial=50,    # More trials per step
    sample_size=20,  # Samples per trial
    init_size=100,   # More initial trials
    min_epsilon=0.01,  # Smaller minimum step size
    step_adapt=0.2,   # Slower step size adaptation
    verbose=True     # Show progress
) : choose the attack method. attack2 is unused. 
