edsl 0.1.28__tar.gz → 0.1.29.dev1__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.
Files changed (200) hide show
  1. {edsl-0.1.28 → edsl-0.1.29.dev1}/PKG-INFO +1 -1
  2. edsl-0.1.29.dev1/edsl/__version__.py +1 -0
  3. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/coop/coop.py +1 -1
  4. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/Jobs.py +3 -2
  5. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/results/Results.py +10 -22
  6. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/scenarios/ScenarioList.py +13 -7
  7. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/study/Study.py +1 -1
  8. {edsl-0.1.28 → edsl-0.1.29.dev1}/pyproject.toml +1 -1
  9. edsl-0.1.28/edsl/__version__.py +0 -1
  10. {edsl-0.1.28 → edsl-0.1.29.dev1}/LICENSE +0 -0
  11. {edsl-0.1.28 → edsl-0.1.29.dev1}/README.md +0 -0
  12. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/Base.py +0 -0
  13. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/BaseDiff.py +0 -0
  14. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/__init__.py +0 -0
  15. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/agents/Agent.py +0 -0
  16. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/agents/AgentList.py +0 -0
  17. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/agents/Invigilator.py +0 -0
  18. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/agents/InvigilatorBase.py +0 -0
  19. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/agents/PromptConstructionMixin.py +0 -0
  20. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/agents/__init__.py +0 -0
  21. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/agents/descriptors.py +0 -0
  22. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/config.py +0 -0
  23. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/AgentConstructionMixin.py +0 -0
  24. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/Conjure.py +0 -0
  25. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/InputData.py +0 -0
  26. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/InputDataCSV.py +0 -0
  27. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/InputDataMixinQuestionStats.py +0 -0
  28. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/InputDataPyRead.py +0 -0
  29. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/InputDataSPSS.py +0 -0
  30. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/InputDataStata.py +0 -0
  31. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/QuestionOptionMixin.py +0 -0
  32. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/QuestionTypeMixin.py +0 -0
  33. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/RawQuestion.py +0 -0
  34. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/SurveyResponses.py +0 -0
  35. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/__init__.py +0 -0
  36. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/examples/placeholder.txt +0 -0
  37. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/naming_utilities.py +0 -0
  38. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conjure/utilities.py +0 -0
  39. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conversation/Conversation.py +0 -0
  40. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conversation/car_buying.py +0 -0
  41. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conversation/mug_negotiation.py +0 -0
  42. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/conversation/next_speaker_utilities.py +0 -0
  43. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/coop/__init__.py +0 -0
  44. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/coop/utils.py +0 -0
  45. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/data/Cache.py +0 -0
  46. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/data/CacheEntry.py +0 -0
  47. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/data/CacheHandler.py +0 -0
  48. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/data/SQLiteDict.py +0 -0
  49. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/data/__init__.py +0 -0
  50. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/data/orm.py +0 -0
  51. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/data_transfer_models.py +0 -0
  52. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/enums.py +0 -0
  53. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/exceptions/__init__.py +0 -0
  54. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/exceptions/agents.py +0 -0
  55. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/exceptions/configuration.py +0 -0
  56. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/exceptions/coop.py +0 -0
  57. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/exceptions/data.py +0 -0
  58. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/exceptions/general.py +0 -0
  59. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/exceptions/jobs.py +0 -0
  60. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/exceptions/language_models.py +0 -0
  61. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/exceptions/prompts.py +0 -0
  62. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/exceptions/questions.py +0 -0
  63. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/exceptions/results.py +0 -0
  64. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/exceptions/surveys.py +0 -0
  65. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/inference_services/AnthropicService.py +0 -0
  66. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/inference_services/DeepInfraService.py +0 -0
  67. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/inference_services/GoogleService.py +0 -0
  68. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/inference_services/InferenceServiceABC.py +0 -0
  69. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/inference_services/InferenceServicesCollection.py +0 -0
  70. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/inference_services/OpenAIService.py +0 -0
  71. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/inference_services/__init__.py +0 -0
  72. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/inference_services/models_available_cache.py +0 -0
  73. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/inference_services/rate_limits_cache.py +0 -0
  74. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/inference_services/registry.py +0 -0
  75. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/inference_services/write_available.py +0 -0
  76. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/Answers.py +0 -0
  77. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/__init__.py +0 -0
  78. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/buckets/BucketCollection.py +0 -0
  79. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/buckets/ModelBuckets.py +0 -0
  80. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/buckets/TokenBucket.py +0 -0
  81. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/interviews/Interview.py +0 -0
  82. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/interviews/InterviewStatistic.py +0 -0
  83. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/interviews/InterviewStatisticsCollection.py +0 -0
  84. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/interviews/InterviewStatusDictionary.py +0 -0
  85. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/interviews/InterviewStatusLog.py +0 -0
  86. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/interviews/InterviewStatusMixin.py +0 -0
  87. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/interviews/InterviewTaskBuildingMixin.py +0 -0
  88. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/interviews/ReportErrors.py +0 -0
  89. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/interviews/interview_exception_tracking.py +0 -0
  90. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/interviews/interview_status_enum.py +0 -0
  91. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/interviews/retry_management.py +0 -0
  92. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/runners/JobsRunnerAsyncio.py +0 -0
  93. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/runners/JobsRunnerStatusData.py +0 -0
  94. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/runners/JobsRunnerStatusMixin.py +0 -0
  95. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/tasks/QuestionTaskCreator.py +0 -0
  96. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/tasks/TaskCreators.py +0 -0
  97. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/tasks/TaskHistory.py +0 -0
  98. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/tasks/TaskStatusLog.py +0 -0
  99. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/tasks/task_management.py +0 -0
  100. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/tasks/task_status_enum.py +0 -0
  101. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/tokens/InterviewTokenUsage.py +0 -0
  102. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/jobs/tokens/TokenUsage.py +0 -0
  103. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/language_models/LanguageModel.py +0 -0
  104. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/language_models/ModelList.py +0 -0
  105. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/language_models/RegisterLanguageModelsMeta.py +0 -0
  106. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/language_models/__init__.py +0 -0
  107. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/language_models/registry.py +0 -0
  108. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/language_models/repair.py +0 -0
  109. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/language_models/unused/ReplicateBase.py +0 -0
  110. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/notebooks/Notebook.py +0 -0
  111. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/notebooks/__init__.py +0 -0
  112. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/Prompt.py +0 -0
  113. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/QuestionInstructionsBase.py +0 -0
  114. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/__init__.py +0 -0
  115. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/library/agent_instructions.py +0 -0
  116. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/library/agent_persona.py +0 -0
  117. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/library/question_budget.py +0 -0
  118. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/library/question_checkbox.py +0 -0
  119. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/library/question_extract.py +0 -0
  120. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/library/question_freetext.py +0 -0
  121. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/library/question_linear_scale.py +0 -0
  122. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/library/question_list.py +0 -0
  123. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/library/question_multiple_choice.py +0 -0
  124. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/library/question_numerical.py +0 -0
  125. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/library/question_rank.py +0 -0
  126. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/prompt_config.py +0 -0
  127. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/prompts/registry.py +0 -0
  128. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/AnswerValidatorMixin.py +0 -0
  129. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/QuestionBase.py +0 -0
  130. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/QuestionBudget.py +0 -0
  131. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/QuestionCheckBox.py +0 -0
  132. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/QuestionExtract.py +0 -0
  133. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/QuestionFreeText.py +0 -0
  134. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/QuestionFunctional.py +0 -0
  135. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/QuestionList.py +0 -0
  136. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/QuestionMultipleChoice.py +0 -0
  137. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/QuestionNumerical.py +0 -0
  138. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/QuestionRank.py +0 -0
  139. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/RegisterQuestionsMeta.py +0 -0
  140. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/SimpleAskMixin.py +0 -0
  141. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/__init__.py +0 -0
  142. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/compose_questions.py +0 -0
  143. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/derived/QuestionLikertFive.py +0 -0
  144. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/derived/QuestionLinearScale.py +0 -0
  145. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/derived/QuestionTopK.py +0 -0
  146. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/derived/QuestionYesNo.py +0 -0
  147. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/derived/__init__.py +0 -0
  148. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/descriptors.py +0 -0
  149. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/question_registry.py +0 -0
  150. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/questions/settings.py +0 -0
  151. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/results/Dataset.py +0 -0
  152. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/results/Result.py +0 -0
  153. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/results/ResultsDBMixin.py +0 -0
  154. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/results/ResultsExportMixin.py +0 -0
  155. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/results/ResultsFetchMixin.py +0 -0
  156. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/results/ResultsGGMixin.py +0 -0
  157. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/results/ResultsToolsMixin.py +0 -0
  158. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/results/__init__.py +0 -0
  159. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/scenarios/Scenario.py +0 -0
  160. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/scenarios/ScenarioHtmlMixin.py +0 -0
  161. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/scenarios/ScenarioImageMixin.py +0 -0
  162. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/scenarios/ScenarioListPdfMixin.py +0 -0
  163. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/scenarios/__init__.py +0 -0
  164. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/shared.py +0 -0
  165. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/study/ObjectEntry.py +0 -0
  166. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/study/ProofOfWork.py +0 -0
  167. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/study/SnapShot.py +0 -0
  168. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/study/__init__.py +0 -0
  169. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/surveys/DAG.py +0 -0
  170. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/surveys/Memory.py +0 -0
  171. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/surveys/MemoryPlan.py +0 -0
  172. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/surveys/Rule.py +0 -0
  173. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/surveys/RuleCollection.py +0 -0
  174. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/surveys/Survey.py +0 -0
  175. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/surveys/SurveyCSS.py +0 -0
  176. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/surveys/SurveyExportMixin.py +0 -0
  177. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/surveys/SurveyFlowVisualizationMixin.py +0 -0
  178. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/surveys/__init__.py +0 -0
  179. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/surveys/base.py +0 -0
  180. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/surveys/descriptors.py +0 -0
  181. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/tools/__init__.py +0 -0
  182. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/tools/clusters.py +0 -0
  183. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/tools/embeddings.py +0 -0
  184. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/tools/embeddings_plotting.py +0 -0
  185. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/tools/plotting.py +0 -0
  186. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/tools/summarize.py +0 -0
  187. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/utilities/SystemInfo.py +0 -0
  188. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/utilities/__init__.py +0 -0
  189. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/utilities/ast_utilities.py +0 -0
  190. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/utilities/data/Registry.py +0 -0
  191. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/utilities/data/__init__.py +0 -0
  192. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/utilities/data/scooter_results.json +0 -0
  193. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/utilities/decorators.py +0 -0
  194. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/utilities/gcp_bucket/__init__.py +0 -0
  195. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/utilities/gcp_bucket/cloud_storage.py +0 -0
  196. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/utilities/gcp_bucket/simple_example.py +0 -0
  197. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/utilities/interface.py +0 -0
  198. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/utilities/repair_functions.py +0 -0
  199. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/utilities/restricted_python.py +0 -0
  200. {edsl-0.1.28 → edsl-0.1.29.dev1}/edsl/utilities/utilities.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edsl
3
- Version: 0.1.28
3
+ Version: 0.1.29.dev1
4
4
  Summary: Create and analyze LLM-based surveys
5
5
  Home-page: https://www.expectedparrot.com/
6
6
  License: MIT
@@ -0,0 +1 @@
1
+ __version__ = "0.1.29.dev1"
@@ -211,7 +211,7 @@ class Coop:
211
211
  "version": o.get("version"),
212
212
  "description": o.get("description"),
213
213
  "visibility": o.get("visibility"),
214
- "url": f"{self.url}/explore/{object_page}/{o.get('uuid')}",
214
+ "url": f"{self.url}/content/{o.get('uuid')}",
215
215
  }
216
216
  for o in response.json()
217
217
  ]
@@ -368,7 +368,7 @@ class Jobs(Base):
368
368
  if self.verbose:
369
369
  print(message)
370
370
 
371
- def _check_parameters(self, strict=False) -> None:
371
+ def _check_parameters(self, strict=False, warn = True) -> None:
372
372
  """Check if the parameters in the survey and scenarios are consistent.
373
373
 
374
374
  >>> from edsl import QuestionFreeText
@@ -403,7 +403,8 @@ class Jobs(Base):
403
403
  if strict:
404
404
  raise ValueError(message)
405
405
  else:
406
- warnings.warn(message)
406
+ if warn:
407
+ warnings.warn(message)
407
408
 
408
409
  def run(
409
410
  self,
@@ -757,10 +757,15 @@ class Results(UserList, Mixins, Base):
757
757
 
758
758
  return Dataset(new_data)
759
759
 
760
- def sort_by(self, columns, reverse: bool = False) -> Results:
760
+ def sort_by(self, *columns: str, reverse: bool = False) -> Results:
761
+ import warnings
762
+ warnings.warn("sort_by is deprecated. Use order_by instead.", DeprecationWarning)
763
+ return self.order_by(*columns, reverse=reverse)
764
+
765
+ def order_by(self, *columns: str, reverse: bool = False) -> Results:
761
766
  """Sort the results by one or more columns.
762
767
 
763
- :param columns: A string or a list of strings that are column names.
768
+ :param columns: One or more column names as strings.
764
769
  :param reverse: A boolean that determines whether to sort in reverse order.
765
770
 
766
771
  Each column name can be a single key, e.g. "how_feeling", or a dot-separated string, e.g. "answer.how_feeling".
@@ -768,7 +773,7 @@ class Results(UserList, Mixins, Base):
768
773
  Example:
769
774
 
770
775
  >>> r = Results.example()
771
- >>> r.sort_by(['how_feeling'], reverse=False).select('how_feeling').print()
776
+ >>> r.sort_by('how_feeling', reverse=False).select('how_feeling').print()
772
777
  ┏━━━━━━━━━━━━━━┓
773
778
  ┃ answer ┃
774
779
  ┃ .how_feeling ┃
@@ -781,7 +786,7 @@ class Results(UserList, Mixins, Base):
781
786
  ├──────────────┤
782
787
  │ Terrible │
783
788
  └──────────────┘
784
- >>> r.sort_by(['how_feeling'], reverse=True).select('how_feeling').print()
789
+ >>> r.sort_by('how_feeling', reverse=True).select('how_feeling').print()
785
790
  ┏━━━━━━━━━━━━━━┓
786
791
  ┃ answer ┃
787
792
  ┃ .how_feeling ┃
@@ -795,9 +800,6 @@ class Results(UserList, Mixins, Base):
795
800
  │ Great │
796
801
  └──────────────┘
797
802
  """
798
- if isinstance(columns, str):
799
- columns = [columns]
800
-
801
803
  def to_numeric_if_possible(v):
802
804
  try:
803
805
  return float(v)
@@ -805,28 +807,14 @@ class Results(UserList, Mixins, Base):
805
807
  return v
806
808
 
807
809
  def sort_key(item):
808
- # Create an empty list to store the key components for sorting
809
810
  key_components = []
810
-
811
- # Loop through each column specified in the sort
812
811
  for col in columns:
813
- # Parse the column into its data type and key
814
812
  data_type, key = self._parse_column(col)
815
-
816
- # Retrieve the value from the item based on the parsed data type and key
817
813
  value = item.get_value(data_type, key)
818
-
819
- # Convert the value to numeric if possible, and append it to the key components
820
814
  key_components.append(to_numeric_if_possible(value))
821
-
822
- # Convert the list of key components into a tuple to serve as the sorting key
823
815
  return tuple(key_components)
824
816
 
825
- new_data = sorted(
826
- self.data,
827
- key=sort_key,
828
- reverse=reverse,
829
- )
817
+ new_data = sorted(self.data, key=sort_key, reverse=reverse)
830
818
  return Results(survey=self.survey, data=new_data, created_columns=None)
831
819
 
832
820
  def filter(self, expression: str) -> Results:
@@ -119,7 +119,7 @@ class ScenarioList(Base, UserList, ScenarioListPdfMixin, ResultsExportMixin):
119
119
 
120
120
  return ScenarioList(random.sample(self.data, n))
121
121
 
122
- def expand(self, expand_field: str) -> ScenarioList:
122
+ def expand(self, expand_field: str, number_field = False) -> ScenarioList:
123
123
  """Expand the ScenarioList by a field.
124
124
 
125
125
  Example:
@@ -133,9 +133,11 @@ class ScenarioList(Base, UserList, ScenarioListPdfMixin, ResultsExportMixin):
133
133
  values = scenario[expand_field]
134
134
  if not isinstance(values, Iterable) or isinstance(values, str):
135
135
  values = [values]
136
- for value in values:
136
+ for index, value in enumerate(values):
137
137
  new_scenario = scenario.copy()
138
138
  new_scenario[expand_field] = value
139
+ if number_field:
140
+ new_scenario[expand_field + '_number'] = index + 1
139
141
  new_scenarios.append(new_scenario)
140
142
  return ScenarioList(new_scenarios)
141
143
 
@@ -178,16 +180,20 @@ class ScenarioList(Base, UserList, ScenarioListPdfMixin, ResultsExportMixin):
178
180
 
179
181
  return ScenarioList(new_data)
180
182
 
181
- def order_by(self, field: str, reverse: bool = False) -> ScenarioList:
182
- """Order the scenarios by a field.
183
+ def order_by(self, *fields: str, reverse: bool = False) -> ScenarioList:
184
+ """Order the scenarios by one or more fields.
183
185
 
184
186
  Example:
185
187
 
186
188
  >>> s = ScenarioList([Scenario({'a': 1, 'b': 2}), Scenario({'a': 1, 'b': 1})])
187
- >>> s.order_by('b')
189
+ >>> s.order_by('b', 'a')
188
190
  ScenarioList([Scenario({'a': 1, 'b': 1}), Scenario({'a': 1, 'b': 2})])
189
191
  """
190
- return ScenarioList(sorted(self, key=lambda x: x[field], reverse=reverse))
192
+
193
+ def get_sort_key(scenario: Any) -> tuple:
194
+ return tuple(scenario[field] for field in fields)
195
+
196
+ return ScenarioList(sorted(self, key=get_sort_key, reverse=reverse))
191
197
 
192
198
  def filter(self, expression: str) -> ScenarioList:
193
199
  """
@@ -437,7 +443,7 @@ class ScenarioList(Base, UserList, ScenarioListPdfMixin, ResultsExportMixin):
437
443
  pretty_labels: Optional[dict] = None,
438
444
  filename: str = None,
439
445
  ):
440
- print_scenario_list(self)
446
+ print_scenario_list(self[:max_rows])
441
447
 
442
448
  def __getitem__(self, key: Union[int, slice]) -> Any:
443
449
  """Return the item at the given index.
@@ -473,7 +473,7 @@ class Study:
473
473
  obj_entry.push(refresh=refresh)
474
474
 
475
475
  def __repr__(self):
476
- return f"""Study(name = {self.name}, description = {self.description}, objects = {self.objects}, cache = {self.cache}, filename = {self.filename}, coop = {self.coop}, use_study_cache = {self.use_study_cache}, overwrite_on_change = {self.overwrite_on_change})"""
476
+ return f"""Study(name = {self.name}, description = {self.description}, objects = {self.objects}, cache = {self.cache}, filename = "{self.filename}", coop = {self.coop}, use_study_cache = {self.use_study_cache}, overwrite_on_change = {self.overwrite_on_change})"""
477
477
 
478
478
 
479
479
  if __name__ == "__main__":
@@ -12,7 +12,7 @@ keywords = ["LLM", "social science", "surveys", "user research"]
12
12
  license = "MIT"
13
13
  name = "edsl"
14
14
  readme = "README.md"
15
- version = "0.1.28"
15
+ version = "0.1.29.dev1"
16
16
 
17
17
  [tool.poetry.dependencies]
18
18
  python = ">=3.9.1,<3.13"
@@ -1 +0,0 @@
1
- __version__ = "0.1.28"
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes