QuizGenerator 0.1.1__tar.gz → 0.1.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/PKG-INFO +1 -1
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/generate.py +0 -29
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/question.py +9 -4
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/pyproject.toml +1 -1
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/.envrc +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/.github/pull_request_template.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/.gitignore +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/CLAUDE.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/CODEOWNERS +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/LICENSE +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/README.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/__init__.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/__main__.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/canvas/__init__.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/canvas/canvas_interface.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/canvas/classes.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/constants.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/contentast.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/logging.yaml +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/misc.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/mixins.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/performance.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/__init__.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/basic.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/__init__.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/languages.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/math_questions.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/memory_questions.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/ostep13_vsfs.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/persistence_questions.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/process.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/__init__.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/gradient_descent/__init__.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/gradient_descent/gradient_calculation.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/gradient_descent/gradient_descent_questions.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/gradient_descent/loss_calculations.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/gradient_descent/misc.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/math_and_data/__init__.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/math_and_data/matrix_questions.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/math_and_data/vector_questions.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/neural-network-basics/__init__.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/neural-network-basics/neural_network_questions.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/tensorflow-intro/__init__.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/tensorflow-intro/tensorflow_questions.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/qrcode_generator.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/quiz.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/typst_utils.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/README.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/GRADING_GUIDE.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/LESSONS_LEARNED-adding_questions.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/PARAMETER_STANDARDS.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/README.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/WEB_UI_INTEGRATION.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/claude_todo.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/custom_questions.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/pypi_release_plan.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/typst_integration_strategy.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/all_classes.yaml +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/cst334.yaml +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/cst463.yaml +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/exam_generation.yaml +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/scratch.yaml +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/specific_generators/cst334.caching.yaml +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/specific_generators/cst334.lab-address_translation.yaml +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/examples/README.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/examples/web_ui_integration_example.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/grade_from_qr.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/scripts/README.md +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/scripts/generate_practice_yaml.sh +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/scripts/print.sh +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/scripts/vendor_lms_interface.py +0 -0
- {quizgenerator-0.1.1 → quizgenerator-0.1.3}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: QuizGenerator
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: Generate randomized quiz questions for Canvas LMS and PDF exams
|
|
5
5
|
Project-URL: Homepage, https://github.com/OtterDen-Lab/QuizGenerator
|
|
6
6
|
Project-URL: Documentation, https://github.com/OtterDen-Lab/QuizGenerator/tree/main/documentation
|
|
@@ -205,35 +205,6 @@ def generate_quiz(
|
|
|
205
205
|
|
|
206
206
|
quiz.describe()
|
|
207
207
|
|
|
208
|
-
# Generate performance report if Canvas questions were generated
|
|
209
|
-
if num_canvas > 0:
|
|
210
|
-
print("\n" + "="*80)
|
|
211
|
-
print("PERFORMANCE ANALYSIS REPORT")
|
|
212
|
-
print("="*80)
|
|
213
|
-
PerformanceTracker.report_summary(min_duration=0.01) # Show operations taking >10ms
|
|
214
|
-
|
|
215
|
-
# Show detailed breakdown for slowest operations
|
|
216
|
-
print("\n" + "="*60)
|
|
217
|
-
print("DETAILED TIMING BREAKDOWN")
|
|
218
|
-
print("="*60)
|
|
219
|
-
|
|
220
|
-
slow_operations = ["canvas_prepare_question", "canvas_api_upload", "ast_render_body", "question_body"]
|
|
221
|
-
for op in slow_operations:
|
|
222
|
-
metrics = PerformanceTracker.get_metrics_by_operation(op)
|
|
223
|
-
if metrics:
|
|
224
|
-
print(f"\n{op.upper()}:")
|
|
225
|
-
# Show stats by question type
|
|
226
|
-
by_type = {}
|
|
227
|
-
for m in metrics:
|
|
228
|
-
qtype = m.question_type or "unknown"
|
|
229
|
-
if qtype not in by_type:
|
|
230
|
-
by_type[qtype] = []
|
|
231
|
-
by_type[qtype].append(m.duration)
|
|
232
|
-
|
|
233
|
-
for qtype, durations in by_type.items():
|
|
234
|
-
avg = sum(durations) / len(durations)
|
|
235
|
-
print(f" {qtype}: {len(durations)} calls, avg {avg:.3f}s (range: {min(durations):.3f}s - {max(durations):.3f}s)")
|
|
236
|
-
|
|
237
208
|
def main():
|
|
238
209
|
|
|
239
210
|
args = parse_args()
|
|
@@ -555,10 +555,15 @@ class Question(abc.ABC):
|
|
|
555
555
|
)
|
|
556
556
|
|
|
557
557
|
def get_answers(self, *args, **kwargs) -> Tuple[Answer.AnswerKind, List[Dict[str,Any]]]:
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
558
|
+
if len(self.answers.values()) > 0:
|
|
559
|
+
return (
|
|
560
|
+
self.answer_kind,
|
|
561
|
+
list(itertools.chain(*[a.get_for_canvas() for a in self.answers.values()]))
|
|
562
|
+
)
|
|
563
|
+
else:
|
|
564
|
+
return (
|
|
565
|
+
Answer.AnswerKind.ESSAY, []
|
|
566
|
+
)
|
|
562
567
|
|
|
563
568
|
def refresh(self, rng_seed=None, *args, **kwargs):
|
|
564
569
|
"""If it is necessary to regenerate aspects between usages, this is the time to do it.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/__init__.py
RENAMED
|
File without changes
|
{quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/languages.py
RENAMED
|
File without changes
|
{quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/math_questions.py
RENAMED
|
File without changes
|
|
File without changes
|
{quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/ostep13_vsfs.py
RENAMED
|
File without changes
|
|
File without changes
|
{quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/process.py
RENAMED
|
File without changes
|
{quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/LESSONS_LEARNED-adding_questions.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/specific_generators/cst334.caching.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|