@@ -138,14 +138,14 @@ namespace geode
138138 virtual std::string string () const = 0;
139139
140140 protected:
141- std::optional< geode::index_t > draw_a_sample_id (
141+ std::optional< geode::index_t > draw_a_free_sample_id (
142142 const ObjectSet< ObjectType >& set, RandomEngine& engine ) const
143143 {
144- if ( set.empty () )
144+ const auto max_obj_id = set.nb_free_objects ();
145+ if ( max_obj_id == 0 )
145146 {
146147 return std::nullopt ;
147148 }
148- const auto max_obj_id = set.size ();
149149 geode::UniformClosed< index_t > uniform_closed_index_t ;
150150 uniform_closed_index_t .min_value = 0 ;
151151 uniform_closed_index_t .max_value = max_obj_id - 1 ;
@@ -212,26 +212,27 @@ namespace geode
212212 birth.proposal_probabilities .log_forward_prob =
213213 log_p_birth_ + this ->sampler_ .log_pdf ( new_obj );
214214 birth.proposal_probabilities .log_backward_prob =
215- log_p_death_ - std::log ( set.size () + 1.0 );
215+ log_p_death_ - std::log ( set.nb_objects () + 1.0 );
216216 return birth;
217217 }
218218
219219 MoveResult< ObjectType > propose_death_move (
220220 const ObjectSet< ObjectType >& set, RandomEngine& engine ) const
221221 {
222222 MoveResult< ObjectType > death;
223- death.old_object_id = this ->draw_a_sample_id ( set, engine );
223+ death.old_object_id = this ->draw_a_free_sample_id ( set, engine );
224224 if ( !death.old_object_id .has_value () )
225225 {
226226 return death;
227227 }
228228 const auto cur_object_id = death.old_object_id .value ();
229229 death.type = MoveType::Death;
230230 death.proposal_probabilities .log_forward_prob =
231- log_p_death_ - std::log ( set.size () );
231+ log_p_death_ - std::log ( set.nb_free_objects () );
232232 death.proposal_probabilities .log_backward_prob =
233233 log_p_birth_
234- + this ->sampler_ .log_pdf ( set.get_object ( cur_object_id ) );
234+ + this ->sampler_ .log_pdf (
235+ set.get_free_object ( cur_object_id ) );
235236 return death;
236237 }
237238
@@ -256,14 +257,14 @@ namespace geode
256257 RandomEngine& engine ) const override
257258 {
258259 MoveResult< ObjectType > change;
259- change.old_object_id = this ->draw_a_sample_id ( set, engine );
260+ change.old_object_id = this ->draw_a_free_sample_id ( set, engine );
260261 if ( !change.old_object_id .has_value () )
261262 {
262263 return change;
263264 }
264265 change.type = MoveType::Change;
265266 const auto & object_to_change =
266- set.get_object ( change.old_object_id .value () );
267+ set.get_free_object ( change.old_object_id .value () );
267268 change.new_object =
268269 this ->sampler_ .change ( object_to_change, engine );
269270 change.proposal_probabilities .log_forward_prob =
0 commit comments