11from libcpp.map cimport map as cpp_map
22from libcpp.memory cimport shared_ptr as cpp_shared_ptr
3+ from libcpp.vector cimport vector as cpp_vector
34
45@cython.cfunc
56def rat_to_py_new (r: c_Rational ):
@@ -22,28 +23,33 @@ cdef extern from "../solvers/enumpoly/gameseq.h" namespace "Gambit":
2223ctypedef cpp_shared_ptr[c_GameSequenceRep] c_GameSequence
2324
2425
26+ cdef extern from " ../solvers/enumpoly/gameseq.h" namespace " Gambit" :
27+ cdef cppclass c_PlayerSequences " GameSequenceForm::PlayerSequences" :
28+ cpp_vector[c_GameSequence].const_iterator begin()
29+
30+
2531cdef extern from " ../solvers/enumpoly/gameseq.h" namespace " Gambit" :
2632 cdef cppclass c_GameSequenceForm " GameSequenceForm" :
2733 c_GameSequenceForm(const c_BehaviorSupportProfile& ) except +
28- c_Rational PayoffFromActions(cpp_map[c_GamePlayer, c_GameAction] action_profile,
29- c_GamePlayer p_player)
30- c_GameSequence GetEmptySequence(c_GamePlayer player)
34+ c_Rational PayoffFromActions(cpp_map[c_GamePlayer, c_GameAction] action_profile, c_GamePlayer p_player)
3135 c_GameSequence GetCorrespondingSequence(c_GameAction action)
32- c_Rational GetPayoff(cpp_map[c_GamePlayer, c_GameSequence] p_profile, c_GamePlayer p_player)
36+ c_PlayerSequences GetSequences(const c_GamePlayer & p_player) const
37+ const c_Rational & GetPayoff(const cpp_map[c_GamePlayer, c_GameSequence] & p_profile, const c_GamePlayer & p_player) const
38+
3339
3440cdef class GameSequenceForm:
35- cdef c_GameSequenceForm* cpp_form
36- cdef c_BehaviorSupportProfile* _bsp
41+ cdef c_GameSequenceForm* seq_form
42+ cdef c_BehaviorSupportProfile* support
3743
3844 def __cinit__ (self , py_game ):
3945 cdef Game game = cython.cast(Game, py_game)
4046 cdef c_Game cpp_game = game.game
41- self ._bsp = new c_BehaviorSupportProfile(cpp_game)
42- self .cpp_form = new c_GameSequenceForm(deref(self ._bsp ))
47+ self .support = new c_BehaviorSupportProfile(cpp_game)
48+ self .seq_form = new c_GameSequenceForm(deref(self .support ))
4349
4450 def __dealloc__ (self ):
45- del self .cpp_form
46- del self ._bsp
51+ del self .seq_form
52+ del self .support
4753
4854 def get_payoff (self , action_dict , py_player ):
4955 cdef Player player = cython.cast(Player, py_player)
@@ -57,12 +63,12 @@ cdef class GameSequenceForm:
5763 key = cython.cast(Player, py_key)
5864 temp_player = key.player
5965 if py_value is None :
60- profile[temp_player] = self .cpp_form.GetEmptySequence (temp_player)
66+ profile[temp_player] = deref( self .seq_form.GetSequences (temp_player).begin() )
6167 else :
6268 value = cython.cast(Action, py_value)
6369 temp_action = value.action
64- profile[temp_player] = self .cpp_form .GetCorrespondingSequence(temp_action)
65- cdef c_Rational payoff_obj = self .cpp_form .GetPayoff(profile, cpp_player)
66- return rat_to_py_new(payoff_obj )
70+ profile[temp_player] = self .seq_form .GetCorrespondingSequence(temp_action)
71+ cdef c_Rational payoff = self .seq_form .GetPayoff(profile, cpp_player)
72+ return rat_to_py_new(payoff )
6773
6874
0 commit comments