pycityagent 2.0.0a91__cp312-cp312-macosx_11_0_arm64.whl → 2.0.0a92__cp312-cp312-macosx_11_0_arm64.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.
@@ -147,8 +147,8 @@ class CitizenAgent(Agent):
147
147
  person_id = await self.status.get("id")
148
148
  currency = await self.status.get("currency")
149
149
  skill = await self.status.get("work_skill")
150
- consumption = await self.status.get("consumption")
151
- income = await self.status.get("income")
150
+ consumption = 0.0
151
+ income = 0.0
152
152
  await self._economy_client.add_agents(
153
153
  {
154
154
  "id": person_id,
@@ -9,10 +9,10 @@ from pycityagent.workflow.prompt import FormatPrompt
9
9
  logger = logging.getLogger("pycityagent")
10
10
 
11
11
  DISPATCHER_PROMPT = """
12
- Based on the step information, select the most appropriate block to handle the task.
12
+ Based on the task information (which describes the needs of the user), select the most appropriate block to handle the task.
13
13
  Each block has its specific functionality as described in the function schema.
14
14
 
15
- Step information:
15
+ Task information:
16
16
  {step}
17
17
  """
18
18
 
@@ -60,7 +60,7 @@ class BlockDispatcher:
60
60
  """Dispatch the step to appropriate block based on LLM function call"""
61
61
  try:
62
62
  function_schema = self._get_function_schema()
63
- self.prompt.format(step=step)
63
+ self.prompt.format(step=step["intention"])
64
64
 
65
65
  # Call LLM with tools schema
66
66
  function_args = await self.llm.atext_request(
@@ -104,8 +104,8 @@ class ConsumptionBlock(Block):
104
104
  }
105
105
  consumption = min(month_consumption/1, month_consumption-consumption_currency)
106
106
  prices = []
107
- for firm_id in firms_id:
108
- price = await self.economy_client.get(firm_id, 'price')
107
+ for this_firm_id in firms_id:
108
+ price = await self.economy_client.get(this_firm_id, 'price')
109
109
  prices.append(price)
110
110
  consumption_each_firm = consumption*softmax(prices, gamma=-0.01)
111
111
  demand_each_firm = []
@@ -217,8 +217,8 @@ class MonthPlanBlock(Block):
217
217
  consumption = await self.economy_client.get(agent_id, 'consumption')
218
218
  tax_paid = await self.memory.status.get('tax_paid')
219
219
  prices = []
220
- for firm_id in firms_id:
221
- price = await self.economy_client.get(firm_id, 'price')
220
+ for this_firm_id in firms_id:
221
+ price = await self.economy_client.get(this_firm_id, 'price')
222
222
  prices.append(price)
223
223
  price = np.mean(prices)
224
224
  wealth = await self.economy_client.get(agent_id, 'currency')
@@ -25,24 +25,12 @@ Current Time: {now_time}
25
25
 
26
26
  Please initialize the agent's satisfaction levels and parameters based on the profile above. Return the values in JSON format with the following structure:
27
27
 
28
- 1. Current satisfaction levels (0-1 float values, lower means less satisfied):
28
+ Current satisfaction levels (0-1 float values, lower means less satisfied):
29
29
  - hunger_satisfaction: Hunger satisfaction level (Normally, the agent will be less satisfied with hunger at eating time)
30
30
  - energy_satisfaction: Energy satisfaction level (Normally, at night, the agent will be less satisfied with energy)
31
31
  - safety_satisfaction: Safety satisfaction level (Normally, the agent will be more satisfied with safety when they have high income and currency)
32
32
  - social_satisfaction: Social satisfaction level
33
33
 
34
- 2. Natural decay rates per hour (0-1 float values):
35
- - alpha_H: Hunger satisfaction decay rate
36
- - alpha_D: Energy satisfaction decay rate
37
- - alpha_P: Safety satisfaction decay rate
38
- - alpha_C: Social satisfaction decay rate
39
-
40
- 3. Threshold values (0-1 float values, below which the agent will try to improve):
41
- - T_H: Hunger satisfaction threshold
42
- - T_D: Energy satisfaction threshold
43
- - T_S: Safety satisfaction threshold
44
- - T_C: Social satisfaction threshold
45
-
46
34
  Example response format (Do not return any other text):
47
35
  {{
48
36
  "current_satisfaction": {{
@@ -50,18 +38,6 @@ Example response format (Do not return any other text):
50
38
  "energy_satisfaction": 0.7,
51
39
  "safety_satisfaction": 0.9,
52
40
  "social_satisfaction": 0.6
53
- }},
54
- "decay_rates": {{
55
- "alpha_H": 0.2,
56
- "alpha_D": 0.08,
57
- "alpha_P": 0.05,
58
- "alpha_C": 0.03
59
- }},
60
- "thresholds": {{
61
- "T_H": 0.4,
62
- "T_D": 0.2,
63
- "T_S": 0.2,
64
- "T_C": 0.2
65
41
  }}
66
42
  }}
67
43
  """
@@ -120,10 +96,10 @@ class NeedsBlock(Block):
120
96
  0.2,
121
97
  0.08,
122
98
  0.05,
123
- 0.03,
99
+ 0.1,
124
100
  ) # Hunger decay rate, Energy decay rate, Safety decay rate, Social decay rate
125
101
  self.T_H, self.T_D, self.T_P, self.T_C = (
126
- 0.4,
102
+ 0.3,
127
103
  0.2,
128
104
  0.2,
129
105
  0.2,
@@ -151,31 +127,28 @@ class NeedsBlock(Block):
151
127
  now_time=await self.simulator.get_time(format_time=True),
152
128
  )
153
129
  response = await self.llm.atext_request(self.initial_prompt.to_dialog())
154
- response = await self.llm.atext_request(self.initial_prompt.to_dialog())
155
130
  response = self.clean_json_response(response)
156
- try:
157
- satisfaction = json.loads(response)
158
- satisfactions = satisfaction["current_satisfaction"]
159
- await self.memory.status.update(
160
- "hunger_satisfaction", satisfactions["hunger_satisfaction"]
161
- )
162
- await self.memory.status.update(
163
- "energy_satisfaction", satisfactions["energy_satisfaction"]
164
- )
165
- await self.memory.status.update(
166
- "safety_satisfaction", satisfactions["safety_satisfaction"]
167
- )
168
- await self.memory.status.update(
169
- "social_satisfaction", satisfactions["social_satisfaction"]
170
- )
171
- self.alpha_H, self.alpha_D, self.alpha_P, self.alpha_C = satisfaction[
172
- "decay_rates"
173
- ].values()
174
- self.T_H, self.T_D, self.T_P, self.T_C = satisfaction[
175
- "thresholds"
176
- ].values()
177
- except json.JSONDecodeError:
178
- logger.warning(f"初始化响应不是有效的JSON格式: {response}")
131
+ retry = 3
132
+ while retry > 0:
133
+ try:
134
+ satisfaction = json.loads(response)
135
+ satisfactions = satisfaction["current_satisfaction"]
136
+ await self.memory.status.update(
137
+ "hunger_satisfaction", satisfactions["hunger_satisfaction"]
138
+ )
139
+ await self.memory.status.update(
140
+ "energy_satisfaction", satisfactions["energy_satisfaction"]
141
+ )
142
+ await self.memory.status.update(
143
+ "safety_satisfaction", satisfactions["safety_satisfaction"]
144
+ )
145
+ await self.memory.status.update(
146
+ "social_satisfaction", satisfactions["social_satisfaction"]
147
+ )
148
+ break
149
+ except json.JSONDecodeError:
150
+ logger.warning(f"初始化响应不是有效的JSON格式: {response}")
151
+ retry -= 1
179
152
 
180
153
  current_plan = await self.memory.status.get("current_plan")
181
154
  history = await self.memory.status.get("plan_history")
@@ -175,7 +175,7 @@ class PlanBlock(Block):
175
175
  "tired": ["Sleep", "Take a nap"],
176
176
  "safe": ["Go to work"],
177
177
  "social": ["Online social", "Shopping"],
178
- "whatever": ["Learning", "Entertainment", "Hang out", "Exercise"],
178
+ "whatever": ["Contact with friends", "Hang out"],
179
179
  }
180
180
 
181
181
  # configurable fields
@@ -250,7 +250,7 @@ class MessageBlock(Block):
250
250
  def __init__(self, agent, llm: LLM, memory: Memory, simulator: Simulator):
251
251
  super().__init__("MessageBlock", llm=llm, memory=memory, simulator=simulator)
252
252
  self.agent = agent
253
- self.description = "Generate and send a message to someone"
253
+ self.description = "Send a message to someone"
254
254
  self.find_person_block = FindPersonBlock(llm, memory, simulator)
255
255
 
256
256
  # configurable fields
@@ -387,20 +387,12 @@ class SocialBlock(Block):
387
387
  # Execute the selected sub-block and get the result
388
388
  result = await selected_block.forward(step, context)
389
389
 
390
- consumption_end = (
391
- self.llm.prompt_tokens_used + self.llm.completion_tokens_used
392
- )
393
- self.token_consumption += consumption_end - consumption_start
394
-
395
390
  return result
396
391
 
397
- except:
398
- consumption_end = (
399
- self.llm.prompt_tokens_used + self.llm.completion_tokens_used
400
- )
401
- self.token_consumption += consumption_end - consumption_start
392
+ except Exception as e:
402
393
  return {
403
- "success": True,
404
- "evaluation": "Completed social interaction with default behavior",
394
+ "success": False,
395
+ "evaluation": "Failed to complete social interaction with default behavior",
405
396
  "consumed_time": 15,
397
+ "node_id": None,
406
398
  }
@@ -66,8 +66,6 @@ def memory_config_societyagent():
66
66
  "goods_consumption": (int, 0, False),
67
67
  "work_propensity": (float, 0.0, False),
68
68
  "consumption_propensity": (float, 0.0, False),
69
- "income_currency": (float, 0.0, False), # monthly income
70
- "to_income": (float, 0.0, False),
71
69
  "to_consumption_currency": (float, 0.0, False),
72
70
  "firm_id": (int, 0, False),
73
71
  "government_id": (int, 0, False),
@@ -168,13 +166,13 @@ def memory_config_societyagent():
168
166
  True,
169
167
  ),
170
168
  "family_consumption": (str, random.choice(["low", "medium", "high"]), True),
171
- "consumption": (float, 0, True),
169
+ "consumption": (str, random.choice(["low", "slightly low", "medium", "slightly high", "high"]), True),
172
170
  "personality": (
173
171
  str,
174
172
  random.choice(["outgoint", "introvert", "ambivert", "extrovert"]),
175
173
  True,
176
174
  ),
177
- "income": (float, 0, True),
175
+ "income": (float, random.randint(1000, 20000), True),
178
176
  "currency": (float, random.randint(1000, 100000), True),
179
177
  "residence": (str, random.choice(["city", "suburb", "rural"]), True),
180
178
  "race": (
@@ -21,14 +21,16 @@ async def mobility_metric(simulation):
21
21
 
22
22
  async def economy_metric(simulation):
23
23
  # 使用函数属性来存储计数
24
- if not hasattr(economy_metric, 'step_count'):
24
+ if not hasattr(economy_metric, 'nbs_id'):
25
25
  economy_metric.nbs_id = None
26
+ if not hasattr(economy_metric, 'nbs_uuid'):
26
27
  economy_metric.nbs_uuid = None
27
28
 
28
29
  if economy_metric.nbs_id is None:
29
30
  nbs_id = await simulation.economy_client.get_org_entity_ids(economyv2.ORG_TYPE_NBS)
30
31
  nbs_id = nbs_id[0]
31
32
  economy_metric.nbs_id = nbs_id
33
+ if economy_metric.nbs_uuid is None:
32
34
  nbs_uuids = await simulation.filter(types=[NBSAgent])
33
35
  economy_metric.nbs_uuid = nbs_uuids[0]
34
36
 
pycityagent/llm/llm.py CHANGED
@@ -280,14 +280,15 @@ class LLM:
280
280
  if hasattr(e, "http_status"):
281
281
  print(f"HTTP status code: {e.http_status}") # type: ignore
282
282
  else:
283
- print("An error occurred:", e)
283
+ print("OpenAIError:", e)
284
284
  if attempt < retries - 1:
285
285
  await asyncio.sleep(2**attempt)
286
286
  else:
287
287
  raise e
288
288
  except Exception as e:
289
- print("An error occurred:", e)
289
+ print("LLM Error (OpenAI):", e)
290
290
  if attempt < retries - 1:
291
+ print(dialog)
291
292
  await asyncio.sleep(2**attempt)
292
293
  else:
293
294
  raise e
@@ -342,7 +343,7 @@ class LLM:
342
343
  else:
343
344
  raise e
344
345
  except Exception as e:
345
- print("An error occurred:", e)
346
+ print("LLM Error:", e)
346
347
  if attempt < retries - 1:
347
348
  await asyncio.sleep(2**attempt)
348
349
  else:
@@ -8,7 +8,7 @@ PROFILE_ATTRIBUTES = {
8
8
  "skill": str(),
9
9
  "occupation": str(),
10
10
  "family_consumption": str(),
11
- "consumption": float(),
11
+ "consumption": str(),
12
12
  "personality": str(),
13
13
  "income": float(),
14
14
  "currency": float(),
@@ -12,7 +12,7 @@ PROFILE_SCHEMA = {
12
12
  {"name": "skill", "type": "string"},
13
13
  {"name": "occupation", "type": "string"},
14
14
  {"name": "family_consumption", "type": "string"},
15
- {"name": "consumption", "type": "float"},
15
+ {"name": "consumption", "type": "string"},
16
16
  {"name": "personality", "type": "string"},
17
17
  {"name": "income", "type": "float"},
18
18
  {"name": "currency", "type": "float"},
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pycityagent
3
- Version: 2.0.0a91
3
+ Version: 2.0.0a92
4
4
  Summary: LLM-based city environment agent building library
5
5
  Author-email: Yuwei Yan <pinkgranite86@gmail.com>, Junbo Yan <yanjb20thu@gmali.com>, Jun Zhang <zhangjun990222@gmali.com>
6
6
  License: MIT License
@@ -1,9 +1,3 @@
1
- pycityagent-2.0.0a91.dist-info/RECORD,,
2
- pycityagent-2.0.0a91.dist-info/LICENSE,sha256=n2HPXiupinpyHMnIkbCf3OTYd3KMqbmldu1e7av0CAU,1084
3
- pycityagent-2.0.0a91.dist-info/WHEEL,sha256=VujM3ypTCyUW6hcTDdK2ej0ARVMxlU1Djlh_zWnDgqk,109
4
- pycityagent-2.0.0a91.dist-info/entry_points.txt,sha256=BZcne49AAIFv-hawxGnPbblea7X3MtAtoPyDX8L4OC4,132
5
- pycityagent-2.0.0a91.dist-info/top_level.txt,sha256=yOmeu6cSXmiUtScu53a3s0p7BGtLMaV0aff83EHCTic,43
6
- pycityagent-2.0.0a91.dist-info/METADATA,sha256=p0o_OmiXN5jeCeFL-Yp9qt5TVb0nj2bmu-HSkagl9r8,9110
7
1
  pycityagent/pycityagent-sim,sha256=Ax6cjHjT8VcT5t07VboL_Ruor2eXSdSEml4Jvv-L5dQ,36972594
8
2
  pycityagent/__init__.py,sha256=PUKWTXc-xdMG7px8oTNclodsILUgypANj2Z647sY63k,808
9
3
  pycityagent/pycityagent-ui,sha256=Ur95yZygIaZ5l_CDqP9394M5GQ66iV5PkcNPYFWqzvk,41225346
@@ -15,7 +9,7 @@ pycityagent/tools/__init__.py,sha256=y7sMVMHf0AbivlczM2h-kr7mkgXK-WAx3S9BXLXkWvw
15
9
  pycityagent/tools/tool.py,sha256=4ZJSHbNM8dfAVwZEw8T0a2_9OuPsPQpKSVL4WxZVBUc,9022
16
10
  pycityagent/llm/llmconfig.py,sha256=6AqCMV4B_JqBD2mb98bLGzpUdlOCnziQKae-Hhxxp-E,469
17
11
  pycityagent/llm/__init__.py,sha256=iWs6FLgrbRVIiqOf4ILS89gkVCTvS7HFC3vG-MWuyko,205
18
- pycityagent/llm/llm.py,sha256=vMw9AVftrsmbGkhRIwJ7jftFWpzTofhfQmu7TazDCaQ,20019
12
+ pycityagent/llm/llm.py,sha256=YJy5SleUpHvS5v0S-wnnrY4zTbu_2RL36LH-zCYKPEI,20048
19
13
  pycityagent/llm/embeddings.py,sha256=3610I-_scAy8HwRNpT8hVJpH9_8_pTLCPptqnzSq10o,11322
20
14
  pycityagent/llm/utils.py,sha256=rSx_fp-_Gh0vZ-x2rqAUqnpS56BVTZ4ChfAMarB8S1A,195
21
15
  pycityagent/memory/memory.py,sha256=5mUweo-BgQYbXmVRAk7HTUXsar6O6iYz79VbLuMAvjo,45063
@@ -24,7 +18,7 @@ pycityagent/memory/__init__.py,sha256=NClJAXC4G6I8kFWkPEcU2lbVDfyrRb5HrrBHgCXrzO
24
18
  pycityagent/memory/memory_base.py,sha256=av_sbD62PZbJyM8E9wmVuqYqgsutghcO7nJdAxGpHi0,9784
25
19
  pycityagent/memory/self_define.py,sha256=rndjWvQfi4x_90jtQWuCtWwLFBKqe7sExsDqs4I-KEw,5224
26
20
  pycityagent/memory/utils.py,sha256=oJWLdPeJy_jcdKcDTo9JAH9kDZhqjoQhhv_zT9qWC0w,877
27
- pycityagent/memory/const.py,sha256=nFmjvt-8FEB0hc0glOH3lliqJhkhf3D_NKxWI0pf6TY,936
21
+ pycityagent/memory/const.py,sha256=Wgsx0oztDrJDEpI9Dr6XeI6GXrABcP0UTOuEvMp1AD8,934
28
22
  pycityagent/memory/faiss_query.py,sha256=KPeyzIjD0dzkxr-TlOeCiIlkdh1WAyyipCAXUEt97Lk,17350
29
23
  pycityagent/memory/state.py,sha256=JFCBuK1AS-HqscvdGS9ATF9AUU8t29_2leDY_6iO2_4,5158
30
24
  pycityagent/simulation/simulation.py,sha256=bHpR3FtUM6ewurwByRr57OgdTWXTPq9-knIjGt2GHlo,49370
@@ -34,7 +28,7 @@ pycityagent/simulation/storage/pg.py,sha256=xRshSOGttW-p0re0fNBOjOpb-nQ5msIE2Lsd
34
28
  pycityagent/message/message_interceptor.py,sha256=QWuTUqi1Cu214fhFs0f78tD2zflMnb6zEAGB4RutXxs,17736
35
29
  pycityagent/message/__init__.py,sha256=f5QH7DKPqEAMyfSlBMnl3uouOKlsoel909STlIe7nUk,276
36
30
  pycityagent/message/messager.py,sha256=UdOyEMLmaF3ZUvXHmratZxKNEb3BpmN7VyRdvGJWTL4,9060
37
- pycityagent/utils/avro_schema.py,sha256=dzytGiDy5tDFTi5QJ8pHySl9xrbXZ0Qwrc1ONUhfzwk,4150
31
+ pycityagent/utils/avro_schema.py,sha256=hReb58T9teiNS9_YS36n1iiaBLW6jS4MRmcaWsL3Iu8,4151
38
32
  pycityagent/utils/__init__.py,sha256=GQEa4x_uJBK19Z57vfm9Omvqg1c4ysi3QJ9wx8xiDhI,524
39
33
  pycityagent/utils/survey_util.py,sha256=o-gvmmfus3vMIN-EMWPzfLbHkDH4DfZb8B-yBd_mGYk,2076
40
34
  pycityagent/utils/pg_query.py,sha256=KAcnBDLyzUu2il18SGXxk8dySdBen_8ejfpxiWuKUMA,2225
@@ -45,7 +39,7 @@ pycityagent/utils/parsers/parser_base.py,sha256=ZbqRcqOBL9hfHVZSltQSQmJnWrtuJS9a
45
39
  pycityagent/utils/parsers/json_parser.py,sha256=sakKohUuMcUH2toR85CAG_37D02ZoAn6LlzLgftUjmo,2923
46
40
  pycityagent/agent/agent_base.py,sha256=nz9QNfNjWVDza1yd8OwqmjZM3sq4fqONnVpcI8mA8cI,39488
47
41
  pycityagent/agent/__init__.py,sha256=U20yKu9QwSqAx_PHk5JwipfODkDfxONtumVfnsKjWFg,180
48
- pycityagent/agent/agent.py,sha256=Ymv3CtEPGcayVWrNnXkeWQXRNYEuvniWCqUfn2UZy8Y,19073
42
+ pycityagent/agent/agent.py,sha256=TMusq6As7gfZAiFr2XB1H-4tlHrWFEOm7ytPjvxl6K4,19012
49
43
  pycityagent/cli/wrapper.py,sha256=bAwmfWTXbGld-uiMnIMhKp22IVRQjhLUToknyUDk9rQ,1147
50
44
  pycityagent/workflow/__init__.py,sha256=H08Ko3eliZvuuCMajbEri-IP4-SeswYU6UjHBNA4Ze0,490
51
45
  pycityagent/workflow/prompt.py,sha256=rzenP4EFGxbWE1aq-x2036b6umKvi5cQx2xtWULwgIk,3392
@@ -72,8 +66,8 @@ pycityagent/environment/sim/social_service.py,sha256=Y4A56aKXsjSv18UFumGPjQoJVMc
72
66
  pycityagent/environment/sim/light_service.py,sha256=q4pKcGrm7WU0h29I1dFIDOz2OV0BM-2s37uC6zokkoA,4290
73
67
  pycityagent/environment/sim/clock_service.py,sha256=4Hly8CToghj0x_XbDgGrIZy1YYAlDH0EUGCiCDYpk_I,1375
74
68
  pycityagent/environment/sim/road_service.py,sha256=Bb1sreO0Knt9tcqH_WJF-I3P3G92bRAlzDBEa--25GE,1297
75
- pycityagent/cityagent/metrics.py,sha256=wVxLpk4jvVoPf2baiK-jMIi2rPPMRnFpSjOVyj1k74A,2718
76
- pycityagent/cityagent/memory_config.py,sha256=lCySjh8jpE3Sj-_XTCPizxJN8rjfcYD54sed7wi2EDw,11958
69
+ pycityagent/cityagent/metrics.py,sha256=R_2Iv6l2yd6i43pkcg6n3qBm4Jdfsgg36_VWudnW8xA,2802
70
+ pycityagent/cityagent/memory_config.py,sha256=IRjLINqIU-HWwwXljh1Air4n8hVEbQ-KqUdDRZLZu8o,11946
77
71
  pycityagent/cityagent/bankagent.py,sha256=I6MNG1fUbxKyWCLxCtvOjeVahong_LhHQKmJdRPhQL8,4097
78
72
  pycityagent/cityagent/__init__.py,sha256=gcBQ-a50XegFtjigQ7xDXRBZrywBKqifiQFSRnEF8gM,572
79
73
  pycityagent/cityagent/firmagent.py,sha256=vZr7kdjnxcCZ5qX7hmUIYuQQWd44GcRPbdi76WGSFy4,3760
@@ -82,16 +76,22 @@ pycityagent/cityagent/initial.py,sha256=tVcO9ECGvsFatpxQirZbZf0ESFBxSpSxkm4p0x2k
82
76
  pycityagent/cityagent/societyagent.py,sha256=i7V7BeCb_pMJpxwiR5AOUcNHRw0SXHXltt_DtCxE6pE,20121
83
77
  pycityagent/cityagent/message_intercept.py,sha256=dyT1G-nMxKb2prhgtyFFHFz593qBrkk5DnHsHvG1OIc,4418
84
78
  pycityagent/cityagent/governmentagent.py,sha256=XIyggG83FWUTZdOuoqc6ClCP3hhfkxNmtYRu9TFo0dU,3063
85
- pycityagent/cityagent/blocks/dispatcher.py,sha256=U5BPeUrjrTyDaznYfT6YUJIW8vfKVRDF4EO0oOn6Td4,2886
86
- pycityagent/cityagent/blocks/needs_block.py,sha256=eFWDgsqjh4FYaGeb8wL5R9ndaXN3977ymexoItDUki8,16112
79
+ pycityagent/cityagent/blocks/dispatcher.py,sha256=gd3lyggvtkCq9Ou_icgua60H0UjHTzwHoynLl_iZoes,2939
80
+ pycityagent/cityagent/blocks/needs_block.py,sha256=S8d1spgpzPZEVYa-avUD8102_oMY0yocu2uebt-Li4I,15227
87
81
  pycityagent/cityagent/blocks/cognition_block.py,sha256=yzjB0D_95vytpa5xiVdmTSpGp8H9HXcjWzzFN0OpP0k,15398
88
- pycityagent/cityagent/blocks/social_block.py,sha256=eedOlwRTGI47QFELYmfe2a_aj0GuHJweSyDxA6AYXcU,15493
82
+ pycityagent/cityagent/blocks/social_block.py,sha256=ut3bhQUxBOzhan1OCffAeRa8nDPV1qhDCVJxSN0bizw,15141
89
83
  pycityagent/cityagent/blocks/__init__.py,sha256=h6si6WBcVVuglIskKQKA8Cxtf_VKen1sNPqOFKI311Q,420
90
- pycityagent/cityagent/blocks/economy_block.py,sha256=l47x2Iq15Rjj9WsH3p398dtpcejat4aCkC3X160xBlE,19843
84
+ pycityagent/cityagent/blocks/economy_block.py,sha256=cQePU1kfJzmO9j_vnitQATsV-ztf8SHSWqRKiJVNlM0,19863
91
85
  pycityagent/cityagent/blocks/utils.py,sha256=K--6odjUDUu9YrwrHPaiPIHryo7m_MBmcBqDAy3cV5M,1816
92
86
  pycityagent/cityagent/blocks/other_block.py,sha256=LdtL6248xvMvvRQx6NvdlJrWWZFu8Xusjxb9yEh1M0k,4365
93
- pycityagent/cityagent/blocks/plan_block.py,sha256=AFyjj-RimYNkZ8x6sU-ZMWwB1jqJxSvr1j0vEKmhG4w,11967
87
+ pycityagent/cityagent/blocks/plan_block.py,sha256=FsFZI2SzuWbGC0X_TKwLaQA-2dqAJ0nZpex1--Hmzyo,11950
94
88
  pycityagent/cityagent/blocks/mobility_block.py,sha256=OZoA-swFdX0Ezpzkyp8jJMNPQ533JpeeTCdLupoqRjI,15089
95
89
  pycityagent/survey/models.py,sha256=g3xni4GcA1Py3vlGt6z4ltutjgQ4G0uINYAM8vKRJAw,5225
96
90
  pycityagent/survey/__init__.py,sha256=rxwou8U9KeFSP7rMzXtmtp2fVFZxK4Trzi-psx9LPIs,153
97
91
  pycityagent/survey/manager.py,sha256=tHkdeq4lTfAHwvgf4-udsXri0z2l6E00rEbvwl7SqRs,3439
92
+ pycityagent-2.0.0a92.dist-info/RECORD,,
93
+ pycityagent-2.0.0a92.dist-info/LICENSE,sha256=n2HPXiupinpyHMnIkbCf3OTYd3KMqbmldu1e7av0CAU,1084
94
+ pycityagent-2.0.0a92.dist-info/WHEEL,sha256=VujM3ypTCyUW6hcTDdK2ej0ARVMxlU1Djlh_zWnDgqk,109
95
+ pycityagent-2.0.0a92.dist-info/entry_points.txt,sha256=BZcne49AAIFv-hawxGnPbblea7X3MtAtoPyDX8L4OC4,132
96
+ pycityagent-2.0.0a92.dist-info/top_level.txt,sha256=yOmeu6cSXmiUtScu53a3s0p7BGtLMaV0aff83EHCTic,43
97
+ pycityagent-2.0.0a92.dist-info/METADATA,sha256=pIMS51ZKWteISekc3mpx5djjsgKcOHbvcitI4AVcBrE,9110