<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_nn_info(self, structure, n):
 """ Get all near-neighbor sites as well as the associated image locations and weights of the site with index n using the bond identification algorithm underlying Jmol. Args: structure (Structure):
 input structure. n (integer):
 index of site for which to determine near neighbors. Returns: siw (list of tuples (Site, array, float)):
 tuples, each one of which represents a neighbor site, its image location, and its weight. """


        site = structure[n]

        # Determine relevant bond lengths based on atomic radii table
        bonds = {}
        for el in structure.composition.elements:
            bonds[site.specie, el] = self.get_max_bond_distance(
                site.specie.symbol, el.symbol)

        # Search for neighbors up to max bond length + tolerance
        max_rad = max(bonds.values()) + self.tol
        min_rad = min(bonds.values())

        siw = []
        for neighb, dist in structure.get_neighbors(site, max_rad):
            # Confirm neighbor based on bond length specific to atom pair
            if dist <= (bonds[(site.specie, neighb.specie)]) and (
                    dist > self.min_bond_distance):
                weight = min_rad / dist
                siw.append({'site': neighb,
                            'image': self._get_image(structure, neighb),
                            'weight': weight,
                            'site_index': self._get_original_site(structure,
                                                                  neighb)})
        return siw