pbesa 2.1__py3-none-any.whl → 4.0.0__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.
Files changed (75) hide show
  1. pbesa/__init__.py +4 -3
  2. pbesa/cognitive.py +475 -0
  3. pbesa/kernel/__init__.py +4 -6
  4. pbesa/kernel/adapter.py +165 -0
  5. pbesa/kernel/agent.py +558 -0
  6. pbesa/kernel/io/__init__.py +2 -2
  7. pbesa/kernel/io/system_file.py +38 -0
  8. pbesa/kernel/io/tcp_server.py +23 -0
  9. pbesa/kernel/util.py +217 -0
  10. pbesa/kernel/world.py +43 -0
  11. pbesa/mas.py +565 -0
  12. pbesa/remote/__init__.py +5 -0
  13. pbesa/remote/adm_listener.py +44 -0
  14. pbesa/{middleware/remote/AdmListenerHandler.py → remote/adm_listener_handler.py} +74 -57
  15. pbesa/remote/exceptions.py +18 -0
  16. pbesa/remote/remote_adm.py +42 -0
  17. pbesa/{middleware/remote/RemoteAdmHandler.py → remote/remote_adm_handler.py} +109 -83
  18. pbesa/social/__init__.py +4 -0
  19. pbesa/social/collaborative_team.py +299 -0
  20. pbesa/social/delegator.py +81 -0
  21. pbesa/social/delegator_team.py +334 -0
  22. pbesa/social/dialog.py +153 -0
  23. pbesa/social/dispatcher_team.py +319 -0
  24. pbesa/social/templates.py +18 -0
  25. pbesa/social/worker.py +188 -0
  26. {pbesa-2.1.dist-info → pbesa-4.0.0.dist-info}/LICENSE +21 -21
  27. {pbesa-2.1.dist-info → pbesa-4.0.0.dist-info}/LICENSE.txt +21 -21
  28. pbesa-4.0.0.dist-info/METADATA +8 -0
  29. pbesa-4.0.0.dist-info/RECORD +32 -0
  30. {pbesa-2.1.dist-info → pbesa-4.0.0.dist-info}/WHEEL +5 -5
  31. {pbesa-2.1.dist-info → pbesa-4.0.0.dist-info}/top_level.txt +0 -0
  32. pbesa/engine/__init__.py +0 -2
  33. pbesa/engine/bdi/BDIAg.py +0 -42
  34. pbesa/engine/bdi/BDILevel.py +0 -10
  35. pbesa/engine/bdi/BDIMachine.py +0 -116
  36. pbesa/engine/bdi/Goal.py +0 -28
  37. pbesa/engine/bdi/GoalExe.py +0 -36
  38. pbesa/engine/bdi/__init__.py +0 -5
  39. pbesa/engine/rational/ActionExe.py +0 -35
  40. pbesa/engine/rational/Brain.py +0 -10
  41. pbesa/engine/rational/RationalAg.py +0 -43
  42. pbesa/engine/rational/__init__.py +0 -3
  43. pbesa/kernel/adapter/Adapter.py +0 -26
  44. pbesa/kernel/adapter/FileAdapter.py +0 -23
  45. pbesa/kernel/adapter/__init__.py +0 -2
  46. pbesa/kernel/agent/Action.py +0 -19
  47. pbesa/kernel/agent/Agent.py +0 -91
  48. pbesa/kernel/agent/BehaviorExe.py +0 -33
  49. pbesa/kernel/agent/Channel.py +0 -10
  50. pbesa/kernel/agent/World.py +0 -15
  51. pbesa/kernel/agent/__init__.py +0 -5
  52. pbesa/kernel/io/SystemFile.py +0 -13
  53. pbesa/kernel/io/TCPServer.py +0 -4
  54. pbesa/kernel/system/Adm.py +0 -189
  55. pbesa/kernel/system/Directory.py +0 -36
  56. pbesa/kernel/system/__init__.py +0 -2
  57. pbesa/kernel/util/HashTable.py +0 -62
  58. pbesa/kernel/util/Queue.py +0 -231
  59. pbesa/kernel/util/__init__.py +0 -2
  60. pbesa/middleware/__init__.py +0 -3
  61. pbesa/middleware/adapter/GameAdapter.py +0 -64
  62. pbesa/middleware/adapter/MongoAdapter.py +0 -47
  63. pbesa/middleware/adapter/RESTAdapter.py +0 -52
  64. pbesa/middleware/adapter/SubProcessAdapter.py +0 -30
  65. pbesa/middleware/adapter/WSSAdapter.py +0 -89
  66. pbesa/middleware/adapter/WSSNJAdapter.py +0 -51
  67. pbesa/middleware/adapter/WSSNJHandler.py +0 -23
  68. pbesa/middleware/adapter/__init__.py +0 -7
  69. pbesa/middleware/remote/AdmListener.py +0 -17
  70. pbesa/middleware/remote/RemoteAdm.py +0 -17
  71. pbesa/middleware/remote/__init__.py +0 -4
  72. pbesa/middleware/web/WebAgTK.py +0 -15
  73. pbesa/middleware/web/__init__.py +0 -0
  74. pbesa-2.1.dist-info/METADATA +0 -25
  75. pbesa-2.1.dist-info/RECORD +0 -54
pbesa/engine/bdi/BDIAg.py DELETED
@@ -1,42 +0,0 @@
1
- from abc import ABC, abstractmethod
2
- from ...kernel.util.Queue import Queue
3
- from ...kernel.system.Adm import Adm
4
- from .BDIMachine import BDIMachine
5
-
6
- class BDIAg(ABC):
7
-
8
- id = None
9
- queue = None
10
- world = None
11
- goals = None
12
- believes = None
13
- settings = None
14
-
15
- def __init__(self):
16
- self.settings = self.setUp()
17
- self.id = self.settings['id']
18
- self.world = self.settings['world']
19
- self.goals = self.settings['goals']
20
- self.believes = self.settings['believes']
21
- Adm().addAgent(self)
22
-
23
- self.queue = Queue(10)
24
- self.machine = BDIMachine(self)
25
-
26
- self.world.setAgent(self)
27
-
28
- for goal in self.goals:
29
- for act in goal.plan:
30
- act.setAgent(self)
31
-
32
- super().__init__()
33
-
34
- def sendEvent(self, event, data):
35
- self.queue.put({'event': event, 'data': data})
36
-
37
- def start(self):
38
- self.machine.start()
39
-
40
- @abstractmethod
41
- def setUp(self):
42
- pass
@@ -1,10 +0,0 @@
1
- from enum import Enum
2
-
3
- class BDILevel(Enum):
4
-
5
- PHYSIOLOGY = 5
6
- SAFETY = 4
7
- SOCIAL = 3
8
- ESTEEM = 2
9
- SELF_REALIZATION = 1
10
-
@@ -1,116 +0,0 @@
1
- from threading import Thread
2
- from ...kernel.util.Queue import Queue
3
- from .GoalExe import GoalExe
4
- from .BDILevel import BDILevel
5
-
6
- import time
7
- import random
8
-
9
- class BDIMachine(Thread):
10
-
11
- let = None
12
- alive = None
13
- agent = None
14
- queue = None
15
- planQueue = None
16
-
17
- executeList = None
18
-
19
- machine = None
20
- physiologyList = None
21
- safetyList = None
22
- socialList = None
23
- esteemList = None
24
- selfrealizationList = None
25
-
26
- def __init__(self, agent):
27
- self.let = True
28
- self.alive = True
29
- self.agent = agent
30
- self.queue = agent.queue
31
-
32
- self.executeList = []
33
-
34
- self.physiologyList = []
35
- self.safetyList = []
36
- self.socialList = []
37
- self.esteemList = []
38
- self.selfrealizationList = []
39
-
40
- goals = agent.settings['goals']
41
- for goa in goals:
42
- if goa.priority == BDILevel.PHYSIOLOGY:
43
- self.physiologyList.append(goa)
44
- if goa.priority == BDILevel.SAFETY:
45
- self.safetyList.append(goa)
46
- if goa.priority == BDILevel.SOCIAL:
47
- self.socialList.append(goa)
48
- if goa.priority == BDILevel.ESTEEM:
49
- self.esteemList.append(goa)
50
- if goa.priority == BDILevel.SELF_REALIZATION:
51
- self.selfrealizationList.append(goa)
52
-
53
- self.pool = Queue(10)
54
- self.planQueue = Queue(10)
55
-
56
- for x in range(1,5):
57
- ge = GoalExe(self.pool, self.planQueue)
58
- ge.start()
59
- self.pool.put(ge)
60
-
61
- super().__init__()
62
-
63
- def run(self):
64
- while self.alive:
65
- if self.let:
66
- evt = self.queue.get()
67
- self.queue.task_done()
68
-
69
- # Update World
70
- self.agent.world.update(evt['event'], evt['data'])
71
-
72
- # Run Machine
73
- if self.checkFire(self.physiologyList):
74
- self.executeGoals()
75
- else:
76
- if self.checkFire(self.safetyList):
77
- self.executeGoals()
78
- else:
79
- if self.checkFire(self.socialList):
80
- self.executeGoals()
81
- else:
82
- if self.checkFire(self.esteemList):
83
- self.executeGoals()
84
- else:
85
- if self.checkFire(self.selfrealizationList):
86
- self.executeGoals()
87
-
88
-
89
- def executeGoals(self):
90
- for goal in self.executeList:
91
- if not goal.execute:
92
- self.pool.get()
93
- self.pool.task_done()
94
- goal.execute = True
95
- self.executeList.remove(goal)
96
- self.planQueue.put(goal)
97
-
98
- def contains(self, goal, lst):
99
- for go in lst:
100
- if go.id == goal.id:
101
- return True
102
- return False
103
-
104
- def checkFire(self, lst):
105
- for goa in lst:
106
- if not goa.execute and goa.eval(self.agent.believes):
107
- if not self.contains(goa, self.executeList):
108
- self.executeList.append(goa)
109
- return ( len(self.executeList) > 0 )
110
-
111
- def setLet(self, val):
112
- self.let = val
113
-
114
- def setAlive(self, val):
115
- self.alive = val
116
-
pbesa/engine/bdi/Goal.py DELETED
@@ -1,28 +0,0 @@
1
- from abc import ABC, abstractmethod
2
-
3
- class Goal(ABC):
4
-
5
- id = None
6
- plan = None
7
- execute = None
8
- priority = None
9
- settings = None
10
-
11
- def __init__(self):
12
- self.execute = False
13
- self.settings = self.setUp()
14
- self.id = self.settings['id']
15
- self.plan = self.settings['plan']
16
- self.priority = self.settings['priority']
17
- super().__init__()
18
-
19
- @abstractmethod
20
- def setUp(self):
21
- pass
22
-
23
- @abstractmethod
24
- def eval(self, believes):
25
- pass
26
-
27
-
28
-
@@ -1,36 +0,0 @@
1
- from threading import Thread
2
- import time
3
- import random
4
-
5
- class GoalExe(Thread):
6
-
7
- let = None
8
- pool = None
9
- alive = None
10
- goal = None
11
- planQueue = None
12
-
13
- def __init__(self, pool, planQueue):
14
- self.let = True
15
- self.pool = pool
16
- self.alive = True
17
- self.planQueue = planQueue
18
- super().__init__()
19
-
20
- def run(self):
21
- while self.alive:
22
- if self.let:
23
- goal = self.planQueue.get()
24
- self.planQueue.task_done()
25
- for action in goal.plan:
26
- action.execute('')
27
- goal.execute = False
28
- self.pool.put(self)
29
- #time.sleep(random.random())
30
-
31
- def setLet(self, val):
32
- self.let = val
33
-
34
- def setAlive(self, val):
35
- self.alive = val
36
-
@@ -1,5 +0,0 @@
1
- from .BDIAg import BDIAg
2
- from .BDILevel import BDILevel
3
- from .BDIMachine import BDIMachine
4
- from .Goal import Goal
5
- from .GoalExe import GoalExe
@@ -1,35 +0,0 @@
1
- from threading import Thread
2
- import time
3
- import random
4
-
5
- class ActionExe(Thread):
6
-
7
- let = None
8
- pool = None
9
- alive = None
10
- action = None
11
-
12
- def __init__(self, pool):
13
- self.let = False
14
- self.pool = pool
15
- self.alive = True
16
- super().__init__()
17
-
18
- def run(self):
19
- while self.alive:
20
- if self.let:
21
- self.action.execute(self.data)
22
- self.pool.addExe(self)
23
- #time.sleep(random.random())
24
-
25
- def setLet(self, val):
26
- self.let = val
27
-
28
- def setAlive(self, val):
29
- self.alive = val
30
-
31
- def setAction(self, action):
32
- self.action = action
33
-
34
- def setData(self, data):
35
- self.data = data
@@ -1,10 +0,0 @@
1
- from abc import ABC, abstractmethod
2
-
3
- class Brain(ABC):
4
-
5
- def __init__(self):
6
- super().__init__()
7
-
8
- @abstractmethod
9
- def derive(self, event, data):
10
- pass
@@ -1,43 +0,0 @@
1
- from abc import ABC, abstractmethod
2
-
3
- class RationalAg(ABC):
4
-
5
- id = None
6
- state = None
7
- brain = None
8
- world = None
9
- exePool = None
10
- settings = None
11
-
12
- def __init__(self):
13
- self.settings = self.setUp()
14
- self.id = self.settings['id']
15
- self.state = self.settings['state']
16
- self.brain = self.settings['brain']
17
- self.world = self.settings['world']
18
- size = self.settings['pool_size']
19
- Adm().addAgent(self)
20
- self.exePool = Queue(size)
21
- for x in range(1, size):
22
- self.exePool.put(ActionExe(self.exePool))
23
- super().__init__()
24
-
25
- @abstractmethod
26
- def setUp(self, settings):
27
- pass
28
-
29
- def sendEvent(self, event, data):
30
- self.world.update(event, data)
31
- actions = self.brain.derive(event, data)
32
- if actions:
33
- for action in actions:
34
- aExe = self.getFree()
35
- aExe.setAction()
36
- aExe.setData()
37
- aExe.start()
38
-
39
- def getFree(self):
40
- exeA = self.pool.get()
41
- self.pool.task_done()
42
- return exeA
43
-
@@ -1,3 +0,0 @@
1
- from .ActionExe import ActionExe
2
- from .Brain import Brain
3
- from .RationalAg import RationalAg
@@ -1,26 +0,0 @@
1
- from abc import ABC, abstractmethod
2
-
3
- class Adapter(ABC):
4
-
5
- data = None
6
- config = None
7
-
8
- def __init__(self):
9
- #Adm().addAdapter(self)
10
- super().__init__()
11
-
12
- @abstractmethod
13
- def setUp(self):
14
- pass
15
-
16
- @abstractmethod
17
- def response(self):
18
- pass
19
-
20
- @abstractmethod
21
- def request(self):
22
- pass
23
-
24
- @abstractmethod
25
- def finalize(self):
26
- pass
@@ -1,23 +0,0 @@
1
- from ...kernel.adapter.Adapter import Adapter
2
- from ...kernel.io.SystemFile import SystemFile
3
-
4
- class FileAdapter(Adapter):
5
-
6
- def __init__(self, config):
7
- self.config = config
8
- super().__init__()
9
-
10
- def setUp(self):
11
- if self.config['type'] == 'JSON':
12
- sf = SystemFile(self.config['path'])
13
- self.data = sf.readJsonFile()
14
-
15
- def response(self):
16
- pass
17
-
18
- def request(self):
19
- return self.data
20
-
21
- def finalize(self):
22
- pass
23
-
@@ -1,2 +0,0 @@
1
- from .Adapter import Adapter
2
- from .FileAdapter import FileAdapter
@@ -1,19 +0,0 @@
1
- from abc import ABC, abstractmethod
2
- from ...kernel.system.Adm import Adm
3
-
4
- class Action(ABC):
5
-
6
- id = None
7
- adm = None
8
- agent = None
9
-
10
- def __init__(self):
11
- super().__init__()
12
-
13
- @abstractmethod
14
- def execute(self, data):
15
- pass
16
-
17
- def setAgent(self, agent):
18
- self.adm = Adm()
19
- self.agent = agent
@@ -1,91 +0,0 @@
1
- from abc import ABC, abstractmethod
2
- from ...kernel.util.Queue import Queue
3
- from ...kernel.system.Adm import Adm
4
- from ...kernel.agent.Channel import Channel
5
- from ...kernel.util.HashTable import HashTable
6
- from ...kernel.agent.BehaviorExe import BehaviorExe
7
-
8
- class Agent(ABC):
9
-
10
- id = None
11
- state = None
12
- settings = None
13
- behaviors = None
14
- channelsTable = None
15
- behaviorsTable = None
16
- workerList = None
17
- channelList = None
18
-
19
- def __init__(self, arg):
20
-
21
- self.settings = self.setUp(arg)
22
- self.id = self.settings['id']
23
- self.state = self.settings['state']
24
- Adm().addAgent(self)
25
-
26
- self.eventsTable = HashTable()
27
- self.channelsTable = HashTable()
28
-
29
- self.workerList = []
30
- self.channelList = []
31
-
32
- self.behaviors = self.settings['behaviors']
33
-
34
- for beh in self.behaviors:
35
- queue = Queue(10)
36
- channel = Channel(queue)
37
- worker = BehaviorExe(queue)
38
-
39
- self.channelsTable[beh['name']] = {'channel' : channel, 'worker': worker}
40
-
41
- self.workerList.append(worker)
42
- self.channelList.append(channel)
43
-
44
- events = beh['events']
45
- for evts in events:
46
- evts['action'].setAgent(self)
47
- self.eventsTable[evts['performative']] = {'behavior' : beh['name'], 'action': evts['action']}
48
-
49
- super().__init__()
50
-
51
- @abstractmethod
52
- def setUp(self, settings):
53
- pass
54
-
55
- def sendEvent(self, event, data):
56
- behavior = self.eventsTable[event]
57
- channel = self.channelsTable[behavior['behavior']]
58
- evt = {'event': event, 'data': data, 'action': behavior['action']}
59
- channel['channel'].sendEvent(evt)
60
-
61
- def start(self):
62
- for w in self.workerList:
63
- w.setLet(True)
64
- w.start()
65
-
66
- def wait(self):
67
- for w in self.workerList:
68
- w.setLet(False)
69
-
70
- def finalize(self):
71
- for w in self.workerList:
72
- w.setAlive(False)
73
-
74
- def kill(self):
75
- # TODO Call garbachcollector
76
- pass
77
-
78
- def toDTO(self):
79
- dto = {
80
- 'command': 'MOVE',
81
- 'class': self.__class__.__name__,
82
- 'path': self.__module__,
83
- 'id': self.id,
84
- 'state': self.state
85
- }
86
- rtn = str(dto)
87
- rtn = rtn.replace("'", "\"")
88
- return rtn
89
-
90
- def getState(self):
91
- return self.state
@@ -1,33 +0,0 @@
1
- from threading import Thread
2
- import time
3
- import random
4
- import traceback
5
-
6
- class BehaviorExe(Thread):
7
-
8
- let = None
9
- alive = None
10
- queue = None
11
-
12
- def __init__(self, queue):
13
- self.let = False
14
- self.alive = True
15
- self.queue = queue
16
- super().__init__()
17
-
18
- def run(self):
19
- while self.alive:
20
- if self.let:
21
- evt = self.queue.get()
22
- self.queue.task_done()
23
- try:
24
- evt['action'].execute(evt['data'])
25
- except Exception as e:
26
- print(e)
27
- traceback.print_exc()
28
-
29
- def setLet(self, val):
30
- self.let = val
31
-
32
- def setAlive(self, val):
33
- self.alive = val
@@ -1,10 +0,0 @@
1
- class Channel():
2
-
3
- queue = None
4
-
5
- def __init__(self, queue):
6
- self.queue = queue
7
- super().__init__()
8
-
9
- def sendEvent(self, num):
10
- self.queue.put(num)
@@ -1,15 +0,0 @@
1
- from abc import ABC, abstractmethod
2
-
3
- class World(ABC):
4
-
5
- agent = None
6
-
7
- def __init__(self):
8
- super().__init__()
9
-
10
- @abstractmethod
11
- def update(self, event, data):
12
- pass
13
-
14
- def setAgent(self, agent):
15
- self.agent = agent
@@ -1,5 +0,0 @@
1
- from .Action import Action
2
- from .Agent import Agent
3
- from .BehaviorExe import BehaviorExe
4
- from .Channel import Channel
5
- from .World import World
@@ -1,13 +0,0 @@
1
- import json
2
-
3
- class SystemFile(object):
4
-
5
- path = None
6
-
7
- def __init__(self, path):
8
- self.path = path
9
-
10
- def readJsonFile(self):
11
- with open(self.path) as f:
12
- data = json.load(f)
13
- return data
@@ -1,4 +0,0 @@
1
- import socketserver
2
-
3
- class TCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
4
- pass