<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def build_geometry_by_stop( feed: "Feed", stop_ids: Optional[List[str]] = None, *, use_utm: bool = False, ) -> Dict: """ Return a dictionary with the structure stop_id -> Shapely Point with coordinates of the stop. Parameters feed : Feed use_utm : boolean If ``True``, then return each point in UTM coordinates appropriate to the region; otherwise use the default WGS84 coordinates stop_ids : list Stop IDs (strings) from ``feed.stops`` to restrict output to Returns ------- dictionary Each key is a stop ID and each value is a Shapely Point with coordinates of the stop Notes ----- Assume the following feed attributes are not ``None``: - ``feed.stops`` """

    d = {}
    stops = feed.stops.copy()
    if stop_ids is not None:
        stops = stops[stops["stop_id"].isin(stop_ids)]

    stops = stops[stops.stop_lat.notna() & stops.stop_lon.notna()]

    if use_utm:
        for stop, group in stops.groupby("stop_id"):
            lat, lon = group[["stop_lat", "stop_lon"]].values[0]
            d[stop] = sg.Point(utm.from_latlon(lat, lon)[:2])
    else:
        for stop, group in stops.groupby("stop_id"):
            lat, lon = group[["stop_lat", "stop_lon"]].values[0]
            d[stop] = sg.Point([lon, lat])
    return d