<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def cut_cuboid( self, a=20, b=None, c=None, origin=None, outside_sliced=True, preserve_bonds=False):
 """Cut a cuboid specified by edge and radius. Args: a (float):
 Value of the a edge. b (float):
 Value of the b edge. Takes value of a if None. c (float):
 Value of the c edge. Takes value of a if None. origin (list):
 Please note that you can also pass an integer. In this case it is interpreted as the index of the atom which is taken as origin. outside_sliced (bool):
 Atoms outside/inside the sphere are cut away. preserve_bonds (bool):
 Do not cut covalent bonds. Returns: Cartesian: """

        if origin is None:
            origin = np.zeros(3)
        elif pd.api.types.is_list_like(origin):
            origin = np.array(origin, dtype='f8')
        else:
            origin = self.loc[origin, ['x', 'y', 'z']]
        b = a if b is None else b
        c = a if c is None else c

        sides = np.array([a, b, c])
        pos = self.loc[:, ['x', 'y', 'z']]
        if outside_sliced:
            molecule = self[((pos - origin) / (sides / 2)).max(axis=1) < 1.]
        else:
            molecule = self[((pos - origin) / (sides / 2)).max(axis=1) > 1.]

        if preserve_bonds:
            molecule = self._preserve_bonds(molecule)
        return molecule