@@ -361,30 +361,22 @@ void Term::setup_bins()
361361        auto  ip{std::unique (values_sorted_unique.begin (),values_sorted_unique.end ())};
362362        values_sorted_unique.resize (std::distance (values_sorted_unique.begin (),ip));
363363
364-         bins_start_index.reserve (bins+1 );    
365-         bins_end_index.reserve (bins+1 );  
366-         // Allocations
367-         bool  eligible_spacing{false };
368-         bool  eligible_unique_numbers{false };
364+         bins_start_index.reserve (bins+1 );
365+         bins_end_index.reserve (bins+1 );
369366        // Start_index
370367        bins_start_index.push_back (0 );
371368        if (bins>1 )
372369        {
373-             for  (size_t  i = min_observations_in_split-1 ; i <= max_index; ++i) // for each observation in an allowable range
370+             for  (size_t  i = min_observations_in_split-1 ; i <= max_index+ 1 -min_observations_in_split ; ++i) // for each observation in an allowable range
374371            {
375-                 // General eligibility
376-                 if (i>=min_observations_in_split-1  && (i%observations_in_bin==0  || values_sorted_unique.size ()<=bins) && i<=max_index+1 -min_observations_in_split) eligible_spacing=true ;
372+                 size_t  last_bin_start_index{bins_start_index[bins_start_index.size ()-1 ]};
373+                 bool  eligible_on_spacing_between_observations{i >= last_bin_start_index + observations_in_bin || values_sorted_unique.size ()<=bins};
374+                 bool  eligible_on_unique_numbers{i>0  && !check_if_approximately_equal (sorted_vectors.values_sorted [i],sorted_vectors.values_sorted [i-1 ])};
377375
378-                 // Eligibility when considering unique numbers
379-                 if (i>0  && !check_if_approximately_equal (sorted_vectors.values_sorted [i],sorted_vectors.values_sorted [i-1 ])) eligible_unique_numbers=true ;
380-                 else  eligible_unique_numbers=false ;
381- 
382-                 // Creating bin if possible and resetting eligibility for next iteration
383-                 if (eligible_spacing && eligible_unique_numbers) 
376+                 bool  create_bin{eligible_on_spacing_between_observations && eligible_on_unique_numbers};
377+                 if (create_bin) 
384378                {
385379                    bins_start_index.push_back (i);
386-                     eligible_spacing=false ;
387-                     eligible_unique_numbers=false ;
388380                }
389381            }
390382        }
0 commit comments