<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def optics(cls, data, eps, minpts, ccore=False):
 """ Constructor of OPTICS clustering.rst algorithm :param data: Input data that is presented as a list of points (objects), where each point is represented by list or tuple :param eps: Connectivity radius between points, points may be connected if distance between them less than the radius :param minpts: Minimum number of shared neighbors that is required for establishing links between points :param amount_clusters: Optional parameter where amount of clusters that should be allocated is specified. In case of usage 'amount_clusters' connectivity radius can be greater than real, in other words, there is place for mistake in connectivity radius usage. :param ccore: if True than DLL CCORE (C++ solution) will be used for solving the problem :return: the resulting clustering.rst object """

        data = cls.input_preprocess(data)
        model = optics(data, eps, minpts)
        return cls(model)