edsl 0.1.34__py3-none-any.whl → 0.1.34.dev1__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"
1
+ __version__ = "0.1.34.dev1"
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
  from typing import Dict, Any, Optional, Set
3
3
  from collections import UserList
4
- import pdb
4
+ import enum
5
5
 
6
6
  from jinja2 import Environment, meta
7
7
 
@@ -172,6 +172,7 @@ 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
+
175
176
  # Gets the instructions for the question - this is how the question should be answered
176
177
  question_prompt = self.question.get_instructions(model=self.model.model)
177
178
 
@@ -197,15 +198,14 @@ class PromptConstructor:
197
198
  self.question.question_options = question_options
198
199
 
199
200
  # might be getting it from the prior answers
200
- if self.prior_answers_dict().get(question_option_key) is not None:
201
- if isinstance(
202
- question_options := self.prior_answers_dict()
203
- .get(question_option_key)
204
- .answer,
205
- list,
206
- ):
207
- question_data["question_options"] = question_options
208
- self.question.question_options = question_options
201
+ if isinstance(
202
+ question_options := self.prior_answers_dict()
203
+ .get(question_option_key)
204
+ .answer,
205
+ list,
206
+ ):
207
+ question_data["question_options"] = question_options
208
+ self.question.question_options = question_options
209
209
 
210
210
  replacement_dict = (
211
211
  {key: f"<see file {key}>" for key in self.scenario_file_keys}
edsl/jobs/Jobs.py CHANGED
@@ -145,21 +145,14 @@ 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()
152
148
 
153
149
  interviews = self.interviews()
154
150
  # data = []
155
151
  interview_indices = []
156
- question_names = []
152
+ question_indices = []
157
153
  user_prompts = []
158
154
  system_prompts = []
159
155
  scenario_indices = []
160
- agent_indices = []
161
- models = []
162
- costs = []
163
156
  from edsl.results.Dataset import Dataset
164
157
 
165
158
  for interview_index, interview in enumerate(interviews):
@@ -167,97 +160,23 @@ class Jobs(Base):
167
160
  interview._get_invigilator(question)
168
161
  for question in self.survey.questions
169
162
  ]
163
+ # list(interview._build_invigilators(debug=False))
170
164
  for _, invigilator in enumerate(invigilators):
171
165
  prompts = invigilator.get_prompts()
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)
166
+ user_prompts.append(prompts["user_prompt"])
167
+ system_prompts.append(prompts["system_prompt"])
178
168
  interview_indices.append(interview_index)
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(
169
+ scenario_indices.append(invigilator.scenario)
170
+ question_indices.append(invigilator.question.question_name)
171
+ return Dataset(
196
172
  [
197
- {"user_prompt": user_prompts},
198
- {"system_prompt": system_prompts},
199
173
  {"interview_index": interview_indices},
200
- {"question_name": question_names},
174
+ {"question_index": question_indices},
175
+ {"user_prompt": user_prompts},
201
176
  {"scenario_index": scenario_indices},
202
- {"agent_index": agent_indices},
203
- {"model": models},
204
- {"estimated_cost": costs},
177
+ {"system_prompt": system_prompts},
205
178
  ]
206
179
  )
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
261
180
 
262
181
  @staticmethod
263
182
  def _get_container_class(object):
@@ -3,7 +3,6 @@
3
3
  from __future__ import annotations
4
4
  import asyncio
5
5
  from typing import Any, Type, List, Generator, Optional, Union
6
- import copy
7
6
 
8
7
  from tenacity import (
9
8
  retry,
@@ -100,17 +99,15 @@ class Interview(InterviewStatusMixin):
100
99
 
101
100
  """
102
101
  self.agent = agent
103
- # what I would like to do
104
- self.survey = copy.deepcopy(survey) # survey copy.deepcopy(survey)
105
- # self.survey = survey
102
+ self.survey = survey
106
103
  self.scenario = scenario
107
104
  self.model = model
108
105
  self.debug = debug
109
106
  self.iteration = iteration
110
107
  self.cache = cache
111
- self.answers: dict[
112
- str, str
113
- ] = Answers() # will get filled in as interview progresses
108
+ self.answers: dict[str, str] = (
109
+ Answers()
110
+ ) # will get filled in as interview progresses
114
111
  self.sidecar_model = sidecar_model
115
112
 
116
113
  # self.stop_on_exception = False
@@ -431,11 +428,11 @@ class Interview(InterviewStatusMixin):
431
428
  """
432
429
  current_question_index: int = self.to_index[current_question.question_name]
433
430
 
434
- next_question: Union[
435
- int, EndOfSurvey
436
- ] = self.survey.rule_collection.next_question(
437
- q_now=current_question_index,
438
- answers=self.answers | self.scenario | self.agent["traits"],
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
+ )
439
436
  )
440
437
 
441
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[
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"]
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
+ )
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[
187
- question_name + "_raw_model_response"
188
- ] = result.raw_model_response
186
+ raw_model_results_dictionary[question_name + "_raw_model_response"] = (
187
+ result.raw_model_response
188
+ )
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,10 +40,8 @@ def create_language_model(
40
40
  _tpm = 1000000000000
41
41
 
42
42
  async def async_execute_model_call(
43
- self,
44
- user_prompt: str,
45
- system_prompt: str,
46
- files_list: Optional[List[Any]] = None,
43
+ self, user_prompt: str, system_prompt: str,
44
+ files_list: Optional[List[Any]] = None
47
45
  ) -> dict[str, Any]:
48
46
  question_number = int(
49
47
  user_prompt.split("XX")[1]
@@ -82,8 +82,7 @@ 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]):
86
- ...
85
+ class FakeData(ModelFactory[self.response_model]): ...
87
86
 
88
87
  self._fake_data_factory = FakeData
89
88
  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[
124
- list[str], list[list], list[float], list[int]
125
- ] = QuestionOptionsDescriptor()
123
+ question_options: Union[list[str], list[list], list[float], list[int]] = (
124
+ QuestionOptionsDescriptor()
125
+ )
126
126
  _response_model = None
127
127
  response_validator_class = MultipleChoiceResponseValidator
128
128
 
@@ -1,6 +1,7 @@
1
1
  This question requires a numerical response in the form of an integer or decimal (e.g., -12, 0, 1, 2, 3.45, ...).
2
2
  Respond with just your number on a single line.
3
3
  If your response is equivalent to zero, report '0'
4
+ If you cannot determine the answer, report 'None'
4
5
 
5
6
  {% if include_comment %}
6
7
  After the answer, put a comment explaining your choice on the next line.
@@ -263,6 +263,7 @@ class FileStore(Scenario):
263
263
 
264
264
 
265
265
  class CSVFileStore(FileStore):
266
+
266
267
  @classmethod
267
268
  def example(cls):
268
269
  from edsl.results.Results import Results
@@ -281,6 +282,7 @@ class CSVFileStore(FileStore):
281
282
 
282
283
 
283
284
  class PDFFileStore(FileStore):
285
+
284
286
  def view(self):
285
287
  pdf_path = self.to_tempfile()
286
288
  print(f"PDF path: {pdf_path}") # Print the path to ensure it exists
@@ -356,6 +358,7 @@ class PDFFileStore(FileStore):
356
358
 
357
359
 
358
360
  class PNGFileStore(FileStore):
361
+
359
362
  @classmethod
360
363
  def example(cls):
361
364
  import textwrap
@@ -379,6 +382,7 @@ class PNGFileStore(FileStore):
379
382
 
380
383
 
381
384
  class SQLiteFileStore(FileStore):
385
+
382
386
  @classmethod
383
387
  def example(cls):
384
388
  import sqlite3
@@ -401,6 +405,7 @@ class SQLiteFileStore(FileStore):
401
405
 
402
406
 
403
407
  class HTMLFileStore(FileStore):
408
+
404
409
  @classmethod
405
410
  def example(cls):
406
411
  import tempfile
edsl/surveys/base.py CHANGED
@@ -36,10 +36,6 @@ class EndOfSurveyParent:
36
36
  """
37
37
  return self
38
38
 
39
- def __deepcopy__(self, memo):
40
- # Return the same instance when deepcopy is called
41
- return self
42
-
43
39
  def __radd__(self, other):
44
40
  """Add the object to another object.
45
41
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edsl
3
- Version: 0.1.34
3
+ Version: 0.1.34.dev1
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=79r5jd-MqbhXLbIBDVBqUJvhvcucjkaId96r46KF18I,23
5
+ edsl/__version__.py,sha256=XhBgcCdTjSpYn65HiKUqna67rnO8Ic__tIbjoMBXW6g,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=7bYvRbh7Roo21SqguP3e7KDY36Swh83Ds5XjtJsgZB4,14712
10
+ edsl/agents/PromptConstructor.py,sha256=BmScHm5y67vnPKMgo-Diq4p_nyVf_G7MB9IHFY7rml8,14599
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=oryxhrBuXs9Ba8mt5BSIjX3gT37hdzothL5xH0ygrkU,37227
91
+ edsl/jobs/Jobs.py,sha256=a2Y-goWT9vGi00OqW7t9L8Oi6SXXiSllymd3s1frX1g,34035
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=iw0thEGwENOl8uzHRJ88zjYHEDSlM_X96Fyse9wZCwM,23883
96
+ edsl/jobs/interviews/Interview.py,sha256=Vt5-6zNazBnp8EZRTA552hy3MyaFxMPkLGgAaIhikzI,23774
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=SXWFTgTYQzqIaBjPQ2mRrxR3aGFMQyw2eD9wX8tZNkQ,12850
106
+ edsl/jobs/runners/JobsRunnerAsyncio.py,sha256=CxO93PO7UGtr9yzrIWDlBjHdq1uAaKoaevsJsYV_3zA,12856
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=lGmflHSq0vLt4zBzYSKxH5dFccfA4Mhj4NM-XhTNZxY,25194
117
+ edsl/language_models/LanguageModel.py,sha256=_f3Gv-1n4ttKWs7aSJG13xRklzxL-wOAn2Gl1jrWh5M,25193
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=GWON2ahCpB-_-hhqmQ5Yi7_rKB4cd8GlucWuq6EnGZQ,2280
126
+ edsl/language_models/utilities.py,sha256=ZEwldu1n4M0YRxcQ1s5q6SOkgc7ld4SLuFMq6hjiHIk,2256
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=QsdYFHnWYh04JpCdx3o3WGgohBfE5X_7idQRRYrx_SA,21169
146
+ edsl/questions/QuestionBase.py,sha256=NY1M1QT3v2ToZJMbzsER4zejOPmczPzxEA_LKmdbsPk,21153
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=Yj94-6fwFqDI9UvjwSCOfKnp4gBB86XMmCsL7lbX-t4,10292
155
+ edsl/questions/QuestionMultipleChoice.py,sha256=SrvT8vS9KOCBogcABOFBhO1gb5Lr0vvmOfoxUkSw-h0,10294
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
@@ -205,7 +205,7 @@ edsl/questions/templates/multiple_choice/answering_instructions.jinja,sha256=eSc
205
205
  edsl/questions/templates/multiple_choice/html.jinja,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
206
206
  edsl/questions/templates/multiple_choice/question_presentation.jinja,sha256=hoEVj4GQD3EYnR2AStXkMFOJeqISNoEVzBd8-cx2yWg,273
207
207
  edsl/questions/templates/numerical/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
- edsl/questions/templates/numerical/answering_instructions.jinja,sha256=70CnuIbdRKGiYJk7316-FFloRh3Oeg_RvUu4tthNKqs,323
208
+ edsl/questions/templates/numerical/answering_instructions.jinja,sha256=BfGAeKFJWEzzvB91x8DrpRUERSvDv6kXf3Y0szL27LY,373
209
209
  edsl/questions/templates/numerical/question_presentation.jinja,sha256=8lMUWtEPHD4XOAyVEfCmWSwRFrdUa3lo8sxzogDyzWE,183
210
210
  edsl/questions/templates/rank/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
211
211
  edsl/questions/templates/rank/answering_instructions.jinja,sha256=-LWrhVJ0ZwQW_DXhARh5GweqlarWbhZzoqwr6tE-33s,433
@@ -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=V_zn2RmVclcBQTvqghotnTO97YHWUXqeVfN7eMfpfUM,13929
232
+ edsl/scenarios/FileStore.py,sha256=mk8jVl2vvP31ufWPruS5ULT4TmbmMWd7NgQbtRIrJE0,13934
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
@@ -253,7 +253,7 @@ edsl/surveys/SurveyExportMixin.py,sha256=Kvkd2ku2Kemsn2Nw-Yt8GTnGFcUqfEiKznmisAe
253
253
  edsl/surveys/SurveyFlowVisualizationMixin.py,sha256=dEG_f-L0ZAyWU5Ta584IX5GZurjVt1tbIISo5z61Jvg,4004
254
254
  edsl/surveys/SurveyQualtricsImport.py,sha256=SSZv53D1zVhQSfSw-X0_cte0QnkWhE9v922wLn6RMkI,9771
255
255
  edsl/surveys/__init__.py,sha256=vjMYVlP95fHVqqw2FfKXRuYbTArZkZr1nK4FnXzZWzs,129
256
- edsl/surveys/base.py,sha256=XJHGEbbsH6hlYYkmI4isVLD8guLz8BdhR-eQRL78mc4,1115
256
+ edsl/surveys/base.py,sha256=n5PBx0BF0powzBXCsufpUekfNK_9huf3rohtU1mMCq0,1001
257
257
  edsl/surveys/descriptors.py,sha256=3B-hBVvGpLlVBCyOnPuxkLjesvpr0QIuATbggp_MJ7o,2076
258
258
  edsl/surveys/instructions/ChangeInstruction.py,sha256=XDLuI5nVI60iJz1w1kLaKmYryAYE0XIyRbElBtNjVVM,1265
259
259
  edsl/surveys/instructions/Instruction.py,sha256=WaTGihAQ6lCtm5W4vknTamkPzDp-eIAirdtGV37fdbc,925
@@ -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.dist-info/LICENSE,sha256=_qszBDs8KHShVYcYzdMz3HNMtH-fKN_p5zjoVAVumFc,1111
293
- edsl-0.1.34.dist-info/METADATA,sha256=lvzCVcOu45OuEW0eWIyoL6qQjCQpkwmi2dLVTEakOs4,4471
294
- edsl-0.1.34.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
295
- edsl-0.1.34.dist-info/RECORD,,
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,,