edsl 0.1.34.dev1__py3-none-any.whl → 0.1.34.dev2__py3-none-any.whl

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.
edsl/__version__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.1.34.dev1"
1
+ __version__ = "0.1.34.dev2"
@@ -172,7 +172,6 @@ class PromptConstructor:
172
172
  """
173
173
  # The user might have passed a custom prompt, which would be stored in _question_instructions_prompt
174
174
  if not hasattr(self, "_question_instructions_prompt"):
175
-
176
175
  # Gets the instructions for the question - this is how the question should be answered
177
176
  question_prompt = self.question.get_instructions(model=self.model.model)
178
177
 
edsl/jobs/Jobs.py CHANGED
@@ -145,14 +145,21 @@ class Jobs(Base):
145
145
  >>> Jobs.example().prompts()
146
146
  Dataset(...)
147
147
  """
148
+ from edsl import Coop
149
+
150
+ c = Coop()
151
+ price_lookup = c.fetch_prices()
148
152
 
149
153
  interviews = self.interviews()
150
154
  # data = []
151
155
  interview_indices = []
152
- question_indices = []
156
+ question_names = []
153
157
  user_prompts = []
154
158
  system_prompts = []
155
159
  scenario_indices = []
160
+ agent_indices = []
161
+ models = []
162
+ costs = []
156
163
  from edsl.results.Dataset import Dataset
157
164
 
158
165
  for interview_index, interview in enumerate(interviews):
@@ -160,23 +167,97 @@ class Jobs(Base):
160
167
  interview._get_invigilator(question)
161
168
  for question in self.survey.questions
162
169
  ]
163
- # list(interview._build_invigilators(debug=False))
164
170
  for _, invigilator in enumerate(invigilators):
165
171
  prompts = invigilator.get_prompts()
166
- user_prompts.append(prompts["user_prompt"])
167
- system_prompts.append(prompts["system_prompt"])
172
+ user_prompt = prompts["user_prompt"]
173
+ system_prompt = prompts["system_prompt"]
174
+ user_prompts.append(user_prompt)
175
+ system_prompts.append(system_prompt)
176
+ agent_index = self.agents.index(invigilator.agent)
177
+ agent_indices.append(agent_index)
168
178
  interview_indices.append(interview_index)
169
- scenario_indices.append(invigilator.scenario)
170
- question_indices.append(invigilator.question.question_name)
171
- return Dataset(
179
+ scenario_index = self.scenarios.index(invigilator.scenario)
180
+ scenario_indices.append(scenario_index)
181
+ models.append(invigilator.model.model)
182
+ question_names.append(invigilator.question.question_name)
183
+ # cost calculation
184
+ key = (invigilator.model._inference_service_, invigilator.model.model)
185
+ relevant_prices = price_lookup[key]
186
+ inverse_output_price = relevant_prices["output"]["one_usd_buys"]
187
+ inverse_input_price = relevant_prices["input"]["one_usd_buys"]
188
+ input_tokens = len(str(user_prompt) + str(system_prompt)) // 4
189
+ output_tokens = len(str(user_prompt) + str(system_prompt)) // 4
190
+ cost = input_tokens / float(
191
+ inverse_input_price
192
+ ) + output_tokens / float(inverse_output_price)
193
+ costs.append(cost)
194
+
195
+ d = Dataset(
172
196
  [
173
- {"interview_index": interview_indices},
174
- {"question_index": question_indices},
175
197
  {"user_prompt": user_prompts},
176
- {"scenario_index": scenario_indices},
177
198
  {"system_prompt": system_prompts},
199
+ {"interview_index": interview_indices},
200
+ {"question_name": question_names},
201
+ {"scenario_index": scenario_indices},
202
+ {"agent_index": agent_indices},
203
+ {"model": models},
204
+ {"estimated_cost": costs},
178
205
  ]
179
206
  )
207
+ return d
208
+ # if table:
209
+ # d.to_scenario_list().print(format="rich")
210
+ # else:
211
+ # return d
212
+
213
+ def show_prompts(self) -> None:
214
+ """Print the prompts."""
215
+ self.prompts().to_scenario_list().print(format="rich")
216
+
217
+ def estimate_job_cost(self):
218
+ from edsl import Coop
219
+
220
+ c = Coop()
221
+ price_lookup = c.fetch_prices()
222
+
223
+ prompts = self.prompts()
224
+
225
+ text_len = 0
226
+ for prompt in prompts:
227
+ text_len += len(str(prompt))
228
+
229
+ input_token_aproximations = text_len // 4
230
+
231
+ aproximation_cost = {}
232
+ total_cost = 0
233
+ for model in self.models:
234
+ key = (model._inference_service_, model.model)
235
+ relevant_prices = price_lookup[key]
236
+ inverse_output_price = relevant_prices["output"]["one_usd_buys"]
237
+ inverse_input_price = relevant_prices["input"]["one_usd_buys"]
238
+
239
+ aproximation_cost[key] = {
240
+ "input": input_token_aproximations / float(inverse_input_price),
241
+ "output": input_token_aproximations / float(inverse_output_price),
242
+ }
243
+ ##TODO curenlty we approximate the number of output tokens with the number
244
+ # of input tokens. A better solution will be to compute the quesiton answer options length and sum them
245
+ # to compute the output tokens
246
+
247
+ total_cost += input_token_aproximations / float(inverse_input_price)
248
+ total_cost += input_token_aproximations / float(inverse_output_price)
249
+
250
+ # multiply_factor = len(self.agents or [1]) * len(self.scenarios or [1])
251
+ multiply_factor = 1
252
+ out = {
253
+ "input_token_aproximations": input_token_aproximations,
254
+ "models_costs": aproximation_cost,
255
+ "estimated_total_cost": total_cost * multiply_factor,
256
+ "multiply_factor": multiply_factor,
257
+ "single_config_cost": total_cost,
258
+ }
259
+
260
+ return out
180
261
 
181
262
  @staticmethod
182
263
  def _get_container_class(object):
@@ -105,9 +105,9 @@ class Interview(InterviewStatusMixin):
105
105
  self.debug = debug
106
106
  self.iteration = iteration
107
107
  self.cache = cache
108
- self.answers: dict[str, str] = (
109
- Answers()
110
- ) # will get filled in as interview progresses
108
+ self.answers: dict[
109
+ str, str
110
+ ] = Answers() # will get filled in as interview progresses
111
111
  self.sidecar_model = sidecar_model
112
112
 
113
113
  # self.stop_on_exception = False
@@ -428,11 +428,11 @@ class Interview(InterviewStatusMixin):
428
428
  """
429
429
  current_question_index: int = self.to_index[current_question.question_name]
430
430
 
431
- next_question: Union[int, EndOfSurvey] = (
432
- self.survey.rule_collection.next_question(
433
- q_now=current_question_index,
434
- answers=self.answers | self.scenario | self.agent["traits"],
435
- )
431
+ next_question: Union[
432
+ int, EndOfSurvey
433
+ ] = self.survey.rule_collection.next_question(
434
+ q_now=current_question_index,
435
+ answers=self.answers | self.scenario | self.agent["traits"],
436
436
  )
437
437
 
438
438
  next_question_index = next_question.next_q
@@ -173,19 +173,19 @@ class JobsRunnerAsyncio:
173
173
 
174
174
  prompt_dictionary = {}
175
175
  for answer_key_name in answer_key_names:
176
- prompt_dictionary[answer_key_name + "_user_prompt"] = (
177
- question_name_to_prompts[answer_key_name]["user_prompt"]
178
- )
179
- prompt_dictionary[answer_key_name + "_system_prompt"] = (
180
- question_name_to_prompts[answer_key_name]["system_prompt"]
181
- )
176
+ prompt_dictionary[
177
+ answer_key_name + "_user_prompt"
178
+ ] = question_name_to_prompts[answer_key_name]["user_prompt"]
179
+ prompt_dictionary[
180
+ answer_key_name + "_system_prompt"
181
+ ] = question_name_to_prompts[answer_key_name]["system_prompt"]
182
182
 
183
183
  raw_model_results_dictionary = {}
184
184
  for result in valid_results:
185
185
  question_name = result.question_name
186
- raw_model_results_dictionary[question_name + "_raw_model_response"] = (
187
- result.raw_model_response
188
- )
186
+ raw_model_results_dictionary[
187
+ question_name + "_raw_model_response"
188
+ ] = result.raw_model_response
189
189
  raw_model_results_dictionary[question_name + "_cost"] = result.cost
190
190
  one_use_buys = (
191
191
  "NA"
@@ -490,7 +490,7 @@ class LanguageModel(
490
490
  "user_prompt": user_prompt,
491
491
  "system_prompt": system_prompt,
492
492
  "files_list": files_list
493
- #**({"encoded_image": encoded_image} if encoded_image else {}),
493
+ # **({"encoded_image": encoded_image} if encoded_image else {}),
494
494
  }
495
495
  # response = await f(**params)
496
496
  response = await asyncio.wait_for(f(**params), timeout=TIMEOUT)
@@ -534,7 +534,7 @@ class LanguageModel(
534
534
  system_prompt: str,
535
535
  cache: "Cache",
536
536
  iteration: int = 1,
537
- files_list: Optional[List['File']] = None,
537
+ files_list: Optional[List["File"]] = None,
538
538
  ) -> dict:
539
539
  """Get response, parse, and return as string.
540
540
 
@@ -40,8 +40,10 @@ def create_language_model(
40
40
  _tpm = 1000000000000
41
41
 
42
42
  async def async_execute_model_call(
43
- self, user_prompt: str, system_prompt: str,
44
- files_list: Optional[List[Any]] = None
43
+ self,
44
+ user_prompt: str,
45
+ system_prompt: str,
46
+ files_list: Optional[List[Any]] = None,
45
47
  ) -> dict[str, Any]:
46
48
  question_number = int(
47
49
  user_prompt.split("XX")[1]
@@ -82,7 +82,8 @@ class QuestionBase(
82
82
  if not hasattr(self, "_fake_data_factory"):
83
83
  from polyfactory.factories.pydantic_factory import ModelFactory
84
84
 
85
- class FakeData(ModelFactory[self.response_model]): ...
85
+ class FakeData(ModelFactory[self.response_model]):
86
+ ...
86
87
 
87
88
  self._fake_data_factory = FakeData
88
89
  return self._fake_data_factory
@@ -120,9 +120,9 @@ class QuestionMultipleChoice(QuestionBase):
120
120
 
121
121
  question_type = "multiple_choice"
122
122
  purpose = "When options are known and limited"
123
- question_options: Union[list[str], list[list], list[float], list[int]] = (
124
- QuestionOptionsDescriptor()
125
- )
123
+ question_options: Union[
124
+ list[str], list[list], list[float], list[int]
125
+ ] = QuestionOptionsDescriptor()
126
126
  _response_model = None
127
127
  response_validator_class = MultipleChoiceResponseValidator
128
128
 
@@ -263,7 +263,6 @@ class FileStore(Scenario):
263
263
 
264
264
 
265
265
  class CSVFileStore(FileStore):
266
-
267
266
  @classmethod
268
267
  def example(cls):
269
268
  from edsl.results.Results import Results
@@ -282,7 +281,6 @@ class CSVFileStore(FileStore):
282
281
 
283
282
 
284
283
  class PDFFileStore(FileStore):
285
-
286
284
  def view(self):
287
285
  pdf_path = self.to_tempfile()
288
286
  print(f"PDF path: {pdf_path}") # Print the path to ensure it exists
@@ -358,7 +356,6 @@ class PDFFileStore(FileStore):
358
356
 
359
357
 
360
358
  class PNGFileStore(FileStore):
361
-
362
359
  @classmethod
363
360
  def example(cls):
364
361
  import textwrap
@@ -382,7 +379,6 @@ class PNGFileStore(FileStore):
382
379
 
383
380
 
384
381
  class SQLiteFileStore(FileStore):
385
-
386
382
  @classmethod
387
383
  def example(cls):
388
384
  import sqlite3
@@ -405,7 +401,6 @@ class SQLiteFileStore(FileStore):
405
401
 
406
402
 
407
403
  class HTMLFileStore(FileStore):
408
-
409
404
  @classmethod
410
405
  def example(cls):
411
406
  import tempfile
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edsl
3
- Version: 0.1.34.dev1
3
+ Version: 0.1.34.dev2
4
4
  Summary: Create and analyze LLM-based surveys
5
5
  Home-page: https://www.expectedparrot.com/
6
6
  License: MIT
@@ -2,12 +2,12 @@ edsl/Base.py,sha256=wdFpHWlQlGNL4XfOmYA0AK9YupMDxK3G7mDHCQp60o4,9295
2
2
  edsl/BaseDiff.py,sha256=RoVEh52UJs22yMa7k7jv8se01G62jJNWnBzaZngo-Ug,8260
3
3
  edsl/TemplateLoader.py,sha256=sDBlSMt7EfOduM7w3h6v03gvh_Rzn9hVrlS-iLSQdZA,849
4
4
  edsl/__init__.py,sha256=UZcx9RHSi3Dslh2lWvCOeppdMW9Xzw_YLs-kFaNW1MU,1770
5
- edsl/__version__.py,sha256=XhBgcCdTjSpYn65HiKUqna67rnO8Ic__tIbjoMBXW6g,28
5
+ edsl/__version__.py,sha256=voKonN-j0vUxItkRduH4SgbwrZQV8MKBnReeUBbNHRA,28
6
6
  edsl/agents/Agent.py,sha256=ww6DK177eHQUlYkzgnt1b-MBDKXCdhVx3HezAZZ7TKk,28473
7
7
  edsl/agents/AgentList.py,sha256=qo8VK3Ov0YOSbsBcHmlwLZBH81CcDfy5IEcx9AVH78M,10963
8
8
  edsl/agents/Invigilator.py,sha256=6xd4sJ6Jzxld8LZDWZuSCZLL_MfaSux4LJCAm_RLEOM,9077
9
9
  edsl/agents/InvigilatorBase.py,sha256=qIdAiriXAbnJH_SN9w2UAXHcDgQvk8Ar3QerKFjtPwM,10341
10
- edsl/agents/PromptConstructor.py,sha256=BmScHm5y67vnPKMgo-Diq4p_nyVf_G7MB9IHFY7rml8,14599
10
+ edsl/agents/PromptConstructor.py,sha256=J002jaFLQHSwdSGqhBY5THwVb2fBHj6O4-8NsiVsom8,14598
11
11
  edsl/agents/__init__.py,sha256=B1dWfV4QWOo8cc2KeuetdFGeNhZ8XHc0Q8YhQW9k7BE,136
12
12
  edsl/agents/descriptors.py,sha256=m8ND3-2-JbgNX1HGakBNLIeemwsgYa1mQxYO9GW33hw,2934
13
13
  edsl/agents/prompt_helpers.py,sha256=rHUxM_F0kCOkJmnhCyK-amFKViAYvpRRLD8LHFLGqQw,5023
@@ -88,12 +88,12 @@ edsl/inference_services/registry.py,sha256=CwdaQ-A5PTb5lFKMQdOfl8IqCw2SVJ8HlC-_2
88
88
  edsl/inference_services/write_available.py,sha256=NNwhATlaMp8IYY635MSx-oYxt5X15acjAfaqYCo_I1Y,285
89
89
  edsl/jobs/Answers.py,sha256=c4LpigQjdnMr7iJu8571C4FggGPVudfT7hbJgmgKW40,1821
90
90
  edsl/jobs/FailedQuestion.py,sha256=3D5Vcmv1t2_dzBWbkUUIia3_jXHdzQDdyg-4TEIWU2Q,2701
91
- edsl/jobs/Jobs.py,sha256=a2Y-goWT9vGi00OqW7t9L8Oi6SXXiSllymd3s1frX1g,34035
91
+ edsl/jobs/Jobs.py,sha256=oryxhrBuXs9Ba8mt5BSIjX3gT37hdzothL5xH0ygrkU,37227
92
92
  edsl/jobs/__init__.py,sha256=aKuAyd_GoalGj-k7djOoVwEbFUE2XLPlikXaA1_8yAg,32
93
93
  edsl/jobs/buckets/BucketCollection.py,sha256=11CRisE1WAPcAlI3YJK3DVvu0AqSvv8KskXo4Q1waSk,2286
94
94
  edsl/jobs/buckets/ModelBuckets.py,sha256=hxw_tzc0V42CiB7mh5jIxlgwDVJ-zFZhlLtKrHEg8ho,2419
95
95
  edsl/jobs/buckets/TokenBucket.py,sha256=7fG4omzTcj5xC2iJLO9bfBkdAGs6Y3weXzlA3BgPr0E,9090
96
- edsl/jobs/interviews/Interview.py,sha256=Vt5-6zNazBnp8EZRTA552hy3MyaFxMPkLGgAaIhikzI,23774
96
+ edsl/jobs/interviews/Interview.py,sha256=Gt6Fan_b6jD2cv6Pzp1Lr2BCSc6oTmSIrgvIoi1ycfA,23758
97
97
  edsl/jobs/interviews/InterviewExceptionCollection.py,sha256=Ez8BCZUD3odqoY9h-gzYKKM8yaHynQ-eYw2uMDh7t98,3279
98
98
  edsl/jobs/interviews/InterviewExceptionEntry.py,sha256=BGGjj0sb1wJJ0QmYklt1DyEYKD8mUGygllGfN2WXKbY,4903
99
99
  edsl/jobs/interviews/InterviewStatistic.py,sha256=hY5d2EkIJ96NilPpZAvZZzZoxLXM7ss3xx5MIcKtTPs,1856
@@ -103,7 +103,7 @@ edsl/jobs/interviews/InterviewStatusLog.py,sha256=6u0F8gf5tha39VQL-IK_QPkCsQAYVO
103
103
  edsl/jobs/interviews/InterviewStatusMixin.py,sha256=VV0Pel-crUsLoGpTifeIIkXsLGj0bfuO--UtpRnH-dU,1251
104
104
  edsl/jobs/interviews/ReportErrors.py,sha256=RSzDU2rWwtjfztj7sqaMab0quCiY-X2bG3AEOxhTim8,1745
105
105
  edsl/jobs/interviews/interview_status_enum.py,sha256=KJ-1yLAHdX-p8TiFnM0M3v1tnBwkq4aMCuBX6-ytrI8,229
106
- edsl/jobs/runners/JobsRunnerAsyncio.py,sha256=CxO93PO7UGtr9yzrIWDlBjHdq1uAaKoaevsJsYV_3zA,12856
106
+ edsl/jobs/runners/JobsRunnerAsyncio.py,sha256=SXWFTgTYQzqIaBjPQ2mRrxR3aGFMQyw2eD9wX8tZNkQ,12850
107
107
  edsl/jobs/runners/JobsRunnerStatus.py,sha256=4eCh9sRpswGdKeSMW9pCGCAjJZa-OrWUPI7tsxIy_g4,12112
108
108
  edsl/jobs/runners/JobsRunnerStatusData.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
109
  edsl/jobs/tasks/QuestionTaskCreator.py,sha256=f26rokFVXVdyKR2M8of_jlZqP6TPcTAINk9tEvb35pw,10122
@@ -114,7 +114,7 @@ edsl/jobs/tasks/task_management.py,sha256=KMToZuXzMlnHRHUF_VHL0-lHMTGhklf2GHVuwE
114
114
  edsl/jobs/tasks/task_status_enum.py,sha256=DOyrz61YlIS8R1W7izJNphcLrJ7I_ReUlfdRmk23h0Q,5333
115
115
  edsl/jobs/tokens/InterviewTokenUsage.py,sha256=u_6-IHpGFwZ6qMEXr24-jyLVUSSp4dSs_4iAZsBv7O4,1100
116
116
  edsl/jobs/tokens/TokenUsage.py,sha256=odj2-wDNEbHl9noyFAQ0DSKV0D9cv3aDOpmXufKZ8O4,1323
117
- edsl/language_models/LanguageModel.py,sha256=_f3Gv-1n4ttKWs7aSJG13xRklzxL-wOAn2Gl1jrWh5M,25193
117
+ edsl/language_models/LanguageModel.py,sha256=lGmflHSq0vLt4zBzYSKxH5dFccfA4Mhj4NM-XhTNZxY,25194
118
118
  edsl/language_models/ModelList.py,sha256=GhjRV7y1jRvP_Yjgwv6fxksTVb8sFPBiiRRfdqW-hgg,2852
119
119
  edsl/language_models/RegisterLanguageModelsMeta.py,sha256=eMtBSAnlRnC4c-0_o2QkSNyzv-uAce4BEGMXq2PLj2E,7523
120
120
  edsl/language_models/__init__.py,sha256=bvY7Gy6VkX1gSbNkRbGPS-M1kUnb0EohL0FSagaEaTs,109
@@ -123,7 +123,7 @@ edsl/language_models/fake_openai_service.py,sha256=2AAsAinELbMZRqiepwBkWhWcLuMe5
123
123
  edsl/language_models/registry.py,sha256=hfOlKbTkXrXGpZHQQPKE9uyyUCgOxoUyyIaKL2kf53U,4369
124
124
  edsl/language_models/repair.py,sha256=d0i2S3kJfX7JtuCYhlIyT0QP8hcZkRPLanC09lOW_xo,5353
125
125
  edsl/language_models/unused/ReplicateBase.py,sha256=J1oqf7mEyyKhRwNUomnptVqAsVFYCbS3iTW0EXpKtXo,3331
126
- edsl/language_models/utilities.py,sha256=ZEwldu1n4M0YRxcQ1s5q6SOkgc7ld4SLuFMq6hjiHIk,2256
126
+ edsl/language_models/utilities.py,sha256=GWON2ahCpB-_-hhqmQ5Yi7_rKB4cd8GlucWuq6EnGZQ,2280
127
127
  edsl/notebooks/Notebook.py,sha256=xi9xkxmkQ6-DwhqbjjMLpYKB0VJV20AtwEonJ6mnqjo,7739
128
128
  edsl/notebooks/__init__.py,sha256=VNUA3nNq04slWNbYaNrzOhQJu3AZANpvBniyCJSzJ7U,45
129
129
  edsl/prompts/Prompt.py,sha256=KsIz0tZnIqZlnbzNWO57C3MwJ0OCcUrZPmu7DBApc4s,11887
@@ -143,7 +143,7 @@ edsl/prompts/library/question_rank.py,sha256=WDgXyph0EKWJrSgsW2eqcx3xdU-WA1LEvB2
143
143
  edsl/prompts/prompt_config.py,sha256=O3Y5EvBsCeKs9m9IjXiRXOcHWlWvQV0yqsNb2oSR1ow,974
144
144
  edsl/prompts/registry.py,sha256=XOsqGsvNOmIG83jqoszqI72yNZkkszKR4FrEhwSzj_Q,8093
145
145
  edsl/questions/AnswerValidatorMixin.py,sha256=t_ABep50KP02GSc48Y8VAEjp35drVOngfrWXU5aVhgk,11505
146
- edsl/questions/QuestionBase.py,sha256=NY1M1QT3v2ToZJMbzsER4zejOPmczPzxEA_LKmdbsPk,21153
146
+ edsl/questions/QuestionBase.py,sha256=QsdYFHnWYh04JpCdx3o3WGgohBfE5X_7idQRRYrx_SA,21169
147
147
  edsl/questions/QuestionBaseGenMixin.py,sha256=CPxjWZjrxuSO8YWelz6dbp7fm788gN7-T8z7jXStboQ,6017
148
148
  edsl/questions/QuestionBasePromptsMixin.py,sha256=Km1P6PpkVJ9O3dS8pJZHNJ6aQABhYGLwdef4Z2vSrqk,9516
149
149
  edsl/questions/QuestionBudget.py,sha256=TJgPsyqafJdJw5if0zVxh7zHloourINUqUWfWIlRq9Y,8131
@@ -152,7 +152,7 @@ edsl/questions/QuestionExtract.py,sha256=PlXwMeZgPAFBXIHSXpFMYTToag-HwA9C7u6-Z3b
152
152
  edsl/questions/QuestionFreeText.py,sha256=uXJxrrAGCq0-J6WpO6TBNFBNOC2ztoEVa-2UMXuwlak,3384
153
153
  edsl/questions/QuestionFunctional.py,sha256=yZQFLQAxfNsAIETffFoBr-Ltb2oFPeywu-nhm9qjYRc,5133
154
154
  edsl/questions/QuestionList.py,sha256=vs2AE8OnbwVsly-sorb9dfIibdF1BpOaCRYyvwXYSzY,7209
155
- edsl/questions/QuestionMultipleChoice.py,sha256=SrvT8vS9KOCBogcABOFBhO1gb5Lr0vvmOfoxUkSw-h0,10294
155
+ edsl/questions/QuestionMultipleChoice.py,sha256=Yj94-6fwFqDI9UvjwSCOfKnp4gBB86XMmCsL7lbX-t4,10292
156
156
  edsl/questions/QuestionNumerical.py,sha256=_jMZ28DZHYAv_g3Y3vCnmzerMs995on0Ng6j4pDcfHo,4959
157
157
  edsl/questions/QuestionRank.py,sha256=kYHTYXU88X2Uv-zeCiI9w5aEFYTxvg2p7DoGaaER4ik,11596
158
158
  edsl/questions/Quick.py,sha256=h6h4fEvIkLIFJX2JiqfOUEXzku9azWxEpI5o2A4RmVs,1731
@@ -229,7 +229,7 @@ edsl/results/ResultsToolsMixin.py,sha256=mseEFxJCf9sjXdIxpjITt_UZBwdXxw2o2VLg5jM
229
229
  edsl/results/Selector.py,sha256=4AsFD71FKTFY1a0_AImsYWcYKx-RXPG6RgwsAvuNW3k,4403
230
230
  edsl/results/__init__.py,sha256=2YcyiVtXi-3vIV0ZzOy1PqBLm2gaziufJVi4fdNrAt8,80
231
231
  edsl/results/tree_explore.py,sha256=hQjiO4E71rIOPDgEHgK8T8ukxqoNdgX_tvyiDlG4_9U,4624
232
- edsl/scenarios/FileStore.py,sha256=mk8jVl2vvP31ufWPruS5ULT4TmbmMWd7NgQbtRIrJE0,13934
232
+ edsl/scenarios/FileStore.py,sha256=V_zn2RmVclcBQTvqghotnTO97YHWUXqeVfN7eMfpfUM,13929
233
233
  edsl/scenarios/Scenario.py,sha256=ZG1x4_MmWP9j0gakLwsxOZ7ESMy3ifwBMhgQlHvsYo8,16809
234
234
  edsl/scenarios/ScenarioHtmlMixin.py,sha256=EmugmbPJYW5eZS30rM6pDMDQD9yrrvHjmgZWB1qBfq4,1882
235
235
  edsl/scenarios/ScenarioList.py,sha256=v5zmM3AOxbVFN9kez6h8GVbFFAxDlykycXqREDc2h8c,40622
@@ -289,7 +289,7 @@ edsl/utilities/interface.py,sha256=AaKpWiwWBwP2swNXmnFlIf3ZFsjfsR5bjXQAW47tD-8,1
289
289
  edsl/utilities/repair_functions.py,sha256=tftmklAqam6LOQQu_-9U44N-llycffhW8LfO63vBmNw,929
290
290
  edsl/utilities/restricted_python.py,sha256=5-_zUhrNbos7pLhDl9nr8d24auRlquR6w-vKkmNjPiA,2060
291
291
  edsl/utilities/utilities.py,sha256=gqMtWWNEZkWLiRR9vHW-VRNy2bStEPlJ-I2aK9CwFiQ,11367
292
- edsl-0.1.34.dev1.dist-info/LICENSE,sha256=_qszBDs8KHShVYcYzdMz3HNMtH-fKN_p5zjoVAVumFc,1111
293
- edsl-0.1.34.dev1.dist-info/METADATA,sha256=S-k9GEY61HYIUZ60rtZxkPBP0g9V2lb6YfG70P41PFk,4476
294
- edsl-0.1.34.dev1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
295
- edsl-0.1.34.dev1.dist-info/RECORD,,
292
+ edsl-0.1.34.dev2.dist-info/LICENSE,sha256=_qszBDs8KHShVYcYzdMz3HNMtH-fKN_p5zjoVAVumFc,1111
293
+ edsl-0.1.34.dev2.dist-info/METADATA,sha256=HL8x3U8tuYTevkNMVg0Vy8hs_0SqpuZz0MyKre1AHbk,4476
294
+ edsl-0.1.34.dev2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
295
+ edsl-0.1.34.dev2.dist-info/RECORD,,