<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def insert(self, i, species, coords, coords_are_cartesian=False, validate_proximity=False, properties=None):
 """ Insert a site to the structure. Args: i (int):
 Index to insert site species (species-like):
 Species of inserted site coords (3x1 array):
 Coordinates of inserted site coords_are_cartesian (bool):
 Whether coordinates are cartesian. Defaults to False. validate_proximity (bool):
 Whether to check if inserted site is too close to an existing site. Defaults to False. properties (dict):
 Properties associated with the site. Returns: New structure with inserted site. """

        if not coords_are_cartesian:
            new_site = PeriodicSite(species, coords, self._lattice,
                                    properties=properties)
        else:
            frac_coords = self._lattice.get_fractional_coords(coords)
            new_site = PeriodicSite(species, frac_coords, self._lattice,
                                    properties=properties)

        if validate_proximity:
            for site in self:
                if site.distance(new_site) < self.DISTANCE_TOLERANCE:
                    raise ValueError("New site is too close to an existing "
                                     "site!")

        self._sites.insert(i, new_site)