Skip to content

Commit 6717d74

Browse files
committed
v0.0.13 Type conversation fix
1 parent e5b6dbf commit 6717d74

File tree

10 files changed

+38
-47
lines changed

10 files changed

+38
-47
lines changed

examples/object_oriented/nqueens/score/NQueensScoreCalculator.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ def __init__(self):
2727
def all_different(self, planning_entity_dfs, problem_fact_dfs):
2828

2929
queens_df = planning_entity_dfs["queens"]
30+
#print(queens_df)
3031
same_row_id_counts = (
3132
queens_df
3233
.lazy()

examples/object_oriented/nqueens/scripts/solve_nqueens.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
#termination_strategy = ScoreLimit(score_to_compare=[0])
2929
agent = TabuSearch(neighbours_count=128, tabu_entity_rate=0.0,
3030
mutation_rate_multiplier=None, move_probas=None,
31-
migration_frequency=1, termination_strategy=termination_strategy)
31+
migration_frequency=10, termination_strategy=termination_strategy)
3232

3333
solver = Solver(domain_builder, cotwin_builder, agent,
3434
n_jobs=10, parallelization_backend="processing", #processing, threading

greyjack/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

greyjack/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "greyjack"
3-
version = "0.0.12"
3+
version = "0.0.13"
44
edition = "2021"
55

66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

greyjack/greyjack/agents/base/Individual.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import numpy as np
33
from greyjack.score_calculation.scores.SimpleScore import SimpleScore
44
from greyjack.score_calculation.scores.HardSoftScore import HardSoftScore
5+
from greyjack.score_calculation.scores.HardMediumSoftScore import HardMediumSoftScore
56

67

78
class Individual:
@@ -29,6 +30,8 @@ def from_list(list_individual):
2930
score_type = SimpleScore
3031
elif score_len == 2:
3132
score_type = HardSoftScore
33+
elif score_len == 3:
34+
score_type = HardMediumSoftScore
3235
else:
3336
raise ("Can't define score type while inverse converting of list of individuals-lists")
3437

greyjack/greyjack/agents/metaheuristic_bases/TabuSearchBase.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from greyjack.agents.metaheuristic_bases.Mover import Mover
55
from greyjack.agents.base.Individual import Individual
66

7-
# mostly rewrited by LLM (Rust->Python) for tests purpose only. Will be replaced by normally wrapped Rust version
7+
88
class TabuSearchBase:
99
def __init__(
1010
self,

greyjack/greyjack/score_calculation/score_requesters/OOPScoreRequester.py

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,17 @@
11

2-
from typing import Dict, List, Tuple, Any
32
import polars as pl
4-
import numpy as np
5-
from collections import defaultdict
6-
from greyjack.score_calculation.score_requesters.VariablesManager import VariablesManager
7-
from greyjack.greyjack import GJPlanningVariablePy, VariablesManagerPy
3+
from greyjack.greyjack import VariablesManagerPy, CandidateDfsBuilderPy
84
from greyjack.variables import *
95

10-
# mostly rewrited by LLM from Rust to Python
11-
12-
13-
from typing import Dict, List, Tuple, Any
14-
import polars as pl
15-
import numpy as np
16-
from collections import defaultdict
17-
from greyjack.score_calculation.score_requesters.VariablesManager import VariablesManager
18-
from greyjack.greyjack import GJPlanningVariablePy, VariablesManagerPy, CandidateDfsBuilderPy
19-
from greyjack.variables import *
20-
21-
# mostly rewrited by LLM from Rust to Python
226
class OOPScoreRequester:
237
def __init__(self, cotwin):
248
self.cotwin = cotwin
259

2610
self.available_planning_variable_types = {GJFloat, GJInteger, GJBinary}
2711
variables_vec, var_name_to_vec_id_map, vec_id_to_var_name_map = self.build_variables_info(self.cotwin)
2812
self.variables_manager = VariablesManagerPy(variables_vec)
29-
planning_entities_column_map = self.build_column_map(self.cotwin.planning_entities)
30-
problem_facts_column_map = self.build_column_map(self.cotwin.problem_facts)
13+
planning_entities_column_map, entity_is_int_map = self.build_column_map(self.cotwin.planning_entities)
14+
problem_facts_column_map, _ = self.build_column_map(self.cotwin.problem_facts)
3115
planning_entity_dfs = self.build_group_dfs(self.cotwin.planning_entities, planning_entities_column_map, True)
3216
problem_fact_dfs = self.build_group_dfs(self.cotwin.problem_facts, problem_facts_column_map, False)
3317

@@ -38,10 +22,10 @@ def __init__(self, cotwin):
3822
planning_entities_column_map,
3923
problem_facts_column_map,
4024
planning_entity_dfs,
41-
problem_fact_dfs
25+
problem_fact_dfs,
26+
entity_is_int_map
4227
)
4328

44-
# mostly from prototype
4529
def build_variables_info(self, cotwin):
4630
variables_vec = []
4731
var_name_to_vec_id_map = {}
@@ -66,23 +50,25 @@ def build_variables_info(self, cotwin):
6650

6751
return variables_vec, var_name_to_vec_id_map, vec_id_to_var_name_map
6852

69-
# original from prototype
7053
def build_column_map(self, entity_groups):
7154

72-
# Python dict saves order, that's why when I was using HashMap in Rust
73-
# there was bug, until I added cotwin object conversion .to_vec()
7455
column_dict = {}
56+
entity_is_int_map = {}
7557
for group_name in entity_groups:
7658
column_dict[group_name] = []
7759
entity_objects = entity_groups[group_name]
7860
sample_object = entity_objects[0]
7961
object_attributes = sample_object.__dict__
8062
for attribute_name in object_attributes:
8163
column_dict[group_name].append( attribute_name )
82-
83-
return column_dict
84-
85-
# original from prototype
64+
attribute_value = object_attributes[attribute_name]
65+
if isinstance(attribute_value, GJFloat):
66+
entity_is_int_map[attribute_name] = False
67+
else:
68+
entity_is_int_map[attribute_name] = True
69+
70+
return column_dict, entity_is_int_map
71+
8672
def build_group_dfs(self, entity_groups, column_dict, is_planning):
8773

8874
df_dict = {}
@@ -92,7 +78,6 @@ def build_group_dfs(self, entity_groups, column_dict, is_planning):
9278
df_data = []
9379

9480
entity_group = entity_groups[df_name]
95-
entities_count = len(entity_group)
9681
for entity_object in entity_group:
9782
row_data = []
9883
object_attributes = entity_object.__dict__

greyjack/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ features = ["pyo3/extension-module"]
77

88
[project]
99
name = "greyjack"
10-
version = "0.0.12"
10+
version = "0.0.13"
1111
requires-python = ">=3.9"
1212
dependencies = [
1313
"numpy",

greyjack/src/score_calculation/score_requesters/candidate_dfs_builder.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ pub struct CandidateDfsBuilder {
3131
pub planning_entity_dfs: HashMap<String, DataFrame>,
3232
pub problem_fact_dfs: HashMap<String, DataFrame>,
3333
pub raw_dfs: HashMap<String, DataFrame>,
34+
pub entity_is_int_map: HashMap<String, bool>,
3435
}
3536

3637
impl CandidateDfsBuilder {
@@ -43,6 +44,7 @@ impl CandidateDfsBuilder {
4344
problem_facts_column_map: HashMap<String, Vec<String>>,
4445
planning_entity_dfs: HashMap<String, DataFrame>,
4546
problem_fact_dfs: HashMap<String, DataFrame>,
47+
entity_is_int_map: HashMap<String, bool>,
4648
) -> Self {
4749

4850
let mut score_requester = Self {
@@ -51,6 +53,7 @@ impl CandidateDfsBuilder {
5153
planning_entity_dfs: planning_entity_dfs.clone(),
5254
problem_fact_dfs: problem_fact_dfs,
5355
raw_dfs: planning_entity_dfs.clone(),
56+
entity_is_int_map: entity_is_int_map,
5457

5558
variables_manager: VariablesManager::new(variables_vec),
5659

@@ -87,7 +90,16 @@ impl CandidateDfsBuilder {
8790
for column_name in group_data_map[df_name].keys() {
8891
current_df.drop_in_place(column_name).unwrap();
8992
let updated_column_data = &group_data_map[df_name][column_name];
90-
let updated_column = Series::new(column_name.into(), updated_column_data);
93+
let mut updated_column = Series::new(column_name.into(), updated_column_data);
94+
if self.entity_is_int_map.contains_key(column_name) {
95+
if *self.entity_is_int_map.get(column_name).unwrap() {
96+
updated_column = updated_column.cast(&DataType::Int64).unwrap();
97+
}
98+
} else if column_name.eq("sample_id") {
99+
updated_column = updated_column.cast(&DataType::UInt64).unwrap();
100+
}
101+
102+
91103
current_df.with_column(updated_column).unwrap();
92104
}
93105
current_df.rechunk_mut();

greyjack/src/score_calculation/score_requesters/candidate_dfs_builder_py.rs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ use crate::score_calculation::score_requesters::VariablesManager;
99
use crate::variables::GJPlanningVariablePy;
1010
use crate::variables::GJPlanningVariable;
1111
use crate::score_calculation::score_requesters::CandidateDfsBuilder;
12-
13-
use std::ops::AddAssign;
1412
use std:: collections::HashMap;
1513
use std::string::String;
1614

@@ -32,6 +30,7 @@ impl CandidateDfsBuilderPy {
3230
problem_facts_column_map: HashMap<String, Vec<String>>,
3331
planning_entity_dfs_py: HashMap<String, PyDataFrame>,
3432
problem_fact_dfs_py: HashMap<String, PyDataFrame>,
33+
entity_is_int_map: HashMap<String, bool>,
3534
) -> Self {
3635

3736
let mut variables_vec: Vec<GJPlanningVariable> = variables_vec_py.iter().map(|var_py| {
@@ -62,6 +61,7 @@ impl CandidateDfsBuilderPy {
6261
planning_entity_dfs: planning_entity_dfs.clone(),
6362
problem_fact_dfs: problem_fact_dfs,
6463
raw_dfs: planning_entity_dfs.clone(),
64+
entity_is_int_map: entity_is_int_map,
6565

6666
variables_manager: VariablesManager::new(variables_vec),
6767

@@ -84,16 +84,6 @@ impl CandidateDfsBuilderPy {
8484

8585
}
8686

87-
#[getter]
88-
pub fn semantic_groups_map(&self) -> PyResult<HashMap<String, Vec<usize>>> {
89-
Ok(self.candidate_dfs_builder.variables_manager.semantic_groups_map.clone())
90-
}
91-
92-
#[getter]
93-
pub fn discrete_ids(&self) -> PyResult<Option<Vec<usize>>> {
94-
Ok(self.candidate_dfs_builder.variables_manager.discrete_ids.clone())
95-
}
96-
9787
pub fn get_plain_candidate_dfs(&mut self, samples: Vec<Vec<f64>>) -> (HashMap<String, PyDataFrame>, HashMap<String, PyDataFrame>) {
9888

9989
let (planning_entity_dfs, problem_fact_dfs) = self.candidate_dfs_builder.get_plain_candidate_dfs(&samples);

0 commit comments

Comments
 (0)