2009 Stuttgart Open – Singles
Juan Martín del Potro was the defending champion, but chose not to participate that year.
| Singles | |
|---|---|
| 2009 Stuttgart Open | |
| Champion | |
| Runner-up | |
| Final score | 1–6, 6–3, 6–4 |
Jérémy Chardy won in the final 1–6, 6–3, 6–4 against Victor Hănescu.
Seeds
Gilles Simon (Second Round)
Nikolay Davydenko (Quarterfinals)
Tomáš Berdych (First Round)
Victor Hănescu (Final)
Philipp Kohlschreiber (Second Round)
Albert Montañés (withdrew)
Fabrice Santoro (First Round)
José Acasuso (First Round)
Draw
Key
- Q = Qualifier
- WC = Wild Card
- LL = Lucky Loser
- Alt = Alternate
- SE = Special Exempt
- PR = Protected Ranking
- ITF = ITF entry
- JE = Junior Exempt
- w/o = Walkover
- r = Retired
- d = Defaulted
Finals
| Semifinals | Final | ||||||||||||
| 6 | 7 | ||||||||||||
| 3 | 5 | ||||||||||||
| 1 | 6 | 6 | |||||||||||
| 4 | 6 | 3 | 4 | ||||||||||
| 4 | 6 | 64 | 6 | ||||||||||
| 3 | 7 | 2 | |||||||||||
Top half
| First Round | Second Round | Quarterfinals | Semifinals | ||||||||||||||||||||||||
| 1 | 6 | 6 | |||||||||||||||||||||||||
| 3 | 4 | 1 | 3 | 2 | |||||||||||||||||||||||
| 6 | 6 | 6 | 6 | ||||||||||||||||||||||||
| 2 | 4 | 64 | 1 | ||||||||||||||||||||||||
| 6 | 3 | 0 | 7 | 6 | |||||||||||||||||||||||
| 3 | 6 | 6 | 6 | 3 | 1 | ||||||||||||||||||||||
| 6 | 7 | 2 | 6 | 6 | |||||||||||||||||||||||
| 8 | 2 | 64 | 6 | 7 | |||||||||||||||||||||||
| 3 | 3 | 3 | 3 | 5 | |||||||||||||||||||||||
| 6 | 6 | 6 | 6 | ||||||||||||||||||||||||
| 64 | 65 | WC | 3 | 4 | |||||||||||||||||||||||
| WC | 7 | 7 | 6 | 6 | |||||||||||||||||||||||
| Q | 6 | 6 | Q | 2 | 1 | ||||||||||||||||||||||
| Q | 2 | 4 | Q | 6 | 6 | ||||||||||||||||||||||
| 3 | 2 | 5 | 2 | 4 | |||||||||||||||||||||||
| 5 | 6 | 6 | |||||||||||||||||||||||||
Bottom half
| First Round | Second Round | Quarterfinals | Semifinals | ||||||||||||||||||||||||
| LL | 7 | 1 | 6 | ||||||||||||||||||||||||
| Q | 63 | 6 | 2 | LL | 2 | 6 | 6 | ||||||||||||||||||||
| 4 | 4 | 6 | 4 | 3 | |||||||||||||||||||||||
| 6 | 6 | LL | 62 | 4 | |||||||||||||||||||||||
| 6 | 62 | 4 | 4 | 7 | 6 | ||||||||||||||||||||||
| 2 | 7 | 6 | 2 | 1 | |||||||||||||||||||||||
| Q | 4 | 66 | 4 | 6 | 6 | ||||||||||||||||||||||
| 4 | 6 | 7 | 4 | 6 | 64 | 6 | |||||||||||||||||||||
| 7 | 7 | 63 | 1 | 3 | 7 | 2 | |||||||||||||||||||||
| 5 | 7 | 6 | 6 | 4 | |||||||||||||||||||||||
| 64 | 64 | 4 | 1 | r | |||||||||||||||||||||||
| 7 | 7 | 6 | 3 | 7 | |||||||||||||||||||||||
| WC | 0 | 7 | 7 | 2 | 1 | 6 | 5 | ||||||||||||||||||||
| WC | 6 | 63 | 64 | WC | 3 | 3 | |||||||||||||||||||||
| 6 | 5 | 3 | 2 | 6 | 6 | ||||||||||||||||||||||
| 2 | 4 | 7 | 6 | ||||||||||||||||||||||||
gollark: Yes; it's *very hard* to go around editing the FS API such that other stuff isn't affected.
gollark: ```pythonfrom requests_futures.sessions import FuturesSessionimport concurrent.futures as futuresimport randomtry: import cPickle as pickleexcept ImportError: import pickletry: words_to_synonyms = pickle.load(open(".wtscache")) synonyms_to_words = pickle.load(open(".stwcache"))except: words_to_synonyms = {} synonyms_to_words = {}def add_to_key(d, k, v): d[k] = d.get(k, set()).union(set(v))def add_synonyms(syns, word): for syn in syns: add_to_key(synonyms_to_words, syn, [word]) add_to_key(words_to_synonyms, word, syns)def concat(list_of_lists): return sum(list_of_lists, [])def add_words(words): s = FuturesSession(max_workers=100) future_to_word = {s.get("https://api.datamuse.com/words", params={"ml": word}): word for word in words} future_to_word.update({s.get("https://api.datamuse.com/words", params={"ml": word, "v": "enwiki"}): word for word in words}) for future in futures.as_completed(future_to_word): word = future_to_word[future] try: data = future.result().json() except Exception as exc: print(f"{exc} fetching {word}") else: add_synonyms([w["word"] for w in data], word)def getattr_hook(obj, key): results = list(synonyms_to_words.get(key, set()).union(words_to_synonyms.get(key, set()))) if len(results) > 0: return obj.__getattribute__(random.choice(results)) else: raise AttributeError(f"Attribute {key} not found.")def wrap(obj): add_words(dir(obj)) obj.__getattr__ = lambda key: getattr_hook(obj, key)wrap(__builtins__)raise __builtins__.quibble()```
gollark: table.deepcopy, table.shallowcopy, table.slice, table.filter, table.map
gollark: Same with many other utility thingies.
gollark: Not really. They could have table.copy but they don't.
External links
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.