Skip to content

Commit af16fb8

Browse files
committed
Choosing a compute dependency order function. Using the functional-programming one. Removing the original, and the werkzeug requirement it had
1 parent 8d48a9a commit af16fb8

File tree

2 files changed

+0
-71
lines changed

2 files changed

+0
-71
lines changed

duolingo.py

-70
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from datetime import datetime
66

77
import requests
8-
from werkzeug.datastructures import MultiDict
98

109
__version__ = "0.3"
1110
__author__ = "Kartik Talwar"
@@ -173,72 +172,6 @@ def _make_dict(keys, array):
173172

174173
return data
175174

176-
@staticmethod
177-
def _compute_dependency_order(skills):
178-
"""
179-
Add a field to each skill indicating the order it was learned
180-
based on the skill's dependencies. Multiple skills will have the same
181-
position if they have the same dependencies.
182-
"""
183-
# Key skills by first dependency. Dependency sets can be uniquely
184-
# identified by one dependency in the set.
185-
dependency_to_skill = MultiDict([(skill['dependencies_name'][0]
186-
if skill['dependencies_name']
187-
else '',
188-
skill)
189-
for skill in skills])
190-
191-
# Start with the first skill and trace the dependency graph through
192-
# skill, setting the order it was learned in.
193-
# TODO: detect cycles, and such
194-
index = 0
195-
previous_skill = ''
196-
while True:
197-
for skill in dependency_to_skill.getlist(previous_skill):
198-
skill['dependency_order'] = index
199-
index += 1
200-
201-
# Figure out the canonical dependency for the next set of skills.
202-
skill_names = set([skill['name']
203-
for skill in
204-
dependency_to_skill.getlist(previous_skill)])
205-
canonical_dependency = skill_names.intersection(
206-
set(dependency_to_skill.keys()))
207-
if canonical_dependency:
208-
previous_skill = canonical_dependency.pop()
209-
else:
210-
# Nothing depends on these skills, so we're done.
211-
break
212-
213-
return skills
214-
215-
@staticmethod
216-
def _compute_dependency_order_1(skills):
217-
# Create dictionary:
218-
skills_dict = {}
219-
for skill in skills:
220-
skills_dict[skill['name']] = skill
221-
# Initial run through nodes
222-
updated = 0
223-
for skill in skills:
224-
if not skill["dependencies_name"]:
225-
skill["dependency_order"] = 1
226-
updated += 1
227-
if updated == 0:
228-
raise DuolingoException("No skills at the bottom of the dependencies tree")
229-
# Further runs
230-
while True:
231-
remaining_nodes = [skill for skill in skills if "dependency_order" not in skill]
232-
if len(remaining_nodes) == 0:
233-
return
234-
updated = 0
235-
for node in remaining_nodes:
236-
if all(["dependency_order" in skills_dict[x] for x in node['dependencies_name']]):
237-
node['dependency_order'] = 1 + max([skills_dict[x]["dependency_order"] for x in node['dependencies_name']])
238-
updated += 1
239-
if updated == 0:
240-
raise DuolingoException("A loop must have been encountered.")
241-
242175
@staticmethod
243176
def _compute_dependency_order_func(skills):
244177
# Create dictionary:
@@ -396,9 +329,6 @@ def get_learned_skills(self, lang):
396329
skill for skill in self.user_data.language_data[lang]['skills']
397330
]
398331

399-
# TODO: pick one
400-
# self._compute_dependency_order(skills)
401-
# self._compute_dependency_order_1(skills)
402332
self._compute_dependency_order_func(skills)
403333

404334
return [skill for skill in

requirements.txt

-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
Werkzeug
21
requests

0 commit comments

Comments
 (0)