import torch
# import numpy as np
# import matplotlib.pyplot as plt
# from botorch.models import SingleTaskGP
# from botorch.fit import fit_gpytorch_model
# from botorch.acquisition import UpperConfidenceBound
# from botorch.optim import optimize_acqf
# from botorch.test_functions import Ackley
# from botorch.utils.transforms import unnormalize, normalize
# from gpytorch.mlls import ExactMarginalLogLikelihood

# Set up the Ackley function
# ackley = Ackley(dim=d, noise_std=0.0)

# Define the bounds for the input space
# bounds = torch.tensor([[0.0, 0.0], [1.0, 1.0]])  # Normalized bounds

# Generate initial data
def generate_initial_data(ackley, n, d):
    train_x = torch.rand(n, d)  # Random initial points
    train_obj = - ackley(train_x).unsqueeze(-1)  # Evaluate the Ackley function
    return train_x, train_obj

def score_func(ackley, new_x):
    return - ackley(new_x).unsqueeze(-1)

