MEDfl 2.0.10.dev9__tar.gz → 2.0.10.dev10__tar.gz
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.
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/rw/client.py +5 -4
- medfl-2.0.10.dev10/MEDfl/rw/identity.py +12 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/rw/xgboost/client.py +6 -5
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/PKG-INFO +1 -1
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/medfl.egg-info/PKG-INFO +1 -1
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/medfl.egg-info/SOURCES.txt +1 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/setup.py +1 -1
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/LICENSE +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/__init__.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/client.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/dynamicModal.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/federated_dataset.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/flpipeline.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/model.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/params.yaml +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/params_optimiser.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/plot.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/server.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/shap/__init__.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/shap/aggregation.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/shap/config.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/shap/explainer.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/shap/xgboost_explainer.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/strategy.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/utils.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/xgboost/__init__.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/xgboost/client.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/xgboost/config.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/xgboost/data.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/xgboost/metrics.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/xgboost/serialization.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/xgboost/server.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/LearningManager/xgboost/strategy.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/NetManager/__init__.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/NetManager/database_connector.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/NetManager/dataset.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/NetManager/flsetup.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/NetManager/net_helper.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/NetManager/net_manager_queries.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/NetManager/network.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/NetManager/node.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/__init__.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/rw/__init__.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/rw/holdout.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/rw/model.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/rw/server.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/rw/strategy.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/rw/xgboost/__init__.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/rw/xgboost/config.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/rw/xgboost/data.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/rw/xgboost/metrics.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/rw/xgboost/serialization.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/rw/xgboost/strategy.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/scripts/__init__.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/scripts/base.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/MEDfl/scripts/create_db.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/README.md +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/alembic/__init__.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/alembic/env.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/medfl.egg-info/dependency_links.txt +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/medfl.egg-info/requires.txt +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/medfl.egg-info/top_level.txt +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/setup.cfg +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/tests/test_dataset.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/tests/test_federated_dataset.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/tests/test_flpipeline.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/tests/test_flsetup.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/tests/test_network.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/tests/test_node.py +0 -0
- {medfl-2.0.10.dev9 → medfl-2.0.10.dev10}/tests/test_rw_holdout.py +0 -0
|
@@ -13,6 +13,7 @@ from sklearn.model_selection import train_test_split
|
|
|
13
13
|
from MEDfl.rw.model import Net # votre définition de modèle
|
|
14
14
|
from MEDfl.LearningManager.shap import LocalPyTorchSHAPExplainer
|
|
15
15
|
from MEDfl.rw.holdout import run_local_holdout
|
|
16
|
+
from MEDfl.rw.identity import client_name
|
|
16
17
|
import socket
|
|
17
18
|
import platform
|
|
18
19
|
import psutil
|
|
@@ -426,7 +427,7 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
426
427
|
|
|
427
428
|
# Convert NumPy arrays to lists before JSON serialization.
|
|
428
429
|
serializable_result = {
|
|
429
|
-
"client_id":
|
|
430
|
+
"client_id": client_name(),
|
|
430
431
|
"feature_names": feature_names,
|
|
431
432
|
"available_samples": int(len(loader.dataset)),
|
|
432
433
|
"sample_count": explained_samples,
|
|
@@ -502,7 +503,7 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
502
503
|
auc = float("nan")
|
|
503
504
|
acc = accuracy_score(y_true, binary_preds)
|
|
504
505
|
|
|
505
|
-
hostname =
|
|
506
|
+
hostname = client_name()
|
|
506
507
|
os_type = platform.system()
|
|
507
508
|
metrics = {
|
|
508
509
|
"hostname": hostname,
|
|
@@ -608,7 +609,7 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
608
609
|
features=self.effective_features,
|
|
609
610
|
target=self.effective_target,
|
|
610
611
|
predict=self._predict_probabilities,
|
|
611
|
-
client_id=
|
|
612
|
+
client_id=client_name(),
|
|
612
613
|
drop_missing_features=True,
|
|
613
614
|
validation=self._validation_predictions,
|
|
614
615
|
)
|
|
@@ -636,7 +637,7 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
636
637
|
return np.concatenate(y_parts), np.concatenate(prob_parts)
|
|
637
638
|
|
|
638
639
|
def get_properties(self, config):
|
|
639
|
-
hostname =
|
|
640
|
+
hostname = client_name()
|
|
640
641
|
os_type = platform.system()
|
|
641
642
|
|
|
642
643
|
if self._initialized:
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Name a real-world client reports to the server (properties, metrics, SHAP and holdout results).
|
|
3
|
+
|
|
4
|
+
The MEDfl agent ID (MEDFL_AGENT_ID, inherited from the agent that starts the client) when it is set,
|
|
5
|
+
so several agents on the same machine are told apart. Else the machine hostname, as before.
|
|
6
|
+
"""
|
|
7
|
+
import os
|
|
8
|
+
import socket
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def client_name() -> str:
|
|
12
|
+
return (os.getenv("MEDFL_AGENT_ID") or "").strip() or socket.gethostname()
|
|
@@ -31,6 +31,7 @@ try:
|
|
|
31
31
|
except ImportError:
|
|
32
32
|
GPUtil = None
|
|
33
33
|
|
|
34
|
+
from MEDfl.rw.identity import client_name
|
|
34
35
|
from MEDfl.rw.xgboost.data import XGBoostDataModule
|
|
35
36
|
from MEDfl.rw.xgboost.metrics import evaluate_predictions
|
|
36
37
|
from MEDfl.rw.xgboost.serialization import (
|
|
@@ -374,7 +375,7 @@ class XGBoostFlowerClient(fl.client.Client):
|
|
|
374
375
|
)
|
|
375
376
|
|
|
376
377
|
return {
|
|
377
|
-
"client_id":
|
|
378
|
+
"client_id": client_name(),
|
|
378
379
|
"feature_names": feature_names,
|
|
379
380
|
"available_samples": available_samples,
|
|
380
381
|
"sample_count": explained_samples,
|
|
@@ -457,7 +458,7 @@ class XGBoostFlowerClient(fl.client.Client):
|
|
|
457
458
|
metrics = {
|
|
458
459
|
"backend": "xgboost",
|
|
459
460
|
"task": self.task,
|
|
460
|
-
"hostname":
|
|
461
|
+
"hostname": client_name(),
|
|
461
462
|
"os_type": platform.system(),
|
|
462
463
|
"num_train": int(self.metadata.get("num_train", 0)),
|
|
463
464
|
"features": ",".join(self.metadata.get("features", [])),
|
|
@@ -574,7 +575,7 @@ class XGBoostFlowerClient(fl.client.Client):
|
|
|
574
575
|
if bool(config.get("holdout_enabled", False)):
|
|
575
576
|
if self.task != "binary":
|
|
576
577
|
metrics["holdout_status"] = HOLDOUT_UNSUPPORTED
|
|
577
|
-
metrics["holdout_client_id"] =
|
|
578
|
+
metrics["holdout_client_id"] = client_name()
|
|
578
579
|
metrics["holdout_error"] = (
|
|
579
580
|
"The holdout test supports binary classification "
|
|
580
581
|
f"only (task is '{self.task}')"
|
|
@@ -587,7 +588,7 @@ class XGBoostFlowerClient(fl.client.Client):
|
|
|
587
588
|
features=self.data_module.effective_features,
|
|
588
589
|
target=self.data_module.effective_target,
|
|
589
590
|
predict=self._predict_probabilities,
|
|
590
|
-
client_id=
|
|
591
|
+
client_id=client_name(),
|
|
591
592
|
drop_missing_features=False,
|
|
592
593
|
validation=self._validation_predictions,
|
|
593
594
|
)
|
|
@@ -622,7 +623,7 @@ class XGBoostFlowerClient(fl.client.Client):
|
|
|
622
623
|
Return machine and dataset properties.
|
|
623
624
|
"""
|
|
624
625
|
|
|
625
|
-
hostname =
|
|
626
|
+
hostname = client_name()
|
|
626
627
|
os_type = platform.system()
|
|
627
628
|
|
|
628
629
|
df = self.data_module.df
|
|
@@ -14,7 +14,7 @@ with open('requirements.txt') as f:
|
|
|
14
14
|
|
|
15
15
|
setup(
|
|
16
16
|
name="medfl",
|
|
17
|
-
version="2.0.10.
|
|
17
|
+
version="2.0.10.dev10",
|
|
18
18
|
author="MEDomics consortium",
|
|
19
19
|
author_email="medomics.info@gmail.com",
|
|
20
20
|
description="Python Open-source package for simulating federated learning and differential privacy",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|