From 4bef2093b627a9d04af171c4fd83cd9f229c116e Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Tue, 3 Sep 2024 12:56:50 -0400 Subject: [PATCH 01/22] made some updates. Stuck at OpenFL-relevant error. --- Task_1/.gitignore | 6 + Task_1/FeTS_Challenge.py | 5 +- Task_1/README.md | 12 +- Task_1/build/lib/fets_challenge/__init__.py | 7 + .../lib/fets_challenge/checkpoint_utils.py | 51 + .../custom_aggregation_wrapper.py | 30 + Task_1/build/lib/fets_challenge/experiment.py | 563 ++++++++ .../lib/fets_challenge/gandlf_csv_adapter.py | 214 +++ Task_1/build/lib/fets_challenge/inference.py | 251 ++++ .../lib/fets_challenge/spec_sens_code.py | 113 ++ .../partitioning_1.csv | 1252 +++++++++++++++++ .../partitioning_2.csv | 1252 +++++++++++++++++ .../fets_challenge_workspace/plan/cols.yaml | 3 + .../fets_challenge_workspace/plan/data.yaml | 4 + .../fets_challenge_workspace/plan/defaults | 2 + .../fets_challenge_workspace/plan/plan.yaml | 140 ++ .../fets_challenge_workspace/requirements.txt | 2 + .../fets_challenge_workspace/small_split.csv | 11 + .../fets_challenge_workspace/src/__init__.py | 10 + .../src/challenge_assigner.py | 40 + .../src/fets_challenge_model.py | 208 +++ .../fets_challenge_workspace/validation.csv | 220 +++ Task_1/cert/ca/root-ca.crt | 27 + Task_1/cert/ca/root-ca/db/root-ca.crl.srl | 1 + Task_1/cert/ca/root-ca/db/root-ca.crt.srl | 1 + Task_1/cert/ca/root-ca/db/root-ca.db | 0 Task_1/cert/ca/root-ca/db/root-ca.db.attr | 0 Task_1/cert/ca/root-ca/private/root-ca.key | 39 + Task_1/cert/ca/signing-ca.crt | 27 + Task_1/cert/ca/signing-ca.csr | 23 + .../cert/ca/signing-ca/db/signing-ca.crl.srl | 1 + .../cert/ca/signing-ca/db/signing-ca.crt.srl | 1 + Task_1/cert/ca/signing-ca/db/signing-ca.db | 0 .../cert/ca/signing-ca/db/signing-ca.db.attr | 0 .../cert/ca/signing-ca/private/signing-ca.key | 39 + Task_1/cert/cert_chain.crt | 54 + Task_1/cert/client/col_one.crt | 25 + Task_1/cert/client/col_one.key | 39 + Task_1/cert/client/col_two.crt | 25 + Task_1/cert/client/col_two.key | 39 + Task_1/cert/col_one.csr | 22 + Task_1/cert/col_two.csr | 22 + .../server/agg_in-ota-232347.ads.iu.edu.crt | 26 + .../server/agg_in-ota-232347.ads.iu.edu.csr | 23 + .../server/agg_in-ota-232347.ads.iu.edu.key | 39 + Task_1/fets_challenge.egg-info/PKG-INFO | 115 ++ Task_1/fets_challenge.egg-info/SOURCES.txt | 28 + .../dependency_links.txt | 1 + Task_1/fets_challenge.egg-info/requires.txt | 3 + Task_1/fets_challenge.egg-info/top_level.txt | 2 + .../custom_aggregation_wrapper.py | 2 +- Task_1/fets_challenge/experiment.py | 31 +- .../fets_challenge_workspace/plan/plan.yaml | 2 +- Task_1/setup.py | 11 +- 54 files changed, 5046 insertions(+), 18 deletions(-) create mode 100644 Task_1/.gitignore create mode 100644 Task_1/build/lib/fets_challenge/__init__.py create mode 100644 Task_1/build/lib/fets_challenge/checkpoint_utils.py create mode 100644 Task_1/build/lib/fets_challenge/custom_aggregation_wrapper.py create mode 100644 Task_1/build/lib/fets_challenge/experiment.py create mode 100644 Task_1/build/lib/fets_challenge/gandlf_csv_adapter.py create mode 100644 Task_1/build/lib/fets_challenge/inference.py create mode 100644 Task_1/build/lib/fets_challenge/spec_sens_code.py create mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_1.csv create mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_2.csv create mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/cols.yaml create mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/data.yaml create mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/defaults create mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml create mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/requirements.txt create mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/small_split.csv create mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/__init__.py create mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/challenge_assigner.py create mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py create mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/validation.csv create mode 100644 Task_1/cert/ca/root-ca.crt create mode 100644 Task_1/cert/ca/root-ca/db/root-ca.crl.srl create mode 100644 Task_1/cert/ca/root-ca/db/root-ca.crt.srl create mode 100644 Task_1/cert/ca/root-ca/db/root-ca.db create mode 100644 Task_1/cert/ca/root-ca/db/root-ca.db.attr create mode 100644 Task_1/cert/ca/root-ca/private/root-ca.key create mode 100644 Task_1/cert/ca/signing-ca.crt create mode 100644 Task_1/cert/ca/signing-ca.csr create mode 100644 Task_1/cert/ca/signing-ca/db/signing-ca.crl.srl create mode 100644 Task_1/cert/ca/signing-ca/db/signing-ca.crt.srl create mode 100644 Task_1/cert/ca/signing-ca/db/signing-ca.db create mode 100644 Task_1/cert/ca/signing-ca/db/signing-ca.db.attr create mode 100644 Task_1/cert/ca/signing-ca/private/signing-ca.key create mode 100644 Task_1/cert/cert_chain.crt create mode 100644 Task_1/cert/client/col_one.crt create mode 100644 Task_1/cert/client/col_one.key create mode 100644 Task_1/cert/client/col_two.crt create mode 100644 Task_1/cert/client/col_two.key create mode 100644 Task_1/cert/col_one.csr create mode 100644 Task_1/cert/col_two.csr create mode 100644 Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt create mode 100644 Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr create mode 100644 Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key create mode 100644 Task_1/fets_challenge.egg-info/PKG-INFO create mode 100644 Task_1/fets_challenge.egg-info/SOURCES.txt create mode 100644 Task_1/fets_challenge.egg-info/dependency_links.txt create mode 100644 Task_1/fets_challenge.egg-info/requires.txt create mode 100644 Task_1/fets_challenge.egg-info/top_level.txt diff --git a/Task_1/.gitignore b/Task_1/.gitignore new file mode 100644 index 0000000..230a809 --- /dev/null +++ b/Task_1/.gitignore @@ -0,0 +1,6 @@ +FeTS_Challenge-flair.py +FeTS_Challenge_FedPOD_partitioning2.py +FeTS_Challenge_RL.py +FeTS_Challenge_RecEng.py +FeTS_Challenge_leonardklausman.py +*final_submission* diff --git a/Task_1/FeTS_Challenge.py b/Task_1/FeTS_Challenge.py index 94d7598..028b954 100644 --- a/Task_1/FeTS_Challenge.py +++ b/Task_1/FeTS_Challenge.py @@ -523,10 +523,11 @@ def FedAvgM_Selection(local_tensors, # We encourage participants to experiment with partitioning_1 and partitioning_2, as well as to create # other partitionings to test your changes for generalization to multiple partitionings. #institution_split_csv_filename = 'partitioning_1.csv' -institution_split_csv_filename = 'small_split.csv' +#institution_split_csv_filename = 'partitioning_1.csv' +institution_split_csv_filename = '/home/locolinux2/datasets/MICCAI_FeTS2022_TrainingData/partitioning_2.csv' #'small_split.csv' # change this to point to the parent directory of the data -brats_training_data_parent_dir = '/raid/datasets/FeTS22/MICCAI_FeTS2022_TrainingData' +brats_training_data_parent_dir = '/home/locolinux2/datasets/MICCAI_FeTS2022_TrainingData' # increase this if you need a longer history for your algorithms # decrease this if you need to reduce system RAM consumption diff --git a/Task_1/README.md b/Task_1/README.md index 15c8b13..f2c893b 100644 --- a/Task_1/README.md +++ b/Task_1/README.md @@ -20,18 +20,18 @@ Please ask any additional questions in our discussion pages on our github site a 2. ```git clone https://github.com/FETS-AI/Challenge.git``` 3. ```cd Challenge/Task_1``` 4. ```git lfs pull``` -5. Create virtual environment (python 3.6-3.8): using Anaconda, a new environment can be created and activated using the following commands: +5. Create virtual environment (python 3.9): using Anaconda, a new environment can be created and activated using the following commands: ```sh ## create venv in specific path - conda create -p ./venv python=3.7 -y + conda create -p ./venv python=3.9 -y conda activate ./venv ``` 6. ```pip install --upgrade pip``` -7. Install Pytorch LTS (1.8.2) for your system (use CUDA 11): - ```pip3 install torch==1.8.2 torchvision==0.9.2 torchaudio==0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cu111``` +7. Install Pytorch (2.3.1) for your system: + ```pip install torch==2.3.1 torchvision==0.18.1``` *Note all previous versions of pytorch can be found in [these instructions]([https://pytorch.org/get-started/locally/](https://pytorch.org/get-started/previous-versions/)) -9. Set the environment variable `SKLEARN_ALLOW_DEPRECATED_SKLEARN_PACKAGE_INSTALL=True` (to avoid sklearn deprecation error) -10. ```pip install .``` +8. Set the environment variable `SKLEARN_ALLOW_DEPRECATED_SKLEARN_PACKAGE_INSTALL=True` (to avoid sklearn deprecation error) +9. ```pip install .``` > * _Note: if you run into ```ERROR: Failed building wheel for SimpleITK```, try running ```pip install SimpleITK --only-binary :all:``` then rerunning ```pip install .```_ 10. ```python FeTS_Challenge.py``` > * _Note_: if you run into ```ImportError: /home/locolinux/FETS2024/fets2024env/bin/../lib/libstdc++.so.6: version GLIBCXX_3.4.30' not found (required by /home/locolinux/FETS2024/fets2024env/lib/python3.7/site-packages/SimpleITK/_SimpleITK.so)```, try installing a previous version of SimpleITK (version 2.2.0 works) diff --git a/Task_1/build/lib/fets_challenge/__init__.py b/Task_1/build/lib/fets_challenge/__init__.py new file mode 100644 index 0000000..d050e7d --- /dev/null +++ b/Task_1/build/lib/fets_challenge/__init__.py @@ -0,0 +1,7 @@ +# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2022 + +# Contributing Authors (alphabetical): +# Micah Sheller (Intel) + +from .experiment import run_challenge_experiment +from .inference import model_outputs_to_disc diff --git a/Task_1/build/lib/fets_challenge/checkpoint_utils.py b/Task_1/build/lib/fets_challenge/checkpoint_utils.py new file mode 100644 index 0000000..30d5706 --- /dev/null +++ b/Task_1/build/lib/fets_challenge/checkpoint_utils.py @@ -0,0 +1,51 @@ +import pandas as pd +import pickle +from pathlib import Path +from glob import glob +from sys import exit +from logging import getLogger + +logger = getLogger(__name__) + +def setup_checkpoint_folder(): + # Create checkpoint + Path("checkpoint").mkdir(parents=True, exist_ok=True) + existing_checkpoints = glob('checkpoint/*') + if len(existing_checkpoints) == 0: + checkpoint_num = 1 + else: + # Increment the existing checkpoint by 1 + checkpoint_num = sorted([int(x.replace('checkpoint/experiment_','')) for x in existing_checkpoints])[-1] + 1 + experiment_folder = f'experiment_{checkpoint_num}' + checkpoint_folder = f'checkpoint/{experiment_folder}' + Path(checkpoint_folder).mkdir(parents=True, exist_ok=False) + return experiment_folder + +def save_checkpoint(checkpoint_folder, aggregator, + collaborator_names, collaborators, + round_num, collaborator_time_stats, + total_simulated_time, best_dice, + best_dice_over_time_auc, + collaborators_chosen_each_round, + collaborator_times_per_round, + experiment_results, + summary): + """ + Save latest checkpoint + """ + # Save aggregator tensor_db + aggregator.tensor_db.tensor_db.to_pickle(f'checkpoint/{checkpoint_folder}/aggregator_tensor_db.pkl') + with open(f'checkpoint/{checkpoint_folder}/state.pkl', 'wb') as f: + pickle.dump([collaborator_names, round_num, collaborator_time_stats, total_simulated_time, + best_dice, best_dice_over_time_auc, collaborators_chosen_each_round, + collaborator_times_per_round, experiment_results, summary], f) + +def load_checkpoint(checkpoint_folder): + """ + Reload checkpoint from 'checkpoint/experiment_*' + """ + aggregator_tensor_db = pd.read_pickle(f'checkpoint/{checkpoint_folder}/aggregator_tensor_db.pkl') + with open(f'checkpoint/{checkpoint_folder}/state.pkl', 'rb') as f: + state = pickle.load(f) + + return state + [aggregator_tensor_db] diff --git a/Task_1/build/lib/fets_challenge/custom_aggregation_wrapper.py b/Task_1/build/lib/fets_challenge/custom_aggregation_wrapper.py new file mode 100644 index 0000000..ae7abc4 --- /dev/null +++ b/Task_1/build/lib/fets_challenge/custom_aggregation_wrapper.py @@ -0,0 +1,30 @@ +from openfl.component.aggregation_functions.experimental import PrivilegedAggregationFunction + + +# extends the openfl agg func interface to include challenge-relevant information +class CustomAggregationWrapper(PrivilegedAggregationFunction): + def __init__(self, func): + super().__init__() + self.func = func + self.collaborators_chosen_each_round = None + self.collaborator_times_per_round = None + + def set_state_data_for_round(self, + collaborators_chosen_each_round, + collaborator_times_per_round): + self.collaborators_chosen_each_round = collaborators_chosen_each_round + self.collaborator_times_per_round = collaborator_times_per_round + + # pass-through that includes additional information from the challenge experiment wrapper + def call(self, + local_tensors, + tensor_db, + tensor_name, + fl_round, + *__): + return self.func(local_tensors, + tensor_db, + tensor_name, + fl_round, + self.collaborators_chosen_each_round, + self.collaborator_times_per_round) diff --git a/Task_1/build/lib/fets_challenge/experiment.py b/Task_1/build/lib/fets_challenge/experiment.py new file mode 100644 index 0000000..f561e66 --- /dev/null +++ b/Task_1/build/lib/fets_challenge/experiment.py @@ -0,0 +1,563 @@ +# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2022 + +# Contributing Authors (alphabetical): +# Patrick Foley (Intel), Micah Sheller (Intel) + +import os +import warnings +from collections import namedtuple +from copy import copy +import shutil +from logging import getLogger +from pathlib import Path + +import numpy as np +import pandas as pd +from openfl.utilities import split_tensor_dict_for_holdouts, TensorKey +from openfl.protocols import utils +import openfl.native as fx +import torch + +from .gandlf_csv_adapter import construct_fedsim_csv, extract_csv_partitions +from .custom_aggregation_wrapper import CustomAggregationWrapper +from .checkpoint_utils import setup_checkpoint_folder, save_checkpoint, load_checkpoint + +# one week +# MINUTE = 60 +# HOUR = 60 * MINUTE +# DAY = 24 * HOUR +# WEEK = 7 * DAY +MAX_SIMULATION_TIME = 7 * 24 * 60 * 60 + +## COLLABORATOR TIMING DISTRIBUTIONS +# These data are derived from the actual timing information in the real-world FeTS information +# They reflect a subset of the institutions involved. +# Tuples are (mean, stddev) in seconds + +# time to train one patient +TRAINING_TIMES = [(6.710741331207654, 0.8726112813698301), + (2.7343911917098445, 0.023976155580152165), + (3.173076923076923, 0.04154320960517865), + (6.580379746835443, 0.22461890673025595), + (3.452046783625731, 0.47136389322749656), + (6.090788461700995, 0.08541499003440205), + (3.206933911159263, 0.1927067498514361), + (3.3358208955223883, 0.2950567549663471), + (4.391304347826087, 0.37464538999161057), + (6.324805129494594, 0.1413885448869165), + (7.415133477633478, 1.1198881747151301), + (5.806410256410255, 0.029926699295169234), + (6.300204918032787, 0.24932319729777577), + (5.886317567567567, 0.018627858809133223), + (5.478184991273998, 0.04902740607167421), + (6.32440159574468, 0.15838847558954935), + (20.661918328585003, 6.085405543890793), + (3.197901325478645, 0.07049966132127056), + (6.523963730569948, 0.2533266757118492), + (2.6540077569489338, 0.025503099659276184), + (1.8025746183640918, 0.06805805332403576)] + +# time to validate one patient +VALIDATION_TIMES = [(23.129135113591072, 2.5975116854269507), + (12.965544041450777, 0.3476297824941513), + (14.782051282051283, 0.5262660449172765), + (16.444936708860762, 0.42613177203005187), + (15.728654970760235, 4.327559980390658), + (12.946098012884802, 0.2449927822869217), + (15.335950126991456, 1.1587597276712558), + (24.024875621890544, 3.087348297794285), + (38.361702127659576, 2.240113332190875), + (16.320970580839827, 0.4995108101783225), + (30.805555555555554, 3.1836337269688237), + (12.100899742930592, 0.41122386959584895), + (13.099897540983607, 0.6693132795197584), + (9.690202702702702, 0.17513593019922968), + (10.06980802792321, 0.7947848617875114), + (14.605333333333334, 0.6012305898922827), + (36.30294396961064, 9.24123672148819), + (16.9130060292851, 0.7452868131028928), + (40.244078460399706, 3.7700993678269037), + (13.161603102779575, 0.1975347910041472), + (11.222161868549701, 0.7021223062972527)] + +# time to download the model +DOWNLOAD_TIMES = [(112.42869743589742, 14.456734719659513), + (117.26870618556701, 12.549951446132013), + (13.059666666666667, 4.8700489616521185), + (47.50220338983051, 14.92128656898884), + (162.27864210526315, 32.562113378948396), + (99.46072058823529, 13.808785580783224), + (33.6347090909091, 25.00299299660141), + (216.25489393939392, 19.176465340447848), + (217.4117230769231, 20.757673955585453), + (98.38857297297298, 13.205048376808929), + (88.87509473684209, 23.152936862511545), + (66.96994262295081, 16.682497150763503), + (36.668852040816326, 13.759109844677598), + (149.31716326530614, 26.018185409516104), + (139.847, 80.04755583050091), + (54.97624444444445, 16.645170929316794)] + +# time to upload the model +UPLOAD_TIMES = [(192.28497409326425, 21.537450985376967), + (194.60103626943004, 24.194406902237056), + (20.0, 0.0), + (52.43859649122807, 5.047207127169352), + (182.82417582417582, 14.793519078918195), + (143.38059701492537, 7.910690646792151), + (30.695652173913043, 9.668122350904568), + (430.95360824742266, 54.97790476867727), + (348.3174603174603, 30.14347985347738), + (141.43715846994536, 5.271340868190727), + (158.7433155080214, 64.87526819391198), + (81.06086956521739, 7.003461202082419), + (32.60621761658031, 5.0418315093016615), + (281.5388601036269, 90.60338778706557), + (194.34065934065933, 36.6519776778435), + (66.53787878787878, 16.456280602190606)] + +logger = getLogger(__name__) +# This catches PyTorch UserWarnings for CPU +warnings.filterwarnings("ignore", category=UserWarning) + +CollaboratorTimeStats = namedtuple('CollaboratorTimeStats', + [ + 'validation_mean', + 'training_mean', + 'download_speed_mean', + 'upload_speed_mean', + 'validation_std', + 'training_std', + 'download_speed_std', + 'upload_speed_std', + ] + ) + +def gen_collaborator_time_stats(collaborator_names, seed=0xFEEDFACE): + + np.random.seed(seed) + + stats = {} + for col in collaborator_names: + ml_index = np.random.randint(len(VALIDATION_TIMES)) + validation = VALIDATION_TIMES[ml_index] + training = TRAINING_TIMES[ml_index] + net_index = np.random.randint(len(DOWNLOAD_TIMES)) + download = DOWNLOAD_TIMES[net_index] + upload = UPLOAD_TIMES[net_index] + + stats[col] = CollaboratorTimeStats(validation_mean=validation[0], + training_mean=training[0], + download_speed_mean=download[0], + upload_speed_mean=upload[0], + validation_std=validation[1], + training_std=training[1], + download_speed_std=download[1], + upload_speed_std=upload[1]) + return stats + +def compute_times_per_collaborator(collaborator_names, + training_collaborators, + epochs_per_round, + collaborator_data, + collaborator_time_stats, + round_num): + np.random.seed(round_num) + times = {} + for col in collaborator_names: + time = 0 + + # stats + stats = collaborator_time_stats[col] + + # download time + download_time = np.random.normal(loc=stats.download_speed_mean, + scale=stats.download_speed_std) + download_time = max(1, download_time) + time += download_time + + # data loader + data = collaborator_data[col] + + # validation time + data_size = data.get_valid_data_size() + validation_time_per = np.random.normal(loc=stats.validation_mean, + scale=stats.validation_std) + validation_time_per = max(1, validation_time_per) + time += data_size * validation_time_per + + # only if training + if col in training_collaborators: + # training time + data_size = data.get_train_data_size() + training_time_per = np.random.normal(loc=stats.training_mean, + scale=stats.training_std) + training_time_per = max(1, training_time_per) + + # training data size depends on the hparams + data_size *= epochs_per_round + time += data_size * training_time_per + + # if training, we also validate the locally updated model + data_size = data.get_valid_data_size() + validation_time_per = np.random.normal(loc=stats.validation_mean, + scale=stats.validation_std) + validation_time_per = max(1, validation_time_per) + time += data_size * validation_time_per + + # upload time + upload_time = np.random.normal(loc=stats.upload_speed_mean, + scale=stats.upload_speed_std) + upload_time = max(1, upload_time) + time += upload_time + + times[col] = time + return times + + +def get_metric(metric, fl_round, tensor_db): + metric_name = metric + target_tags = ('metric', 'validate_agg') + return float(tensor_db.tensor_db.query("tensor_name == @metric_name and round == @fl_round and tags == @target_tags").nparray) + +def run_challenge_experiment(aggregation_function, + choose_training_collaborators, + training_hyper_parameters_for_round, + institution_split_csv_filename, + brats_training_data_parent_dir, + db_store_rounds=5, + rounds_to_train=5, + device='cpu', + save_checkpoints=True, + restore_from_checkpoint_folder=None, + include_validation_with_hausdorff=True, + use_pretrained_model=True): + + fx.init('fets_challenge_workspace') + + from sys import path, exit + + file = Path(__file__).resolve() + root = file.parent.resolve() # interface root, containing command modules + work = Path.cwd().resolve() + + path.append(str(root)) + path.insert(0, str(work)) + + # create gandlf_csv and get collaborator names + gandlf_csv_path = os.path.join(work, 'gandlf_paths.csv') + # split_csv_path = os.path.join(work, institution_split_csv_filename) + collaborator_names = construct_fedsim_csv(brats_training_data_parent_dir, + institution_split_csv_filename, + 0.8, + gandlf_csv_path) + + aggregation_wrapper = CustomAggregationWrapper(aggregation_function) + + overrides = { + 'aggregator.settings.rounds_to_train': rounds_to_train, + 'aggregator.settings.db_store_rounds': db_store_rounds, + 'tasks.train.aggregation_type': aggregation_wrapper, + 'task_runner.settings.device': device, + } + + + # Update the plan if necessary + plan = fx.update_plan(overrides) + + if not include_validation_with_hausdorff: + plan.config['task_runner']['settings']['fets_config_dict']['metrics'] = ['dice','dice_per_label'] + + # Overwrite collaborator names + plan.authorized_cols = collaborator_names + # overwrite datapath values with the collaborator name itself + for col in collaborator_names: + plan.cols_data_paths[col] = col + + # get the data loaders for each collaborator + collaborator_data_loaders = {col: copy(plan).get_data_loader(col) for col in collaborator_names} + + transformed_csv_dict = extract_csv_partitions(os.path.join(work, 'gandlf_paths.csv')) + # get the task runner, passing the first data loader + for col in collaborator_data_loaders: + #Insert logic to serialize train / val CSVs here + transformed_csv_dict[col]['train'].to_csv(os.path.join(work, 'seg_test_train.csv')) + transformed_csv_dict[col]['val'].to_csv(os.path.join(work, 'seg_test_val.csv')) + task_runner = copy(plan).get_task_runner(collaborator_data_loaders[col]) + + if use_pretrained_model: + print('Loading pretrained model...') + if device == 'cpu': + checkpoint = torch.load(f'{root}/pretrained_model/resunet_pretrained.pth',map_location=torch.device('cpu')) + task_runner.model.load_state_dict(checkpoint['model_state_dict']) + task_runner.optimizer.load_state_dict(checkpoint['optimizer_state_dict']) + else: + checkpoint = torch.load(f'{root}/pretrained_model/resunet_pretrained.pth') + task_runner.model.load_state_dict(checkpoint['model_state_dict']) + task_runner.optimizer.load_state_dict(checkpoint['optimizer_state_dict']) + + tensor_pipe = plan.get_tensor_pipe() + + # Initialize model weights + init_state_path = plan.config['aggregator']['settings']['init_state_path'] + tensor_dict, _ = split_tensor_dict_for_holdouts(logger, task_runner.get_tensor_dict(False)) + + model_snap = utils.construct_model_proto(tensor_dict=tensor_dict, + round_number=0, + tensor_pipe=tensor_pipe) + + utils.dump_proto(model_proto=model_snap, fpath=init_state_path) + + # get the aggregator, now that we have the initial weights file set up + logger.info('Creating aggregator...') + aggregator = plan.get_aggregator() + # manually override the aggregator UUID (for checkpoint resume when rounds change) + aggregator.uuid = 'aggregator' + aggregator._load_initial_tensors() + + # create our collaborators + logger.info('Creating collaborators...') + collaborators = {col: copy(plan).get_collaborator(col, task_runner=task_runner, client=aggregator) for col in collaborator_names} + + collaborator_time_stats = gen_collaborator_time_stats(plan.authorized_cols) + + collaborators_chosen_each_round = {} + collaborator_times_per_round = {} + + logger.info('Starting experiment') + + total_simulated_time = 0 + best_dice = -1.0 + best_dice_over_time_auc = 0 + + # results dataframe data + experiment_results = { + 'round':[], + 'time': [], + 'convergence_score': [], + 'round_dice': [], + 'dice_label_0': [], + 'dice_label_1': [], + 'dice_label_2': [], + 'dice_label_4': [], + } + if include_validation_with_hausdorff: + experiment_results.update({ + 'hausdorff95_label_0': [], + 'hausdorff95_label_1': [], + 'hausdorff95_label_2': [], + 'hausdorff95_label_4': [], + }) + + + if restore_from_checkpoint_folder is None: + checkpoint_folder = setup_checkpoint_folder() + logger.info(f'\nCreated experiment folder {checkpoint_folder}...') + starting_round_num = 0 + else: + if not Path(f'checkpoint/{restore_from_checkpoint_folder}').exists(): + logger.warning(f'Could not find provided checkpoint folder: {restore_from_checkpoint_folder}. Exiting...') + exit(1) + else: + logger.info(f'Attempting to load last completed round from {restore_from_checkpoint_folder}') + state = load_checkpoint(restore_from_checkpoint_folder) + checkpoint_folder = restore_from_checkpoint_folder + + [loaded_collaborator_names, starting_round_num, collaborator_time_stats, + total_simulated_time, best_dice, best_dice_over_time_auc, + collaborators_chosen_each_round, collaborator_times_per_round, + experiment_results, summary, agg_tensor_db] = state + + if loaded_collaborator_names != collaborator_names: + logger.error(f'Collaborator names found in checkpoint ({loaded_collaborator_names}) ' + f'do not match provided collaborators ({collaborator_names})') + exit(1) + + logger.info(f'Previous summary for round {starting_round_num}') + logger.info(summary) + + starting_round_num += 1 + aggregator.tensor_db.tensor_db = agg_tensor_db + aggregator.round_number = starting_round_num + + + for round_num in range(starting_round_num, rounds_to_train): + # pick collaborators to train for the round + training_collaborators = choose_training_collaborators(collaborator_names, + aggregator.tensor_db._iterate(), + round_num, + collaborators_chosen_each_round, + collaborator_times_per_round) + + logger.info('Collaborators chosen to train for round {}:\n\t{}'.format(round_num, training_collaborators)) + + # save the collaborators chosen this round + collaborators_chosen_each_round[round_num] = training_collaborators + + # get the hyper-parameters from the competitor + hparams = training_hyper_parameters_for_round(collaborator_names, + aggregator.tensor_db._iterate(), + round_num, + collaborators_chosen_each_round, + collaborator_times_per_round) + + learning_rate, epochs_per_round = hparams + + if (epochs_per_round is None): + logger.warning('Hyper-parameter function warning: function returned None for "epochs_per_round". Setting "epochs_per_round" to 1') + epochs_per_round = 1 + + hparam_message = "\n\tlearning rate: {}".format(learning_rate) + + hparam_message += "\n\tepochs_per_round: {}".format(epochs_per_round) + + logger.info("Hyper-parameters for round {}:{}".format(round_num, hparam_message)) + + # cache each tensor in the aggregator tensor_db + hparam_dict = {} + tk = TensorKey(tensor_name='learning_rate', + origin=aggregator.uuid, + round_number=round_num, + report=False, + tags=('hparam', 'model')) + hparam_dict[tk] = np.array(learning_rate) + tk = TensorKey(tensor_name='epochs_per_round', + origin=aggregator.uuid, + round_number=round_num, + report=False, + tags=('hparam', 'model')) + hparam_dict[tk] = np.array(epochs_per_round) + aggregator.tensor_db.cache_tensor(hparam_dict) + + # pre-compute the times for each collaborator + times_per_collaborator = compute_times_per_collaborator(collaborator_names, + training_collaborators, + epochs_per_round, + collaborator_data_loaders, + collaborator_time_stats, + round_num) + collaborator_times_per_round[round_num] = times_per_collaborator + + aggregator.assigner.set_training_collaborators(training_collaborators) + + # update the state in the aggregation wrapper + aggregation_wrapper.set_state_data_for_round(collaborators_chosen_each_round, collaborator_times_per_round) + + # turn the times list into a list of tuples and sort it + times_list = [(t, col) for col, t in times_per_collaborator.items()] + times_list = sorted(times_list) + + # now call each collaborator in order of time + # FIXME: this doesn't break up each task. We need this if we're doing straggler handling + for t, col in times_list: + # set the task_runner data loader + task_runner.data_loader = collaborator_data_loaders[col] + + # run the collaborator + collaborators[col].run_simulation() + + logger.info("Collaborator {} took simulated time: {} minutes".format(col, round(t / 60, 2))) + + # the round time is the max of the times_list + round_time = max([t for t, _ in times_list]) + total_simulated_time += round_time + + + # get the performace validation scores for the round + round_dice = get_metric('valid_dice', round_num, aggregator.tensor_db) + dice_label_0 = get_metric('valid_dice_per_label_0', round_num, aggregator.tensor_db) + dice_label_1 = get_metric('valid_dice_per_label_1', round_num, aggregator.tensor_db) + dice_label_2 = get_metric('valid_dice_per_label_2', round_num, aggregator.tensor_db) + dice_label_4 = get_metric('valid_dice_per_label_4', round_num, aggregator.tensor_db) + if include_validation_with_hausdorff: + hausdorff95_label_0 = get_metric('valid_hd95_per_label_0', round_num, aggregator.tensor_db) + hausdorff95_label_1 = get_metric('valid_hd95_per_label_1', round_num, aggregator.tensor_db) + hausdorff95_label_2 = get_metric('valid_hd95_per_label_2', round_num, aggregator.tensor_db) + hausdorff95_label_4 = get_metric('valid_hd95_per_label_4', round_num, aggregator.tensor_db) + + # update best score + if best_dice < round_dice: + best_dice = round_dice + # Set the weights for the final model + if round_num == 0: + # here the initial model was validated (temp model does not exist) + logger.info(f'Skipping best model saving to disk as it is a random initialization.') + elif not os.path.exists(f'checkpoint/{checkpoint_folder}/temp_model.pkl'): + raise ValueError(f'Expected temporary model at: checkpoint/{checkpoint_folder}/temp_model.pkl to exist but it was not found.') + else: + # here the temp model was the one validated + shutil.copyfile(src=f'checkpoint/{checkpoint_folder}/temp_model.pkl',dst=f'checkpoint/{checkpoint_folder}/best_model.pkl') + logger.info(f'Saved model with best average binary DICE: {best_dice} to ~/.local/workspace/checkpoint/{checkpoint_folder}/best_model.pkl') + + ## RUN VALIDATION ON INTERMEDIATE CONSENSUS MODEL + # set the task_runner data loader + # task_runner.data_loader = collaborator_data_loaders[col] + + ## CONVERGENCE METRIC COMPUTATION + # update the auc score + best_dice_over_time_auc += best_dice * round_time + + # project the auc score as remaining time * best dice + # this projection assumes that the current best score is carried forward for the entire week + projected_auc = (MAX_SIMULATION_TIME - total_simulated_time) * best_dice + best_dice_over_time_auc + projected_auc /= MAX_SIMULATION_TIME + + # End of round summary + summary = '"**** END OF ROUND {} SUMMARY *****"'.format(round_num) + summary += "\n\tSimulation Time: {} minutes".format(round(total_simulated_time / 60, 2)) + summary += "\n\t(Projected) Convergence Score: {}".format(projected_auc) + summary += "\n\tDICE Label 0: {}".format(dice_label_0) + summary += "\n\tDICE Label 1: {}".format(dice_label_1) + summary += "\n\tDICE Label 2: {}".format(dice_label_2) + summary += "\n\tDICE Label 4: {}".format(dice_label_4) + if include_validation_with_hausdorff: + summary += "\n\tHausdorff95 Label 0: {}".format(hausdorff95_label_0) + summary += "\n\tHausdorff95 Label 1: {}".format(hausdorff95_label_1) + summary += "\n\tHausdorff95 Label 2: {}".format(hausdorff95_label_2) + summary += "\n\tHausdorff95 Label 4: {}".format(hausdorff95_label_4) + + + experiment_results['round'].append(round_num) + experiment_results['time'].append(total_simulated_time) + experiment_results['convergence_score'].append(projected_auc) + experiment_results['round_dice'].append(round_dice) + experiment_results['dice_label_0'].append(dice_label_0) + experiment_results['dice_label_1'].append(dice_label_1) + experiment_results['dice_label_2'].append(dice_label_2) + experiment_results['dice_label_4'].append(dice_label_4) + if include_validation_with_hausdorff: + experiment_results['hausdorff95_label_0'].append(hausdorff95_label_0) + experiment_results['hausdorff95_label_1'].append(hausdorff95_label_1) + experiment_results['hausdorff95_label_2'].append(hausdorff95_label_2) + experiment_results['hausdorff95_label_4'].append(hausdorff95_label_4) + logger.info(summary) + + if save_checkpoints: + logger.info(f'Saving checkpoint for round {round_num}') + logger.info(f'To resume from this checkpoint, set the restore_from_checkpoint_folder parameter to \'{checkpoint_folder}\'') + save_checkpoint(checkpoint_folder, aggregator, + collaborator_names, collaborators, + round_num, collaborator_time_stats, + total_simulated_time, best_dice, + best_dice_over_time_auc, + collaborators_chosen_each_round, + collaborator_times_per_round, + experiment_results, + summary) + + # if the total_simulated_time has exceeded the maximum time, we break + # in practice, this means that the previous round's model is the last model scored, + # so a long final round should not actually benefit the competitor, since that final + # model is never globally validated + if total_simulated_time > MAX_SIMULATION_TIME: + logger.info("Simulation time exceeded. Ending Experiment") + break + + # save the most recent aggregated model in native format to be copied over as best when appropriate + # (note this model has not been validated by the collaborators yet) + task_runner.rebuild_model(round_num, aggregator.last_tensor_dict, validation=True) + task_runner.save_native(f'checkpoint/{checkpoint_folder}/temp_model.pkl') + + + + return pd.DataFrame.from_dict(experiment_results), checkpoint_folder diff --git a/Task_1/build/lib/fets_challenge/gandlf_csv_adapter.py b/Task_1/build/lib/fets_challenge/gandlf_csv_adapter.py new file mode 100644 index 0000000..cafad78 --- /dev/null +++ b/Task_1/build/lib/fets_challenge/gandlf_csv_adapter.py @@ -0,0 +1,214 @@ +# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2022 + +# Contributing Authors (alphabetical): +# Brandon Edwards (Intel) +# Patrick Foley (Intel) +# Micah Sheller (Intel) + +import os + +import numpy as np +import pandas as pd + +from fets.data.base_utils import get_appropriate_file_paths_from_subject_dir + + +# some hard-coded keys +# feature stack order determines order of feature stack modes +# (so must be consistent across datasets used on a given model) +# dependency here with mode naming convention used in get_appropriate_file_paths_from_subject_dir +feature_modes = ['T1', 'T2', 'FLAIR', 'T1CE'] +label_tag = 'Label' + +# using numerical header names +numeric_header_names = {'T1': 1, + 'T2': 2, + 'FLAIR': 3, + 'T1CE': 4, + 'Label': 5} + +# used to map from numbers back to keys +numeric_header_name_to_key = {value: key for key, value in numeric_header_names.items()} + +# column names for dataframe used to create csv + +# 0 is for the subject name, 1-4 for modes and 5 for label (as above) +train_val_headers = [0, 1, 2, 3, 4, 5] +val_headers = [0, 1, 2, 3, 4] + +# hard coded samples used to train the FeTS2022 initial model +# and therefore best to keep out of split insitution validation +# set +init_train = ['FeTS2022_00159','FeTS2022_00172','FeTS2022_00187','FeTS2022_00199','FeTS2022_00211','FeTS2022_00221', \ + 'FeTS2022_00235','FeTS2022_00243','FeTS2022_00258','FeTS2022_00269','FeTS2022_00282','FeTS2022_00291', \ + 'FeTS2022_00300','FeTS2022_00311','FeTS2022_00321','FeTS2022_00332','FeTS2022_00344','FeTS2022_00353', \ + 'FeTS2022_00370','FeTS2022_00380','FeTS2022_00391','FeTS2022_00403','FeTS2022_00413','FeTS2022_00425', \ + 'FeTS2022_00440','FeTS2022_01000','FeTS2022_01038','FeTS2022_01046','FeTS2022_01054','FeTS2022_01062', \ + 'FeTS2022_01070','FeTS2022_01078','FeTS2022_01086','FeTS2022_01094','FeTS2022_01102','FeTS2022_01110', \ + 'FeTS2022_01118','FeTS2022_01126','FeTS2022_01134','FeTS2022_01205','FeTS2022_01213','FeTS2022_01221', \ + 'FeTS2022_01229','FeTS2022_01237','FeTS2022_01245','FeTS2022_01253','FeTS2022_01261','FeTS2022_01269', \ + 'FeTS2022_01277','FeTS2022_01293','FeTS2022_01307','FeTS2022_01315','FeTS2022_01323','FeTS2022_01331', \ + 'FeTS2022_01339','FeTS2022_01347','FeTS2022_01355','FeTS2022_01363','FeTS2022_01371','FeTS2022_01379', \ + 'FeTS2022_01387','FeTS2022_01395','FeTS2022_01403'] + + +def train_val_split(subdirs, percent_train, shuffle=True): + + if percent_train < 0 or percent_train >=1: + raise ValueError('Percent train must be >= 0 and < 1.') + + # record original length of subdirs + n_subdirs = len(subdirs) + if n_subdirs == 0: + raise ValueError('An empty list was provided to split.') + + train_subdirs = [subdir for subdir in subdirs if subdir in init_train] + # limit subdirs to those that do not lie in init_train + subdirs = [subdir for subdir in subdirs if subdir not in init_train] + + assert len(subdirs) + len(train_subdirs) == n_subdirs + + if shuffle: + np.random.shuffle(subdirs) + + cutpoint = int(n_subdirs * percent_train) - len(train_subdirs) + + train_subdirs = train_subdirs + subdirs[:cutpoint] + val_subdirs = subdirs[cutpoint:] + + if shuffle: + np.random.shuffle(train_subdirs) + + return train_subdirs, val_subdirs + + +def paths_dict_to_dataframe(paths_dict, train_val_headers, numeric_header_name_to_key): + + # intitialize columns + columns = {header: [] for header in train_val_headers} + columns['TrainOrVal'] = [] + columns['Partition_ID'] = [] + + for inst_name, inst_paths_dict in paths_dict.items(): + for usage in ['train', 'val']: + for key_to_fpath in inst_paths_dict[usage]: + columns['Partition_ID'].append(inst_name) + columns['TrainOrVal'].append(usage) + for header in train_val_headers: + if header == 0: + # grabbing the the data subfolder name as the subject id + columns[header].append(key_to_fpath['Subject_ID']) + else: + columns[header].append(key_to_fpath[numeric_header_name_to_key[header]]) + + return pd.DataFrame(columns, dtype=str) + + +def construct_fedsim_csv(pardir, + split_subdirs_path, + percent_train, + federated_simulation_train_val_csv_path, + training_and_validation=True): + + # read in the csv defining the subdirs per institution + split_subdirs = pd.read_csv(split_subdirs_path, dtype=str) + + if not set(['Partition_ID', 'Subject_ID']).issubset(set(split_subdirs.columns)): + raise ValueError("The provided csv at {} must at minimum contain the columns 'Partition_ID' and 'Subject_ID', but the columns are: {}".format(split_subdirs_path, list(split_subdirs.columns))) + + # sanity check that all subdirs provided in the dataframe are unique + if not split_subdirs['Subject_ID'].is_unique: + raise ValueError("Repeated references to the same data subdir were found in the 'Subject_ID' column of {}".format(split_subdirs_path)) + + train_val_specified = ('TrainOrVal' in split_subdirs.columns) + if train_val_specified: + print("Inferring train/val split using 'TrainOrVal' column of split_subdirs csv") + else: + print("No 'TrainOrVal' column found in split_subdirs csv, so performing automated split using percent_train of {}".format(percent_train)) + + + inst_names = list(split_subdirs['Partition_ID'].unique()) + + paths_dict = {inst_name: {'train': [], 'val': []} for inst_name in inst_names} + for inst_name in inst_names: + + if train_val_specified: + train_subdirs = list(split_subdirs[(split_subdirs['Partition_ID']==inst_name) & (split_subdirs['TrainOrVal']=='train')]['Subject_ID']) + val_subdirs = list(split_subdirs[(split_subdirs['Partition_ID']==inst_name) & (split_subdirs['TrainOrVal']=='val')]['Subject_ID']) + if len(train_subdirs) == 0: + raise ValueError("Train/val split specified in {} for insitution {} indicates an empty training set.".format(split_subdirs_path, inst_name)) + if len(val_subdirs) == 0: + raise ValueError("Train/val split specified in {} for insitution {} indicates an empty val set.".format(split_subdirs_path, inst_name)) + else: + subdirs = list(split_subdirs[split_subdirs['Partition_ID']==inst_name]['Subject_ID']) + train_subdirs, val_subdirs = train_val_split(subdirs=subdirs, percent_train=percent_train) + + for subdir in train_subdirs: + inner_dict = get_appropriate_file_paths_from_subject_dir(os.path.join(pardir, subdir), include_labels=True) + inner_dict['Subject_ID'] = subdir + paths_dict[inst_name]['train'].append(inner_dict) + + for subdir in val_subdirs: + inner_dict = get_appropriate_file_paths_from_subject_dir(os.path.join(pardir, subdir), include_labels=training_and_validation) + inner_dict['Subject_ID'] = subdir + paths_dict[inst_name]['val'].append(inner_dict) + + # now construct the dataframe and save it as a csv + if training_and_validation: + df = paths_dict_to_dataframe(paths_dict=paths_dict, + train_val_headers=train_val_headers, + numeric_header_name_to_key=numeric_header_name_to_key) + else: + df = construct_validation_dataframe(paths_dict=paths_dict, + val_headers=val_headers, + numeric_header_name_to_key=numeric_header_name_to_key) + return df + + df.to_csv(federated_simulation_train_val_csv_path, index=False) + return list(sorted(df.Partition_ID.unique())) + +def construct_validation_dataframe(paths_dict, val_headers, numeric_header_name_to_key): + + # intitialize columns + columns = {str(header): [] for header in val_headers} + columns['TrainOrVal'] = [] + columns['Partition_ID'] = [] + + for inst_name, inst_paths_dict in paths_dict.items(): + for usage in ['train', 'val']: + for key_to_fpath in inst_paths_dict[usage]: + columns['Partition_ID'].append(inst_name) + columns['TrainOrVal'].append(usage) + for header in val_headers: + if header == 0: + # grabbing the the data subfolder name as the subject id + columns[str(header)].append(key_to_fpath['Subject_ID']) + else: + columns[str(header)].append(key_to_fpath[numeric_header_name_to_key[header]]) + + df = pd.DataFrame(columns, dtype=str) + df = df.drop(columns=['TrainOrVal','Partition_ID']) + df = df.rename(columns={'0': 'SubjectID', '1': 'Channel_0', + '2': 'Channel_1', '3': 'Channel_2', + '4': 'Channel_3'}) + return df + + + +def extract_csv_partitions(csv_path): + df = pd.read_csv(csv_path) + df = df.rename(columns={'0': 'SubjectID', '1': 'Channel_0', + '2': 'Channel_1', '3': 'Channel_2', + '4': 'Channel_3', '5': 'Label'}) + cols = df['Partition_ID'].unique() + transformed_csv_dict = {} + + for col in cols: + transformed_csv_dict[str(col)] = {} + transformed_csv_dict[str(col)]['train'] = \ + df[(df['Partition_ID'] == col) & (df['TrainOrVal'] == 'train')].drop(columns=['TrainOrVal','Partition_ID']) + transformed_csv_dict[str(col)]['val'] = \ + df[(df['Partition_ID'] == col) & (df['TrainOrVal'] == 'val')].drop(columns=['TrainOrVal','Partition_ID']) + + return transformed_csv_dict + diff --git a/Task_1/build/lib/fets_challenge/inference.py b/Task_1/build/lib/fets_challenge/inference.py new file mode 100644 index 0000000..13f0680 --- /dev/null +++ b/Task_1/build/lib/fets_challenge/inference.py @@ -0,0 +1,251 @@ +# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2022 + +# Contributing Authors (alphabetical): +# Brandon Edwards (Intel), Patrick Foley (Intel), Micah Sheller (Intel) + +import os +from copy import copy +from logging import getLogger +from pathlib import Path + +import numpy as np +import SimpleITK as sitk + +import torch, torchio + +import openfl.native as fx +from .gandlf_csv_adapter import construct_fedsim_csv + +logger = getLogger(__name__) + +# some hard coded variables +channel_keys = ['1', '2', '3', '4'] +class_label_map = {0:0, 1:1, 2:2, 4:4} +class_list = list(np.sort(list(class_label_map.values()))) + +def nan_check(tensor, tensor_description): + tensor = tensor.cpu() + if torch.any(torch.isnan(tensor)): + raise ValueError("A " + tensor_description + " was found to have nan values.") + + +def binarize(array, threshold=0.5): + """ + Get binarized output using threshold. + """ + + if (np.amax(array) > 1.0) or (np.amin(array) < 0.0): + raise ValueError('Voxel value fed to lambda in converting to original labels was out of range.') + + # obtain binarized output + binarized = array.copy() + zero_mask = (binarized <= threshold) + binarized[zero_mask] = 0.0 + binarized[~zero_mask] = 1.0 + + return binarized + + +def get_binarized_and_belief(array, threshold=0.5): + + """ + Get binarized output using threshold and report the belief values for each of the + channels along the last axis. Belief value is a list of indices along the last axis, and is + determined by the order of how close (closest first) each binarization is from its original in this last axis + so belief should have the same shape as arrray. + Assumptions: + - array is float valued in the range [0.0, 1.0] + """ + + # check assumption above + if (np.amax(array) > 1.0) or (np.amin(array) < 0.0): + raise ValueError('Voxel value fed to lambda in converting to original labels was out of range.') + + # obtain binarized output + binarized = binarize(array=array, threshold=threshold) + + # we will sort from least to greatest, so least suspicion is what we will believe + raw_suspicion = np.absolute(array - binarized) + + belief = np.argsort(raw_suspicion, axis=-1) + + return binarized, belief + +def generate_validation_csv(data_path, validation_csv_filename, working_dir): + """ + Create the validation CSV to be consumed by the FeTSChallengeTaskRunner + """ + validation_csv_path = os.path.join(working_dir, validation_csv_filename) + validation_csv_dict = construct_fedsim_csv(data_path, + validation_csv_path, + 0.0, + 'placeholder', + training_and_validation=False) + validation_csv_dict.to_csv(os.path.join(working_dir, 'validation_paths.csv'),index=False) + +def replace_initializations(done_replacing, array, mask, replacement_value, initialization_value): + """ + Replace in array[mask] intitialization values with replacement value, + ensuring that the locations to replace all held initialization values + """ + + # sanity check + if np.any(mask) and done_replacing: + raise ValueError('Being given locations to replace and yet told that we are done replacing.') + + # check that the mask and array have the same shape + if array.shape != mask.shape: + raise ValueError('Attempting to replace using a mask shape: {} not equal to the array shape: {}'.format(mask.shape, array.shape)) + + # check that the mask only points to locations with initialized values + if np.any(array[mask] != initialization_value): + raise ValueError('Attempting to overwrite a non-initialization value.') + + array[mask] = replacement_value + + done_replacing = np.all(array!=initialization_value) + + return array, done_replacing + + +def check_subarray(array1, array2): + """ + Checks to see where array2 is a subarray of array1. + Assumptions: + - array2 has one axis and is equal in length to the last axis of array1 + """ + + # check assumption + if (len(array2.shape) != 1) or (array2.shape[0] != array1.shape[-1]): + raise ValueError('Attempting to check for subarray equality when shape assumption does not hold.') + + return np.all(array1==array2, axis=-1) + + +def convert_to_original_labels(array, threshold=0.5, initialization_value=999): + """ + array has float output in the range [0.0, 1.0]. + Last three channels are expected to correspond to ET, TC, and WT respecively. + + """ + + binarized, belief = get_binarized_and_belief(array=array, threshold=threshold) + + #sanity check + if binarized.shape != belief.shape: + raise ValueError('Sanity check did not pass.') + + # initialize with a crazy label we will be sure is gone in the end + slice_all_but_last_channel = tuple([slice(None) for _ in array.shape[:-1]] + [0]) + original_labels = initialization_value * np.ones_like(array[slice_all_but_last_channel]) + + # the outer keys correspond to the binarized values + # the inner keys correspond to the order of indices comingn from argsort(ascending) on suspicion, i.e. + # how far the binarized sigmoid outputs were from the original sigmoid outputs + # for example, (2, 1, 0) means the suspicion from least to greatest was: 'WT', 'TC', 'ET' + # (recall that the order of the last three channels is expected to be: 'ET', 'TC', and 'WT') + mapper = {(0, 0, 0): 0, + (1, 1, 1): 4, + (0, 1, 1): 1, + (0, 0, 1): 2, + (0, 1, 0): {(2, 0, 1): 0, + (2, 1, 0): 0, + (1, 0, 2): 1, + (1, 2, 0): 1, + (0, 2, 1): 0, + (0, 1, 2): 1}, + (1, 1, 0): {(2, 0, 1): 0, + (2, 1, 0): 0, + (1, 0, 2): 4, + (1, 2, 0): 4, + (0, 2, 1): 4, + (0, 1, 2): 4}, + (1, 0, 1): {(2, 0, 1): 4, + (2, 1, 0): 2, + (1, 0, 2): 2, + (1, 2, 0): 2, + (0, 2, 1): 4, + (0, 1, 2): 4}, + (1, 0, 0): {(2, 0, 1): 0, + (2, 1, 0): 0, + (1, 0, 2): 0, + (1, 2, 0): 0, + (0, 2, 1): 4, + (0, 1, 2): 4}} + + + + done_replacing = False + + for binary_key, inner in mapper.items(): + mask1 = check_subarray(array1=binarized, array2=np.array(binary_key)) + if isinstance(inner, int): + original_labels, done_replacing = replace_initializations(done_replacing=done_replacing, + array=original_labels, + mask=mask1, + replacement_value=inner, + initialization_value=initialization_value) + else: + for inner_key, inner_value in inner.items(): + mask2 = np.logical_and(mask1, check_subarray(array1=belief, array2=np.array(inner_key))) + original_labels, done_replacing = replace_initializations(done_replacing=done_replacing, + array=original_labels, + mask=mask2, + replacement_value=inner_value, + initialization_value=initialization_value) + + if not done_replacing: + raise ValueError('About to return so should have been done replacing but told otherwise.') + + return original_labels.astype(np.uint8) + + +def model_outputs_to_disc(data_path, + validation_csv, + output_path, + native_model_path, + outputtag='', + device='cpu'): + + fx.init('fets_challenge_workspace') + + from sys import path, exit + + file = Path(__file__).resolve() + root = file.parent.resolve() # interface root, containing command modules + work = Path.cwd().resolve() + + path.append(str(root)) + path.insert(0, str(work)) + + generate_validation_csv(data_path,validation_csv, working_dir=work) + + overrides = { + 'task_runner.settings.device': device, + 'task_runner.settings.val_csv': 'validation_paths.csv', + 'task_runner.settings.train_csv': None, + } + + # Update the plan if necessary + plan = fx.update_plan(overrides) + plan.config['task_runner']['settings']['fets_config_dict']['save_output'] = True + plan.config['task_runner']['settings']['fets_config_dict']['output_dir'] = output_path + + # overwrite datapath value for a single 'InferenceCol' collaborator + plan.cols_data_paths['InferenceCol'] = data_path + + # get the inference data loader + data_loader = copy(plan).get_data_loader('InferenceCol') + + # get the task runner, passing the data loader + task_runner = copy(plan).get_task_runner(data_loader) + + # Populate model weights + device = torch.device(device) + task_runner.load_native(filepath=native_model_path, map_location=device) + task_runner.opt_treatment = 'RESET' + + logger.info('Starting inference using data from {}\n'.format(data_path)) + + task_runner.inference('aggregator',-1,task_runner.get_tensor_dict(),apply='global') + logger.info(f"\nFinished generating predictions to output folder {output_path}") diff --git a/Task_1/build/lib/fets_challenge/spec_sens_code.py b/Task_1/build/lib/fets_challenge/spec_sens_code.py new file mode 100644 index 0000000..50d35b9 --- /dev/null +++ b/Task_1/build/lib/fets_challenge/spec_sens_code.py @@ -0,0 +1,113 @@ +import numpy as np + +def check_shapes_same(output, target): + if output.shape != target.shape: + raise ValueError('Shapes of output {} and target {} do not match.'.format(output.shape, target.shape)) + + +def check_classes_enumerated_along_correct_axis(array, axis, num_classes): + if array.shape[axis] != num_classes: + raise ValueError('The idx={} channel of array should enumerate classes, but its shape is {} and there are {} classes.'.format(axis, array.shape, num_classes)) + + +def check_is_binary_single(array): + unique_values = np.unique(array) + if not set(unique_values).issubset(set([1.0, 0.0])): + raise ValueError('The provided array is not binary as unique values are: {}'.format(unique_values)) + +def apply_threshold(array, threshold=0.5): + + over_threshold = array >= threshold + + bin_tensor = np.zeros_like(array) + bin_tensor[over_threshold] = 1 + + return bin_tensor + + +def binarize_output(output, class_list, modality, threshold=0.5, class_axis=1): + if class_list == ['4', '1||4', '1||2||4']: + check_classes_enumerated_along_correct_axis(array=output, axis=class_axis, num_classes=len(class_list)) + + slices = [slice(None) for _ in output.shape] + + # select appropriate channel for modality, and convert floats to binary using threshold + if modality == 'ET': + slices[class_axis] = 0 + binarized_output = apply_threshold(output[tuple(slices)], threshold=threshold) + elif modality == 'TC': + slices[class_axis] = 1 + binarized_output = apply_threshold(output[tuple(slices)], threshold=threshold) + elif modality == 'WT': + slices[class_axis] = 2 + binarized_output = apply_threshold(output[tuple(slices)], threshold=threshold) + else: + raise ValueError('Modality {} is not currently supported.'.format(modality)) + + else: + raise ValueError("Class list {} is not currently supported.".format(class_list)) + + check_is_binary_single(binarized_output) + + return binarized_output + + +def brats_labels(output, + target, + class_list= ['4', '1||4', '1||2||4'], + binarized=True, + **kwargs): + # take output and target and create: (output_, lable_) + # for tasks in ['enhancing', 'core', 'whole'] + # these can be binary (per-voxel) decisions (if binarized==True) or float valued + if binarized: + output_enhancing = binarize_output(output=output, + class_list=class_list, + modality='ET') + + output_core = binarize_output(output=output, + class_list=class_list, + modality='TC') + + output_whole = binarize_output(output=output, + class_list=class_list, + modality='WT') + + # We detect specific use_cases here, and force a change in the code when another is wanted. + # In all cases, we rely on the order of class_list !!! + if list(class_list) == ['4', '1||4', '1||2||4']: + # In this case we track only enhancing tumor, tumor core, and whole tumor (no background class). + + if not binarized: + + # enhancing signal is channel 0 because of known class_list with fused labels + output_enhancing = output[:,0,:,:,:] + + # core signal is channel 1 because of known class_list with fused labels + output_core = output[:,1,:,:,:] + + # whole signal is channel 2 because of known class_list with fused labels + output_whole = output[:,2,:,:,:] + + + # enhancing signal is channel 0 because of known class_list with fused labels + target_enhancing = target[:,0,:,:,:] + + # core signal is channel 1 because of known class_list with fused labels + target_core = target[:,1,:,:,:] + + # whole signal is channel 2 because of known class_list with fused labels + target_whole = target[:,2,:,:,:] + else: + raise ValueError('No implementation for this model class_list: ', class_list) + + check_shapes_same(output=output_enhancing, target=target_enhancing) + check_shapes_same(output=output_core, target=target_core) + check_shapes_same(output=output_whole, target=target_whole) + + return {'outputs': {'ET': output_enhancing, + 'TC': output_core, + 'WT': output_whole}, + 'targets': {'ET': target_enhancing, + 'TC': target_core, + 'WT': target_whole}} diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_1.csv b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_1.csv new file mode 100644 index 0000000..a5a8fb3 --- /dev/null +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_1.csv @@ -0,0 +1,1252 @@ +Partition_ID,Subject_ID +1,FeTS2022_01341 +1,FeTS2022_01333 +1,FeTS2022_01077 +1,FeTS2022_01054 +1,FeTS2022_00285 +1,FeTS2022_01308 +1,FeTS2022_01363 +1,FeTS2022_01091 +1,FeTS2022_01273 +1,FeTS2022_01108 +1,FeTS2022_01255 +1,FeTS2022_01301 +1,FeTS2022_00219 +1,FeTS2022_00380 +1,FeTS2022_01349 +1,FeTS2022_00251 +1,FeTS2022_01276 +1,FeTS2022_01407 +1,FeTS2022_01344 +1,FeTS2022_01405 +1,FeTS2022_00218 +1,FeTS2022_01327 +1,FeTS2022_01252 +1,FeTS2022_01132 +1,FeTS2022_01036 +1,FeTS2022_01039 +1,FeTS2022_01366 +1,FeTS2022_00262 +1,FeTS2022_01279 +1,FeTS2022_00839 +1,FeTS2022_01322 +1,FeTS2022_00389 +1,FeTS2022_00390 +1,FeTS2022_00431 +1,FeTS2022_00222 +1,FeTS2022_00373 +1,FeTS2022_00288 +1,FeTS2022_00284 +1,FeTS2022_01088 +1,FeTS2022_00311 +1,FeTS2022_00387 +1,FeTS2022_00258 +1,FeTS2022_01389 +1,FeTS2022_00321 +1,FeTS2022_01249 +1,FeTS2022_01230 +1,FeTS2022_00836 +1,FeTS2022_00348 +1,FeTS2022_01205 +1,FeTS2022_00246 +1,FeTS2022_00314 +1,FeTS2022_01404 +1,FeTS2022_01102 +1,FeTS2022_00379 +1,FeTS2022_01395 +1,FeTS2022_00155 +1,FeTS2022_00170 +1,FeTS2022_01264 +1,FeTS2022_00837 +1,FeTS2022_01372 +1,FeTS2022_00341 +1,FeTS2022_01257 +1,FeTS2022_00329 +1,FeTS2022_00425 +1,FeTS2022_01350 +1,FeTS2022_01247 +1,FeTS2022_01234 +1,FeTS2022_00331 +1,FeTS2022_01128 +1,FeTS2022_01365 +1,FeTS2022_00221 +1,FeTS2022_00298 +1,FeTS2022_00227 +1,FeTS2022_01204 +1,FeTS2022_00204 +1,FeTS2022_01399 +1,FeTS2022_00377 +1,FeTS2022_00343 +1,FeTS2022_00280 +1,FeTS2022_01347 +1,FeTS2022_00210 +1,FeTS2022_01117 +1,FeTS2022_01275 +1,FeTS2022_01034 +1,FeTS2022_00162 +1,FeTS2022_01340 +1,FeTS2022_01212 +1,FeTS2022_01220 +1,FeTS2022_00419 +1,FeTS2022_00340 +1,FeTS2022_00296 +1,FeTS2022_01208 +1,FeTS2022_01064 +1,FeTS2022_00433 +1,FeTS2022_01050 +1,FeTS2022_01278 +1,FeTS2022_00293 +1,FeTS2022_00206 +1,FeTS2022_00356 +1,FeTS2022_00376 +1,FeTS2022_00316 +1,FeTS2022_00403 +1,FeTS2022_01348 +1,FeTS2022_00192 +1,FeTS2022_00313 +1,FeTS2022_01240 +1,FeTS2022_01222 +1,FeTS2022_00344 +1,FeTS2022_00332 +1,FeTS2022_00292 +1,FeTS2022_01392 +1,FeTS2022_00220 +1,FeTS2022_00378 +1,FeTS2022_01130 +1,FeTS2022_01106 +1,FeTS2022_01295 +1,FeTS2022_01409 +1,FeTS2022_01057 +1,FeTS2022_01068 +1,FeTS2022_00320 +1,FeTS2022_00346 +1,FeTS2022_01001 +1,FeTS2022_01207 +1,FeTS2022_01137 +1,FeTS2022_01318 +1,FeTS2022_00289 +1,FeTS2022_00157 +1,FeTS2022_01224 +1,FeTS2022_01367 +1,FeTS2022_01382 +1,FeTS2022_00309 +1,FeTS2022_01008 +1,FeTS2022_01059 +1,FeTS2022_01271 +1,FeTS2022_01110 +1,FeTS2022_01398 +1,FeTS2022_01119 +1,FeTS2022_00209 +1,FeTS2022_01274 +1,FeTS2022_01124 +1,FeTS2022_00241 +1,FeTS2022_00152 +1,FeTS2022_01131 +1,FeTS2022_01353 +1,FeTS2022_00352 +1,FeTS2022_01133 +1,FeTS2022_01084 +1,FeTS2022_00441 +1,FeTS2022_01268 +1,FeTS2022_01210 +1,FeTS2022_01375 +1,FeTS2022_00236 +1,FeTS2022_01218 +1,FeTS2022_01408 +1,FeTS2022_00274 +1,FeTS2022_01118 +1,FeTS2022_01213 +1,FeTS2022_01310 +1,FeTS2022_00194 +1,FeTS2022_00392 +1,FeTS2022_00334 +1,FeTS2022_00270 +1,FeTS2022_01359 +1,FeTS2022_01364 +1,FeTS2022_01336 +1,FeTS2022_01272 +1,FeTS2022_01090 +1,FeTS2022_00412 +1,FeTS2022_00228 +1,FeTS2022_00410 +1,FeTS2022_01239 +1,FeTS2022_01010 +1,FeTS2022_01394 +1,FeTS2022_00282 +1,FeTS2022_00237 +1,FeTS2022_01390 +1,FeTS2022_00382 +1,FeTS2022_00188 +1,FeTS2022_01211 +1,FeTS2022_01376 +1,FeTS2022_01243 +1,FeTS2022_01330 +1,FeTS2022_00253 +1,FeTS2022_01329 +1,FeTS2022_01306 +1,FeTS2022_01081 +1,FeTS2022_01369 +1,FeTS2022_01048 +1,FeTS2022_00328 +1,FeTS2022_00291 +1,FeTS2022_01049 +1,FeTS2022_01263 +1,FeTS2022_00317 +1,FeTS2022_00305 +1,FeTS2022_01265 +1,FeTS2022_00238 +1,FeTS2022_00423 +1,FeTS2022_01127 +1,FeTS2022_01379 +1,FeTS2022_01258 +1,FeTS2022_00299 +1,FeTS2022_01334 +1,FeTS2022_00350 +1,FeTS2022_01109 +1,FeTS2022_01352 +1,FeTS2022_01055 +1,FeTS2022_00167 +1,FeTS2022_01354 +1,FeTS2022_01231 +1,FeTS2022_00185 +1,FeTS2022_00306 +1,FeTS2022_00171 +1,FeTS2022_01261 +1,FeTS2022_01345 +1,FeTS2022_01397 +1,FeTS2022_00399 +1,FeTS2022_01319 +1,FeTS2022_01250 +1,FeTS2022_01097 +1,FeTS2022_01229 +1,FeTS2022_01393 +1,FeTS2022_00430 +1,FeTS2022_01203 +1,FeTS2022_01309 +1,FeTS2022_01342 +1,FeTS2022_01223 +1,FeTS2022_00239 +1,FeTS2022_00275 +1,FeTS2022_00406 +1,FeTS2022_01116 +1,FeTS2022_01380 +1,FeTS2022_00214 +1,FeTS2022_00195 +1,FeTS2022_01314 +1,FeTS2022_01113 +1,FeTS2022_00193 +1,FeTS2022_01259 +1,FeTS2022_00386 +1,FeTS2022_00834 +1,FeTS2022_01227 +1,FeTS2022_01277 +1,FeTS2022_00283 +1,FeTS2022_01099 +1,FeTS2022_00212 +1,FeTS2022_00165 +1,FeTS2022_01332 +1,FeTS2022_00364 +1,FeTS2022_01129 +1,FeTS2022_00301 +1,FeTS2022_01402 +1,FeTS2022_00199 +1,FeTS2022_01066 +1,FeTS2022_01107 +1,FeTS2022_01337 +1,FeTS2022_00230 +1,FeTS2022_01114 +1,FeTS2022_01294 +1,FeTS2022_01370 +1,FeTS2022_01269 +1,FeTS2022_01043 +1,FeTS2022_00359 +1,FeTS2022_01004 +1,FeTS2022_00286 +1,FeTS2022_01038 +1,FeTS2022_00370 +1,FeTS2022_00184 +1,FeTS2022_00360 +1,FeTS2022_01123 +1,FeTS2022_01237 +1,FeTS2022_01086 +1,FeTS2022_00231 +1,FeTS2022_00353 +1,FeTS2022_01254 +1,FeTS2022_01373 +1,FeTS2022_01100 +1,FeTS2022_01214 +1,FeTS2022_01242 +1,FeTS2022_01115 +1,FeTS2022_01331 +1,FeTS2022_00391 +1,FeTS2022_01312 +1,FeTS2022_00324 +1,FeTS2022_01080 +1,FeTS2022_00371 +1,FeTS2022_01396 +1,FeTS2022_00339 +1,FeTS2022_00260 +1,FeTS2022_00243 +1,FeTS2022_00233 +1,FeTS2022_01323 +1,FeTS2022_01248 +1,FeTS2022_00263 +1,FeTS2022_00347 +1,FeTS2022_01233 +1,FeTS2022_00367 +1,FeTS2022_01051 +1,FeTS2022_01126 +1,FeTS2022_01267 +1,FeTS2022_00383 +1,FeTS2022_01357 +1,FeTS2022_00413 +1,FeTS2022_01287 +1,FeTS2022_00349 +1,FeTS2022_01244 +1,FeTS2022_01041 +1,FeTS2022_01236 +1,FeTS2022_01245 +1,FeTS2022_01383 +1,FeTS2022_00196 +1,FeTS2022_01387 +1,FeTS2022_00297 +1,FeTS2022_01103 +1,FeTS2022_01098 +1,FeTS2022_01410 +1,FeTS2022_00440 +1,FeTS2022_01305 +1,FeTS2022_01304 +1,FeTS2022_01074 +1,FeTS2022_01046 +1,FeTS2022_01226 +1,FeTS2022_01253 +1,FeTS2022_01040 +1,FeTS2022_00269 +1,FeTS2022_00310 +1,FeTS2022_01056 +1,FeTS2022_01311 +1,FeTS2022_01338 +1,FeTS2022_00166 +1,FeTS2022_00327 +1,FeTS2022_00254 +1,FeTS2022_01000 +1,FeTS2022_00259 +1,FeTS2022_01134 +1,FeTS2022_01104 +1,FeTS2022_01232 +1,FeTS2022_01286 +1,FeTS2022_01052 +1,FeTS2022_01217 +1,FeTS2022_01238 +1,FeTS2022_00154 +1,FeTS2022_00395 +1,FeTS2022_00267 +1,FeTS2022_00366 +1,FeTS2022_00351 +1,FeTS2022_00159 +1,FeTS2022_00131 +1,FeTS2022_01246 +1,FeTS2022_01060 +1,FeTS2022_01087 +1,FeTS2022_00250 +1,FeTS2022_00234 +1,FeTS2022_01058 +1,FeTS2022_00235 +1,FeTS2022_00203 +1,FeTS2022_00414 +1,FeTS2022_01285 +1,FeTS2022_01071 +1,FeTS2022_01111 +1,FeTS2022_01377 +1,FeTS2022_01355 +1,FeTS2022_01384 +1,FeTS2022_01120 +1,FeTS2022_01082 +1,FeTS2022_01076 +1,FeTS2022_01072 +1,FeTS2022_00303 +1,FeTS2022_00436 +1,FeTS2022_01361 +1,FeTS2022_01073 +1,FeTS2022_00338 +1,FeTS2022_01351 +1,FeTS2022_00273 +1,FeTS2022_00186 +1,FeTS2022_00290 +1,FeTS2022_01381 +1,FeTS2022_01083 +1,FeTS2022_00409 +1,FeTS2022_00281 +1,FeTS2022_00840 +1,FeTS2022_00407 +1,FeTS2022_01094 +1,FeTS2022_01328 +1,FeTS2022_01078 +1,FeTS2022_00312 +1,FeTS2022_01235 +1,FeTS2022_01288 +1,FeTS2022_01391 +1,FeTS2022_01215 +1,FeTS2022_00160 +1,FeTS2022_00421 +1,FeTS2022_01317 +1,FeTS2022_01216 +1,FeTS2022_00178 +1,FeTS2022_00838 +1,FeTS2022_01321 +1,FeTS2022_01037 +1,FeTS2022_00176 +1,FeTS2022_01293 +1,FeTS2022_01219 +1,FeTS2022_01260 +1,FeTS2022_01339 +1,FeTS2022_01325 +1,FeTS2022_00249 +1,FeTS2022_01241 +1,FeTS2022_00211 +1,FeTS2022_01105 +1,FeTS2022_01138 +1,FeTS2022_00261 +1,FeTS2022_01316 +1,FeTS2022_01315 +1,FeTS2022_01256 +1,FeTS2022_00191 +1,FeTS2022_01069 +1,FeTS2022_01062 +1,FeTS2022_01135 +1,FeTS2022_00207 +1,FeTS2022_00401 +1,FeTS2022_00172 +1,FeTS2022_01085 +1,FeTS2022_00247 +1,FeTS2022_01206 +1,FeTS2022_01356 +1,FeTS2022_00325 +1,FeTS2022_00429 +1,FeTS2022_01122 +1,FeTS2022_01374 +1,FeTS2022_00156 +1,FeTS2022_01075 +1,FeTS2022_01362 +1,FeTS2022_01251 +1,FeTS2022_00405 +1,FeTS2022_01047 +1,FeTS2022_00240 +1,FeTS2022_00336 +1,FeTS2022_01092 +1,FeTS2022_01403 +1,FeTS2022_01385 +1,FeTS2022_01096 +1,FeTS2022_00426 +1,FeTS2022_00201 +1,FeTS2022_01335 +1,FeTS2022_00404 +1,FeTS2022_00322 +1,FeTS2022_00294 +1,FeTS2022_01070 +1,FeTS2022_01225 +1,FeTS2022_01067 +1,FeTS2022_00375 +1,FeTS2022_00158 +1,FeTS2022_00177 +1,FeTS2022_00271 +1,FeTS2022_01388 +1,FeTS2022_01053 +1,FeTS2022_01042 +1,FeTS2022_01400 +1,FeTS2022_00183 +1,FeTS2022_01358 +1,FeTS2022_01266 +1,FeTS2022_01360 +1,FeTS2022_00304 +1,FeTS2022_01065 +1,FeTS2022_01093 +1,FeTS2022_00397 +1,FeTS2022_01262 +1,FeTS2022_00217 +1,FeTS2022_01401 +1,FeTS2022_01125 +1,FeTS2022_01406 +1,FeTS2022_01343 +1,FeTS2022_01346 +1,FeTS2022_01089 +1,FeTS2022_00216 +1,FeTS2022_01061 +1,FeTS2022_01299 +1,FeTS2022_00242 +1,FeTS2022_01112 +1,FeTS2022_00300 +1,FeTS2022_01280 +1,FeTS2022_00187 +1,FeTS2022_00318 +1,FeTS2022_01371 +1,FeTS2022_01378 +1,FeTS2022_00418 +1,FeTS2022_01121 +1,FeTS2022_01136 +1,FeTS2022_00266 +1,FeTS2022_01221 +1,FeTS2022_01307 +1,FeTS2022_01386 +1,FeTS2022_00432 +1,FeTS2022_01101 +1,FeTS2022_01228 +1,FeTS2022_01313 +1,FeTS2022_01209 +1,FeTS2022_00388 +1,FeTS2022_01270 +1,FeTS2022_01044 +1,FeTS2022_00417 +1,FeTS2022_01063 +1,FeTS2022_01368 +1,FeTS2022_00369 +1,FeTS2022_01095 +1,FeTS2022_00416 +1,FeTS2022_00400 +1,FeTS2022_01045 +1,FeTS2022_01202 +1,FeTS2022_01326 +1,FeTS2022_01079 +1,FeTS2022_00402 +1,FeTS2022_01320 +1,FeTS2022_01324 +2,FeTS2022_01412 +2,FeTS2022_01415 +2,FeTS2022_01411 +2,FeTS2022_01414 +2,FeTS2022_01413 +2,FeTS2022_01416 +3,FeTS2022_01439 +3,FeTS2022_01435 +3,FeTS2022_01434 +3,FeTS2022_01440 +3,FeTS2022_01431 +3,FeTS2022_01437 +3,FeTS2022_01436 +3,FeTS2022_01433 +3,FeTS2022_01438 +3,FeTS2022_01426 +3,FeTS2022_01427 +3,FeTS2022_01428 +3,FeTS2022_01429 +3,FeTS2022_01432 +3,FeTS2022_01430 +4,FeTS2022_01152 +4,FeTS2022_01178 +4,FeTS2022_01186 +4,FeTS2022_01184 +4,FeTS2022_01181 +4,FeTS2022_01187 +4,FeTS2022_01168 +4,FeTS2022_01196 +4,FeTS2022_01173 +4,FeTS2022_01176 +4,FeTS2022_01200 +4,FeTS2022_00565 +4,FeTS2022_01193 +4,FeTS2022_01174 +4,FeTS2022_01662 +4,FeTS2022_01660 +4,FeTS2022_01201 +4,FeTS2022_01167 +4,FeTS2022_01170 +4,FeTS2022_01179 +4,FeTS2022_01185 +4,FeTS2022_01197 +4,FeTS2022_01172 +4,FeTS2022_01189 +4,FeTS2022_00563 +4,FeTS2022_01180 +4,FeTS2022_01198 +4,FeTS2022_01183 +4,FeTS2022_01151 +4,FeTS2022_01195 +4,FeTS2022_01657 +4,FeTS2022_01194 +4,FeTS2022_01191 +4,FeTS2022_01169 +4,FeTS2022_01171 +4,FeTS2022_00561 +4,FeTS2022_01659 +4,FeTS2022_01661 +4,FeTS2022_01190 +4,FeTS2022_01188 +4,FeTS2022_01199 +4,FeTS2022_01658 +4,FeTS2022_01192 +4,FeTS2022_01175 +4,FeTS2022_01182 +4,FeTS2022_01537 +4,FeTS2022_01177 +5,FeTS2022_00102 +5,FeTS2022_00149 +5,FeTS2022_01290 +5,FeTS2022_00113 +5,FeTS2022_01009 +5,FeTS2022_01007 +5,FeTS2022_01002 +5,FeTS2022_00139 +5,FeTS2022_01292 +5,FeTS2022_00100 +5,FeTS2022_01289 +5,FeTS2022_01291 +5,FeTS2022_01005 +5,FeTS2022_01282 +5,FeTS2022_01003 +5,FeTS2022_00109 +5,FeTS2022_01283 +5,FeTS2022_00999 +5,FeTS2022_01281 +5,FeTS2022_01284 +5,FeTS2022_00151 +5,FeTS2022_00123 +6,FeTS2022_01451 +6,FeTS2022_01453 +6,FeTS2022_01452 +6,FeTS2022_00831 +6,FeTS2022_01448 +6,FeTS2022_01300 +6,FeTS2022_01443 +6,FeTS2022_00136 +6,FeTS2022_01454 +6,FeTS2022_00144 +6,FeTS2022_00121 +6,FeTS2022_01297 +6,FeTS2022_00133 +6,FeTS2022_01447 +6,FeTS2022_00142 +6,FeTS2022_01450 +6,FeTS2022_00120 +6,FeTS2022_01298 +6,FeTS2022_01449 +6,FeTS2022_01442 +6,FeTS2022_01446 +6,FeTS2022_01303 +6,FeTS2022_01296 +6,FeTS2022_00132 +6,FeTS2022_01441 +6,FeTS2022_01445 +6,FeTS2022_01302 +6,FeTS2022_00143 +6,FeTS2022_00105 +6,FeTS2022_01444 +6,FeTS2022_00147 +6,FeTS2022_01455 +6,FeTS2022_00146 +6,FeTS2022_00137 +7,FeTS2022_01459 +7,FeTS2022_01464 +7,FeTS2022_01458 +7,FeTS2022_01457 +7,FeTS2022_01461 +7,FeTS2022_01456 +7,FeTS2022_01460 +7,FeTS2022_01462 +7,FeTS2022_01466 +7,FeTS2022_01465 +7,FeTS2022_01463 +7,FeTS2022_01467 +8,FeTS2022_00140 +8,FeTS2022_01469 +8,FeTS2022_01468 +8,FeTS2022_01470 +8,FeTS2022_00104 +8,FeTS2022_00110 +8,FeTS2022_00112 +8,FeTS2022_00128 +9,FeTS2022_00134 +9,FeTS2022_00150 +9,FeTS2022_00116 +9,FeTS2022_01471 +10,FeTS2022_01472 +10,FeTS2022_00117 +10,FeTS2022_00130 +10,FeTS2022_00138 +10,FeTS2022_01473 +10,FeTS2022_00111 +10,FeTS2022_00124 +10,FeTS2022_00106 +11,FeTS2022_00122 +11,FeTS2022_00148 +11,FeTS2022_01474 +11,FeTS2022_00108 +11,FeTS2022_01144 +11,FeTS2022_00107 +11,FeTS2022_01140 +11,FeTS2022_01146 +11,FeTS2022_01145 +11,FeTS2022_01139 +11,FeTS2022_01141 +11,FeTS2022_01142 +11,FeTS2022_01143 +11,FeTS2022_01475 +12,FeTS2022_01482 +12,FeTS2022_01480 +12,FeTS2022_01485 +12,FeTS2022_01476 +12,FeTS2022_01481 +12,FeTS2022_01483 +12,FeTS2022_01486 +12,FeTS2022_01484 +12,FeTS2022_01479 +12,FeTS2022_01477 +12,FeTS2022_01478 +13,FeTS2022_01491 +13,FeTS2022_01500 +13,FeTS2022_01519 +13,FeTS2022_01516 +13,FeTS2022_01509 +13,FeTS2022_01520 +13,FeTS2022_01508 +13,FeTS2022_01503 +13,FeTS2022_01488 +13,FeTS2022_01492 +13,FeTS2022_01502 +13,FeTS2022_01493 +13,FeTS2022_01497 +13,FeTS2022_01499 +13,FeTS2022_01487 +13,FeTS2022_01505 +13,FeTS2022_01504 +13,FeTS2022_01490 +13,FeTS2022_01507 +13,FeTS2022_01510 +13,FeTS2022_01512 +13,FeTS2022_01514 +13,FeTS2022_01517 +13,FeTS2022_01501 +13,FeTS2022_01518 +13,FeTS2022_01506 +13,FeTS2022_01515 +13,FeTS2022_01511 +13,FeTS2022_01494 +13,FeTS2022_01489 +13,FeTS2022_01513 +13,FeTS2022_01496 +13,FeTS2022_01495 +13,FeTS2022_01521 +13,FeTS2022_01498 +14,FeTS2022_01522 +14,FeTS2022_01525 +14,FeTS2022_01526 +14,FeTS2022_01527 +14,FeTS2022_01524 +14,FeTS2022_01523 +15,FeTS2022_01530 +15,FeTS2022_01536 +15,FeTS2022_01535 +15,FeTS2022_01663 +15,FeTS2022_01534 +15,FeTS2022_01529 +15,FeTS2022_01531 +15,FeTS2022_01666 +15,FeTS2022_01665 +15,FeTS2022_01532 +15,FeTS2022_01664 +15,FeTS2022_01528 +15,FeTS2022_01533 +16,FeTS2022_00584 +16,FeTS2022_00567 +16,FeTS2022_00571 +16,FeTS2022_00582 +16,FeTS2022_00570 +16,FeTS2022_00594 +16,FeTS2022_00597 +16,FeTS2022_00596 +16,FeTS2022_00576 +16,FeTS2022_00572 +16,FeTS2022_00115 +16,FeTS2022_00593 +16,FeTS2022_00588 +16,FeTS2022_00598 +16,FeTS2022_00589 +16,FeTS2022_00574 +16,FeTS2022_00586 +16,FeTS2022_00579 +16,FeTS2022_00590 +16,FeTS2022_00599 +16,FeTS2022_00577 +16,FeTS2022_00575 +16,FeTS2022_00581 +16,FeTS2022_00591 +16,FeTS2022_00569 +16,FeTS2022_00587 +16,FeTS2022_00580 +16,FeTS2022_00583 +16,FeTS2022_00578 +16,FeTS2022_00568 +17,FeTS2022_01423 +17,FeTS2022_01420 +17,FeTS2022_01422 +17,FeTS2022_01417 +17,FeTS2022_01421 +17,FeTS2022_01424 +17,FeTS2022_01418 +17,FeTS2022_01425 +17,FeTS2022_01419 +18,FeTS2022_01628 +18,FeTS2022_01615 +18,FeTS2022_01035 +18,FeTS2022_00732 +18,FeTS2022_00753 +18,FeTS2022_01620 +18,FeTS2022_01637 +18,FeTS2022_01594 +18,FeTS2022_00530 +18,FeTS2022_00772 +18,FeTS2022_01580 +18,FeTS2022_00731 +18,FeTS2022_00540 +18,FeTS2022_00464 +18,FeTS2022_01622 +18,FeTS2022_01154 +18,FeTS2022_01559 +18,FeTS2022_00729 +18,FeTS2022_00708 +18,FeTS2022_00044 +18,FeTS2022_00705 +18,FeTS2022_00645 +18,FeTS2022_01640 +18,FeTS2022_00008 +18,FeTS2022_00746 +18,FeTS2022_01551 +18,FeTS2022_01610 +18,FeTS2022_00061 +18,FeTS2022_00642 +18,FeTS2022_00675 +18,FeTS2022_01651 +18,FeTS2022_00651 +18,FeTS2022_00626 +18,FeTS2022_00028 +18,FeTS2022_01557 +18,FeTS2022_01616 +18,FeTS2022_00684 +18,FeTS2022_01538 +18,FeTS2022_01647 +18,FeTS2022_00688 +18,FeTS2022_00737 +18,FeTS2022_00063 +18,FeTS2022_00758 +18,FeTS2022_01159 +18,FeTS2022_00615 +18,FeTS2022_00621 +18,FeTS2022_01543 +18,FeTS2022_01560 +18,FeTS2022_00058 +18,FeTS2022_00009 +18,FeTS2022_00544 +18,FeTS2022_01611 +18,FeTS2022_00485 +18,FeTS2022_00735 +18,FeTS2022_00659 +18,FeTS2022_00025 +18,FeTS2022_00550 +18,FeTS2022_01599 +18,FeTS2022_00636 +18,FeTS2022_01644 +18,FeTS2022_00716 +18,FeTS2022_00641 +18,FeTS2022_01624 +18,FeTS2022_00547 +18,FeTS2022_00046 +18,FeTS2022_00728 +18,FeTS2022_00045 +18,FeTS2022_00493 +18,FeTS2022_00089 +18,FeTS2022_00622 +18,FeTS2022_01643 +18,FeTS2022_00602 +18,FeTS2022_00035 +18,FeTS2022_01545 +18,FeTS2022_00014 +18,FeTS2022_01566 +18,FeTS2022_00066 +18,FeTS2022_01614 +18,FeTS2022_01591 +18,FeTS2022_00514 +18,FeTS2022_01588 +18,FeTS2022_00520 +18,FeTS2022_01556 +18,FeTS2022_00097 +18,FeTS2022_00555 +18,FeTS2022_00736 +18,FeTS2022_00639 +18,FeTS2022_00479 +18,FeTS2022_01550 +18,FeTS2022_01592 +18,FeTS2022_01626 +18,FeTS2022_00557 +18,FeTS2022_00496 +18,FeTS2022_00778 +18,FeTS2022_01561 +18,FeTS2022_00690 +18,FeTS2022_00750 +18,FeTS2022_01586 +18,FeTS2022_01549 +18,FeTS2022_01555 +18,FeTS2022_01612 +18,FeTS2022_01600 +18,FeTS2022_01629 +18,FeTS2022_01656 +18,FeTS2022_00500 +18,FeTS2022_00529 +18,FeTS2022_00628 +18,FeTS2022_00775 +18,FeTS2022_00523 +18,FeTS2022_00488 +18,FeTS2022_00518 +18,FeTS2022_00000 +18,FeTS2022_00020 +18,FeTS2022_01646 +18,FeTS2022_01638 +18,FeTS2022_00630 +18,FeTS2022_01590 +18,FeTS2022_01613 +18,FeTS2022_01571 +18,FeTS2022_00519 +18,FeTS2022_01617 +18,FeTS2022_01623 +18,FeTS2022_00691 +18,FeTS2022_01027 +18,FeTS2022_00704 +18,FeTS2022_00098 +18,FeTS2022_01558 +18,FeTS2022_00715 +18,FeTS2022_00757 +18,FeTS2022_00084 +18,FeTS2022_00692 +18,FeTS2022_00078 +18,FeTS2022_00747 +18,FeTS2022_01607 +18,FeTS2022_00751 +18,FeTS2022_00011 +18,FeTS2022_00610 +18,FeTS2022_00694 +18,FeTS2022_00026 +18,FeTS2022_00658 +18,FeTS2022_01544 +18,FeTS2022_01583 +18,FeTS2022_00680 +18,FeTS2022_01028 +18,FeTS2022_01636 +18,FeTS2022_00545 +18,FeTS2022_00072 +18,FeTS2022_00016 +18,FeTS2022_01548 +18,FeTS2022_00624 +18,FeTS2022_00676 +18,FeTS2022_00533 +18,FeTS2022_01574 +18,FeTS2022_01582 +18,FeTS2022_00085 +18,FeTS2022_00613 +18,FeTS2022_01593 +18,FeTS2022_00730 +18,FeTS2022_01585 +18,FeTS2022_00524 +18,FeTS2022_00081 +18,FeTS2022_00472 +18,FeTS2022_00478 +18,FeTS2022_00469 +18,FeTS2022_00682 +18,FeTS2022_00733 +18,FeTS2022_00723 +18,FeTS2022_00099 +18,FeTS2022_00744 +18,FeTS2022_00048 +18,FeTS2022_00480 +18,FeTS2022_00650 +18,FeTS2022_00601 +18,FeTS2022_00542 +18,FeTS2022_00667 +18,FeTS2022_00505 +18,FeTS2022_01539 +18,FeTS2022_00764 +18,FeTS2022_00506 +18,FeTS2022_01649 +18,FeTS2022_00032 +18,FeTS2022_00021 +18,FeTS2022_00685 +18,FeTS2022_00611 +18,FeTS2022_00511 +18,FeTS2022_01584 +18,FeTS2022_01635 +18,FeTS2022_00607 +18,FeTS2022_00071 +18,FeTS2022_00687 +18,FeTS2022_00767 +18,FeTS2022_00537 +18,FeTS2022_01630 +18,FeTS2022_00740 +18,FeTS2022_00525 +18,FeTS2022_00725 +18,FeTS2022_00502 +18,FeTS2022_01562 +18,FeTS2022_01577 +18,FeTS2022_01576 +18,FeTS2022_01595 +18,FeTS2022_00654 +18,FeTS2022_00090 +18,FeTS2022_01645 +18,FeTS2022_01564 +18,FeTS2022_01567 +18,FeTS2022_00703 +18,FeTS2022_00043 +18,FeTS2022_00003 +18,FeTS2022_00495 +18,FeTS2022_00017 +18,FeTS2022_00491 +18,FeTS2022_00054 +18,FeTS2022_00510 +18,FeTS2022_00618 +18,FeTS2022_00064 +18,FeTS2022_00024 +18,FeTS2022_00709 +18,FeTS2022_01653 +18,FeTS2022_01579 +18,FeTS2022_01572 +18,FeTS2022_01156 +18,FeTS2022_00707 +18,FeTS2022_01540 +18,FeTS2022_00056 +18,FeTS2022_00620 +18,FeTS2022_00470 +18,FeTS2022_00499 +18,FeTS2022_00640 +18,FeTS2022_00549 +18,FeTS2022_01601 +18,FeTS2022_00608 +18,FeTS2022_00727 +18,FeTS2022_00773 +18,FeTS2022_00504 +18,FeTS2022_01604 +18,FeTS2022_01158 +18,FeTS2022_00051 +18,FeTS2022_00768 +18,FeTS2022_01161 +18,FeTS2022_00765 +18,FeTS2022_00068 +18,FeTS2022_00551 +18,FeTS2022_01605 +18,FeTS2022_00674 +18,FeTS2022_01157 +18,FeTS2022_01631 +18,FeTS2022_00022 +18,FeTS2022_00777 +18,FeTS2022_01609 +18,FeTS2022_01633 +18,FeTS2022_01652 +18,FeTS2022_00759 +18,FeTS2022_01655 +18,FeTS2022_01639 +18,FeTS2022_01563 +18,FeTS2022_00661 +18,FeTS2022_00087 +18,FeTS2022_00030 +18,FeTS2022_00556 +18,FeTS2022_01597 +18,FeTS2022_00724 +18,FeTS2022_00096 +18,FeTS2022_00049 +18,FeTS2022_00683 +18,FeTS2022_00059 +18,FeTS2022_01596 +18,FeTS2022_00498 +18,FeTS2022_00543 +18,FeTS2022_01641 +18,FeTS2022_01542 +18,FeTS2022_00062 +18,FeTS2022_00005 +18,FeTS2022_00646 +18,FeTS2022_00088 +18,FeTS2022_00656 +18,FeTS2022_01589 +18,FeTS2022_01160 +18,FeTS2022_01547 +18,FeTS2022_01606 +18,FeTS2022_00631 +18,FeTS2022_00756 +18,FeTS2022_00619 +18,FeTS2022_00698 +18,FeTS2022_01541 +18,FeTS2022_00539 +18,FeTS2022_00053 +18,FeTS2022_01618 +18,FeTS2022_00693 +18,FeTS2022_00616 +18,FeTS2022_01642 +18,FeTS2022_01632 +18,FeTS2022_00718 +18,FeTS2022_00006 +18,FeTS2022_00466 +18,FeTS2022_01565 +18,FeTS2022_01621 +18,FeTS2022_00697 +18,FeTS2022_00689 +18,FeTS2022_00554 +18,FeTS2022_00638 +18,FeTS2022_00517 +18,FeTS2022_00019 +18,FeTS2022_01650 +18,FeTS2022_01602 +18,FeTS2022_01570 +18,FeTS2022_00655 +18,FeTS2022_00552 +18,FeTS2022_00706 +18,FeTS2022_01654 +18,FeTS2022_00481 +18,FeTS2022_00604 +18,FeTS2022_00612 +18,FeTS2022_00774 +18,FeTS2022_00625 +18,FeTS2022_00070 +18,FeTS2022_00649 +18,FeTS2022_00036 +18,FeTS2022_01546 +18,FeTS2022_00559 +18,FeTS2022_00018 +18,FeTS2022_00507 +18,FeTS2022_00760 +18,FeTS2022_01568 +18,FeTS2022_00094 +18,FeTS2022_00526 +18,FeTS2022_01575 +18,FeTS2022_00512 +18,FeTS2022_00033 +18,FeTS2022_01648 +18,FeTS2022_00052 +18,FeTS2022_01625 +18,FeTS2022_01573 +18,FeTS2022_00623 +18,FeTS2022_01153 +18,FeTS2022_00532 +18,FeTS2022_00516 +18,FeTS2022_00679 +18,FeTS2022_00468 +18,FeTS2022_00494 +18,FeTS2022_00483 +18,FeTS2022_01552 +18,FeTS2022_00606 +18,FeTS2022_00742 +18,FeTS2022_00677 +18,FeTS2022_00652 +18,FeTS2022_00074 +18,FeTS2022_00513 +18,FeTS2022_01581 +18,FeTS2022_00663 +18,FeTS2022_00734 +18,FeTS2022_01619 +18,FeTS2022_00668 +18,FeTS2022_00558 +18,FeTS2022_00002 +18,FeTS2022_01598 +18,FeTS2022_00477 +18,FeTS2022_01634 +18,FeTS2022_00501 +18,FeTS2022_01155 +18,FeTS2022_00077 +18,FeTS2022_01578 +18,FeTS2022_01569 +18,FeTS2022_01603 +18,FeTS2022_00538 +18,FeTS2022_00714 +18,FeTS2022_00031 +18,FeTS2022_01627 +18,FeTS2022_01553 +18,FeTS2022_00548 +18,FeTS2022_00739 +18,FeTS2022_00103 +18,FeTS2022_00528 +18,FeTS2022_01608 +18,FeTS2022_00095 +18,FeTS2022_00060 +18,FeTS2022_01554 +18,FeTS2022_00657 +18,FeTS2022_01587 +18,FeTS2022_00605 +18,FeTS2022_00686 +18,FeTS2022_00012 +19,FeTS2022_01166 +19,FeTS2022_01163 +19,FeTS2022_01165 +19,FeTS2022_01164 +20,FeTS2022_00444 +20,FeTS2022_01014 +20,FeTS2022_00442 +20,FeTS2022_01025 +20,FeTS2022_01024 +20,FeTS2022_00101 +20,FeTS2022_00453 +20,FeTS2022_01013 +20,FeTS2022_01011 +20,FeTS2022_00459 +20,FeTS2022_00457 +20,FeTS2022_01016 +20,FeTS2022_00448 +20,FeTS2022_01023 +20,FeTS2022_01017 +20,FeTS2022_00443 +20,FeTS2022_00455 +20,FeTS2022_00127 +20,FeTS2022_01012 +20,FeTS2022_01018 +20,FeTS2022_01022 +20,FeTS2022_00451 +20,FeTS2022_00445 +20,FeTS2022_00452 +20,FeTS2022_00454 +20,FeTS2022_01019 +20,FeTS2022_01021 +20,FeTS2022_01020 +20,FeTS2022_01026 +20,FeTS2022_00456 +20,FeTS2022_00446 +20,FeTS2022_00449 +20,FeTS2022_01015 +21,FeTS2022_00802 +21,FeTS2022_00788 +21,FeTS2022_00795 +21,FeTS2022_00820 +21,FeTS2022_00782 +21,FeTS2022_00800 +21,FeTS2022_00830 +21,FeTS2022_00824 +21,FeTS2022_00805 +21,FeTS2022_00796 +21,FeTS2022_00823 +21,FeTS2022_00828 +21,FeTS2022_00811 +21,FeTS2022_00789 +21,FeTS2022_00801 +21,FeTS2022_00780 +21,FeTS2022_00781 +21,FeTS2022_00814 +21,FeTS2022_00806 +21,FeTS2022_00810 +21,FeTS2022_00807 +21,FeTS2022_00818 +21,FeTS2022_00791 +21,FeTS2022_00787 +21,FeTS2022_00808 +21,FeTS2022_00809 +21,FeTS2022_00803 +21,FeTS2022_00816 +21,FeTS2022_00819 +21,FeTS2022_00793 +21,FeTS2022_00799 +21,FeTS2022_00797 +21,FeTS2022_00784 +21,FeTS2022_00804 +21,FeTS2022_00792 +22,FeTS2022_01031 +22,FeTS2022_01033 +22,FeTS2022_01030 +22,FeTS2022_00118 +22,FeTS2022_01029 +22,FeTS2022_00126 +22,FeTS2022_01032 +23,FeTS2022_01147 +23,FeTS2022_01149 +23,FeTS2022_01150 +23,FeTS2022_01148 +23,FeTS2022_01162 diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_2.csv b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_2.csv new file mode 100644 index 0000000..798f651 --- /dev/null +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_2.csv @@ -0,0 +1,1252 @@ +Partition_ID,Subject_ID +1,FeTS2022_01341 +1,FeTS2022_01333 +1,FeTS2022_01077 +1,FeTS2022_01054 +1,FeTS2022_00285 +1,FeTS2022_01308 +1,FeTS2022_01363 +1,FeTS2022_01091 +1,FeTS2022_01273 +1,FeTS2022_01108 +1,FeTS2022_01255 +1,FeTS2022_01301 +1,FeTS2022_00219 +1,FeTS2022_00380 +1,FeTS2022_01349 +1,FeTS2022_00251 +1,FeTS2022_01276 +1,FeTS2022_01407 +1,FeTS2022_01344 +1,FeTS2022_01405 +1,FeTS2022_00218 +1,FeTS2022_01327 +1,FeTS2022_01252 +1,FeTS2022_01132 +1,FeTS2022_01036 +1,FeTS2022_01039 +1,FeTS2022_01366 +1,FeTS2022_00262 +1,FeTS2022_01279 +1,FeTS2022_00839 +1,FeTS2022_01322 +1,FeTS2022_00389 +1,FeTS2022_00390 +1,FeTS2022_00431 +1,FeTS2022_00222 +1,FeTS2022_00373 +1,FeTS2022_00288 +1,FeTS2022_00284 +1,FeTS2022_01088 +1,FeTS2022_00311 +1,FeTS2022_00387 +1,FeTS2022_00258 +1,FeTS2022_01389 +1,FeTS2022_00321 +1,FeTS2022_01249 +1,FeTS2022_01230 +1,FeTS2022_00836 +1,FeTS2022_00348 +1,FeTS2022_01205 +1,FeTS2022_00246 +1,FeTS2022_00314 +1,FeTS2022_01404 +1,FeTS2022_01102 +1,FeTS2022_00379 +1,FeTS2022_01395 +1,FeTS2022_00155 +1,FeTS2022_00170 +1,FeTS2022_01264 +1,FeTS2022_00837 +1,FeTS2022_01372 +1,FeTS2022_00341 +1,FeTS2022_01257 +1,FeTS2022_00329 +1,FeTS2022_00425 +1,FeTS2022_01350 +1,FeTS2022_01247 +1,FeTS2022_01234 +1,FeTS2022_00331 +1,FeTS2022_01128 +1,FeTS2022_01365 +1,FeTS2022_00221 +1,FeTS2022_00298 +1,FeTS2022_00227 +1,FeTS2022_01204 +1,FeTS2022_00204 +1,FeTS2022_01399 +1,FeTS2022_00377 +1,FeTS2022_00343 +1,FeTS2022_00280 +1,FeTS2022_01347 +1,FeTS2022_00210 +1,FeTS2022_01117 +1,FeTS2022_01275 +1,FeTS2022_01034 +1,FeTS2022_00162 +1,FeTS2022_01340 +1,FeTS2022_01212 +1,FeTS2022_01220 +1,FeTS2022_00419 +1,FeTS2022_00340 +1,FeTS2022_00296 +1,FeTS2022_01208 +1,FeTS2022_01064 +1,FeTS2022_00433 +1,FeTS2022_01050 +1,FeTS2022_01278 +1,FeTS2022_00293 +1,FeTS2022_00206 +1,FeTS2022_00356 +1,FeTS2022_00376 +1,FeTS2022_00316 +1,FeTS2022_00403 +1,FeTS2022_01348 +1,FeTS2022_00192 +1,FeTS2022_00313 +1,FeTS2022_01240 +1,FeTS2022_01222 +1,FeTS2022_00344 +1,FeTS2022_00332 +1,FeTS2022_00292 +1,FeTS2022_01392 +1,FeTS2022_00220 +1,FeTS2022_00378 +1,FeTS2022_01130 +1,FeTS2022_01106 +1,FeTS2022_01295 +1,FeTS2022_01409 +1,FeTS2022_01057 +1,FeTS2022_01068 +1,FeTS2022_00320 +1,FeTS2022_00346 +1,FeTS2022_01001 +1,FeTS2022_01207 +1,FeTS2022_01137 +1,FeTS2022_01318 +1,FeTS2022_00289 +1,FeTS2022_00157 +1,FeTS2022_01224 +1,FeTS2022_01367 +1,FeTS2022_01382 +1,FeTS2022_00309 +1,FeTS2022_01008 +1,FeTS2022_01059 +1,FeTS2022_01271 +1,FeTS2022_01110 +1,FeTS2022_01398 +1,FeTS2022_01119 +1,FeTS2022_00209 +1,FeTS2022_01274 +1,FeTS2022_01124 +1,FeTS2022_00241 +1,FeTS2022_00152 +1,FeTS2022_01131 +1,FeTS2022_01353 +1,FeTS2022_00352 +1,FeTS2022_01133 +1,FeTS2022_01084 +1,FeTS2022_00441 +1,FeTS2022_01268 +1,FeTS2022_01210 +1,FeTS2022_01375 +1,FeTS2022_00236 +1,FeTS2022_01218 +1,FeTS2022_01408 +1,FeTS2022_00274 +1,FeTS2022_01118 +1,FeTS2022_01213 +1,FeTS2022_01310 +1,FeTS2022_00194 +1,FeTS2022_00392 +1,FeTS2022_00334 +1,FeTS2022_00270 +1,FeTS2022_01359 +1,FeTS2022_01364 +1,FeTS2022_01336 +1,FeTS2022_01272 +1,FeTS2022_01090 +1,FeTS2022_00412 +1,FeTS2022_00228 +1,FeTS2022_00410 +2,FeTS2022_01239 +2,FeTS2022_01010 +2,FeTS2022_01394 +2,FeTS2022_00282 +2,FeTS2022_00237 +2,FeTS2022_01390 +2,FeTS2022_00382 +2,FeTS2022_00188 +2,FeTS2022_01211 +2,FeTS2022_01376 +2,FeTS2022_01243 +2,FeTS2022_01330 +2,FeTS2022_00253 +2,FeTS2022_01329 +2,FeTS2022_01306 +2,FeTS2022_01081 +2,FeTS2022_01369 +2,FeTS2022_01048 +2,FeTS2022_00328 +2,FeTS2022_00291 +2,FeTS2022_01049 +2,FeTS2022_01263 +2,FeTS2022_00317 +2,FeTS2022_00305 +2,FeTS2022_01265 +2,FeTS2022_00238 +2,FeTS2022_00423 +2,FeTS2022_01127 +2,FeTS2022_01379 +2,FeTS2022_01258 +2,FeTS2022_00299 +2,FeTS2022_01334 +2,FeTS2022_00350 +2,FeTS2022_01109 +2,FeTS2022_01352 +2,FeTS2022_01055 +2,FeTS2022_00167 +2,FeTS2022_01354 +2,FeTS2022_01231 +2,FeTS2022_00185 +2,FeTS2022_00306 +2,FeTS2022_00171 +2,FeTS2022_01261 +2,FeTS2022_01345 +2,FeTS2022_01397 +2,FeTS2022_00399 +2,FeTS2022_01319 +2,FeTS2022_01250 +2,FeTS2022_01097 +2,FeTS2022_01229 +2,FeTS2022_01393 +2,FeTS2022_00430 +2,FeTS2022_01203 +2,FeTS2022_01309 +2,FeTS2022_01342 +2,FeTS2022_01223 +2,FeTS2022_00239 +2,FeTS2022_00275 +2,FeTS2022_00406 +2,FeTS2022_01116 +2,FeTS2022_01380 +2,FeTS2022_00214 +2,FeTS2022_00195 +2,FeTS2022_01314 +2,FeTS2022_01113 +2,FeTS2022_00193 +2,FeTS2022_01259 +2,FeTS2022_00386 +2,FeTS2022_00834 +2,FeTS2022_01227 +2,FeTS2022_01277 +2,FeTS2022_00283 +2,FeTS2022_01099 +2,FeTS2022_00212 +2,FeTS2022_00165 +2,FeTS2022_01332 +2,FeTS2022_00364 +2,FeTS2022_01129 +2,FeTS2022_00301 +2,FeTS2022_01402 +2,FeTS2022_00199 +2,FeTS2022_01066 +2,FeTS2022_01107 +2,FeTS2022_01337 +2,FeTS2022_00230 +2,FeTS2022_01114 +2,FeTS2022_01294 +2,FeTS2022_01370 +2,FeTS2022_01269 +2,FeTS2022_01043 +2,FeTS2022_00359 +2,FeTS2022_01004 +2,FeTS2022_00286 +2,FeTS2022_01038 +2,FeTS2022_00370 +2,FeTS2022_00184 +2,FeTS2022_00360 +2,FeTS2022_01123 +2,FeTS2022_01237 +2,FeTS2022_01086 +2,FeTS2022_00231 +2,FeTS2022_00353 +2,FeTS2022_01254 +2,FeTS2022_01373 +2,FeTS2022_01100 +2,FeTS2022_01214 +2,FeTS2022_01242 +2,FeTS2022_01115 +2,FeTS2022_01331 +2,FeTS2022_00391 +2,FeTS2022_01312 +2,FeTS2022_00324 +2,FeTS2022_01080 +2,FeTS2022_00371 +2,FeTS2022_01396 +2,FeTS2022_00339 +2,FeTS2022_00260 +2,FeTS2022_00243 +2,FeTS2022_00233 +2,FeTS2022_01323 +2,FeTS2022_01248 +2,FeTS2022_00263 +2,FeTS2022_00347 +2,FeTS2022_01233 +2,FeTS2022_00367 +2,FeTS2022_01051 +2,FeTS2022_01126 +2,FeTS2022_01267 +2,FeTS2022_00383 +2,FeTS2022_01357 +2,FeTS2022_00413 +2,FeTS2022_01287 +2,FeTS2022_00349 +2,FeTS2022_01244 +2,FeTS2022_01041 +2,FeTS2022_01236 +2,FeTS2022_01245 +2,FeTS2022_01383 +2,FeTS2022_00196 +2,FeTS2022_01387 +2,FeTS2022_00297 +2,FeTS2022_01103 +2,FeTS2022_01098 +2,FeTS2022_01410 +2,FeTS2022_00440 +2,FeTS2022_01305 +2,FeTS2022_01304 +2,FeTS2022_01074 +2,FeTS2022_01046 +2,FeTS2022_01226 +2,FeTS2022_01253 +2,FeTS2022_01040 +2,FeTS2022_00269 +2,FeTS2022_00310 +2,FeTS2022_01056 +2,FeTS2022_01311 +2,FeTS2022_01338 +2,FeTS2022_00166 +2,FeTS2022_00327 +2,FeTS2022_00254 +2,FeTS2022_01000 +2,FeTS2022_00259 +2,FeTS2022_01134 +2,FeTS2022_01104 +2,FeTS2022_01232 +2,FeTS2022_01286 +2,FeTS2022_01052 +2,FeTS2022_01217 +2,FeTS2022_01238 +2,FeTS2022_00154 +3,FeTS2022_00395 +3,FeTS2022_00267 +3,FeTS2022_00366 +3,FeTS2022_00351 +3,FeTS2022_00159 +3,FeTS2022_00131 +3,FeTS2022_01246 +3,FeTS2022_01060 +3,FeTS2022_01087 +3,FeTS2022_00250 +3,FeTS2022_00234 +3,FeTS2022_01058 +3,FeTS2022_00235 +3,FeTS2022_00203 +3,FeTS2022_00414 +3,FeTS2022_01285 +3,FeTS2022_01071 +3,FeTS2022_01111 +3,FeTS2022_01377 +3,FeTS2022_01355 +3,FeTS2022_01384 +3,FeTS2022_01120 +3,FeTS2022_01082 +3,FeTS2022_01076 +3,FeTS2022_01072 +3,FeTS2022_00303 +3,FeTS2022_00436 +3,FeTS2022_01361 +3,FeTS2022_01073 +3,FeTS2022_00338 +3,FeTS2022_01351 +3,FeTS2022_00273 +3,FeTS2022_00186 +3,FeTS2022_00290 +3,FeTS2022_01381 +3,FeTS2022_01083 +3,FeTS2022_00409 +3,FeTS2022_00281 +3,FeTS2022_00840 +3,FeTS2022_00407 +3,FeTS2022_01094 +3,FeTS2022_01328 +3,FeTS2022_01078 +3,FeTS2022_00312 +3,FeTS2022_01235 +3,FeTS2022_01288 +3,FeTS2022_01391 +3,FeTS2022_01215 +3,FeTS2022_00160 +3,FeTS2022_00421 +3,FeTS2022_01317 +3,FeTS2022_01216 +3,FeTS2022_00178 +3,FeTS2022_00838 +3,FeTS2022_01321 +3,FeTS2022_01037 +3,FeTS2022_00176 +3,FeTS2022_01293 +3,FeTS2022_01219 +3,FeTS2022_01260 +3,FeTS2022_01339 +3,FeTS2022_01325 +3,FeTS2022_00249 +3,FeTS2022_01241 +3,FeTS2022_00211 +3,FeTS2022_01105 +3,FeTS2022_01138 +3,FeTS2022_00261 +3,FeTS2022_01316 +3,FeTS2022_01315 +3,FeTS2022_01256 +3,FeTS2022_00191 +3,FeTS2022_01069 +3,FeTS2022_01062 +3,FeTS2022_01135 +3,FeTS2022_00207 +3,FeTS2022_00401 +3,FeTS2022_00172 +3,FeTS2022_01085 +3,FeTS2022_00247 +3,FeTS2022_01206 +3,FeTS2022_01356 +3,FeTS2022_00325 +3,FeTS2022_00429 +3,FeTS2022_01122 +3,FeTS2022_01374 +3,FeTS2022_00156 +3,FeTS2022_01075 +3,FeTS2022_01362 +3,FeTS2022_01251 +3,FeTS2022_00405 +3,FeTS2022_01047 +3,FeTS2022_00240 +3,FeTS2022_00336 +3,FeTS2022_01092 +3,FeTS2022_01403 +3,FeTS2022_01385 +3,FeTS2022_01096 +3,FeTS2022_00426 +3,FeTS2022_00201 +3,FeTS2022_01335 +3,FeTS2022_00404 +3,FeTS2022_00322 +3,FeTS2022_00294 +3,FeTS2022_01070 +3,FeTS2022_01225 +3,FeTS2022_01067 +3,FeTS2022_00375 +3,FeTS2022_00158 +3,FeTS2022_00177 +3,FeTS2022_00271 +3,FeTS2022_01388 +3,FeTS2022_01053 +3,FeTS2022_01042 +3,FeTS2022_01400 +3,FeTS2022_00183 +3,FeTS2022_01358 +3,FeTS2022_01266 +3,FeTS2022_01360 +3,FeTS2022_00304 +3,FeTS2022_01065 +3,FeTS2022_01093 +3,FeTS2022_00397 +3,FeTS2022_01262 +3,FeTS2022_00217 +3,FeTS2022_01401 +3,FeTS2022_01125 +3,FeTS2022_01406 +3,FeTS2022_01343 +3,FeTS2022_01346 +3,FeTS2022_01089 +3,FeTS2022_00216 +3,FeTS2022_01061 +3,FeTS2022_01299 +3,FeTS2022_00242 +3,FeTS2022_01112 +3,FeTS2022_00300 +3,FeTS2022_01280 +3,FeTS2022_00187 +3,FeTS2022_00318 +3,FeTS2022_01371 +3,FeTS2022_01378 +3,FeTS2022_00418 +3,FeTS2022_01121 +3,FeTS2022_01136 +3,FeTS2022_00266 +3,FeTS2022_01221 +3,FeTS2022_01307 +3,FeTS2022_01386 +3,FeTS2022_00432 +3,FeTS2022_01101 +3,FeTS2022_01228 +3,FeTS2022_01313 +3,FeTS2022_01209 +3,FeTS2022_00388 +3,FeTS2022_01270 +3,FeTS2022_01044 +3,FeTS2022_00417 +3,FeTS2022_01063 +3,FeTS2022_01368 +3,FeTS2022_00369 +3,FeTS2022_01095 +3,FeTS2022_00416 +3,FeTS2022_00400 +3,FeTS2022_01045 +3,FeTS2022_01202 +3,FeTS2022_01326 +3,FeTS2022_01079 +3,FeTS2022_00402 +3,FeTS2022_01320 +3,FeTS2022_01324 +4,FeTS2022_01412 +4,FeTS2022_01415 +4,FeTS2022_01411 +4,FeTS2022_01414 +4,FeTS2022_01413 +4,FeTS2022_01416 +5,FeTS2022_01439 +5,FeTS2022_01435 +5,FeTS2022_01434 +5,FeTS2022_01440 +5,FeTS2022_01431 +5,FeTS2022_01437 +5,FeTS2022_01436 +5,FeTS2022_01433 +5,FeTS2022_01438 +5,FeTS2022_01426 +5,FeTS2022_01427 +5,FeTS2022_01428 +5,FeTS2022_01429 +5,FeTS2022_01432 +5,FeTS2022_01430 +6,FeTS2022_01152 +6,FeTS2022_01178 +6,FeTS2022_01186 +6,FeTS2022_01184 +6,FeTS2022_01181 +6,FeTS2022_01187 +6,FeTS2022_01168 +6,FeTS2022_01196 +6,FeTS2022_01173 +6,FeTS2022_01176 +6,FeTS2022_01200 +6,FeTS2022_00565 +6,FeTS2022_01193 +6,FeTS2022_01174 +6,FeTS2022_01662 +6,FeTS2022_01660 +7,FeTS2022_01201 +7,FeTS2022_01167 +7,FeTS2022_01170 +7,FeTS2022_01179 +7,FeTS2022_01185 +7,FeTS2022_01197 +7,FeTS2022_01172 +7,FeTS2022_01189 +7,FeTS2022_00563 +7,FeTS2022_01180 +7,FeTS2022_01198 +7,FeTS2022_01183 +7,FeTS2022_01151 +7,FeTS2022_01195 +7,FeTS2022_01657 +8,FeTS2022_01194 +8,FeTS2022_01191 +8,FeTS2022_01169 +8,FeTS2022_01171 +8,FeTS2022_00561 +8,FeTS2022_01659 +8,FeTS2022_01661 +8,FeTS2022_01190 +8,FeTS2022_01188 +8,FeTS2022_01199 +8,FeTS2022_01658 +8,FeTS2022_01192 +8,FeTS2022_01175 +8,FeTS2022_01182 +8,FeTS2022_01537 +8,FeTS2022_01177 +9,FeTS2022_00102 +9,FeTS2022_00149 +9,FeTS2022_01290 +9,FeTS2022_00113 +9,FeTS2022_01009 +9,FeTS2022_01007 +9,FeTS2022_01002 +9,FeTS2022_00139 +9,FeTS2022_01292 +9,FeTS2022_00100 +9,FeTS2022_01289 +9,FeTS2022_01291 +9,FeTS2022_01005 +9,FeTS2022_01282 +9,FeTS2022_01003 +9,FeTS2022_00109 +9,FeTS2022_01283 +9,FeTS2022_00999 +9,FeTS2022_01281 +9,FeTS2022_01284 +9,FeTS2022_00151 +9,FeTS2022_00123 +10,FeTS2022_01451 +10,FeTS2022_01453 +10,FeTS2022_01452 +10,FeTS2022_00831 +10,FeTS2022_01448 +10,FeTS2022_01300 +10,FeTS2022_01443 +10,FeTS2022_00136 +10,FeTS2022_01454 +10,FeTS2022_00144 +10,FeTS2022_00121 +10,FeTS2022_01297 +10,FeTS2022_00133 +10,FeTS2022_01447 +10,FeTS2022_00142 +10,FeTS2022_01450 +10,FeTS2022_00120 +10,FeTS2022_01298 +10,FeTS2022_01449 +10,FeTS2022_01442 +10,FeTS2022_01446 +10,FeTS2022_01303 +10,FeTS2022_01296 +10,FeTS2022_00132 +10,FeTS2022_01441 +10,FeTS2022_01445 +10,FeTS2022_01302 +10,FeTS2022_00143 +10,FeTS2022_00105 +10,FeTS2022_01444 +10,FeTS2022_00147 +10,FeTS2022_01455 +10,FeTS2022_00146 +10,FeTS2022_00137 +11,FeTS2022_01459 +11,FeTS2022_01464 +11,FeTS2022_01458 +11,FeTS2022_01457 +11,FeTS2022_01461 +11,FeTS2022_01456 +11,FeTS2022_01460 +11,FeTS2022_01462 +11,FeTS2022_01466 +11,FeTS2022_01465 +11,FeTS2022_01463 +11,FeTS2022_01467 +12,FeTS2022_00140 +12,FeTS2022_01469 +12,FeTS2022_01468 +12,FeTS2022_01470 +12,FeTS2022_00104 +12,FeTS2022_00110 +12,FeTS2022_00112 +12,FeTS2022_00128 +13,FeTS2022_00134 +13,FeTS2022_00150 +13,FeTS2022_00116 +13,FeTS2022_01471 +14,FeTS2022_01472 +14,FeTS2022_00117 +14,FeTS2022_00130 +14,FeTS2022_00138 +14,FeTS2022_01473 +14,FeTS2022_00111 +14,FeTS2022_00124 +14,FeTS2022_00106 +15,FeTS2022_00122 +15,FeTS2022_00148 +15,FeTS2022_01474 +15,FeTS2022_00108 +15,FeTS2022_01144 +15,FeTS2022_00107 +15,FeTS2022_01140 +15,FeTS2022_01146 +15,FeTS2022_01145 +15,FeTS2022_01139 +15,FeTS2022_01141 +15,FeTS2022_01142 +15,FeTS2022_01143 +15,FeTS2022_01475 +16,FeTS2022_01482 +16,FeTS2022_01480 +16,FeTS2022_01485 +16,FeTS2022_01476 +16,FeTS2022_01481 +16,FeTS2022_01483 +16,FeTS2022_01486 +16,FeTS2022_01484 +16,FeTS2022_01479 +16,FeTS2022_01477 +16,FeTS2022_01478 +17,FeTS2022_01491 +17,FeTS2022_01500 +17,FeTS2022_01519 +17,FeTS2022_01516 +17,FeTS2022_01509 +17,FeTS2022_01520 +17,FeTS2022_01508 +17,FeTS2022_01503 +17,FeTS2022_01488 +17,FeTS2022_01492 +17,FeTS2022_01502 +17,FeTS2022_01493 +18,FeTS2022_01497 +18,FeTS2022_01499 +18,FeTS2022_01487 +18,FeTS2022_01505 +18,FeTS2022_01504 +18,FeTS2022_01490 +18,FeTS2022_01507 +18,FeTS2022_01510 +18,FeTS2022_01512 +18,FeTS2022_01514 +18,FeTS2022_01517 +19,FeTS2022_01501 +19,FeTS2022_01518 +19,FeTS2022_01506 +19,FeTS2022_01515 +19,FeTS2022_01511 +19,FeTS2022_01494 +19,FeTS2022_01489 +19,FeTS2022_01513 +19,FeTS2022_01496 +19,FeTS2022_01495 +19,FeTS2022_01521 +19,FeTS2022_01498 +20,FeTS2022_01522 +20,FeTS2022_01525 +20,FeTS2022_01526 +20,FeTS2022_01527 +20,FeTS2022_01524 +20,FeTS2022_01523 +21,FeTS2022_01530 +21,FeTS2022_01536 +21,FeTS2022_01535 +21,FeTS2022_01663 +21,FeTS2022_01534 +21,FeTS2022_01529 +21,FeTS2022_01531 +21,FeTS2022_01666 +21,FeTS2022_01665 +21,FeTS2022_01532 +21,FeTS2022_01664 +21,FeTS2022_01528 +21,FeTS2022_01533 +22,FeTS2022_00584 +22,FeTS2022_00567 +22,FeTS2022_00571 +22,FeTS2022_00582 +22,FeTS2022_00570 +22,FeTS2022_00594 +22,FeTS2022_00597 +22,FeTS2022_00596 +22,FeTS2022_00576 +22,FeTS2022_00572 +22,FeTS2022_00115 +22,FeTS2022_00593 +22,FeTS2022_00588 +22,FeTS2022_00598 +22,FeTS2022_00589 +22,FeTS2022_00574 +22,FeTS2022_00586 +22,FeTS2022_00579 +22,FeTS2022_00590 +22,FeTS2022_00599 +22,FeTS2022_00577 +22,FeTS2022_00575 +22,FeTS2022_00581 +22,FeTS2022_00591 +22,FeTS2022_00569 +22,FeTS2022_00587 +22,FeTS2022_00580 +22,FeTS2022_00583 +22,FeTS2022_00578 +22,FeTS2022_00568 +23,FeTS2022_01423 +23,FeTS2022_01420 +23,FeTS2022_01422 +23,FeTS2022_01417 +23,FeTS2022_01421 +23,FeTS2022_01424 +23,FeTS2022_01418 +23,FeTS2022_01425 +23,FeTS2022_01419 +24,FeTS2022_01628 +24,FeTS2022_01615 +24,FeTS2022_01035 +24,FeTS2022_00732 +24,FeTS2022_00753 +24,FeTS2022_01620 +24,FeTS2022_01637 +24,FeTS2022_01594 +24,FeTS2022_00530 +24,FeTS2022_00772 +24,FeTS2022_01580 +24,FeTS2022_00731 +24,FeTS2022_00540 +24,FeTS2022_00464 +24,FeTS2022_01622 +24,FeTS2022_01154 +24,FeTS2022_01559 +24,FeTS2022_00729 +24,FeTS2022_00708 +24,FeTS2022_00044 +24,FeTS2022_00705 +24,FeTS2022_00645 +24,FeTS2022_01640 +24,FeTS2022_00008 +24,FeTS2022_00746 +24,FeTS2022_01551 +24,FeTS2022_01610 +24,FeTS2022_00061 +24,FeTS2022_00642 +24,FeTS2022_00675 +24,FeTS2022_01651 +24,FeTS2022_00651 +24,FeTS2022_00626 +24,FeTS2022_00028 +24,FeTS2022_01557 +24,FeTS2022_01616 +24,FeTS2022_00684 +24,FeTS2022_01538 +24,FeTS2022_01647 +24,FeTS2022_00688 +24,FeTS2022_00737 +24,FeTS2022_00063 +24,FeTS2022_00758 +24,FeTS2022_01159 +24,FeTS2022_00615 +24,FeTS2022_00621 +24,FeTS2022_01543 +24,FeTS2022_01560 +24,FeTS2022_00058 +24,FeTS2022_00009 +24,FeTS2022_00544 +24,FeTS2022_01611 +24,FeTS2022_00485 +24,FeTS2022_00735 +24,FeTS2022_00659 +24,FeTS2022_00025 +24,FeTS2022_00550 +24,FeTS2022_01599 +24,FeTS2022_00636 +24,FeTS2022_01644 +24,FeTS2022_00716 +24,FeTS2022_00641 +24,FeTS2022_01624 +24,FeTS2022_00547 +24,FeTS2022_00046 +24,FeTS2022_00728 +24,FeTS2022_00045 +24,FeTS2022_00493 +24,FeTS2022_00089 +24,FeTS2022_00622 +24,FeTS2022_01643 +24,FeTS2022_00602 +24,FeTS2022_00035 +24,FeTS2022_01545 +24,FeTS2022_00014 +24,FeTS2022_01566 +24,FeTS2022_00066 +24,FeTS2022_01614 +24,FeTS2022_01591 +24,FeTS2022_00514 +24,FeTS2022_01588 +24,FeTS2022_00520 +24,FeTS2022_01556 +24,FeTS2022_00097 +24,FeTS2022_00555 +24,FeTS2022_00736 +24,FeTS2022_00639 +24,FeTS2022_00479 +24,FeTS2022_01550 +24,FeTS2022_01592 +24,FeTS2022_01626 +24,FeTS2022_00557 +24,FeTS2022_00496 +24,FeTS2022_00778 +24,FeTS2022_01561 +24,FeTS2022_00690 +24,FeTS2022_00750 +24,FeTS2022_01586 +24,FeTS2022_01549 +24,FeTS2022_01555 +24,FeTS2022_01612 +24,FeTS2022_01600 +24,FeTS2022_01629 +24,FeTS2022_01656 +24,FeTS2022_00500 +24,FeTS2022_00529 +24,FeTS2022_00628 +24,FeTS2022_00775 +24,FeTS2022_00523 +24,FeTS2022_00488 +24,FeTS2022_00518 +24,FeTS2022_00000 +24,FeTS2022_00020 +24,FeTS2022_01646 +24,FeTS2022_01638 +24,FeTS2022_00630 +24,FeTS2022_01590 +24,FeTS2022_01613 +24,FeTS2022_01571 +24,FeTS2022_00519 +24,FeTS2022_01617 +24,FeTS2022_01623 +24,FeTS2022_00691 +24,FeTS2022_01027 +24,FeTS2022_00704 +24,FeTS2022_00098 +24,FeTS2022_01558 +25,FeTS2022_00715 +25,FeTS2022_00757 +25,FeTS2022_00084 +25,FeTS2022_00692 +25,FeTS2022_00078 +25,FeTS2022_00747 +25,FeTS2022_01607 +25,FeTS2022_00751 +25,FeTS2022_00011 +25,FeTS2022_00610 +25,FeTS2022_00694 +25,FeTS2022_00026 +25,FeTS2022_00658 +25,FeTS2022_01544 +25,FeTS2022_01583 +25,FeTS2022_00680 +25,FeTS2022_01028 +25,FeTS2022_01636 +25,FeTS2022_00545 +25,FeTS2022_00072 +25,FeTS2022_00016 +25,FeTS2022_01548 +25,FeTS2022_00624 +25,FeTS2022_00676 +25,FeTS2022_00533 +25,FeTS2022_01574 +25,FeTS2022_01582 +25,FeTS2022_00085 +25,FeTS2022_00613 +25,FeTS2022_01593 +25,FeTS2022_00730 +25,FeTS2022_01585 +25,FeTS2022_00524 +25,FeTS2022_00081 +25,FeTS2022_00472 +25,FeTS2022_00478 +25,FeTS2022_00469 +25,FeTS2022_00682 +25,FeTS2022_00733 +25,FeTS2022_00723 +25,FeTS2022_00099 +25,FeTS2022_00744 +25,FeTS2022_00048 +25,FeTS2022_00480 +25,FeTS2022_00650 +25,FeTS2022_00601 +25,FeTS2022_00542 +25,FeTS2022_00667 +25,FeTS2022_00505 +25,FeTS2022_01539 +25,FeTS2022_00764 +25,FeTS2022_00506 +25,FeTS2022_01649 +25,FeTS2022_00032 +25,FeTS2022_00021 +25,FeTS2022_00685 +25,FeTS2022_00611 +25,FeTS2022_00511 +25,FeTS2022_01584 +25,FeTS2022_01635 +25,FeTS2022_00607 +25,FeTS2022_00071 +25,FeTS2022_00687 +25,FeTS2022_00767 +25,FeTS2022_00537 +25,FeTS2022_01630 +25,FeTS2022_00740 +25,FeTS2022_00525 +25,FeTS2022_00725 +25,FeTS2022_00502 +25,FeTS2022_01562 +25,FeTS2022_01577 +25,FeTS2022_01576 +25,FeTS2022_01595 +25,FeTS2022_00654 +25,FeTS2022_00090 +25,FeTS2022_01645 +25,FeTS2022_01564 +25,FeTS2022_01567 +25,FeTS2022_00703 +25,FeTS2022_00043 +25,FeTS2022_00003 +25,FeTS2022_00495 +25,FeTS2022_00017 +25,FeTS2022_00491 +25,FeTS2022_00054 +25,FeTS2022_00510 +25,FeTS2022_00618 +25,FeTS2022_00064 +25,FeTS2022_00024 +25,FeTS2022_00709 +25,FeTS2022_01653 +25,FeTS2022_01579 +25,FeTS2022_01572 +25,FeTS2022_01156 +25,FeTS2022_00707 +25,FeTS2022_01540 +25,FeTS2022_00056 +25,FeTS2022_00620 +25,FeTS2022_00470 +25,FeTS2022_00499 +25,FeTS2022_00640 +25,FeTS2022_00549 +25,FeTS2022_01601 +25,FeTS2022_00608 +25,FeTS2022_00727 +25,FeTS2022_00773 +25,FeTS2022_00504 +25,FeTS2022_01604 +25,FeTS2022_01158 +25,FeTS2022_00051 +25,FeTS2022_00768 +25,FeTS2022_01161 +25,FeTS2022_00765 +25,FeTS2022_00068 +25,FeTS2022_00551 +25,FeTS2022_01605 +25,FeTS2022_00674 +25,FeTS2022_01157 +25,FeTS2022_01631 +25,FeTS2022_00022 +25,FeTS2022_00777 +25,FeTS2022_01609 +25,FeTS2022_01633 +25,FeTS2022_01652 +25,FeTS2022_00759 +25,FeTS2022_01655 +26,FeTS2022_01639 +26,FeTS2022_01563 +26,FeTS2022_00661 +26,FeTS2022_00087 +26,FeTS2022_00030 +26,FeTS2022_00556 +26,FeTS2022_01597 +26,FeTS2022_00724 +26,FeTS2022_00096 +26,FeTS2022_00049 +26,FeTS2022_00683 +26,FeTS2022_00059 +26,FeTS2022_01596 +26,FeTS2022_00498 +26,FeTS2022_00543 +26,FeTS2022_01641 +26,FeTS2022_01542 +26,FeTS2022_00062 +26,FeTS2022_00005 +26,FeTS2022_00646 +26,FeTS2022_00088 +26,FeTS2022_00656 +26,FeTS2022_01589 +26,FeTS2022_01160 +26,FeTS2022_01547 +26,FeTS2022_01606 +26,FeTS2022_00631 +26,FeTS2022_00756 +26,FeTS2022_00619 +26,FeTS2022_00698 +26,FeTS2022_01541 +26,FeTS2022_00539 +26,FeTS2022_00053 +26,FeTS2022_01618 +26,FeTS2022_00693 +26,FeTS2022_00616 +26,FeTS2022_01642 +26,FeTS2022_01632 +26,FeTS2022_00718 +26,FeTS2022_00006 +26,FeTS2022_00466 +26,FeTS2022_01565 +26,FeTS2022_01621 +26,FeTS2022_00697 +26,FeTS2022_00689 +26,FeTS2022_00554 +26,FeTS2022_00638 +26,FeTS2022_00517 +26,FeTS2022_00019 +26,FeTS2022_01650 +26,FeTS2022_01602 +26,FeTS2022_01570 +26,FeTS2022_00655 +26,FeTS2022_00552 +26,FeTS2022_00706 +26,FeTS2022_01654 +26,FeTS2022_00481 +26,FeTS2022_00604 +26,FeTS2022_00612 +26,FeTS2022_00774 +26,FeTS2022_00625 +26,FeTS2022_00070 +26,FeTS2022_00649 +26,FeTS2022_00036 +26,FeTS2022_01546 +26,FeTS2022_00559 +26,FeTS2022_00018 +26,FeTS2022_00507 +26,FeTS2022_00760 +26,FeTS2022_01568 +26,FeTS2022_00094 +26,FeTS2022_00526 +26,FeTS2022_01575 +26,FeTS2022_00512 +26,FeTS2022_00033 +26,FeTS2022_01648 +26,FeTS2022_00052 +26,FeTS2022_01625 +26,FeTS2022_01573 +26,FeTS2022_00623 +26,FeTS2022_01153 +26,FeTS2022_00532 +26,FeTS2022_00516 +26,FeTS2022_00679 +26,FeTS2022_00468 +26,FeTS2022_00494 +26,FeTS2022_00483 +26,FeTS2022_01552 +26,FeTS2022_00606 +26,FeTS2022_00742 +26,FeTS2022_00677 +26,FeTS2022_00652 +26,FeTS2022_00074 +26,FeTS2022_00513 +26,FeTS2022_01581 +26,FeTS2022_00663 +26,FeTS2022_00734 +26,FeTS2022_01619 +26,FeTS2022_00668 +26,FeTS2022_00558 +26,FeTS2022_00002 +26,FeTS2022_01598 +26,FeTS2022_00477 +26,FeTS2022_01634 +26,FeTS2022_00501 +26,FeTS2022_01155 +26,FeTS2022_00077 +26,FeTS2022_01578 +26,FeTS2022_01569 +26,FeTS2022_01603 +26,FeTS2022_00538 +26,FeTS2022_00714 +26,FeTS2022_00031 +26,FeTS2022_01627 +26,FeTS2022_01553 +26,FeTS2022_00548 +26,FeTS2022_00739 +26,FeTS2022_00103 +26,FeTS2022_00528 +26,FeTS2022_01608 +26,FeTS2022_00095 +26,FeTS2022_00060 +26,FeTS2022_01554 +26,FeTS2022_00657 +26,FeTS2022_01587 +26,FeTS2022_00605 +26,FeTS2022_00686 +26,FeTS2022_00012 +27,FeTS2022_01166 +27,FeTS2022_01163 +27,FeTS2022_01165 +27,FeTS2022_01164 +28,FeTS2022_00444 +28,FeTS2022_01014 +28,FeTS2022_00442 +28,FeTS2022_01025 +28,FeTS2022_01024 +28,FeTS2022_00101 +28,FeTS2022_00453 +28,FeTS2022_01013 +28,FeTS2022_01011 +28,FeTS2022_00459 +28,FeTS2022_00457 +28,FeTS2022_01016 +28,FeTS2022_00448 +28,FeTS2022_01023 +28,FeTS2022_01017 +28,FeTS2022_00443 +28,FeTS2022_00455 +28,FeTS2022_00127 +28,FeTS2022_01012 +28,FeTS2022_01018 +28,FeTS2022_01022 +28,FeTS2022_00451 +28,FeTS2022_00445 +28,FeTS2022_00452 +28,FeTS2022_00454 +28,FeTS2022_01019 +28,FeTS2022_01021 +28,FeTS2022_01020 +28,FeTS2022_01026 +28,FeTS2022_00456 +28,FeTS2022_00446 +28,FeTS2022_00449 +28,FeTS2022_01015 +29,FeTS2022_00802 +29,FeTS2022_00788 +29,FeTS2022_00795 +29,FeTS2022_00820 +29,FeTS2022_00782 +29,FeTS2022_00800 +29,FeTS2022_00830 +29,FeTS2022_00824 +29,FeTS2022_00805 +29,FeTS2022_00796 +29,FeTS2022_00823 +29,FeTS2022_00828 +30,FeTS2022_00811 +30,FeTS2022_00789 +30,FeTS2022_00801 +30,FeTS2022_00780 +30,FeTS2022_00781 +30,FeTS2022_00814 +30,FeTS2022_00806 +30,FeTS2022_00810 +30,FeTS2022_00807 +30,FeTS2022_00818 +30,FeTS2022_00791 +31,FeTS2022_00787 +31,FeTS2022_00808 +31,FeTS2022_00809 +31,FeTS2022_00803 +31,FeTS2022_00816 +31,FeTS2022_00819 +31,FeTS2022_00793 +31,FeTS2022_00799 +31,FeTS2022_00797 +31,FeTS2022_00784 +31,FeTS2022_00804 +31,FeTS2022_00792 +32,FeTS2022_01031 +32,FeTS2022_01033 +32,FeTS2022_01030 +32,FeTS2022_00118 +32,FeTS2022_01029 +32,FeTS2022_00126 +32,FeTS2022_01032 +33,FeTS2022_01147 +33,FeTS2022_01149 +33,FeTS2022_01150 +33,FeTS2022_01148 +33,FeTS2022_01162 diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/cols.yaml b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/cols.yaml new file mode 100644 index 0000000..ebd5bec --- /dev/null +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/cols.yaml @@ -0,0 +1,3 @@ +# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2021 + +collaborators: \ No newline at end of file diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/data.yaml b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/data.yaml new file mode 100644 index 0000000..93c8816 --- /dev/null +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/data.yaml @@ -0,0 +1,4 @@ +# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2021 + +one,1 +two,2 diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/defaults b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/defaults new file mode 100644 index 0000000..fb82f9c --- /dev/null +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/defaults @@ -0,0 +1,2 @@ +../../workspace/plan/defaults + diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml new file mode 100644 index 0000000..ca4476c --- /dev/null +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml @@ -0,0 +1,140 @@ +# Copyright (C) 2022 Intel Corporation +# Licensed subject to the terms of the separately executed evaluation license agreement between Intel Corporation and you. + +aggregator : + defaults : plan/defaults/aggregator.yaml + template : openfl.component.Aggregator + settings : + init_state_path : save/fets_seg_test_init.pbuf + best_state_path : save/fets_seg_test_best.pbuf + last_state_path : save/fets_seg_test_last.pbuf + rounds_to_train : 3 + write_logs : true + + +collaborator : + defaults : plan/defaults/collaborator.yaml + template : openfl.component.Collaborator + settings : + delta_updates : false + opt_treatment : RESET + +data_loader : + defaults : plan/defaults/data_loader.yaml + template : openfl.federated.data.loader_fets_challenge.FeTSChallengeDataLoaderWrapper + settings : + feature_shape : [32, 32, 32] + +task_runner : + template : src.fets_challenge_model.FeTSChallengeModel + settings : + train_csv : seg_test_train.csv + val_csv : seg_test_val.csv + device : cpu + fets_config_dict : + batch_size: 1 + clip_grad: null + clip_mode: null + data_augmentation: {} + data_postprocessing: {} + data_preprocessing: + normalize: null + enable_padding: false + in_memory: false + inference_mechanism : + grid_aggregator_overlap: crop + patch_overlap: 0 + learning_rate: 0.001 + loss_function: dc + medcam_enabled: false + output_dir: '.' + metrics: + - dice + - dice_per_label + - hd95_per_label + model: + amp: true + architecture: resunet + base_filters: 32 + class_list: + - 0 + - 1 + - 2 + - 4 + dimension: 3 + final_layer: softmax + ignore_label_validation: null + norm_type: instance + nested_training: + testing: 1 + validation: -5 + num_epochs: 1 + optimizer: + type: sgd + parallel_compute_command: '' + patch_sampler: label + patch_size: + - 64 + - 64 + - 64 + patience: 100 + pin_memory_dataloader: false + print_rgb_label_warning: true + q_max_length: 100 + q_num_workers: 0 + q_samples_per_volume: 40 + q_verbose: false + save_output: false + save_training: false + scaling_factor: 1 + scheduler: + type: triangle_modified + track_memory_usage: false + verbose: false + version: + maximum: 0.0.14 + minimum: 0.0.14 + weighted_loss: true + + +network : + defaults : plan/defaults/network.yaml + +assigner: + template : src.challenge_assigner.FeTSChallengeAssigner + settings : + training_tasks : + - aggregated_model_validation + - train + - locally_tuned_model_validation + validation_tasks : + - aggregated_model_validation + +tasks : + aggregated_model_validation: + function : validate + kwargs : + apply : global + metrics : + - valid_loss + - valid_dice + + locally_tuned_model_validation: + function : validate + kwargs : + apply: local + metrics : + - valid_loss + - valid_dice + + train: + function : train + kwargs : + metrics : + - loss + - train_dice + epochs : 1 + + +compression_pipeline : + defaults : plan/defaults/compression_pipeline.yaml diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/requirements.txt b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/requirements.txt new file mode 100644 index 0000000..9a7d57c --- /dev/null +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/requirements.txt @@ -0,0 +1,2 @@ +torchvision +torch diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/small_split.csv b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/small_split.csv new file mode 100644 index 0000000..50baaca --- /dev/null +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/small_split.csv @@ -0,0 +1,11 @@ +Partition_ID,Subject_ID +1,FeTS2022_01341 +1,FeTS2022_01333 +1,FeTS2022_01077 +1,FeTS2022_01324 +2,FeTS2022_01412 +2,FeTS2022_01415 +2,FeTS2022_01411 +3,FeTS2022_01439 +3,FeTS2022_01435 +3,FeTS2022_01434 diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/__init__.py b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/__init__.py new file mode 100644 index 0000000..1c5a549 --- /dev/null +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/__init__.py @@ -0,0 +1,10 @@ +# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2021 + +# Contributing Authors (alphabetical): +# Patrick Foley (Intel) +# Micah Sheller (Intel) + +TRAINING_HPARAMS = [ + 'epochs_per_round', + 'learning_rate', +] diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/challenge_assigner.py b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/challenge_assigner.py new file mode 100644 index 0000000..46e847f --- /dev/null +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/challenge_assigner.py @@ -0,0 +1,40 @@ +# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2022 + +# Contributing Authors (alphabetical): +# Micah Sheller (Intel) + +class FeTSChallengeAssigner: + def __init__(self, tasks, authorized_cols, training_tasks, validation_tasks, **kwargs): + """Initialize.""" + self.training_collaborators = [] + self.tasks = tasks + self.training_tasks = training_tasks + self.validation_tasks = validation_tasks + self.collaborators = authorized_cols + + def set_training_collaborators(self, training_collaborators): + self.training_collaborators = training_collaborators + + + def get_tasks_for_collaborator(self, collaborator_name, round_number): + """Get tasks for the collaborator specified.""" + if collaborator_name in self.training_collaborators: + return self.training_tasks + else: + return self.validation_tasks + + def get_collaborators_for_task(self, task_name, round_number): + """Get collaborators for the task specified.""" + if task_name in self.validation_tasks: + return self.collaborators + else: + return self.training_collaborators + + def get_all_tasks_for_round(self, round_number): + return self.training_tasks + + def get_aggregation_type_for_task(self, task_name): + """Extract aggregation type from self.tasks.""" + if 'aggregation_type' not in self.tasks[task_name]: + return None + return self.tasks[task_name]['aggregation_type'] diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py new file mode 100644 index 0000000..3794be6 --- /dev/null +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py @@ -0,0 +1,208 @@ +# Copyright (C) 2020-2021 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +"""GaNDLFTaskRunner module.""" + +from copy import deepcopy + +import numpy as np +import torch as pt + +from openfl.utilities import split_tensor_dict_for_holdouts +from openfl.utilities import TensorKey + +from openfl.federated.task.runner_fets_challenge import * + +from GANDLF.compute.generic import create_pytorch_objects +from GANDLF.compute.training_loop import train_network +from GANDLF.compute.forward_pass import validate_network + +from . import TRAINING_HPARAMS + +class FeTSChallengeModel(FeTSChallengeTaskRunner): + """FeTSChallenge Model class for Federated Learning.""" + + def validate(self, col_name, round_num, input_tensor_dict, + use_tqdm=False, **kwargs): + """Validate. + Run validation of the model on the local data. + Args: + col_name: Name of the collaborator + round_num: What round is it + input_tensor_dict: Required input tensors (for model) + use_tqdm (bool): Use tqdm to print a progress bar (Default=True) + kwargs: Key word arguments passed to GaNDLF main_run + Returns: + global_output_dict: Tensors to send back to the aggregator + local_output_dict: Tensors to maintain in the local TensorDB + """ + self.rebuild_model(round_num, input_tensor_dict, validation=True) + self.model.eval() + # self.model.to(self.device) + + epoch_valid_loss, epoch_valid_metric = validate_network(self.model, + self.data_loader.val_dataloader, + self.scheduler, + self.params, + round_num, + mode="validation") + + self.logger.info(epoch_valid_loss) + self.logger.info(epoch_valid_metric) + + origin = col_name + suffix = 'validate' + if kwargs['apply'] == 'local': + suffix += '_local' + else: + suffix += '_agg' + tags = ('metric', suffix) + + output_tensor_dict = {} + output_tensor_dict[TensorKey('valid_loss', origin, round_num, True, tags)] = np.array(epoch_valid_loss) + for k, v in epoch_valid_metric.items(): + if np.array(v).size == 1: + output_tensor_dict[TensorKey(f'valid_{k}', origin, round_num, True, tags)] = np.array(v) + else: + for idx,label in enumerate([0,1,2,4]): + output_tensor_dict[TensorKey(f'valid_{k}_{label}', origin, round_num, True, tags)] = np.array(v[idx]) + + return output_tensor_dict, {} + + def inference(self, col_name, round_num, input_tensor_dict, + use_tqdm=False, **kwargs): + """Inference. + Run inference of the model on the local data (used for final validation) + Args: + col_name: Name of the collaborator + round_num: What round is it + input_tensor_dict: Required input tensors (for model) + use_tqdm (bool): Use tqdm to print a progress bar (Default=True) + kwargs: Key word arguments passed to GaNDLF main_run + Returns: + global_output_dict: Tensors to send back to the aggregator + local_output_dict: Tensors to maintain in the local TensorDB + """ + self.rebuild_model(round_num, input_tensor_dict, validation=True) + self.model.eval() + # self.model.to(self.device) + + epoch_valid_loss, epoch_valid_metric = validate_network(self.model, + self.data_loader.val_dataloader, + self.scheduler, + self.params, + round_num, + mode="inference") + + origin = col_name + suffix = 'validate' + if kwargs['apply'] == 'local': + suffix += '_local' + else: + suffix += '_agg' + tags = ('metric', suffix) + + output_tensor_dict = {} + output_tensor_dict[TensorKey('valid_loss', origin, round_num, True, tags)] = np.array(epoch_valid_loss) + for k, v in epoch_valid_metric.items(): + if np.array(v).size == 1: + output_tensor_dict[TensorKey(f'valid_{k}', origin, round_num, True, tags)] = np.array(v) + else: + for idx,label in enumerate([0,1,2,4]): + output_tensor_dict[TensorKey(f'valid_{k}_{label}', origin, round_num, True, tags)] = np.array(v[idx]) + + return output_tensor_dict, {} + + + def train(self, col_name, round_num, input_tensor_dict, use_tqdm=False, epochs=1, **kwargs): + """Train batches. + Train the model on the requested number of batches. + Args: + col_name : Name of the collaborator + round_num : What round is it + input_tensor_dict : Required input tensors (for model) + use_tqdm (bool) : Use tqdm to print a progress bar (Default=True) + epochs : The number of epochs to train + crossfold_test : Whether or not to use cross fold trainval/test + to evaluate the quality of the model under fine tuning + (this uses a separate prameter to pass in the data and + config used) + crossfold_test_data_csv : Data csv used to define data used in crossfold test. + This csv does not itself define the folds, just + defines the total data to be used. + crossfold_val_n : number of folds to use for the train,val level of the nested crossfold. + corssfold_test_n : number of folds to use for the trainval,test level of the nested crossfold. + kwargs : Key word arguments passed to GaNDLF main_run + Returns: + global_output_dict : Tensors to send back to the aggregator + local_output_dict : Tensors to maintain in the local TensorDB + """ + + # handle the hparams + epochs_per_round = int(input_tensor_dict.pop('epochs_per_round')) + learning_rate = float(input_tensor_dict.pop('learning_rate')) + + self.rebuild_model(round_num, input_tensor_dict) + # set to "training" mode + self.model.train() + + # Set the learning rate + for group in self.optimizer.param_groups: + group['lr'] = learning_rate + + for epoch in range(epochs_per_round): + self.logger.info(f'Run {epoch} epoch of {round_num} round') + # FIXME: do we want to capture these in an array rather than simply taking the last value? + epoch_train_loss, epoch_train_metric = train_network(self.model, + self.data_loader.train_dataloader, + self.optimizer, + self.params) + + # output model tensors (Doesn't include TensorKey) + tensor_dict = self.get_tensor_dict(with_opt_vars=True) + + metric_dict = {'loss': epoch_train_loss} + for k, v in epoch_train_metric.items(): + if np.array(v).size == 1: + metric_dict[f'train_{k}'] = np.array(v) + else: + for idx,label in enumerate([0,1,2,4]): + metric_dict[f'train_{k}_{label}'] = np.array(v[idx]) + + + # Return global_tensor_dict, local_tensor_dict + # is this even pt-specific really? + global_tensor_dict, local_tensor_dict = create_tensorkey_dicts(tensor_dict, + metric_dict, + col_name, + round_num, + self.logger, + self.tensor_dict_split_fn_kwargs) + + # Update the required tensors if they need to be pulled from the + # aggregator + # TODO this logic can break if different collaborators have different + # roles between rounds. + # For example, if a collaborator only performs validation in the first + # round but training in the second, it has no way of knowing the + # optimizer state tensor names to request from the aggregator because + # these are only created after training occurs. A work around could + # involve doing a single epoch of training on random data to get the + # optimizer names, and then throwing away the model. + if self.opt_treatment == 'CONTINUE_GLOBAL': + self.initialize_tensorkeys_for_functions(with_opt_vars=True) + + # This will signal that the optimizer values are now present, + # and can be loaded when the model is rebuilt + self.train_round_completed = True + + # Return global_tensor_dict, local_tensor_dict + return global_tensor_dict, local_tensor_dict + + def get_required_tensorkeys_for_function(self, func_name, **kwargs): + required = super().get_required_tensorkeys_for_function(func_name, **kwargs) + if func_name == 'train': + round_number = required[0].round_number + for hparam in TRAINING_HPARAMS: + required.append(TensorKey(tensor_name=hparam, origin='GLOBAL', round_number=round_number, report=False, tags=('hparam', 'model'))) + return required diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/validation.csv b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/validation.csv new file mode 100644 index 0000000..d0d78f1 --- /dev/null +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/validation.csv @@ -0,0 +1,220 @@ +Partition_ID,Subject_ID +-1,FeTS2022_01718 +-1,FeTS2022_01719 +-1,FeTS2022_00573 +-1,FeTS2022_00592 +-1,FeTS2022_00585 +-1,FeTS2022_00595 +-1,FeTS2022_01678 +-1,FeTS2022_01679 +-1,FeTS2022_01680 +-1,FeTS2022_01681 +-1,FeTS2022_01682 +-1,FeTS2022_01683 +-1,FeTS2022_01684 +-1,FeTS2022_01685 +-1,FeTS2022_01686 +-1,FeTS2022_00833 +-1,FeTS2022_01687 +-1,FeTS2022_00384 +-1,FeTS2022_01688 +-1,FeTS2022_01689 +-1,FeTS2022_01690 +-1,FeTS2022_01691 +-1,FeTS2022_00434 +-1,FeTS2022_00333 +-1,FeTS2022_00337 +-1,FeTS2022_01692 +-1,FeTS2022_00229 +-1,FeTS2022_01667 +-1,FeTS2022_01668 +-1,FeTS2022_01669 +-1,FeTS2022_01670 +-1,FeTS2022_01671 +-1,FeTS2022_01672 +-1,FeTS2022_01673 +-1,FeTS2022_01674 +-1,FeTS2022_01675 +-1,FeTS2022_01676 +-1,FeTS2022_01677 +-1,FeTS2022_01720 +-1,FeTS2022_01724 +-1,FeTS2022_00145 +-1,FeTS2022_01693 +-1,FeTS2022_01006 +-1,FeTS2022_01727 +-1,FeTS2022_01694 +-1,FeTS2022_01729 +-1,FeTS2022_01695 +-1,FeTS2022_00997 +-1,FeTS2022_01696 +-1,FeTS2022_01732 +-1,FeTS2022_01697 +-1,FeTS2022_01698 +-1,FeTS2022_01699 +-1,FeTS2022_01700 +-1,FeTS2022_01701 +-1,FeTS2022_01702 +-1,FeTS2022_01703 +-1,FeTS2022_00135 +-1,FeTS2022_01704 +-1,FeTS2022_01705 +-1,FeTS2022_01706 +-1,FeTS2022_01707 +-1,FeTS2022_01708 +-1,FeTS2022_01709 +-1,FeTS2022_01710 +-1,FeTS2022_01711 +-1,FeTS2022_01712 +-1,FeTS2022_01713 +-1,FeTS2022_00129 +-1,FeTS2022_00125 +-1,FeTS2022_01714 +-1,FeTS2022_00119 +-1,FeTS2022_01736 +-1,FeTS2022_00114 +-1,FeTS2022_01738 +-1,FeTS2022_00141 +-1,FeTS2022_01715 +-1,FeTS2022_01716 +-1,FeTS2022_01717 +-1,FeTS2022_01721 +-1,FeTS2022_01756 +-1,FeTS2022_01757 +-1,FeTS2022_01758 +-1,FeTS2022_01759 +-1,FeTS2022_01760 +-1,FeTS2022_01761 +-1,FeTS2022_01762 +-1,FeTS2022_01763 +-1,FeTS2022_01764 +-1,FeTS2022_01765 +-1,FeTS2022_01766 +-1,FeTS2022_01767 +-1,FeTS2022_01768 +-1,FeTS2022_01770 +-1,FeTS2022_01769 +-1,FeTS2022_01772 +-1,FeTS2022_01771 +-1,FeTS2022_00001 +-1,FeTS2022_00013 +-1,FeTS2022_00015 +-1,FeTS2022_00027 +-1,FeTS2022_00037 +-1,FeTS2022_00047 +-1,FeTS2022_00079 +-1,FeTS2022_00080 +-1,FeTS2022_00082 +-1,FeTS2022_00091 +-1,FeTS2022_01722 +-1,FeTS2022_01723 +-1,FeTS2022_01741 +-1,FeTS2022_01725 +-1,FeTS2022_01726 +-1,FeTS2022_01728 +-1,FeTS2022_01742 +-1,FeTS2022_01743 +-1,FeTS2022_01730 +-1,FeTS2022_01744 +-1,FeTS2022_01731 +-1,FeTS2022_01733 +-1,FeTS2022_01734 +-1,FeTS2022_01735 +-1,FeTS2022_01747 +-1,FeTS2022_01737 +-1,FeTS2022_01739 +-1,FeTS2022_01740 +-1,FeTS2022_01745 +-1,FeTS2022_01746 +-1,FeTS2022_01748 +-1,FeTS2022_00153 +-1,FeTS2022_01749 +-1,FeTS2022_01750 +-1,FeTS2022_01751 +-1,FeTS2022_01752 +-1,FeTS2022_01753 +-1,FeTS2022_01754 +-1,FeTS2022_01755 +-1,FeTS2022_01773 +-1,FeTS2022_01774 +-1,FeTS2022_01775 +-1,FeTS2022_01776 +-1,FeTS2022_00161 +-1,FeTS2022_00163 +-1,FeTS2022_00174 +-1,FeTS2022_00181 +-1,FeTS2022_00182 +-1,FeTS2022_00190 +-1,FeTS2022_00200 +-1,FeTS2022_00208 +-1,FeTS2022_00213 +-1,FeTS2022_00252 +-1,FeTS2022_00256 +-1,FeTS2022_00264 +-1,FeTS2022_00287 +-1,FeTS2022_00307 +-1,FeTS2022_00323 +-1,FeTS2022_00335 +-1,FeTS2022_00355 +-1,FeTS2022_00372 +-1,FeTS2022_00381 +-1,FeTS2022_00422 +-1,FeTS2022_00428 +-1,FeTS2022_00438 +-1,FeTS2022_00447 +-1,FeTS2022_00450 +-1,FeTS2022_00458 +-1,FeTS2022_00460 +-1,FeTS2022_00462 +-1,FeTS2022_00463 +-1,FeTS2022_00467 +-1,FeTS2022_00474 +-1,FeTS2022_00489 +-1,FeTS2022_00492 +-1,FeTS2022_00503 +-1,FeTS2022_00521 +-1,FeTS2022_00535 +-1,FeTS2022_00553 +-1,FeTS2022_00560 +-1,FeTS2022_00603 +-1,FeTS2022_01777 +-1,FeTS2022_01778 +-1,FeTS2022_01779 +-1,FeTS2022_01780 +-1,FeTS2022_01781 +-1,FeTS2022_01782 +-1,FeTS2022_01783 +-1,FeTS2022_01784 +-1,FeTS2022_01785 +-1,FeTS2022_01786 +-1,FeTS2022_01787 +-1,FeTS2022_01788 +-1,FeTS2022_01789 +-1,FeTS2022_01790 +-1,FeTS2022_00644 +-1,FeTS2022_00647 +-1,FeTS2022_00662 +-1,FeTS2022_00671 +-1,FeTS2022_00681 +-1,FeTS2022_00699 +-1,FeTS2022_00702 +-1,FeTS2022_00712 +-1,FeTS2022_00719 +-1,FeTS2022_00721 +-1,FeTS2022_00749 +-1,FeTS2022_00762 +-1,FeTS2022_00769 +-1,FeTS2022_00779 +-1,FeTS2022_00821 +-1,FeTS2022_00822 +-1,FeTS2022_00825 +-1,FeTS2022_00826 +-1,FeTS2022_00829 +-1,FeTS2022_01791 +-1,FeTS2022_01792 +-1,FeTS2022_01793 +-1,FeTS2022_01794 +-1,FeTS2022_01795 +-1,FeTS2022_01796 +-1,FeTS2022_01797 +-1,FeTS2022_01798 diff --git a/Task_1/cert/ca/root-ca.crt b/Task_1/cert/ca/root-ca.crt new file mode 100644 index 0000000..8b73f89 --- /dev/null +++ b/Task_1/cert/ca/root-ca.crt @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEhjCCAu6gAwIBAgIRAPn4axsy5E/rlwC4vGSLfi4wDQYJKoZIhvcNAQEMBQAw +dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX +MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV +BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDgyODE2NTM1NloXDTI1MDgyODE2 +NTM1NlowdDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp +bXBsZTEXMBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJ +bmMxFzAVBgNVBAsMDlNpbXBsZSBSb290IENBMIIBojANBgkqhkiG9w0BAQEFAAOC +AY8AMIIBigKCAYEAoK3/EIg/z0HdAax3cv9zgAu4OULrznwIB4qVXTMI9/Q8nZMK +raPpQ2HzEatKTzv+I+HdcsBrkROics2wlrNLWq6ESnT1/ZAstiNeXctn9Hivp7b8 +vdJ2baT1704L7jNfUJOaOv94Z2UlnSBimqsyWiRZhze2gENH0ceuqKX+jnH9BDt3 +h5VpVXmxr/42qzpae+48EbVcEofKa372JPpX52BizJJeOEFRl3ZrlR7umNEIjlCp +V+T4CERfSvDMrsPQTYV7UjLajgkC8oIhZ+VVIAmzV32TPRpFQkdX1aK4NYkKguvy +K0+aeFI/yUyoF93D0ZHQv5oJd0fAMaacg34XEoMEponOA0aA+/P5qT0MipCntNkk +lNiM3yQG+kr4a/wTKk/N+Rtmu2XHTeNM2CqpKuEFnolAQ4BWvmRePMLlKHQEqt4E +uk1TijoHiK1GXIkZqRxpWIEggXSGISTnwsOJ77IwUxxeBcuWED+91TaRZ4gWGYbU +0mBbhpfo8lvxFKfBAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN +AQEMBQADggGBADmCfBppGwGCaJLnVhLbh3eWV7X62EbWoMKWf/robiwzHiU5wU3n +JN7VJitRfH/jjYDbhbZlT8+l/q9ZZiLvuLgENypXN40GrGGA2LhZkBtXYHcf0R3W +j18INYxbB7NH7HhwOq2JO/oS2p1YqJOKzf4RtnQUUrAgCSiVXsQgmia2zO5fbEqH +Zm5l0/PFCqw+Mf2ct8AK9SIXIa9sbW9LS3j+B5RIXdRDi5mHXTa1jZbdTiRAlcJa +mBsc88LYHuosI7xHmC1N9NViy4oK0RMPt8d82pOdmgDcpLl9Sjdr5ETkRoJvfcLt +iiMjd0cHJ0EeTLUHIGT5pDw/kNVront4AEOybRNwcVq0Kg5lMfYSGzA3b4oCNIuB +jo0WuR+BXuJu3NpU8ctENzfgzrW4h3d24tkYKnvLFGUajMsd3RVYUyYEROGBDaTR +xNf0JQR3S2AR4SgfNZwlPEwccNhiWKInPwEYvkzPVPysf9wbY1voQy0WWmS6GsE5 +/pCkjmGslbPs+A== +-----END CERTIFICATE----- diff --git a/Task_1/cert/ca/root-ca/db/root-ca.crl.srl b/Task_1/cert/ca/root-ca/db/root-ca.crl.srl new file mode 100644 index 0000000..a616ad4 --- /dev/null +++ b/Task_1/cert/ca/root-ca/db/root-ca.crl.srl @@ -0,0 +1 @@ +01 \ No newline at end of file diff --git a/Task_1/cert/ca/root-ca/db/root-ca.crt.srl b/Task_1/cert/ca/root-ca/db/root-ca.crt.srl new file mode 100644 index 0000000..a616ad4 --- /dev/null +++ b/Task_1/cert/ca/root-ca/db/root-ca.crt.srl @@ -0,0 +1 @@ +01 \ No newline at end of file diff --git a/Task_1/cert/ca/root-ca/db/root-ca.db b/Task_1/cert/ca/root-ca/db/root-ca.db new file mode 100644 index 0000000..e69de29 diff --git a/Task_1/cert/ca/root-ca/db/root-ca.db.attr b/Task_1/cert/ca/root-ca/db/root-ca.db.attr new file mode 100644 index 0000000..e69de29 diff --git a/Task_1/cert/ca/root-ca/private/root-ca.key b/Task_1/cert/ca/root-ca/private/root-ca.key new file mode 100644 index 0000000..efe8953 --- /dev/null +++ b/Task_1/cert/ca/root-ca/private/root-ca.key @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/ca/signing-ca.crt b/Task_1/cert/ca/signing-ca.crt new file mode 100644 index 0000000..96f4ff2 --- /dev/null +++ b/Task_1/cert/ca/signing-ca.crt @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEjDCCAvSgAwIBAgIRAKU0fKB6P0Snr1EqK54jl9AwDQYJKoZIhvcNAQEMBQAw +dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX +MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV +BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDgyODE2NTM1N1oXDTI1MDgyODE2 +NTM1N1owejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp +bXBsZTEaMBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBs +ZSBJbmMxGjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMIIBojANBgkqhkiG9w0B +AQEFAAOCAY8AMIIBigKCAYEAvCfToD7c7GdhpaVQf9IVyNyxA6hAJ22aSxFZ+4Oq +0Jj5gJJyMXMdyE84+26c/LB3EHvVD+y5R2uKjXDPId3A4bpSsAWj2Wv4qxgIhi57 +RnqTto6yMLmfZU1+RDAmtWf5PCtL9ptta8kPr7bKOYlANXexakpDvDSXEszA7XnY +QtcGt/CL8nUjCbcd9gigjPFewBQ3OKUgaBUKTtWbbkoJwHhux8IlcfJjlUP9galG +6PNdpXnyAuih+fx3HuQFz3gMBK4sOxFE+sSo+8nDkxqkN0HHpcwlExt1jLRvuOhE +gdzPkrNIGNFgJAKZVnd4EBeiQrxpEYLQ8QTxsw9DRcYoQMK7z6AErGeVYmvbmJd5 +cv0c9rSPvW+gzgoJP1+LW8aO0w4lErRdT2jwpbo7/+5nyPgHKhlYORzu5SrjSD+2 +Uyle2qwTgoP5rIcIrUf301OAwVXWTYMck0yn+q2J/0ApuTqPKcBVBIRVzMCWhQ/V +/01sm3ar8tH9cNzsaGbSyZIdAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJ +KoZIhvcNAQEMBQADggGBAC1QS5H3qSnsTIzUDV6xcQm78OwUmNiGrGoCCmC+g1JE +YsbWpS2BLCXV71QcTgaf6CCZU/zo8KbMpMhjZf1IEHUMhWkEUDpfM8lpO8qV7kOD +RKxYWo/i+EpAw41iAdtShj05ktosBheZ6FMY4RtFU/lb1yjGHAwEpSFJ1oVjJVlh +7NMMRnAXdFnNMr4DKkShL4UcQNcE/DL+IR9KzwH06MvD1D4HUVquKjmsPbiIA0LC +lb+LmsJJhk4w/6bys1gbb0ps0W0vr4uVXmi6X5kIyO5/N3og3WWELIdKf0UukTh1 +cGlsP7iMH6Z+AKEuN7ksLfCIFI1vLG72RQUEho5MYf78jMGfVYJo/7qbCLqiT9HO +VA9kmWpLoYQpbQKQOj/t+ic+maxpl4WIvPyqznQhM2vyA6cJb9mNAejBWSR/t/hC +v6xZMe2KM7CUm7+aYDycTyCaDqUinENrdUrD8OE8JiDvlnfcFMulsh+K4wXka9zR +ayQOvGnGNV6BmBcCJFfe6g== +-----END CERTIFICATE----- diff --git a/Task_1/cert/ca/signing-ca.csr b/Task_1/cert/ca/signing-ca.csr new file mode 100644 index 0000000..854d996 --- /dev/null +++ b/Task_1/cert/ca/signing-ca.csr @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIID4TCCAkkCAQAwejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixk +ARkWBnNpbXBsZTEaMBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoM +ClNpbXBsZSBJbmMxGjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMIIBojANBgkq +hkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAvCfToD7c7GdhpaVQf9IVyNyxA6hAJ22a +SxFZ+4Oq0Jj5gJJyMXMdyE84+26c/LB3EHvVD+y5R2uKjXDPId3A4bpSsAWj2Wv4 +qxgIhi57RnqTto6yMLmfZU1+RDAmtWf5PCtL9ptta8kPr7bKOYlANXexakpDvDSX +EszA7XnYQtcGt/CL8nUjCbcd9gigjPFewBQ3OKUgaBUKTtWbbkoJwHhux8IlcfJj +lUP9galG6PNdpXnyAuih+fx3HuQFz3gMBK4sOxFE+sSo+8nDkxqkN0HHpcwlExt1 +jLRvuOhEgdzPkrNIGNFgJAKZVnd4EBeiQrxpEYLQ8QTxsw9DRcYoQMK7z6AErGeV +YmvbmJd5cv0c9rSPvW+gzgoJP1+LW8aO0w4lErRdT2jwpbo7/+5nyPgHKhlYORzu +5SrjSD+2Uyle2qwTgoP5rIcIrUf301OAwVXWTYMck0yn+q2J/0ApuTqPKcBVBIRV +zMCWhQ/V/01sm3ar8tH9cNzsaGbSyZIdAgMBAAGgIjAgBgkqhkiG9w0BCQ4xEzAR +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggGBAIa+PVOEYNL1v3Iq +VCZZREFjjYFxi5vhbkBgNk4eLk7+X5eEvdoPV5Gw2Hkvq0gvze9vi7nbXbBnz4G/ +NUUm/BRRZB56Y5MsXI0mZI1HBLE9OfG2gsSyZVqcWcA0+xFxFMVItVR/R4B8LDbD +60JF/Samfr58OklJjOODHZwmEH+vMxNVcUVic+Xn6iiTNGBQ96x3NkbXFpTuD59K +gfSbBBXw62WlQS7UWvlR0D+awvmseQqsyUU7btEPD1JDY5YPOV+RtuFASwHUrx82 +OLvdehzCDCPz7RNbbQEHsX9uEHGzH+TjgBLtVIiQ/fBjzLgfYB+H6+8rCJMdNf/L +Sk22tUqwSIaDAJuJueovQMs0sXbXlG6FcuN7YwpSBOpoTE6I3HPmi2JSsmnVs6p3 +dpkRqQU7Ecr4hqzI3DaiChOTQ6khojhpCsYAxLA8EhzQTpKcZT678gLD4bqDxgH5 +iRaAgVlLnIAeOvHJy7r5f1Aac/iJ8U6QCWvWzGXATHbArwl4tw== +-----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/ca/signing-ca/db/signing-ca.crl.srl b/Task_1/cert/ca/signing-ca/db/signing-ca.crl.srl new file mode 100644 index 0000000..a616ad4 --- /dev/null +++ b/Task_1/cert/ca/signing-ca/db/signing-ca.crl.srl @@ -0,0 +1 @@ +01 \ No newline at end of file diff --git a/Task_1/cert/ca/signing-ca/db/signing-ca.crt.srl b/Task_1/cert/ca/signing-ca/db/signing-ca.crt.srl new file mode 100644 index 0000000..a616ad4 --- /dev/null +++ b/Task_1/cert/ca/signing-ca/db/signing-ca.crt.srl @@ -0,0 +1 @@ +01 \ No newline at end of file diff --git a/Task_1/cert/ca/signing-ca/db/signing-ca.db b/Task_1/cert/ca/signing-ca/db/signing-ca.db new file mode 100644 index 0000000..e69de29 diff --git a/Task_1/cert/ca/signing-ca/db/signing-ca.db.attr b/Task_1/cert/ca/signing-ca/db/signing-ca.db.attr new file mode 100644 index 0000000..e69de29 diff --git a/Task_1/cert/ca/signing-ca/private/signing-ca.key b/Task_1/cert/ca/signing-ca/private/signing-ca.key new file mode 100644 index 0000000..05485b0 --- /dev/null +++ b/Task_1/cert/ca/signing-ca/private/signing-ca.key @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/cert_chain.crt b/Task_1/cert/cert_chain.crt new file mode 100644 index 0000000..a97e6c5 --- /dev/null +++ b/Task_1/cert/cert_chain.crt @@ -0,0 +1,54 @@ +-----BEGIN CERTIFICATE----- +MIIEhjCCAu6gAwIBAgIRAPn4axsy5E/rlwC4vGSLfi4wDQYJKoZIhvcNAQEMBQAw +dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX +MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV +BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDgyODE2NTM1NloXDTI1MDgyODE2 +NTM1NlowdDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp +bXBsZTEXMBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJ +bmMxFzAVBgNVBAsMDlNpbXBsZSBSb290IENBMIIBojANBgkqhkiG9w0BAQEFAAOC +AY8AMIIBigKCAYEAoK3/EIg/z0HdAax3cv9zgAu4OULrznwIB4qVXTMI9/Q8nZMK +raPpQ2HzEatKTzv+I+HdcsBrkROics2wlrNLWq6ESnT1/ZAstiNeXctn9Hivp7b8 +vdJ2baT1704L7jNfUJOaOv94Z2UlnSBimqsyWiRZhze2gENH0ceuqKX+jnH9BDt3 +h5VpVXmxr/42qzpae+48EbVcEofKa372JPpX52BizJJeOEFRl3ZrlR7umNEIjlCp +V+T4CERfSvDMrsPQTYV7UjLajgkC8oIhZ+VVIAmzV32TPRpFQkdX1aK4NYkKguvy +K0+aeFI/yUyoF93D0ZHQv5oJd0fAMaacg34XEoMEponOA0aA+/P5qT0MipCntNkk +lNiM3yQG+kr4a/wTKk/N+Rtmu2XHTeNM2CqpKuEFnolAQ4BWvmRePMLlKHQEqt4E +uk1TijoHiK1GXIkZqRxpWIEggXSGISTnwsOJ77IwUxxeBcuWED+91TaRZ4gWGYbU +0mBbhpfo8lvxFKfBAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN +AQEMBQADggGBADmCfBppGwGCaJLnVhLbh3eWV7X62EbWoMKWf/robiwzHiU5wU3n +JN7VJitRfH/jjYDbhbZlT8+l/q9ZZiLvuLgENypXN40GrGGA2LhZkBtXYHcf0R3W +j18INYxbB7NH7HhwOq2JO/oS2p1YqJOKzf4RtnQUUrAgCSiVXsQgmia2zO5fbEqH +Zm5l0/PFCqw+Mf2ct8AK9SIXIa9sbW9LS3j+B5RIXdRDi5mHXTa1jZbdTiRAlcJa +mBsc88LYHuosI7xHmC1N9NViy4oK0RMPt8d82pOdmgDcpLl9Sjdr5ETkRoJvfcLt +iiMjd0cHJ0EeTLUHIGT5pDw/kNVront4AEOybRNwcVq0Kg5lMfYSGzA3b4oCNIuB +jo0WuR+BXuJu3NpU8ctENzfgzrW4h3d24tkYKnvLFGUajMsd3RVYUyYEROGBDaTR +xNf0JQR3S2AR4SgfNZwlPEwccNhiWKInPwEYvkzPVPysf9wbY1voQy0WWmS6GsE5 +/pCkjmGslbPs+A== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEjDCCAvSgAwIBAgIRAKU0fKB6P0Snr1EqK54jl9AwDQYJKoZIhvcNAQEMBQAw +dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX +MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV +BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDgyODE2NTM1N1oXDTI1MDgyODE2 +NTM1N1owejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp +bXBsZTEaMBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBs +ZSBJbmMxGjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMIIBojANBgkqhkiG9w0B +AQEFAAOCAY8AMIIBigKCAYEAvCfToD7c7GdhpaVQf9IVyNyxA6hAJ22aSxFZ+4Oq +0Jj5gJJyMXMdyE84+26c/LB3EHvVD+y5R2uKjXDPId3A4bpSsAWj2Wv4qxgIhi57 +RnqTto6yMLmfZU1+RDAmtWf5PCtL9ptta8kPr7bKOYlANXexakpDvDSXEszA7XnY +QtcGt/CL8nUjCbcd9gigjPFewBQ3OKUgaBUKTtWbbkoJwHhux8IlcfJjlUP9galG +6PNdpXnyAuih+fx3HuQFz3gMBK4sOxFE+sSo+8nDkxqkN0HHpcwlExt1jLRvuOhE +gdzPkrNIGNFgJAKZVnd4EBeiQrxpEYLQ8QTxsw9DRcYoQMK7z6AErGeVYmvbmJd5 +cv0c9rSPvW+gzgoJP1+LW8aO0w4lErRdT2jwpbo7/+5nyPgHKhlYORzu5SrjSD+2 +Uyle2qwTgoP5rIcIrUf301OAwVXWTYMck0yn+q2J/0ApuTqPKcBVBIRVzMCWhQ/V +/01sm3ar8tH9cNzsaGbSyZIdAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJ +KoZIhvcNAQEMBQADggGBAC1QS5H3qSnsTIzUDV6xcQm78OwUmNiGrGoCCmC+g1JE +YsbWpS2BLCXV71QcTgaf6CCZU/zo8KbMpMhjZf1IEHUMhWkEUDpfM8lpO8qV7kOD +RKxYWo/i+EpAw41iAdtShj05ktosBheZ6FMY4RtFU/lb1yjGHAwEpSFJ1oVjJVlh +7NMMRnAXdFnNMr4DKkShL4UcQNcE/DL+IR9KzwH06MvD1D4HUVquKjmsPbiIA0LC +lb+LmsJJhk4w/6bys1gbb0ps0W0vr4uVXmi6X5kIyO5/N3og3WWELIdKf0UukTh1 +cGlsP7iMH6Z+AKEuN7ksLfCIFI1vLG72RQUEho5MYf78jMGfVYJo/7qbCLqiT9HO +VA9kmWpLoYQpbQKQOj/t+ic+maxpl4WIvPyqznQhM2vyA6cJb9mNAejBWSR/t/hC +v6xZMe2KM7CUm7+aYDycTyCaDqUinENrdUrD8OE8JiDvlnfcFMulsh+K4wXka9zR +ayQOvGnGNV6BmBcCJFfe6g== +-----END CERTIFICATE----- diff --git a/Task_1/cert/client/col_one.crt b/Task_1/cert/client/col_one.crt new file mode 100644 index 0000000..6f0ef5a --- /dev/null +++ b/Task_1/cert/client/col_one.crt @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIEMzCCApugAwIBAgIRALGrJcWLsEZatOIM2L9gs4AwDQYJKoZIhvcNAQEMBQAw +ejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEa +MBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMx +GjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMB4XDTI0MDgyODE2NTM1N1oXDTI1 +MDgyODE2NTM1N1owDjEMMAoGA1UEAwwDb25lMIIBojANBgkqhkiG9w0BAQEFAAOC +AY8AMIIBigKCAYEAnzsd/2TmHa9Npp8241olWWJClIgr4bODy9qA8leENCSEUdzK +KeGKjdhbVTblE5PdMExmknWBEM3G9Mp7bnd3XEpUDGUYj7Mu+7cVQRJBhRhpySs+ +XQb9jHuEntw6PcU1+SY+ZLH01S9OKFVOWDyhBOMxfOT65GNKVEgq5rFWZmHiKsqQ +uOPdKcqQ81Dp35ogeUdzY7dVSACGoomMa65C8lBV6ueKMxpDqXHyIp9w66B0HH55 +KMDXg0SMPAiA+RXEt2Lhr5PgX6iQ2Ea02f9mTow8elptdH4u3P5sqh54jCJrk2RS +lGsCIKa0PbSEQ3UOhvKFAvWUKjtEdD7QwM0D/zTYxkqjSIvclvd7C+oNxo0hUbaN +bm+Ox+mS5dn6cJOr97mJxWxLcDE2xcRHxCkgcPVzuKUE2uxbGk6L+Io5Zg4i+cMJ +aj86Xaub1NZgDxOLkq6HFgBFxPoE7h+PhBaSSP+WUi4FPRiNFaznSq0S4RjMM9q6 +JBLflTAuH0dFOPrlAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAwDgYDVR0RBAcwBYID +b25lMA0GCSqGSIb3DQEBDAUAA4IBgQAv3D59inLw8u9SqcC5+hjTe5RI3RRo9eNP +GP2scwAjo7mQxHmcak5mXhzbeNuMgAJ2/GpYMk8oZShcCUox/MICINBbNi+I70qJ +1XqkTisfBaLHz6W8X4GSriHbbPCn9czGyk8LMviiMv6qOz5SjMyXvjEe18ZP1/MG +uPKLpbTfqpBPHXJoj71e5bJ+XnTWUNAAtYyf+2vyQoI3Rj5KgtHE3Ylu0qwqQ2XW +6u5Rn35316Kd9klafqo6M94Nxe0BJzE5xUlCucfPFsOeHXxxgil3kVDhSideJ3Ii +UrR3/LBobfvj9+jsRg4bcbshJpv50jEAOSl2bK/BZmMwc4Qw6FoswizQ9UDN+SS0 +Qxr8hB0W9Z/Mkh6YbK6UdaxUkE3/it/6wNrF/Pf8Zq3Z7ZwPkQMgE018uUTY2dGU +kidzXNdhDrTVUdH7RcureKZetgsAqdeg8aOaWkCbbSigg1IgEJvLZXzrgnTFRELB +WYD8RBSB077MJqWFRbHK5mIC2rETWlA= +-----END CERTIFICATE----- diff --git a/Task_1/cert/client/col_one.key b/Task_1/cert/client/col_one.key new file mode 100644 index 0000000..882c35b --- /dev/null +++ b/Task_1/cert/client/col_one.key @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/client/col_two.crt b/Task_1/cert/client/col_two.crt new file mode 100644 index 0000000..7cc2101 --- /dev/null +++ b/Task_1/cert/client/col_two.crt @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIEMjCCApqgAwIBAgIQGw4ZaujURJy7vyDSyTJsSzANBgkqhkiG9w0BAQwFADB6 +MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRow +GAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEa +MBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwHhcNMjQwODI4MTY1MzU4WhcNMjUw +ODI4MTY1MzU4WjAOMQwwCgYDVQQDDAN0d28wggGiMA0GCSqGSIb3DQEBAQUAA4IB +jwAwggGKAoIBgQCoY04uf4yoqYsFJSdNOS7JATcLlLi4yet16EbdYd9FVCjRFJk2 +fS/tVgDCkkUIilA/jc6SnRHmGrR12nQWTwHCkEb98nrp2T0gKlIfFaJOei+kz8V2 +1yKmni3SiLsTSaREECQ+BapfCG3Kl9Snugvq3XDjdyEyBrkXhVZfYl8raQNPr0hS +Huhm+B5zSCV1ugYZLOn5ki2vMaHMxwbC29jPe0fwBFmg7rGTd8a4od0KtQVqeWE7 +oV5Q6MW3CQLqRUFHHVm1AH45oVTGnAwWHzLsd+sIeqnkW2nd1t8mVhHSQxTi7qen +Efh+EsFBhM66F8d0LSsDecOL1joDXj7iXicc/AuJG8V22twABvKfj1t14GHwJzLS +gawbXBnv5huqShJ48zD0k6fPCE8mojY2ZqE3LbpxEkjzlNJ+5wgABEBJU2ATrEPQ +aeGvRlZiIg/WeG2+Lq6qYCdvUAGLalis/ISO/o+novgQSxNi/kgXmQqQYyXMrps1 +JNTgQvgdO6pykfsCAwEAAaMgMB4wDAYDVR0TAQH/BAIwADAOBgNVHREEBzAFggN0 +d28wDQYJKoZIhvcNAQEMBQADggGBAKty2FotDg6/6SroK9DuaO2mlLH3kZwyOf+e +nSRwzPnKUnBerRHFmtG239GQybxKOyDb8WXSZ7X5CHyl29IiQptpiVPCVpvJnpq5 +gpShS7uaT9psPwR2DR1h9jtne5DXwrVjzWfJNQ8hkcJKSzryzxvFWvbIGGxy3i8g +n/SxiNQB1oNUku/F3hDnBGdkMY+kH/O1ryE80LoeALB302kGoW4TVGV9kLjD6FFL +nEXxcs2jEFaaiLRsDdMYUSBwwt7SHq4wC7tlslfuPe9ZnJeEvo911QgrM3OnOH+w +ii/qiWqHLAoCEColOX099q+3Aww4MhHJYwYH9rxvNFqqhs3TFE3aFfKpgZlft9ZW +cOKlWQXap7vdK0wgfSxeTfdF9kpVyWFWDB397+DY4shqIkYNbFn7zEM+x/UUrQ/H +Zx3Wmcjz3UJXp3nRmjf3/Opj699i+mE7MdOyxnFewo20tR3rOU0UXwG/Mfzvl8Jj +lry9GRVyN54hTEtRpoK8yaKuAZKPLw== +-----END CERTIFICATE----- diff --git a/Task_1/cert/client/col_two.key b/Task_1/cert/client/col_two.key new file mode 100644 index 0000000..0eced35 --- /dev/null +++ b/Task_1/cert/client/col_two.key @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/col_one.csr b/Task_1/cert/col_one.csr new file mode 100644 index 0000000..cfd3510 --- /dev/null +++ b/Task_1/cert/col_one.csr @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIDqjCCAhICAQAwDjEMMAoGA1UEAwwDb25lMIIBojANBgkqhkiG9w0BAQEFAAOC +AY8AMIIBigKCAYEAnzsd/2TmHa9Npp8241olWWJClIgr4bODy9qA8leENCSEUdzK +KeGKjdhbVTblE5PdMExmknWBEM3G9Mp7bnd3XEpUDGUYj7Mu+7cVQRJBhRhpySs+ +XQb9jHuEntw6PcU1+SY+ZLH01S9OKFVOWDyhBOMxfOT65GNKVEgq5rFWZmHiKsqQ +uOPdKcqQ81Dp35ogeUdzY7dVSACGoomMa65C8lBV6ueKMxpDqXHyIp9w66B0HH55 +KMDXg0SMPAiA+RXEt2Lhr5PgX6iQ2Ea02f9mTow8elptdH4u3P5sqh54jCJrk2RS +lGsCIKa0PbSEQ3UOhvKFAvWUKjtEdD7QwM0D/zTYxkqjSIvclvd7C+oNxo0hUbaN +bm+Ox+mS5dn6cJOr97mJxWxLcDE2xcRHxCkgcPVzuKUE2uxbGk6L+Io5Zg4i+cMJ +aj86Xaub1NZgDxOLkq6HFgBFxPoE7h+PhBaSSP+WUi4FPRiNFaznSq0S4RjMM9q6 +JBLflTAuH0dFOPrlAgMBAAGgVzBVBgkqhkiG9w0BCQ4xSDBGMAwGA1UdEwEB/wQC +MAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDgYDVR0PAQH/BAQDAgWgMA4GA1Ud +EQQHMAWCA29uZTANBgkqhkiG9w0BAQwFAAOCAYEAUjof9Fimf7x80XaqqnX9enMW +byT5/oI9cmauioOdroiOGqTIGt2kDUJFwiSlBSjVpMNvzCRZtrFhFekwwimsJO/I +UcMFIbrMJ51f//CaPiYvmrG7byoTlJl7LsvAdP6ua7Zs1we6fH3ZSnU3XJKh2p66 +Y88yu8VH3vRL1+WQrE0zAoarenLHG4rGvY6WMUXWX723FCE7RVVFkFI07/XUgQna +PF0HeDmKVhn2sOmyv5U83SG/lzTlejmuFBOYb2HdHQdZz9I1OC/Vl2nuub+B3bGD +sItiS5OpoRhtMe+VaHLwzSjWPcgLAlLZLMk0C8nL+mSMWI5DJnXXdbpGGgxEgakt +Dd60CxLh0MJ+p9lEwhTVOGQeISq6eBE8CacqdiBWw0WH4RH6EUAvEBfQKjTmLaFh +bbQJ4L52sciFyK8wOf2OLXZaPlDtl2i1Y3rr0raVwEKV3iAqeQRVfEGbM67bXCjm +pel5kZ8DjVLI2tl+wcQFriAyc0fpU0vRLb9QgEO1 +-----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/col_two.csr b/Task_1/cert/col_two.csr new file mode 100644 index 0000000..8daf426 --- /dev/null +++ b/Task_1/cert/col_two.csr @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIDqjCCAhICAQAwDjEMMAoGA1UEAwwDdHdvMIIBojANBgkqhkiG9w0BAQEFAAOC +AY8AMIIBigKCAYEAqGNOLn+MqKmLBSUnTTkuyQE3C5S4uMnrdehG3WHfRVQo0RSZ +Nn0v7VYAwpJFCIpQP43Okp0R5hq0ddp0Fk8BwpBG/fJ66dk9ICpSHxWiTnovpM/F +dtcipp4t0oi7E0mkRBAkPgWqXwhtypfUp7oL6t1w43chMga5F4VWX2JfK2kDT69I +Uh7oZvgec0gldboGGSzp+ZItrzGhzMcGwtvYz3tH8ARZoO6xk3fGuKHdCrUFanlh +O6FeUOjFtwkC6kVBRx1ZtQB+OaFUxpwMFh8y7HfrCHqp5Ftp3dbfJlYR0kMU4u6n +pxH4fhLBQYTOuhfHdC0rA3nDi9Y6A14+4l4nHPwLiRvFdtrcAAbyn49bdeBh8Ccy +0oGsG1wZ7+YbqkoSePMw9JOnzwhPJqI2NmahNy26cRJI85TSfucIAARASVNgE6xD +0Gnhr0ZWYiIP1nhtvi6uqmAnb1ABi2pYrPyEjv6Pp6L4EEsTYv5IF5kKkGMlzK6b +NSTU4EL4HTuqcpH7AgMBAAGgVzBVBgkqhkiG9w0BCQ4xSDBGMAwGA1UdEwEB/wQC +MAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDgYDVR0PAQH/BAQDAgWgMA4GA1Ud +EQQHMAWCA3R3bzANBgkqhkiG9w0BAQwFAAOCAYEAIl5YVxe9eykuj45xvVfcSvOp +a4JGO5Cp5qGGEKVgih8LsdrnOrn/XanT7sFYy5k/H+w/7oJfQEV6zWtM1OmLKRF+ +ie5tL13JGnov0H7HL+AM6JU/INokT0zr++xwjSOsqC5CUvv+5cNOtDB/Wgocti2E +QWFlcwkmlhvQm5TM1k8T0CLtaOVXCcXRP+f5ZvFxrAvGhAq7kPZMVsAOD0JcXvJl +NvfRgvfMWG+X6GgPHld4GxjB2citue8TfV8H9rAbLraK66EAkESYBuwshPxapRr3 +jEuvXG2Bajg5k4VfsRIsOtzinJPhrh1+tsCgdkZkPMlwRMk75gg0hJhEUt7Wv97r +7T6FwIPWVPqQ+NKO5P0WQUhXHtJXfKUIrI47xTTy4X67l6wNfqGjy4Id9WYPt6xj +EMy1JKKGBBRpTtieOgg0QMyb9toTIz9TIgBOanRIiC4+txRaKkgyEVSHmeJ+K3uG +U1BRkz6er4QIUjZtDe9D0DsEgyAOVkzC5/OTZL1Q +-----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt new file mode 100644 index 0000000..f72679a --- /dev/null +++ b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIIEXDCCAsSgAwIBAgIQbehulRH7TFCeh9l6sm0CwjANBgkqhkiG9w0BAQwFADB6 +MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRow +GAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEa +MBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwHhcNMjQwODI4MTY1MzU3WhcNMjUw +ODI4MTY1MzU3WjAjMSEwHwYDVQQDDBhpbi1vdGEtMjMyMzQ3LmFkcy5pdS5lZHUw +ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCgvaTxBaF6leNQufWgvdqq +xyWCPoUxeolVpnMc6pRFN6jD7GRgpNd4t4HBFkW+I4VxkzVM6M6OIIhMdw/arS4o +8nFKCvMmMWdZD1uJATdwPHjQydbGjMQVEjEYhJZgTLMFCBRItDo0R6eZl+T2+SpN +siAZTbhhiAvAN8vWdeXtLVy3JqrBXqQqAPympnJ6GNEKLVSK/DGj1nUJlm9dX8lr +ZOi0CKY5OMmRIOEUMp0y43qLi8wArjOPoQdglVPQefthj8AMbgjM+tn1IPgNFhrC +oVVw1Yjfly6ERk4+uNkHtyYEcSK/t3cpmSvAZKb9w+yybGtYhNKX1P/U0edasp/0 +q+q404tiaQBOQBIktxx2iP6WGIr9QTIL/lkKGka1SCu9Si2TCYSohIrXbZU3YkEi +ZZHQ/RheQALinzo6JPrJDBg9xm6JU/ZP0H+QBZp5sz4QoATHt3+fnbXYLyyOKkT4 +k0drCjrkp14uJ4FHhC3sKj9kaqKMtNEYddsSAmSB4f0CAwEAAaM1MDMwDAYDVR0T +AQH/BAIwADAjBgNVHREEHDAaghhpbi1vdGEtMjMyMzQ3LmFkcy5pdS5lZHUwDQYJ +KoZIhvcNAQEMBQADggGBAG2pOlzco2zk7SNP5o5aD/IwvpxVxLJxNOLPOS8syccN +6p76kfhaJJVmxU4KOxmpLhOtmlOVc6nyuIX549n6aj+MBDp6mgu2ZQpLGnUPVN+y +NJHLaBRXt9/yEbBPprwxbLw9AlTKv1pBH4FLBVdCSIbocydnBeBeGico0XUJ3FmK +DlCX9q5Hy8DLa39XfbIICGa6/kXWmi5ctMEuiH9u9JUdas5TsaBtaPVmVGTpOe/T +kLicM36/XmdgVvMaWUJpxczXRQl84SH1dmVc6m0t+jD+k+mJT+WDElKjPMYDzMwS +8+1mY6DUVqLUCjYE16BAimf+uB4m6mCP73DtE+N620V/mqGUd6N2ae/7jBZnyH+N +i1tZPZ3qO0xPCBPQrY4jceBmAoLhfDJKlNNJ1iG5/VoG1gOKFWGlXjxOQ4E/zWxa +Tni9euDLGvalr/kkTKWPcmwxnYE9I0tiqrebz2/QUp3TNT/8X2y2LPHFhSdRueEN +IyMG4i2ihhwP6Hql1oW6eg== +-----END CERTIFICATE----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr new file mode 100644 index 0000000..0885c5f --- /dev/null +++ b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIID1DCCAjwCAQAwIzEhMB8GA1UEAwwYaW4tb3RhLTIzMjM0Ny5hZHMuaXUuZWR1 +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAoL2k8QWhepXjULn1oL3a +qsclgj6FMXqJVaZzHOqURTeow+xkYKTXeLeBwRZFviOFcZM1TOjOjiCITHcP2q0u +KPJxSgrzJjFnWQ9biQE3cDx40MnWxozEFRIxGISWYEyzBQgUSLQ6NEenmZfk9vkq +TbIgGU24YYgLwDfL1nXl7S1ctyaqwV6kKgD8pqZyehjRCi1Uivwxo9Z1CZZvXV/J +a2TotAimOTjJkSDhFDKdMuN6i4vMAK4zj6EHYJVT0Hn7YY/ADG4IzPrZ9SD4DRYa +wqFVcNWI35cuhEZOPrjZB7cmBHEiv7d3KZkrwGSm/cPssmxrWITSl9T/1NHnWrKf +9KvquNOLYmkATkASJLccdoj+lhiK/UEyC/5ZChpGtUgrvUotkwmEqISK122VN2JB +ImWR0P0YXkAC4p86OiT6yQwYPcZuiVP2T9B/kAWaebM+EKAEx7d/n5212C8sjipE ++JNHawo65KdeLieBR4Qt7Co/ZGqijLTRGHXbEgJkgeH9AgMBAAGgbDBqBgkqhkiG +9w0BCQ4xXTBbMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwEw +DgYDVR0PAQH/BAQDAgWgMCMGA1UdEQQcMBqCGGluLW90YS0yMzIzNDcuYWRzLml1 +LmVkdTANBgkqhkiG9w0BAQwFAAOCAYEAIaAD8ft93LSu09svalINZ2Y2kNE/AbJG +NjYKZtfz7/IhyMtuXW15BV4UwNA/y4FuyX20NzYsAe2eLUJtnmJybux9FZuIDD4V +RDr5OZiiDIWQMVfpJbQv27QScB8VlMgdjR333vXOenfv6IOfVZLEEnSE1jakYhLP +qG16IMkyHWZcUBLSJ6UbgGP+G9ceKsBxNaHlMUPM98QAa++dkbw+e/AOILj7HOHw +Pzb9G8vT3u7OlDe4CQarKZdhxKNEiUN5hCJ35mzCMp4qmenOmr/chFZC3azyUGaW +ogDzE4bmAfKtqRD7dNLfEjtPTmHXK2hvq+AApZ1qZgAnfHb6G06+OeP2jDW9U8yY +b1U2zajsATWa0xqHe1Iw7WXvKBaYtxJvtpSNUh9ZP1wplubDf5g79W6YYs1+HPTI +5VasQQmqShUHh7U78y2xOYyhAr7tG+27RyT5lHxDiZ2pqBkd8+kZMWNZe/B/h8g5 +03uTnXXIe7Sj8XD5F9SaxkMxQ0e79QaZ +-----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key new file mode 100644 index 0000000..6e61cbe --- /dev/null +++ b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/Task_1/fets_challenge.egg-info/PKG-INFO b/Task_1/fets_challenge.egg-info/PKG-INFO new file mode 100644 index 0000000..43e953e --- /dev/null +++ b/Task_1/fets_challenge.egg-info/PKG-INFO @@ -0,0 +1,115 @@ +Metadata-Version: 2.1 +Name: fets_challenge +Version: 2.0 +Summary: FeTS Challenge Part 1 +Home-page: https://github.com/FETS-AI/Challenge +Author: Sarthak Pati and Ujjwal Baid and Maximilian Zenk and Brandon Edwards and Micah Sheller and G. Anthony Reina and Patrick Foley and Alexey Gruzdev and Jason Martin and Shadi Albarqouni and Yong Chen and Russell Taki Shinohara and Annika Reinke and David Zimmerer and John B. Freymann and Justin S. Kirby and Christos Davatzikos and Rivka R. Colen and Aikaterini Kotrotsou and Daniel Marcus and Mikhail Milchenko and Arash Nazer and Hassan Fathallah-Shaykh and Roland Wiest Andras Jakab and Marc-Andre Weber and Abhishek Mahajan and Lena Maier-Hein and Jens Kleesiek and Bjoern Menze and Klaus Maier-Hein and Spyridon Bakas +Classifier: Environment :: Console +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence +Classifier: Topic :: Scientific/Engineering :: Image Recognition +Classifier: License :: OSI Approved :: FETS UI License +Classifier: Programming Language :: Python :: 3 +Requires-Python: >=3.9 +Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: openfl@ git+https://github.com/intel/openfl.git@v1.5.1 +Requires-Dist: GANDLF@ git+https://github.com/CBICA/GaNDLF.git@0.0.20 +Requires-Dist: fets@ git+https://github.com/FETS-AI/Algorithms.git@fets_challenge + +# FeTS 2022 Challenge Task 1 +Task 1 (**"Federated Training"**) aims at effective weight aggregation methods for the creation of a consensus model given a pre-defined segmentation algorithm for training, while also (optionally) accounting for network outages. + +Please ask any additional questions in our discussion pages on our github site and we will try to update this README.md as we identify confusions/gaps in our explanations and instructions. + +## Getting started + +### System requirements + +1. [Git](https://git-scm.com/downloads) +2. [Git LFS](https://github.com/git-lfs/git-lfs#downloading) +2. Python with virtual environment management system: we recommend using [Anaconda](https://www.anaconda.com/products/individual). +3. **Windows- Only**: Pickle5 requires Microsoft C++ 14.0 or greater from the [C++ build tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/). +> * _Note: if you run into ```UnicodeDecodeError``` during installation, trying pinning ```openfl @ git+https://github.com/intel/openfl.git@v1.4``` in [setup.py](https://github.com/FeTS-AI/Challenge/blob/main/Task_1/setup.py#L31)_ +4. Use CUDA 11 for your installation as CUDA 12 is not compatible with this codebase. + +### Instructions --- IMPORTANT + +1. Register for the FeTS 2022 Challenge [here](https://www.synapse.org/#!Synapse:syn28546456/wiki/617093) and submit a data request. +2. ```git clone https://github.com/FETS-AI/Challenge.git``` +3. ```cd Challenge/Task_1``` +4. ```git lfs pull``` +5. Create virtual environment (python 3.9): using Anaconda, a new environment can be created and activated using the following commands: + ```sh + ## create venv in specific path + conda create -p ./venv python=3.9 -y + conda activate ./venv + ``` +6. ```pip install --upgrade pip``` +7. Install Pytorch (2.3.1) for your system: + ```pip install torch==2.3.1 torchvision==0.18.1``` +*Note all previous versions of pytorch can be found in [these instructions]([https://pytorch.org/get-started/locally/](https://pytorch.org/get-started/previous-versions/)) +8. Set the environment variable `SKLEARN_ALLOW_DEPRECATED_SKLEARN_PACKAGE_INSTALL=True` (to avoid sklearn deprecation error) +9. ```pip install .``` +> * _Note: if you run into ```ERROR: Failed building wheel for SimpleITK```, try running ```pip install SimpleITK --only-binary :all:``` then rerunning ```pip install .```_ +10. ```python FeTS_Challenge.py``` +> * _Note: if you run into ```ImportError: /home/locolinux/FETS2024/fets2024env/bin/../lib/libstdc++.so.6: version GLIBCXX_3.4.30' not found (required by /home/locolinux/FETS2024/fets2024env/lib/python3.7/site-packages/SimpleITK/_SimpleITK.so)```, try installing a previous version of SimpleITK (version 2.2.0 works) +11. All lower-level details are in the [FeTS Challenge python file](./FeTS_Challenge.py) +12. To view intermediate results with TensorBoard during training, you can run the following command: ```tensorboard --logdir ~/.local/workspace/logs/tensorboard``` + +## Time to Convergence Metric (formerly "communication cost") +Along with the typical DICE and Hausdorff metrics, we include a "time to convergence metric" intended to encourage solutions that converge to good scores quickly in terms of time. We simulate the time taken to run each round so that competitors don't need to be concerned with runtime optimizations such as compiled vs. interpreted code, and so that final scoring will not depend on the hardware used. This simulated time is computed in the experiment.py file and provided in the metrics output of the experiment execution. + +The time to convergence metric will be computed as the area under the validation learning curve over 1 week of simulated time where the horizontal axis measures simulated runtime and the vertical axis measures the current best score, computed as the average of enhancing tumor, tumor core, and whole tumor DICE scores over the validation split of the training data. + +You can find the code for the "time to convergence metric" in the experiment.py file by searching for ## CONVERGENCE METRIC COMPUTATION. + +### How Simulated Time is computed +The simulated time is stochastic, and computed per collaborator, per round, with the round time equaling the greatest round time of all collaborators in the round. + +A given collaborator's round time is computed as the sum of: +- The simulated time taken to download the shared model +- The simulated time taken to validate the shared model +- The simulated time taken to train the model (if training) +- The simulated time taken to validate that collaborator's trained model (if training) +- The simulated time taken to upload that collaborator's model update (if training) + +During the experiment, to generate these simulated times, we first assign each collaborator four normal distrubitions representing: +1. download speed +2. upload speed +3. training speed +4. validation speed + +We then draw from the appropriate distribution when generating one of the times listed above (at each round). + +We assign these network and compute distributions by drawing uniform-randomly from lists of normal distributions created using timing information collected from a subset of the 50+ participants in the May FeTS initiative training of this same model. In this way, the statistics used to simulate timing information come from timing information collected over an actual federation of hospitals that trained this exact model. In particular, for each actual hospital in our subset, we collected: +1. The mean and stdev seconds to download the model +2. The mean and stdev seconds to train a batch +3. The mean and stdev seconds to validate a batch +4. The mean and stdev seconds to upload the model. + +For a given collaborator, these normal distributions are constant throughout the experiment. Again, each possible timing distribution is based on actual timing information from a subset of the hospitals in the FeTS intitiative. You can find these distributions in the experiment.py file (search for ## COLLABORATOR TIMING DISTRIBUTIONS), as well as the random seed used to ensure reproducibility. + +### Use in Ranking + +For ranking of multidimensional outcomes (or metrics), for each team, we will compute the summation of their ranks across the average of the **7** metrics (i.e., time to convergence, and Dice & Hausdorff from 3 regions of interest) described as a univariate overall summary measure. This measure will decide the overall ranking for each specific team. Notably, since all teams are ranked per patient, whereas the communication cost is only accounted once for the complete training phase, the communication cost **will be weighted** according to the number of testing subjects in order to give it **equal importance** to the quality of the tumor segmentations. + + +## Data Partitioning and Sharding +The FeTS 2022 data release consists of a training set and two CSV files - each providing information for how to partition the training data into non-IID institutional subsets. The release will contain subfolders for single patient records whose names have the format `FeTS2022_###`, and two CSV files: +- **partitioning_1.csv** +- **partitioning_2.csv** + +Each of the partitioning CSV files has two columns, `Partition_ID` and `Subject_ID`. The Subject_ID column exhausts of the patient records contained in the release. The InstitutionName column provides an integer identifier indicating to which institution the record should be assigned. The path to a partition CSV can be provided as the value of the parameter ```institution_split_csv_filename``` to the jupyter notebook function run_challenge_experiment to specify the institutional split used when running experimental federated training on your custom federation logic. A description of each of these split CSVs is provided in Table 1. We encourage participants to create and explore training performance for other non-IID splits of the training data to help in developing generalizable customizations to the federated logic that will perform well during the validation and testing phase. A third CSV is hidden from participants and defines a test partitioning to be used in the challenge testing phase. This hidden partitioning (also described in Table 1) is another refinement of the institution split, having similar difficulty level to the institution tumor size split in our own experiments using the default customization functions. + +Table 1: Information for partitionings provided in the FeTS 2022 data release as well as the hidden partitioning not provided in the release (to be used in the competition testing phase). + +| Split name | CSV filename | Description | Number of institutions | +|-------------------------------------|------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------| +| Institution Split | partitioning_1.csv | Split of FeTS 2022 training data by originating institution. | 23 | +| Institution Tumor Size Split | partitioning_2.csv | Refinement of the institution split by tumor size, further splitting the larger institutions according to whether a record’s tumor size fell above or below the mean size for that institution. | 33 | +| Test Split | - not provided - | Undisclosed refinement of the institution split. | Hidden from participants | + + + diff --git a/Task_1/fets_challenge.egg-info/SOURCES.txt b/Task_1/fets_challenge.egg-info/SOURCES.txt new file mode 100644 index 0000000..f6add58 --- /dev/null +++ b/Task_1/fets_challenge.egg-info/SOURCES.txt @@ -0,0 +1,28 @@ +LICENSE +MANIFEST.in +README.md +setup.py +fets_challenge/__init__.py +fets_challenge/checkpoint_utils.py +fets_challenge/custom_aggregation_wrapper.py +fets_challenge/experiment.py +fets_challenge/gandlf_csv_adapter.py +fets_challenge/inference.py +fets_challenge/spec_sens_code.py +fets_challenge.egg-info/PKG-INFO +fets_challenge.egg-info/SOURCES.txt +fets_challenge.egg-info/dependency_links.txt +fets_challenge.egg-info/requires.txt +fets_challenge.egg-info/top_level.txt +openfl-workspace/fets_challenge_workspace/partitioning_1.csv +openfl-workspace/fets_challenge_workspace/partitioning_2.csv +openfl-workspace/fets_challenge_workspace/requirements.txt +openfl-workspace/fets_challenge_workspace/small_split.csv +openfl-workspace/fets_challenge_workspace/validation.csv +openfl-workspace/fets_challenge_workspace/plan/cols.yaml +openfl-workspace/fets_challenge_workspace/plan/data.yaml +openfl-workspace/fets_challenge_workspace/plan/defaults +openfl-workspace/fets_challenge_workspace/plan/plan.yaml +openfl-workspace/fets_challenge_workspace/src/__init__.py +openfl-workspace/fets_challenge_workspace/src/challenge_assigner.py +openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py \ No newline at end of file diff --git a/Task_1/fets_challenge.egg-info/dependency_links.txt b/Task_1/fets_challenge.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Task_1/fets_challenge.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/Task_1/fets_challenge.egg-info/requires.txt b/Task_1/fets_challenge.egg-info/requires.txt new file mode 100644 index 0000000..faafd5d --- /dev/null +++ b/Task_1/fets_challenge.egg-info/requires.txt @@ -0,0 +1,3 @@ +openfl@ git+https://github.com/intel/openfl.git@v1.5.1 +GANDLF@ git+https://github.com/CBICA/GaNDLF.git@0.0.20 +fets@ git+https://github.com/FETS-AI/Algorithms.git@fets_challenge diff --git a/Task_1/fets_challenge.egg-info/top_level.txt b/Task_1/fets_challenge.egg-info/top_level.txt new file mode 100644 index 0000000..7ad31f7 --- /dev/null +++ b/Task_1/fets_challenge.egg-info/top_level.txt @@ -0,0 +1,2 @@ +fets_challenge +openfl-workspace diff --git a/Task_1/fets_challenge/custom_aggregation_wrapper.py b/Task_1/fets_challenge/custom_aggregation_wrapper.py index ae7abc4..63472a6 100644 --- a/Task_1/fets_challenge/custom_aggregation_wrapper.py +++ b/Task_1/fets_challenge/custom_aggregation_wrapper.py @@ -1,4 +1,4 @@ -from openfl.component.aggregation_functions.experimental import PrivilegedAggregationFunction +from openfl.interface.aggregation_functions.experimental import PrivilegedAggregationFunction # extends the openfl agg func interface to include challenge-relevant information diff --git a/Task_1/fets_challenge/experiment.py b/Task_1/fets_challenge/experiment.py index f561e66..acf670b 100644 --- a/Task_1/fets_challenge/experiment.py +++ b/Task_1/fets_challenge/experiment.py @@ -13,7 +13,7 @@ import numpy as np import pandas as pd -from openfl.utilities import split_tensor_dict_for_holdouts, TensorKey +from openfl.utilities import TensorKey from openfl.protocols import utils import openfl.native as fx import torch @@ -214,6 +214,28 @@ def compute_times_per_collaborator(collaborator_names, times[col] = time return times +def split_tensor_dict_into_floats_and_non_floats(tensor_dict): + """ + Split the tensor dictionary into float and non-floating point values. + + Splits a tensor dictionary into float and non-float values. + + Args: + tensor_dict: A dictionary of tensors + + Returns: + Two dictionaries: the first contains all of the floating point tensors + and the second contains all of the non-floating point tensors + + """ + float_dict = {} + non_float_dict = {} + for k, v in tensor_dict.items(): + if np.issubdtype(v.dtype, np.floating): + float_dict[k] = v + else: + non_float_dict[k] = v + return float_dict, non_float_dict def get_metric(metric, fl_round, tensor_db): metric_name = metric @@ -264,6 +286,7 @@ def run_challenge_experiment(aggregation_function, # Update the plan if necessary plan = fx.update_plan(overrides) + print("****Debugging: plan is", plan) if not include_validation_with_hausdorff: plan.config['task_runner']['settings']['fets_config_dict']['metrics'] = ['dice','dice_per_label'] @@ -274,6 +297,12 @@ def run_challenge_experiment(aggregation_function, for col in collaborator_names: plan.cols_data_paths[col] = col + # Update the plan's data loader template for each collaborator + correct_template = "openfl.federated.data.loader_gandlf" + + # Modify the plan's data loader settings if needed + plan.config['data_loader'][col] = correct_template + # get the data loaders for each collaborator collaborator_data_loaders = {col: copy(plan).get_data_loader(col) for col in collaborator_names} diff --git a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml index ca4476c..14d8426 100644 --- a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml +++ b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml @@ -21,7 +21,7 @@ collaborator : data_loader : defaults : plan/defaults/data_loader.yaml - template : openfl.federated.data.loader_fets_challenge.FeTSChallengeDataLoaderWrapper + template : openfl.federated.data.loader_gandlf.GaNDLFDataLoaderWrapper settings : feature_shape : [32, 32, 32] diff --git a/Task_1/setup.py b/Task_1/setup.py index 1ff561d..6f2c352 100644 --- a/Task_1/setup.py +++ b/Task_1/setup.py @@ -28,11 +28,11 @@ ], include_package_data=True, install_requires=[ - 'openfl @ git+https://github.com/intel/openfl.git@f4b28d710e2be31cdfa7487fdb4e8cb3a1387a5f', - 'GANDLF @ git+https://github.com/CBICA/GaNDLF.git@e4d0d4bfdf4076130817001a98dfb90189956278', + 'openfl @ git+https://github.com/intel/openfl.git@v1.5.1', + 'GANDLF @ git+https://github.com/CBICA/GaNDLF.git@0.0.20', 'fets @ git+https://github.com/FETS-AI/Algorithms.git@fets_challenge', ], - python_requires='>=3.6, <3.9', + python_requires='>=3.9', classifiers=[ 'Environment :: Console', # How mature is this project? Common values are @@ -46,9 +46,6 @@ 'License :: OSI Approved :: FETS UI License', # Specify the Python versions you support here. In particular, ensure # that you indicate whether you support Python 2, Python 3 or both. - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3' ] ) From 9ed4f2cfa352ae86bc3726c2d5b3fcb42c0b251e Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Sun, 8 Sep 2024 23:01:09 -0400 Subject: [PATCH 02/22] kevin changes --- Task_1/fets_challenge/experiment.py | 8 ++++---- .../fets_challenge_workspace/plan/plan.yaml | 2 +- .../fets_challenge_workspace/src/fets_challenge_model.py | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Task_1/fets_challenge/experiment.py b/Task_1/fets_challenge/experiment.py index acf670b..96f5343 100644 --- a/Task_1/fets_challenge/experiment.py +++ b/Task_1/fets_challenge/experiment.py @@ -297,11 +297,11 @@ def run_challenge_experiment(aggregation_function, for col in collaborator_names: plan.cols_data_paths[col] = col - # Update the plan's data loader template for each collaborator - correct_template = "openfl.federated.data.loader_gandlf" + # # Update the plan's data loader template for each collaborator + # correct_template = "openfl.federated.data.loader_gandlf" - # Modify the plan's data loader settings if needed - plan.config['data_loader'][col] = correct_template + # # Modify the plan's data loader settings if needed + # plan.config['data_loader'][col] = correct_template # get the data loaders for each collaborator collaborator_data_loaders = {col: copy(plan).get_data_loader(col) for col in collaborator_names} diff --git a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml index 14d8426..91fb853 100644 --- a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml +++ b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml @@ -31,7 +31,7 @@ task_runner : train_csv : seg_test_train.csv val_csv : seg_test_val.csv device : cpu - fets_config_dict : + gandlf_config : batch_size: 1 clip_grad: null clip_mode: null diff --git a/Task_1/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py b/Task_1/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py index 3794be6..66a0c82 100644 --- a/Task_1/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py +++ b/Task_1/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py @@ -8,10 +8,10 @@ import numpy as np import torch as pt -from openfl.utilities import split_tensor_dict_for_holdouts +from openfl.utilities.split import split_tensor_dict_for_holdouts from openfl.utilities import TensorKey -from openfl.federated.task.runner_fets_challenge import * +from openfl.federated.task.runner_gandlf import * from GANDLF.compute.generic import create_pytorch_objects from GANDLF.compute.training_loop import train_network @@ -19,7 +19,7 @@ from . import TRAINING_HPARAMS -class FeTSChallengeModel(FeTSChallengeTaskRunner): +class FeTSChallengeModel(GaNDLFTaskRunner): """FeTSChallenge Model class for Federated Learning.""" def validate(self, col_name, round_num, input_tensor_dict, From 3dd8bbc265b7f16d2e7a505ddce64c039a3d266e Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Wed, 11 Sep 2024 14:28:42 -0400 Subject: [PATCH 03/22] GaNDLF pinned to 0.0.17 --- Task_1/README.md | 2 +- .../custom_aggregation_wrapper.py | 2 +- Task_1/build/lib/fets_challenge/experiment.py | 36 ++++++- .../fets_challenge_workspace/plan/plan.yaml | 12 +-- .../src/fets_challenge_model.py | 6 +- Task_1/cert/ca/root-ca.crt | 50 ++++----- Task_1/cert/ca/root-ca/private/root-ca.key | 74 ++++++------- Task_1/cert/ca/signing-ca.crt | 50 ++++----- Task_1/cert/ca/signing-ca.csr | 36 +++---- .../cert/ca/signing-ca/private/signing-ca.key | 74 ++++++------- Task_1/cert/cert_chain.crt | 100 +++++++++--------- Task_1/cert/client/col_one.crt | 42 ++++---- Task_1/cert/client/col_one.key | 74 ++++++------- Task_1/cert/client/col_two.crt | 46 ++++---- Task_1/cert/client/col_two.key | 74 ++++++------- Task_1/cert/col_one.csr | 36 +++---- Task_1/cert/col_two.csr | 36 +++---- .../server/agg_in-ota-232347.ads.iu.edu.crt | 48 ++++----- .../server/agg_in-ota-232347.ads.iu.edu.csr | 36 +++---- .../server/agg_in-ota-232347.ads.iu.edu.key | 74 ++++++------- Task_1/fets_challenge.egg-info/PKG-INFO | 4 +- Task_1/fets_challenge.egg-info/SOURCES.txt | 1 + Task_1/fets_challenge.egg-info/requires.txt | 2 +- Task_1/fets_challenge/experiment.py | 5 +- .../fets_challenge_workspace/plan/plan.yaml | 8 +- .../smaller_split.csv | 7 ++ Task_1/setup.py | 2 +- 27 files changed, 488 insertions(+), 449 deletions(-) create mode 100644 Task_1/openfl-workspace/fets_challenge_workspace/smaller_split.csv diff --git a/Task_1/README.md b/Task_1/README.md index f2c893b..2779f4a 100644 --- a/Task_1/README.md +++ b/Task_1/README.md @@ -29,7 +29,7 @@ Please ask any additional questions in our discussion pages on our github site a 6. ```pip install --upgrade pip``` 7. Install Pytorch (2.3.1) for your system: ```pip install torch==2.3.1 torchvision==0.18.1``` -*Note all previous versions of pytorch can be found in [these instructions]([https://pytorch.org/get-started/locally/](https://pytorch.org/get-started/previous-versions/)) +*Note all previous versions of pytorch can be found in these instructions:[https://pytorch.org/get-started/previous-versions/](https://pytorch.org/get-started/previous-versions/) 8. Set the environment variable `SKLEARN_ALLOW_DEPRECATED_SKLEARN_PACKAGE_INSTALL=True` (to avoid sklearn deprecation error) 9. ```pip install .``` > * _Note: if you run into ```ERROR: Failed building wheel for SimpleITK```, try running ```pip install SimpleITK --only-binary :all:``` then rerunning ```pip install .```_ diff --git a/Task_1/build/lib/fets_challenge/custom_aggregation_wrapper.py b/Task_1/build/lib/fets_challenge/custom_aggregation_wrapper.py index ae7abc4..63472a6 100644 --- a/Task_1/build/lib/fets_challenge/custom_aggregation_wrapper.py +++ b/Task_1/build/lib/fets_challenge/custom_aggregation_wrapper.py @@ -1,4 +1,4 @@ -from openfl.component.aggregation_functions.experimental import PrivilegedAggregationFunction +from openfl.interface.aggregation_functions.experimental import PrivilegedAggregationFunction # extends the openfl agg func interface to include challenge-relevant information diff --git a/Task_1/build/lib/fets_challenge/experiment.py b/Task_1/build/lib/fets_challenge/experiment.py index f561e66..a55bda5 100644 --- a/Task_1/build/lib/fets_challenge/experiment.py +++ b/Task_1/build/lib/fets_challenge/experiment.py @@ -13,7 +13,7 @@ import numpy as np import pandas as pd -from openfl.utilities import split_tensor_dict_for_holdouts, TensorKey +from openfl.utilities import TensorKey from openfl.protocols import utils import openfl.native as fx import torch @@ -214,6 +214,28 @@ def compute_times_per_collaborator(collaborator_names, times[col] = time return times +def split_tensor_dict_into_floats_and_non_floats(tensor_dict): + """ + Split the tensor dictionary into float and non-floating point values. + + Splits a tensor dictionary into float and non-float values. + + Args: + tensor_dict: A dictionary of tensors + + Returns: + Two dictionaries: the first contains all of the floating point tensors + and the second contains all of the non-floating point tensors + + """ + float_dict = {} + non_float_dict = {} + for k, v in tensor_dict.items(): + if np.issubdtype(v.dtype, np.floating): + float_dict[k] = v + else: + non_float_dict[k] = v + return float_dict, non_float_dict def get_metric(metric, fl_round, tensor_db): metric_name = metric @@ -264,6 +286,7 @@ def run_challenge_experiment(aggregation_function, # Update the plan if necessary plan = fx.update_plan(overrides) + print("****Debugging: plan is", plan) if not include_validation_with_hausdorff: plan.config['task_runner']['settings']['fets_config_dict']['metrics'] = ['dice','dice_per_label'] @@ -274,6 +297,12 @@ def run_challenge_experiment(aggregation_function, for col in collaborator_names: plan.cols_data_paths[col] = col + # # Update the plan's data loader template for each collaborator + # correct_template = "openfl.federated.data.loader_gandlf" + + # # Modify the plan's data loader settings if needed + # plan.config['data_loader'][col] = correct_template + # get the data loaders for each collaborator collaborator_data_loaders = {col: copy(plan).get_data_loader(col) for col in collaborator_names} @@ -281,8 +310,9 @@ def run_challenge_experiment(aggregation_function, # get the task runner, passing the first data loader for col in collaborator_data_loaders: #Insert logic to serialize train / val CSVs here - transformed_csv_dict[col]['train'].to_csv(os.path.join(work, 'seg_test_train.csv')) - transformed_csv_dict[col]['val'].to_csv(os.path.join(work, 'seg_test_val.csv')) + os.makedirs(os.path.join(work, col), exist_ok=True) + transformed_csv_dict[col]['train'].to_csv(os.path.join(work, col, 'train.csv')) + transformed_csv_dict[col]['val'].to_csv(os.path.join(work, col, 'val.csv')) task_runner = copy(plan).get_task_runner(collaborator_data_loaders[col]) if use_pretrained_model: diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml index ca4476c..928d318 100644 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml @@ -21,7 +21,7 @@ collaborator : data_loader : defaults : plan/defaults/data_loader.yaml - template : openfl.federated.data.loader_fets_challenge.FeTSChallengeDataLoaderWrapper + template : openfl.federated.data.loader_gandlf.GaNDLFDataLoaderWrapper settings : feature_shape : [32, 32, 32] @@ -31,14 +31,14 @@ task_runner : train_csv : seg_test_train.csv val_csv : seg_test_val.csv device : cpu - fets_config_dict : + gandlf_config : batch_size: 1 - clip_grad: null - clip_mode: null + clip_grad: None + clip_mode: None data_augmentation: {} data_postprocessing: {} data_preprocessing: - normalize: null + normalize: None enable_padding: false in_memory: false inference_mechanism : @@ -63,7 +63,7 @@ task_runner : - 4 dimension: 3 final_layer: softmax - ignore_label_validation: null + ignore_label_validation: None norm_type: instance nested_training: testing: 1 diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py index 3794be6..66a0c82 100644 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py @@ -8,10 +8,10 @@ import numpy as np import torch as pt -from openfl.utilities import split_tensor_dict_for_holdouts +from openfl.utilities.split import split_tensor_dict_for_holdouts from openfl.utilities import TensorKey -from openfl.federated.task.runner_fets_challenge import * +from openfl.federated.task.runner_gandlf import * from GANDLF.compute.generic import create_pytorch_objects from GANDLF.compute.training_loop import train_network @@ -19,7 +19,7 @@ from . import TRAINING_HPARAMS -class FeTSChallengeModel(FeTSChallengeTaskRunner): +class FeTSChallengeModel(GaNDLFTaskRunner): """FeTSChallenge Model class for Federated Learning.""" def validate(self, col_name, round_num, input_tensor_dict, diff --git a/Task_1/cert/ca/root-ca.crt b/Task_1/cert/ca/root-ca.crt index 8b73f89..00262b2 100644 --- a/Task_1/cert/ca/root-ca.crt +++ b/Task_1/cert/ca/root-ca.crt @@ -1,27 +1,27 @@ -----BEGIN CERTIFICATE----- -MIIEhjCCAu6gAwIBAgIRAPn4axsy5E/rlwC4vGSLfi4wDQYJKoZIhvcNAQEMBQAw -dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX -MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV -BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDgyODE2NTM1NloXDTI1MDgyODE2 -NTM1NlowdDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp -bXBsZTEXMBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJ -bmMxFzAVBgNVBAsMDlNpbXBsZSBSb290IENBMIIBojANBgkqhkiG9w0BAQEFAAOC -AY8AMIIBigKCAYEAoK3/EIg/z0HdAax3cv9zgAu4OULrznwIB4qVXTMI9/Q8nZMK -raPpQ2HzEatKTzv+I+HdcsBrkROics2wlrNLWq6ESnT1/ZAstiNeXctn9Hivp7b8 -vdJ2baT1704L7jNfUJOaOv94Z2UlnSBimqsyWiRZhze2gENH0ceuqKX+jnH9BDt3 -h5VpVXmxr/42qzpae+48EbVcEofKa372JPpX52BizJJeOEFRl3ZrlR7umNEIjlCp -V+T4CERfSvDMrsPQTYV7UjLajgkC8oIhZ+VVIAmzV32TPRpFQkdX1aK4NYkKguvy -K0+aeFI/yUyoF93D0ZHQv5oJd0fAMaacg34XEoMEponOA0aA+/P5qT0MipCntNkk -lNiM3yQG+kr4a/wTKk/N+Rtmu2XHTeNM2CqpKuEFnolAQ4BWvmRePMLlKHQEqt4E -uk1TijoHiK1GXIkZqRxpWIEggXSGISTnwsOJ77IwUxxeBcuWED+91TaRZ4gWGYbU -0mBbhpfo8lvxFKfBAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN -AQEMBQADggGBADmCfBppGwGCaJLnVhLbh3eWV7X62EbWoMKWf/robiwzHiU5wU3n -JN7VJitRfH/jjYDbhbZlT8+l/q9ZZiLvuLgENypXN40GrGGA2LhZkBtXYHcf0R3W -j18INYxbB7NH7HhwOq2JO/oS2p1YqJOKzf4RtnQUUrAgCSiVXsQgmia2zO5fbEqH -Zm5l0/PFCqw+Mf2ct8AK9SIXIa9sbW9LS3j+B5RIXdRDi5mHXTa1jZbdTiRAlcJa -mBsc88LYHuosI7xHmC1N9NViy4oK0RMPt8d82pOdmgDcpLl9Sjdr5ETkRoJvfcLt -iiMjd0cHJ0EeTLUHIGT5pDw/kNVront4AEOybRNwcVq0Kg5lMfYSGzA3b4oCNIuB -jo0WuR+BXuJu3NpU8ctENzfgzrW4h3d24tkYKnvLFGUajMsd3RVYUyYEROGBDaTR -xNf0JQR3S2AR4SgfNZwlPEwccNhiWKInPwEYvkzPVPysf9wbY1voQy0WWmS6GsE5 -/pCkjmGslbPs+A== +MIIEhTCCAu2gAwIBAgIQLrN44bz3TGOWMR8fl02jJTANBgkqhkiG9w0BAQwFADB0 +MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRcw +FQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEXMBUG +A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTExMTgyNjUwWhcNMjUwOTExMTgy +NjUwWjB0MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt +cGxlMRcwFQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIElu +YzEXMBUGA1UECwwOU2ltcGxlIFJvb3QgQ0EwggGiMA0GCSqGSIb3DQEBAQUAA4IB +jwAwggGKAoIBgQCgtJ7lpcdeil/UP5tTDu9vFWVjRomsHqpOhFqt2WJwxaLvxX+f +Fp3hfQbuM6U8PO90LEig7VL0xl9U4N0FvtylSK8EM/zIPnUdRKwj+EYFDos1+RLl +5gTbD0nuyYobjbxLPLflaOlu+dI2CxVq7wcQBcVD6t+GdTROF+WFhaRSbw8s6gtP +4WrjetikjRWz71tKfLiXyNZ9RC/hojF9C05GCBDUB94TiI9BeteXnxR6aIzbgWsO +DfKieFIh2MYwDezKMaiM0T6rVqN8Sux4ZY0jjra3yzWGElNQOHCei9L++0VeTVtH +rmVWJk+mC4/g4WkyEHzxDXr+xJZYLwrOoF9qLkWoH9IEpJ3j6kX+KMHfFDa/0g0g +tGMg2J06AjwXijPVoIErzQYtzABGQJeeVCup9xDnSOMirGHwMxq1Nsj0TwX38C5x +eFy5pXyib43xcSXcQoP/cQslubiiAvF6MJEU/ZHV3U4/DgidINIvi9uYhDIifUcT +WI/3JBiaJwz5HL0CAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B +AQwFAAOCAYEAYMYQdCHtdTTge0yE4L0fPCCAWw9DWDxciJ4mCjHsLaISNa2O2K71 +a6sY5yyw8IUat/ZjqCjlfFAoqVktQ33xeotvqminfmS4oh4uwaaLmd0kHToH8yC9 +Io7XXIJRsWBMgMmtadIQZrHWlqwy01B96Utm0LOoy9V3Scd6XK2TsNtprBt8Ub1v +PUxRLlJSWraS7RameNTCATKUT2hbKwrk+/1sI3nx3UjM6aY35qVhO+4rZbE4I6bY +0heQEzK8EJi4HpOzsx8J+xXzGx23WcMaXDfV56mxR3mfo8vF1K4Biu6DyN4f5RdH +ajYIiybKXw9YM4LkeosAwEVie+bN1a67Tfc27QEkzJ0Dth28x2f1/EbDiLqvpjUD +x6B3y85LJHL0DyJT2uw53eF8Ic0FSZs/SWH7NnYbKj8OAWBT3bWeE6M0zsqpwOyT +vMRbDDYEUqrEr3Jc7/kUzxutoEU8uD0gOGVEM/F4SB37E63ArXw0my2bzAFaLmYC +LxgmB9qLOqiX -----END CERTIFICATE----- diff --git a/Task_1/cert/ca/root-ca/private/root-ca.key b/Task_1/cert/ca/root-ca/private/root-ca.key index efe8953..c3f20b3 100644 --- a/Task_1/cert/ca/root-ca/private/root-ca.key +++ b/Task_1/cert/ca/root-ca/private/root-ca.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/ca/signing-ca.crt b/Task_1/cert/ca/signing-ca.crt index 96f4ff2..5d2c7f2 100644 --- a/Task_1/cert/ca/signing-ca.crt +++ b/Task_1/cert/ca/signing-ca.crt @@ -1,27 +1,27 @@ -----BEGIN CERTIFICATE----- -MIIEjDCCAvSgAwIBAgIRAKU0fKB6P0Snr1EqK54jl9AwDQYJKoZIhvcNAQEMBQAw -dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX -MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV -BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDgyODE2NTM1N1oXDTI1MDgyODE2 -NTM1N1owejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp -bXBsZTEaMBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBs -ZSBJbmMxGjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMIIBojANBgkqhkiG9w0B -AQEFAAOCAY8AMIIBigKCAYEAvCfToD7c7GdhpaVQf9IVyNyxA6hAJ22aSxFZ+4Oq -0Jj5gJJyMXMdyE84+26c/LB3EHvVD+y5R2uKjXDPId3A4bpSsAWj2Wv4qxgIhi57 -RnqTto6yMLmfZU1+RDAmtWf5PCtL9ptta8kPr7bKOYlANXexakpDvDSXEszA7XnY -QtcGt/CL8nUjCbcd9gigjPFewBQ3OKUgaBUKTtWbbkoJwHhux8IlcfJjlUP9galG -6PNdpXnyAuih+fx3HuQFz3gMBK4sOxFE+sSo+8nDkxqkN0HHpcwlExt1jLRvuOhE -gdzPkrNIGNFgJAKZVnd4EBeiQrxpEYLQ8QTxsw9DRcYoQMK7z6AErGeVYmvbmJd5 -cv0c9rSPvW+gzgoJP1+LW8aO0w4lErRdT2jwpbo7/+5nyPgHKhlYORzu5SrjSD+2 -Uyle2qwTgoP5rIcIrUf301OAwVXWTYMck0yn+q2J/0ApuTqPKcBVBIRVzMCWhQ/V -/01sm3ar8tH9cNzsaGbSyZIdAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJ -KoZIhvcNAQEMBQADggGBAC1QS5H3qSnsTIzUDV6xcQm78OwUmNiGrGoCCmC+g1JE -YsbWpS2BLCXV71QcTgaf6CCZU/zo8KbMpMhjZf1IEHUMhWkEUDpfM8lpO8qV7kOD -RKxYWo/i+EpAw41iAdtShj05ktosBheZ6FMY4RtFU/lb1yjGHAwEpSFJ1oVjJVlh -7NMMRnAXdFnNMr4DKkShL4UcQNcE/DL+IR9KzwH06MvD1D4HUVquKjmsPbiIA0LC -lb+LmsJJhk4w/6bys1gbb0ps0W0vr4uVXmi6X5kIyO5/N3og3WWELIdKf0UukTh1 -cGlsP7iMH6Z+AKEuN7ksLfCIFI1vLG72RQUEho5MYf78jMGfVYJo/7qbCLqiT9HO -VA9kmWpLoYQpbQKQOj/t+ic+maxpl4WIvPyqznQhM2vyA6cJb9mNAejBWSR/t/hC -v6xZMe2KM7CUm7+aYDycTyCaDqUinENrdUrD8OE8JiDvlnfcFMulsh+K4wXka9zR -ayQOvGnGNV6BmBcCJFfe6g== +MIIEizCCAvOgAwIBAgIQWISXxdEmSAmgCatUq8iEczANBgkqhkiG9w0BAQwFADB0 +MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRcw +FQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEXMBUG +A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTExMTgyNjUwWhcNMjUwOTExMTgy +NjUwWjB6MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt +cGxlMRowGAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxl +IEluYzEaMBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwggGiMA0GCSqGSIb3DQEB +AQUAA4IBjwAwggGKAoIBgQCbmWTUl2Pg1rdfPj2/vbURDLQF0jiDgEveVlgZ/t3M +CkdwQH32yQQIRwaNFbPxDY6L+F2pkaFjh4pF1gttr7FWl9MBobnSkNsvC+2X8UON +22bmbbK6S5hxxCX/el0goWncifVS6H9rqeaFHvSKBSywYN1JrriTwXKOSVqVLwfW +eYEaTsLWxFK1fYrMH6/v3n3Pv81VaUMePKdDqm/6cwS/W53rGbJIKJqvz+yDtAsQ +2+QlPq1Ndgpaasyxm7LGHfS2+8ysVwhE5oEbAgKyADMTFXQKgg05P+lUxEzMVSvW +rbRad3wgJZ81fXZCGsfAcUaWVrmJRPoAMAWhFA+5X8p4StU/RNWsMjD/Mi7Rp5iZ +1wfdiFG5QpWTegkAIx8rtAUL5/Grhyk3yLcy9jhh1cyL2XjbZPpeqqtzdz1VFbbD +cTkpbyRtXACrYnFsDF4wnUj16Dgcn7ULSMt0/Sd/C76LcTw3mJ6EJOwHrADNvheS +wgqHpg4fX4+7VCv7IK561VMCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQwFAAOCAYEAXDl3Ae85p2CCqugLw088WFlmYUW4MWoZgnuEzTyRYwwu +7A+04N5Z2pRP4o1M5L67r8JR/tF6ljwJYkee25bW922RIDzPElUrk+O7hm4+rsz6 +SpncV5Sgd36Fp3b6JDdkRA7On61x1t9rtfPD02z1LCdUgWhjbJtTlUj0h4Uc4RDk +Mcv4hwODnVaRVrkRalYX8rPR/QeVacJedLX0YUktCuoDuAqpvYmaXWFDSL7HQ46m +2/e/rbGiU0aYeRwoqhfx/tMy0+mm/8hSwHfWPqn37HFspeJAr+5Ikd4q0yagayg2 +EyjTFQMQaPka5JtaCuGppAJa9tBLLSm/GyuuZIBsX1S9LH6z2HP+Y3rHYck7n872 +na41IDd7z4Z/iQcb9Gj4z96gGLdkYihZLWdTZBwsSerR1/bwnmmTXfJ9Cb9zftfD +LcJmD8qw+y3ZoQO4Zls/TehMD67dsGYuOezHxq/nKVCoCLsChnDHEmrg2s7P67ab +574/n6oO4gdP7OtirQGm -----END CERTIFICATE----- diff --git a/Task_1/cert/ca/signing-ca.csr b/Task_1/cert/ca/signing-ca.csr index 854d996..c3102e5 100644 --- a/Task_1/cert/ca/signing-ca.csr +++ b/Task_1/cert/ca/signing-ca.csr @@ -2,22 +2,22 @@ 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 -----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/ca/signing-ca/private/signing-ca.key b/Task_1/cert/ca/signing-ca/private/signing-ca.key index 05485b0..f407126 100644 --- a/Task_1/cert/ca/signing-ca/private/signing-ca.key +++ b/Task_1/cert/ca/signing-ca/private/signing-ca.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/cert_chain.crt b/Task_1/cert/cert_chain.crt index a97e6c5..ad4ed03 100644 --- a/Task_1/cert/cert_chain.crt +++ b/Task_1/cert/cert_chain.crt @@ -1,54 +1,54 @@ -----BEGIN CERTIFICATE----- -MIIEhjCCAu6gAwIBAgIRAPn4axsy5E/rlwC4vGSLfi4wDQYJKoZIhvcNAQEMBQAw -dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX -MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV -BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDgyODE2NTM1NloXDTI1MDgyODE2 -NTM1NlowdDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp -bXBsZTEXMBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJ -bmMxFzAVBgNVBAsMDlNpbXBsZSBSb290IENBMIIBojANBgkqhkiG9w0BAQEFAAOC -AY8AMIIBigKCAYEAoK3/EIg/z0HdAax3cv9zgAu4OULrznwIB4qVXTMI9/Q8nZMK -raPpQ2HzEatKTzv+I+HdcsBrkROics2wlrNLWq6ESnT1/ZAstiNeXctn9Hivp7b8 -vdJ2baT1704L7jNfUJOaOv94Z2UlnSBimqsyWiRZhze2gENH0ceuqKX+jnH9BDt3 -h5VpVXmxr/42qzpae+48EbVcEofKa372JPpX52BizJJeOEFRl3ZrlR7umNEIjlCp -V+T4CERfSvDMrsPQTYV7UjLajgkC8oIhZ+VVIAmzV32TPRpFQkdX1aK4NYkKguvy -K0+aeFI/yUyoF93D0ZHQv5oJd0fAMaacg34XEoMEponOA0aA+/P5qT0MipCntNkk -lNiM3yQG+kr4a/wTKk/N+Rtmu2XHTeNM2CqpKuEFnolAQ4BWvmRePMLlKHQEqt4E -uk1TijoHiK1GXIkZqRxpWIEggXSGISTnwsOJ77IwUxxeBcuWED+91TaRZ4gWGYbU -0mBbhpfo8lvxFKfBAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN -AQEMBQADggGBADmCfBppGwGCaJLnVhLbh3eWV7X62EbWoMKWf/robiwzHiU5wU3n -JN7VJitRfH/jjYDbhbZlT8+l/q9ZZiLvuLgENypXN40GrGGA2LhZkBtXYHcf0R3W -j18INYxbB7NH7HhwOq2JO/oS2p1YqJOKzf4RtnQUUrAgCSiVXsQgmia2zO5fbEqH -Zm5l0/PFCqw+Mf2ct8AK9SIXIa9sbW9LS3j+B5RIXdRDi5mHXTa1jZbdTiRAlcJa -mBsc88LYHuosI7xHmC1N9NViy4oK0RMPt8d82pOdmgDcpLl9Sjdr5ETkRoJvfcLt -iiMjd0cHJ0EeTLUHIGT5pDw/kNVront4AEOybRNwcVq0Kg5lMfYSGzA3b4oCNIuB -jo0WuR+BXuJu3NpU8ctENzfgzrW4h3d24tkYKnvLFGUajMsd3RVYUyYEROGBDaTR -xNf0JQR3S2AR4SgfNZwlPEwccNhiWKInPwEYvkzPVPysf9wbY1voQy0WWmS6GsE5 -/pCkjmGslbPs+A== +MIIEhTCCAu2gAwIBAgIQLrN44bz3TGOWMR8fl02jJTANBgkqhkiG9w0BAQwFADB0 +MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRcw +FQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEXMBUG +A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTExMTgyNjUwWhcNMjUwOTExMTgy +NjUwWjB0MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt +cGxlMRcwFQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIElu +YzEXMBUGA1UECwwOU2ltcGxlIFJvb3QgQ0EwggGiMA0GCSqGSIb3DQEBAQUAA4IB +jwAwggGKAoIBgQCgtJ7lpcdeil/UP5tTDu9vFWVjRomsHqpOhFqt2WJwxaLvxX+f +Fp3hfQbuM6U8PO90LEig7VL0xl9U4N0FvtylSK8EM/zIPnUdRKwj+EYFDos1+RLl +5gTbD0nuyYobjbxLPLflaOlu+dI2CxVq7wcQBcVD6t+GdTROF+WFhaRSbw8s6gtP +4WrjetikjRWz71tKfLiXyNZ9RC/hojF9C05GCBDUB94TiI9BeteXnxR6aIzbgWsO +DfKieFIh2MYwDezKMaiM0T6rVqN8Sux4ZY0jjra3yzWGElNQOHCei9L++0VeTVtH +rmVWJk+mC4/g4WkyEHzxDXr+xJZYLwrOoF9qLkWoH9IEpJ3j6kX+KMHfFDa/0g0g +tGMg2J06AjwXijPVoIErzQYtzABGQJeeVCup9xDnSOMirGHwMxq1Nsj0TwX38C5x +eFy5pXyib43xcSXcQoP/cQslubiiAvF6MJEU/ZHV3U4/DgidINIvi9uYhDIifUcT +WI/3JBiaJwz5HL0CAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B +AQwFAAOCAYEAYMYQdCHtdTTge0yE4L0fPCCAWw9DWDxciJ4mCjHsLaISNa2O2K71 +a6sY5yyw8IUat/ZjqCjlfFAoqVktQ33xeotvqminfmS4oh4uwaaLmd0kHToH8yC9 +Io7XXIJRsWBMgMmtadIQZrHWlqwy01B96Utm0LOoy9V3Scd6XK2TsNtprBt8Ub1v +PUxRLlJSWraS7RameNTCATKUT2hbKwrk+/1sI3nx3UjM6aY35qVhO+4rZbE4I6bY +0heQEzK8EJi4HpOzsx8J+xXzGx23WcMaXDfV56mxR3mfo8vF1K4Biu6DyN4f5RdH +ajYIiybKXw9YM4LkeosAwEVie+bN1a67Tfc27QEkzJ0Dth28x2f1/EbDiLqvpjUD +x6B3y85LJHL0DyJT2uw53eF8Ic0FSZs/SWH7NnYbKj8OAWBT3bWeE6M0zsqpwOyT +vMRbDDYEUqrEr3Jc7/kUzxutoEU8uD0gOGVEM/F4SB37E63ArXw0my2bzAFaLmYC +LxgmB9qLOqiX -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- -MIIEjDCCAvSgAwIBAgIRAKU0fKB6P0Snr1EqK54jl9AwDQYJKoZIhvcNAQEMBQAw -dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX -MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV -BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDgyODE2NTM1N1oXDTI1MDgyODE2 -NTM1N1owejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp -bXBsZTEaMBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBs -ZSBJbmMxGjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMIIBojANBgkqhkiG9w0B -AQEFAAOCAY8AMIIBigKCAYEAvCfToD7c7GdhpaVQf9IVyNyxA6hAJ22aSxFZ+4Oq -0Jj5gJJyMXMdyE84+26c/LB3EHvVD+y5R2uKjXDPId3A4bpSsAWj2Wv4qxgIhi57 -RnqTto6yMLmfZU1+RDAmtWf5PCtL9ptta8kPr7bKOYlANXexakpDvDSXEszA7XnY -QtcGt/CL8nUjCbcd9gigjPFewBQ3OKUgaBUKTtWbbkoJwHhux8IlcfJjlUP9galG -6PNdpXnyAuih+fx3HuQFz3gMBK4sOxFE+sSo+8nDkxqkN0HHpcwlExt1jLRvuOhE -gdzPkrNIGNFgJAKZVnd4EBeiQrxpEYLQ8QTxsw9DRcYoQMK7z6AErGeVYmvbmJd5 -cv0c9rSPvW+gzgoJP1+LW8aO0w4lErRdT2jwpbo7/+5nyPgHKhlYORzu5SrjSD+2 -Uyle2qwTgoP5rIcIrUf301OAwVXWTYMck0yn+q2J/0ApuTqPKcBVBIRVzMCWhQ/V -/01sm3ar8tH9cNzsaGbSyZIdAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJ -KoZIhvcNAQEMBQADggGBAC1QS5H3qSnsTIzUDV6xcQm78OwUmNiGrGoCCmC+g1JE -YsbWpS2BLCXV71QcTgaf6CCZU/zo8KbMpMhjZf1IEHUMhWkEUDpfM8lpO8qV7kOD -RKxYWo/i+EpAw41iAdtShj05ktosBheZ6FMY4RtFU/lb1yjGHAwEpSFJ1oVjJVlh -7NMMRnAXdFnNMr4DKkShL4UcQNcE/DL+IR9KzwH06MvD1D4HUVquKjmsPbiIA0LC -lb+LmsJJhk4w/6bys1gbb0ps0W0vr4uVXmi6X5kIyO5/N3og3WWELIdKf0UukTh1 -cGlsP7iMH6Z+AKEuN7ksLfCIFI1vLG72RQUEho5MYf78jMGfVYJo/7qbCLqiT9HO -VA9kmWpLoYQpbQKQOj/t+ic+maxpl4WIvPyqznQhM2vyA6cJb9mNAejBWSR/t/hC -v6xZMe2KM7CUm7+aYDycTyCaDqUinENrdUrD8OE8JiDvlnfcFMulsh+K4wXka9zR -ayQOvGnGNV6BmBcCJFfe6g== +MIIEizCCAvOgAwIBAgIQWISXxdEmSAmgCatUq8iEczANBgkqhkiG9w0BAQwFADB0 +MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRcw +FQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEXMBUG +A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTExMTgyNjUwWhcNMjUwOTExMTgy +NjUwWjB6MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt +cGxlMRowGAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxl +IEluYzEaMBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwggGiMA0GCSqGSIb3DQEB +AQUAA4IBjwAwggGKAoIBgQCbmWTUl2Pg1rdfPj2/vbURDLQF0jiDgEveVlgZ/t3M +CkdwQH32yQQIRwaNFbPxDY6L+F2pkaFjh4pF1gttr7FWl9MBobnSkNsvC+2X8UON +22bmbbK6S5hxxCX/el0goWncifVS6H9rqeaFHvSKBSywYN1JrriTwXKOSVqVLwfW +eYEaTsLWxFK1fYrMH6/v3n3Pv81VaUMePKdDqm/6cwS/W53rGbJIKJqvz+yDtAsQ +2+QlPq1Ndgpaasyxm7LGHfS2+8ysVwhE5oEbAgKyADMTFXQKgg05P+lUxEzMVSvW +rbRad3wgJZ81fXZCGsfAcUaWVrmJRPoAMAWhFA+5X8p4StU/RNWsMjD/Mi7Rp5iZ +1wfdiFG5QpWTegkAIx8rtAUL5/Grhyk3yLcy9jhh1cyL2XjbZPpeqqtzdz1VFbbD +cTkpbyRtXACrYnFsDF4wnUj16Dgcn7ULSMt0/Sd/C76LcTw3mJ6EJOwHrADNvheS +wgqHpg4fX4+7VCv7IK561VMCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQwFAAOCAYEAXDl3Ae85p2CCqugLw088WFlmYUW4MWoZgnuEzTyRYwwu +7A+04N5Z2pRP4o1M5L67r8JR/tF6ljwJYkee25bW922RIDzPElUrk+O7hm4+rsz6 +SpncV5Sgd36Fp3b6JDdkRA7On61x1t9rtfPD02z1LCdUgWhjbJtTlUj0h4Uc4RDk +Mcv4hwODnVaRVrkRalYX8rPR/QeVacJedLX0YUktCuoDuAqpvYmaXWFDSL7HQ46m +2/e/rbGiU0aYeRwoqhfx/tMy0+mm/8hSwHfWPqn37HFspeJAr+5Ikd4q0yagayg2 +EyjTFQMQaPka5JtaCuGppAJa9tBLLSm/GyuuZIBsX1S9LH6z2HP+Y3rHYck7n872 +na41IDd7z4Z/iQcb9Gj4z96gGLdkYihZLWdTZBwsSerR1/bwnmmTXfJ9Cb9zftfD +LcJmD8qw+y3ZoQO4Zls/TehMD67dsGYuOezHxq/nKVCoCLsChnDHEmrg2s7P67ab +574/n6oO4gdP7OtirQGm -----END CERTIFICATE----- diff --git a/Task_1/cert/client/col_one.crt b/Task_1/cert/client/col_one.crt index 6f0ef5a..b809ce3 100644 --- a/Task_1/cert/client/col_one.crt +++ b/Task_1/cert/client/col_one.crt @@ -1,25 +1,25 @@ -----BEGIN CERTIFICATE----- -MIIEMzCCApugAwIBAgIRALGrJcWLsEZatOIM2L9gs4AwDQYJKoZIhvcNAQEMBQAw +MIIEMzCCApugAwIBAgIRAMw0FyEIY0jRiWZGwRKVwtIwDQYJKoZIhvcNAQEMBQAw ejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEa MBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMx -GjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMB4XDTI0MDgyODE2NTM1N1oXDTI1 -MDgyODE2NTM1N1owDjEMMAoGA1UEAwwDb25lMIIBojANBgkqhkiG9w0BAQEFAAOC -AY8AMIIBigKCAYEAnzsd/2TmHa9Npp8241olWWJClIgr4bODy9qA8leENCSEUdzK -KeGKjdhbVTblE5PdMExmknWBEM3G9Mp7bnd3XEpUDGUYj7Mu+7cVQRJBhRhpySs+ -XQb9jHuEntw6PcU1+SY+ZLH01S9OKFVOWDyhBOMxfOT65GNKVEgq5rFWZmHiKsqQ -uOPdKcqQ81Dp35ogeUdzY7dVSACGoomMa65C8lBV6ueKMxpDqXHyIp9w66B0HH55 -KMDXg0SMPAiA+RXEt2Lhr5PgX6iQ2Ea02f9mTow8elptdH4u3P5sqh54jCJrk2RS -lGsCIKa0PbSEQ3UOhvKFAvWUKjtEdD7QwM0D/zTYxkqjSIvclvd7C+oNxo0hUbaN -bm+Ox+mS5dn6cJOr97mJxWxLcDE2xcRHxCkgcPVzuKUE2uxbGk6L+Io5Zg4i+cMJ -aj86Xaub1NZgDxOLkq6HFgBFxPoE7h+PhBaSSP+WUi4FPRiNFaznSq0S4RjMM9q6 -JBLflTAuH0dFOPrlAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAwDgYDVR0RBAcwBYID -b25lMA0GCSqGSIb3DQEBDAUAA4IBgQAv3D59inLw8u9SqcC5+hjTe5RI3RRo9eNP -GP2scwAjo7mQxHmcak5mXhzbeNuMgAJ2/GpYMk8oZShcCUox/MICINBbNi+I70qJ -1XqkTisfBaLHz6W8X4GSriHbbPCn9czGyk8LMviiMv6qOz5SjMyXvjEe18ZP1/MG -uPKLpbTfqpBPHXJoj71e5bJ+XnTWUNAAtYyf+2vyQoI3Rj5KgtHE3Ylu0qwqQ2XW -6u5Rn35316Kd9klafqo6M94Nxe0BJzE5xUlCucfPFsOeHXxxgil3kVDhSideJ3Ii -UrR3/LBobfvj9+jsRg4bcbshJpv50jEAOSl2bK/BZmMwc4Qw6FoswizQ9UDN+SS0 -Qxr8hB0W9Z/Mkh6YbK6UdaxUkE3/it/6wNrF/Pf8Zq3Z7ZwPkQMgE018uUTY2dGU -kidzXNdhDrTVUdH7RcureKZetgsAqdeg8aOaWkCbbSigg1IgEJvLZXzrgnTFRELB -WYD8RBSB077MJqWFRbHK5mIC2rETWlA= +GjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMB4XDTI0MDkxMTE4MjY1MVoXDTI1 +MDkxMTE4MjY1MVowDjEMMAoGA1UEAwwDb25lMIIBojANBgkqhkiG9w0BAQEFAAOC +AY8AMIIBigKCAYEApuGur6nfZT+aabOJvV5gZfV0ceTLgCYbyh/m2pbmP4FOyEdp +lLEvWxKQ8K1nZXT2h4geXCwtsnLgPGIN+BQZzP9q/dXxhYqNxbUVBNfVKDehyfhk +B/QbwEwkyir+VF0mXj8OKd73rpymzzbiCJKjeEJlRLBapfL9jzkxmbJiJBkAw1aC +tGYALyMpGWWwYiqPBWwNoCTv02hK6CFRTWttTIKmdMAUa05c9Vam36LizhZ5Hkft +e0OtRb/cHL4Dq5zd6W2UQeoAoAwUnyz6F9kehd2n38lG7EUpKA6588KOtJXFCJKI +TkWFlmUihwDbnY2Y9sZFemn0kme88R225jxMW2Go8jCR98VsvL+qoghyMLog94iv +NyZEfASmCGxXiWIEkZj6bLkI2TIvFfEQfv0qu1sbg0IjZVeC9K7yOpIOUhiBq/VC +8ePSP9KkHee/VNSwU01P8Jb7S0o3DWhY0YbQI6HoDqJX8Zv/dI11Unip71UQUYXC +TIWaEFcu8g7hvlr7AgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAwDgYDVR0RBAcwBYID +b25lMA0GCSqGSIb3DQEBDAUAA4IBgQB9Z8xSOhZ7j2i4t1wT9oGTiR24dWQpCP3R +qNVVsLg/Tkm+heKkZKA9qLoE75H8SSCsbMmjW6pvVEoMe/aqeu5CjdapUS/NWE4l +WmKxKKefyIZc95kvh68VPJVQcq6gpZIcnjaFeRfzdmEnFsQhIsp8KjPA8axPyyow +OUIQ2MHIX+y2lUqA307+XTTbKLc+0ouLg4O+Cs8TqFhVD3bZ/2In6z7dA97v5Mpa +gfH4BOO0W7imd2IDvbD2UMpgNLc3KZUul0bxjRxAKWJStoDkeIJ7dUtp9ALD1cvt +6SpPwSDPXxLEBCWMZSCnUhMONUkwFGH4pY+6ikYG4h/kMtCrlIg/3WGIub5eza+2 +h0uatEtmm4F1xzVIJfXIM/u+MDNBpEsq0AC5Ob3qLvSYYhWwXVcp03pP7ODIta2U +al5b6Ch9EAauxVshm7wnAKlRwb1kCgbQ9TpcX+pOBZSvFSmDMANrkXXVr+EfiiPA +cxt9wVtpWIsjRuQfeMnDElFR+lUvzI4= -----END CERTIFICATE----- diff --git a/Task_1/cert/client/col_one.key b/Task_1/cert/client/col_one.key index 882c35b..48910b7 100644 --- a/Task_1/cert/client/col_one.key +++ b/Task_1/cert/client/col_one.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/client/col_two.crt b/Task_1/cert/client/col_two.crt index 7cc2101..730ec05 100644 --- a/Task_1/cert/client/col_two.crt +++ b/Task_1/cert/client/col_two.crt @@ -1,25 +1,25 @@ -----BEGIN CERTIFICATE----- -MIIEMjCCApqgAwIBAgIQGw4ZaujURJy7vyDSyTJsSzANBgkqhkiG9w0BAQwFADB6 -MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRow -GAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEa -MBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwHhcNMjQwODI4MTY1MzU4WhcNMjUw -ODI4MTY1MzU4WjAOMQwwCgYDVQQDDAN0d28wggGiMA0GCSqGSIb3DQEBAQUAA4IB -jwAwggGKAoIBgQCoY04uf4yoqYsFJSdNOS7JATcLlLi4yet16EbdYd9FVCjRFJk2 -fS/tVgDCkkUIilA/jc6SnRHmGrR12nQWTwHCkEb98nrp2T0gKlIfFaJOei+kz8V2 -1yKmni3SiLsTSaREECQ+BapfCG3Kl9Snugvq3XDjdyEyBrkXhVZfYl8raQNPr0hS -Huhm+B5zSCV1ugYZLOn5ki2vMaHMxwbC29jPe0fwBFmg7rGTd8a4od0KtQVqeWE7 -oV5Q6MW3CQLqRUFHHVm1AH45oVTGnAwWHzLsd+sIeqnkW2nd1t8mVhHSQxTi7qen -Efh+EsFBhM66F8d0LSsDecOL1joDXj7iXicc/AuJG8V22twABvKfj1t14GHwJzLS -gawbXBnv5huqShJ48zD0k6fPCE8mojY2ZqE3LbpxEkjzlNJ+5wgABEBJU2ATrEPQ -aeGvRlZiIg/WeG2+Lq6qYCdvUAGLalis/ISO/o+novgQSxNi/kgXmQqQYyXMrps1 -JNTgQvgdO6pykfsCAwEAAaMgMB4wDAYDVR0TAQH/BAIwADAOBgNVHREEBzAFggN0 -d28wDQYJKoZIhvcNAQEMBQADggGBAKty2FotDg6/6SroK9DuaO2mlLH3kZwyOf+e -nSRwzPnKUnBerRHFmtG239GQybxKOyDb8WXSZ7X5CHyl29IiQptpiVPCVpvJnpq5 -gpShS7uaT9psPwR2DR1h9jtne5DXwrVjzWfJNQ8hkcJKSzryzxvFWvbIGGxy3i8g -n/SxiNQB1oNUku/F3hDnBGdkMY+kH/O1ryE80LoeALB302kGoW4TVGV9kLjD6FFL -nEXxcs2jEFaaiLRsDdMYUSBwwt7SHq4wC7tlslfuPe9ZnJeEvo911QgrM3OnOH+w -ii/qiWqHLAoCEColOX099q+3Aww4MhHJYwYH9rxvNFqqhs3TFE3aFfKpgZlft9ZW -cOKlWQXap7vdK0wgfSxeTfdF9kpVyWFWDB397+DY4shqIkYNbFn7zEM+x/UUrQ/H -Zx3Wmcjz3UJXp3nRmjf3/Opj699i+mE7MdOyxnFewo20tR3rOU0UXwG/Mfzvl8Jj -lry9GRVyN54hTEtRpoK8yaKuAZKPLw== +MIIEMzCCApugAwIBAgIRAJu3qMb8yULrtxNZGLWZLx4wDQYJKoZIhvcNAQEMBQAw +ejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEa +MBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMx +GjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMB4XDTI0MDkxMTE4MjY1MVoXDTI1 +MDkxMTE4MjY1MVowDjEMMAoGA1UEAwwDdHdvMIIBojANBgkqhkiG9w0BAQEFAAOC +AY8AMIIBigKCAYEA3xZYYf0702FoEQ81aw+WdE64NWP0qWahkrveGHLQEB7f9jyd +BvvarlgQSd5LesZDlIV+OZp/otW9/UL1BRCocov83yvattp7zVnBXxYcEoFlMeCJ +A2RvN3bp77wM5mLg+cgp3VTqZutapVEIGokMuA/nfL+X5R0JhI0HNSg5Om6fLewb +BDqOJ2gg5Bs2HNTtkZYimnPXHmHzWPxryBDBDVqwVkA9N4lFdjs6068zzVa2hwqS +rnZuyCvWP5JLv69JmCOQbpAYWqITMtxru0ukFtEiXQMBjD+M/qmfzdR7FBNRM4uy +5UIFu5EXii1bT5w/pCqqjKLr8VnovKDZgszWRvJHDIidrFPiIi7Cc8JfTxtSnpb0 +iaotRq/HpczS9Pn3V5eggkIZJeVfpDjHgv6RO15FXr6ClqSYiE0eg3/dr7j11d7t +K41ABUlBGcyaxuDypdWgaY3n0Oi3r1Wg+n2tpMtEcBtVjjPoYslWP6kiswbS4rQz +fBEtEg5JeFRJqzAxAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAwDgYDVR0RBAcwBYID +dHdvMA0GCSqGSIb3DQEBDAUAA4IBgQBEmotad5+zfkjv1UhFaxnNWm9Xsq95W+9P +dugMvnOe/nv/CWpRFGlr5vC0uB+jN2SENh62NuleIpsOi0Lr96PbVbHFSDKTakyg +T4G9ZUBQv6O62FzkUkbhOId/YvfRL+g8OmmuvTyX0KPmS6MvH4QQrA8sQwH22X56 +0VN51K2+R5tLHuid25U72Y0Yt69YQTSoU1BtDNSz5HtlkHfiHe6AM0cmRoaTdw4e +3R/wIGLv91Z7NgvMyR4ao4H4CWWSX1ZhgTbc6sR52iCZG0XAD9lfxAROFPftPxWe +rGIuBcc/fWLeEQJMoHa5M58oKaORj1Ul6Da3Ot/sSjkPuctX7tNyfLhf+0K63M1f +Hwt972SkbyhjoCcNmHvZtB4H9tBe3S2ZG2jWAMStPg87eEAdSHLKmbWmDHNUjCZd +B6viRCSnQiC1uKgh8WiitIDg1ARoA+1EiiBdQs8Nc5mF7ocMt8vvJXLd35x3AYjw +ymfr5BJUrFlNfNNcL8C8ruZtsIe1Fxw= -----END CERTIFICATE----- diff --git a/Task_1/cert/client/col_two.key b/Task_1/cert/client/col_two.key index 0eced35..90dccaf 100644 --- a/Task_1/cert/client/col_two.key +++ b/Task_1/cert/client/col_two.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/col_one.csr b/Task_1/cert/col_one.csr index cfd3510..294a766 100644 --- a/Task_1/cert/col_one.csr +++ b/Task_1/cert/col_one.csr @@ -1,22 +1,22 @@ -----BEGIN CERTIFICATE REQUEST----- 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 -----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/col_two.csr b/Task_1/cert/col_two.csr index 8daf426..caafbe7 100644 --- a/Task_1/cert/col_two.csr +++ b/Task_1/cert/col_two.csr @@ -1,22 +1,22 @@ -----BEGIN CERTIFICATE REQUEST----- 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 -----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt index f72679a..a4c46cf 100644 --- a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt +++ b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt @@ -1,26 +1,26 @@ -----BEGIN CERTIFICATE----- -MIIEXDCCAsSgAwIBAgIQbehulRH7TFCeh9l6sm0CwjANBgkqhkiG9w0BAQwFADB6 -MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRow -GAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEa -MBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwHhcNMjQwODI4MTY1MzU3WhcNMjUw -ODI4MTY1MzU3WjAjMSEwHwYDVQQDDBhpbi1vdGEtMjMyMzQ3LmFkcy5pdS5lZHUw -ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCgvaTxBaF6leNQufWgvdqq -xyWCPoUxeolVpnMc6pRFN6jD7GRgpNd4t4HBFkW+I4VxkzVM6M6OIIhMdw/arS4o -8nFKCvMmMWdZD1uJATdwPHjQydbGjMQVEjEYhJZgTLMFCBRItDo0R6eZl+T2+SpN -siAZTbhhiAvAN8vWdeXtLVy3JqrBXqQqAPympnJ6GNEKLVSK/DGj1nUJlm9dX8lr -ZOi0CKY5OMmRIOEUMp0y43qLi8wArjOPoQdglVPQefthj8AMbgjM+tn1IPgNFhrC -oVVw1Yjfly6ERk4+uNkHtyYEcSK/t3cpmSvAZKb9w+yybGtYhNKX1P/U0edasp/0 -q+q404tiaQBOQBIktxx2iP6WGIr9QTIL/lkKGka1SCu9Si2TCYSohIrXbZU3YkEi -ZZHQ/RheQALinzo6JPrJDBg9xm6JU/ZP0H+QBZp5sz4QoATHt3+fnbXYLyyOKkT4 -k0drCjrkp14uJ4FHhC3sKj9kaqKMtNEYddsSAmSB4f0CAwEAAaM1MDMwDAYDVR0T -AQH/BAIwADAjBgNVHREEHDAaghhpbi1vdGEtMjMyMzQ3LmFkcy5pdS5lZHUwDQYJ -KoZIhvcNAQEMBQADggGBAG2pOlzco2zk7SNP5o5aD/IwvpxVxLJxNOLPOS8syccN -6p76kfhaJJVmxU4KOxmpLhOtmlOVc6nyuIX549n6aj+MBDp6mgu2ZQpLGnUPVN+y -NJHLaBRXt9/yEbBPprwxbLw9AlTKv1pBH4FLBVdCSIbocydnBeBeGico0XUJ3FmK -DlCX9q5Hy8DLa39XfbIICGa6/kXWmi5ctMEuiH9u9JUdas5TsaBtaPVmVGTpOe/T -kLicM36/XmdgVvMaWUJpxczXRQl84SH1dmVc6m0t+jD+k+mJT+WDElKjPMYDzMwS -8+1mY6DUVqLUCjYE16BAimf+uB4m6mCP73DtE+N620V/mqGUd6N2ae/7jBZnyH+N -i1tZPZ3qO0xPCBPQrY4jceBmAoLhfDJKlNNJ1iG5/VoG1gOKFWGlXjxOQ4E/zWxa -Tni9euDLGvalr/kkTKWPcmwxnYE9I0tiqrebz2/QUp3TNT/8X2y2LPHFhSdRueEN -IyMG4i2ihhwP6Hql1oW6eg== +MIIEXTCCAsWgAwIBAgIRALs4QgLziUHjv72XM5cJZx0wDQYJKoZIhvcNAQEMBQAw +ejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEa +MBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMx +GjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMB4XDTI0MDkxMTE4MjY1MVoXDTI1 +MDkxMTE4MjY1MVowIzEhMB8GA1UEAwwYaW4tb3RhLTIzMjM0Ny5hZHMuaXUuZWR1 +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAtCWlTj/3PMafbJiDkKks +8nGqfg0LUx9MCAb5iIigyV6ie0gDZJsbiI3V4s7Am75GTOD8M7WoOZg3cTc2Zk9C +XlY9IEB1KRDroggSI57AQeF9tPESe71D+VuNxW+fywxqLa+lGPsQBPIvf1qLPQ0/ +TLGfh1mOXEfkBQEyb7AX1/WRYGM7zK3MP4feQQfSu3GIx2J5obJVskrzKgARbRMe +L4IqlAkHkP7oNEc+GXVmYMpj0IymUPn+fVEtEzjc+KqABSAYAyMrhoERLYIn0yJZ +e1p8S94Ul1Mms/XF7g7Vl5diW18EgdGbT4fzTwiMxk6878/smutzsNlmmIFkwcbp +BADcycE1n3LfqSe7OaUu5bL9BT6FxbZXR2nxIgjSxB1Vf488kYYbhHk3ZGciFETn +MO7mHWIpP9q6ZnxnmzSzayKwZtdES8ZfDEMjJeSi2DHlZVvdP2JuNojXJgvw6c0Q +pNAfcFjMeIeG4niG0inhlwQLCWC6veKGPMb2KmuCVoKBAgMBAAGjNTAzMAwGA1Ud +EwEB/wQCMAAwIwYDVR0RBBwwGoIYaW4tb3RhLTIzMjM0Ny5hZHMuaXUuZWR1MA0G +CSqGSIb3DQEBDAUAA4IBgQCYzv82dcXpD0mJ3ZMYqL8AQ+FCCQ8PnPJrkrtFiHo7 +lPo/kkpLwj8yosToLIQjH30E/N50nlMJT3NT2nD3ertgZNXh95UKQAeN0IOFBa17 +p2Y64O2tPUUwO2QlFbQEKVtsCTL+1cVf1gSIDRNJCPrGX6pFa2mK81Be3Utfmww5 +3HCXLe/rASy51H/sgB3OcBgvZt2BBtMOtDlT1jl0eRKREEa3K5rsBW2NWmOI9puL +tLSSBnIJAFtWg+5Lyn6LCkjI3bWSbwflXVnes1J4NP3XHy0sgP/XuYDti5ngsoJA +tmMw4uNsv8BA62RNAivcDsvCJSbBnSJQsCHkLR5lYWvopX4o8v0X1Ln8x7/m2V2a +miyYLx7sJq1PD4Xy1UX3CrDj5o1StGV+1X/sxHFwO+++1+c9ac7VWww/ze3o8QRv +nQthaohqL0eMHr/pe4pMk0xkXmFcgyznvhiLeuLf4K1DI1eq5lsC3GIuvH+7wSaF +VaIf1r7nNToy1dBNk+WG2yQ= -----END CERTIFICATE----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr index 0885c5f..57855a3 100644 --- a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr +++ b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr @@ -1,23 +1,23 @@ -----BEGIN CERTIFICATE REQUEST----- MIID1DCCAjwCAQAwIzEhMB8GA1UEAwwYaW4tb3RhLTIzMjM0Ny5hZHMuaXUuZWR1 -MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAoL2k8QWhepXjULn1oL3a -qsclgj6FMXqJVaZzHOqURTeow+xkYKTXeLeBwRZFviOFcZM1TOjOjiCITHcP2q0u -KPJxSgrzJjFnWQ9biQE3cDx40MnWxozEFRIxGISWYEyzBQgUSLQ6NEenmZfk9vkq -TbIgGU24YYgLwDfL1nXl7S1ctyaqwV6kKgD8pqZyehjRCi1Uivwxo9Z1CZZvXV/J -a2TotAimOTjJkSDhFDKdMuN6i4vMAK4zj6EHYJVT0Hn7YY/ADG4IzPrZ9SD4DRYa -wqFVcNWI35cuhEZOPrjZB7cmBHEiv7d3KZkrwGSm/cPssmxrWITSl9T/1NHnWrKf -9KvquNOLYmkATkASJLccdoj+lhiK/UEyC/5ZChpGtUgrvUotkwmEqISK122VN2JB -ImWR0P0YXkAC4p86OiT6yQwYPcZuiVP2T9B/kAWaebM+EKAEx7d/n5212C8sjipE -+JNHawo65KdeLieBR4Qt7Co/ZGqijLTRGHXbEgJkgeH9AgMBAAGgbDBqBgkqhkiG +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAtCWlTj/3PMafbJiDkKks +8nGqfg0LUx9MCAb5iIigyV6ie0gDZJsbiI3V4s7Am75GTOD8M7WoOZg3cTc2Zk9C +XlY9IEB1KRDroggSI57AQeF9tPESe71D+VuNxW+fywxqLa+lGPsQBPIvf1qLPQ0/ +TLGfh1mOXEfkBQEyb7AX1/WRYGM7zK3MP4feQQfSu3GIx2J5obJVskrzKgARbRMe +L4IqlAkHkP7oNEc+GXVmYMpj0IymUPn+fVEtEzjc+KqABSAYAyMrhoERLYIn0yJZ +e1p8S94Ul1Mms/XF7g7Vl5diW18EgdGbT4fzTwiMxk6878/smutzsNlmmIFkwcbp +BADcycE1n3LfqSe7OaUu5bL9BT6FxbZXR2nxIgjSxB1Vf488kYYbhHk3ZGciFETn +MO7mHWIpP9q6ZnxnmzSzayKwZtdES8ZfDEMjJeSi2DHlZVvdP2JuNojXJgvw6c0Q +pNAfcFjMeIeG4niG0inhlwQLCWC6veKGPMb2KmuCVoKBAgMBAAGgbDBqBgkqhkiG 9w0BCQ4xXTBbMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwEw DgYDVR0PAQH/BAQDAgWgMCMGA1UdEQQcMBqCGGluLW90YS0yMzIzNDcuYWRzLml1 -LmVkdTANBgkqhkiG9w0BAQwFAAOCAYEAIaAD8ft93LSu09svalINZ2Y2kNE/AbJG -NjYKZtfz7/IhyMtuXW15BV4UwNA/y4FuyX20NzYsAe2eLUJtnmJybux9FZuIDD4V -RDr5OZiiDIWQMVfpJbQv27QScB8VlMgdjR333vXOenfv6IOfVZLEEnSE1jakYhLP -qG16IMkyHWZcUBLSJ6UbgGP+G9ceKsBxNaHlMUPM98QAa++dkbw+e/AOILj7HOHw -Pzb9G8vT3u7OlDe4CQarKZdhxKNEiUN5hCJ35mzCMp4qmenOmr/chFZC3azyUGaW -ogDzE4bmAfKtqRD7dNLfEjtPTmHXK2hvq+AApZ1qZgAnfHb6G06+OeP2jDW9U8yY -b1U2zajsATWa0xqHe1Iw7WXvKBaYtxJvtpSNUh9ZP1wplubDf5g79W6YYs1+HPTI -5VasQQmqShUHh7U78y2xOYyhAr7tG+27RyT5lHxDiZ2pqBkd8+kZMWNZe/B/h8g5 -03uTnXXIe7Sj8XD5F9SaxkMxQ0e79QaZ +LmVkdTANBgkqhkiG9w0BAQwFAAOCAYEADzFEFHJhK6AHi9dvjAHXKCccgsSEZphx +6UGCr14GOgt7UJoiTavc3hSmCWLaj5HSrp8GMfP+96RWb1Bcx2MNccVuR/kzzNdn +WuTzW4CWxT0XFz168CBKpzYz0EMLFmXQ5AArFyqf+nZ5r1qplGYkvnmy9QFQ/jnh ++kHIMPbCTEa2cd1XahJdoYTZozXsxLRB4XxzNmsEIbmuZJmXJgWRdzEjhysec5kc +G22306GhhHzAo2gt/hlH71Oqu2X0SjroiivrbtJ9D9i2u+x+BVTWwVJJqL2W7gMN ++KNHX4nftoUiopUqmh+NWiFcbM29CP/izm70HohoUfl1AplV0d3wWgn9z24xaPbk +PFHlHrE5EvLfGf3W8usiTBEs10Gh8vIX/bdYn9flJ3Ixl3gRW2Fr/mXUZt/sXx6r +eIE910wFr2UmLrmCWHAzO838SG6EIcv8XaXXyT1ayHPGvneZqbS/aObZuBDwykDo +v27MJTivVuYO938ZhJXgaY+GFEeDYnCJ -----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key index 6e61cbe..c680f4f 100644 --- a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key +++ b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/Task_1/fets_challenge.egg-info/PKG-INFO b/Task_1/fets_challenge.egg-info/PKG-INFO index 43e953e..f4f9e12 100644 --- a/Task_1/fets_challenge.egg-info/PKG-INFO +++ b/Task_1/fets_challenge.egg-info/PKG-INFO @@ -15,7 +15,7 @@ Requires-Python: >=3.9 Description-Content-Type: text/markdown License-File: LICENSE Requires-Dist: openfl@ git+https://github.com/intel/openfl.git@v1.5.1 -Requires-Dist: GANDLF@ git+https://github.com/CBICA/GaNDLF.git@0.0.20 +Requires-Dist: GANDLF@ git+https://github.com/CBICA/GaNDLF.git@0.0.17 Requires-Dist: fets@ git+https://github.com/FETS-AI/Algorithms.git@fets_challenge # FeTS 2022 Challenge Task 1 @@ -49,7 +49,7 @@ Please ask any additional questions in our discussion pages on our github site a 6. ```pip install --upgrade pip``` 7. Install Pytorch (2.3.1) for your system: ```pip install torch==2.3.1 torchvision==0.18.1``` -*Note all previous versions of pytorch can be found in [these instructions]([https://pytorch.org/get-started/locally/](https://pytorch.org/get-started/previous-versions/)) +*Note all previous versions of pytorch can be found in these instructions:[https://pytorch.org/get-started/previous-versions/](https://pytorch.org/get-started/previous-versions/) 8. Set the environment variable `SKLEARN_ALLOW_DEPRECATED_SKLEARN_PACKAGE_INSTALL=True` (to avoid sklearn deprecation error) 9. ```pip install .``` > * _Note: if you run into ```ERROR: Failed building wheel for SimpleITK```, try running ```pip install SimpleITK --only-binary :all:``` then rerunning ```pip install .```_ diff --git a/Task_1/fets_challenge.egg-info/SOURCES.txt b/Task_1/fets_challenge.egg-info/SOURCES.txt index f6add58..d39e899 100644 --- a/Task_1/fets_challenge.egg-info/SOURCES.txt +++ b/Task_1/fets_challenge.egg-info/SOURCES.txt @@ -18,6 +18,7 @@ openfl-workspace/fets_challenge_workspace/partitioning_1.csv openfl-workspace/fets_challenge_workspace/partitioning_2.csv openfl-workspace/fets_challenge_workspace/requirements.txt openfl-workspace/fets_challenge_workspace/small_split.csv +openfl-workspace/fets_challenge_workspace/smaller_split.csv openfl-workspace/fets_challenge_workspace/validation.csv openfl-workspace/fets_challenge_workspace/plan/cols.yaml openfl-workspace/fets_challenge_workspace/plan/data.yaml diff --git a/Task_1/fets_challenge.egg-info/requires.txt b/Task_1/fets_challenge.egg-info/requires.txt index faafd5d..ecf3c20 100644 --- a/Task_1/fets_challenge.egg-info/requires.txt +++ b/Task_1/fets_challenge.egg-info/requires.txt @@ -1,3 +1,3 @@ openfl@ git+https://github.com/intel/openfl.git@v1.5.1 -GANDLF@ git+https://github.com/CBICA/GaNDLF.git@0.0.20 +GANDLF@ git+https://github.com/CBICA/GaNDLF.git@0.0.17 fets@ git+https://github.com/FETS-AI/Algorithms.git@fets_challenge diff --git a/Task_1/fets_challenge/experiment.py b/Task_1/fets_challenge/experiment.py index 96f5343..ddef758 100644 --- a/Task_1/fets_challenge/experiment.py +++ b/Task_1/fets_challenge/experiment.py @@ -310,8 +310,9 @@ def run_challenge_experiment(aggregation_function, # get the task runner, passing the first data loader for col in collaborator_data_loaders: #Insert logic to serialize train / val CSVs here - transformed_csv_dict[col]['train'].to_csv(os.path.join(work, 'seg_test_train.csv')) - transformed_csv_dict[col]['val'].to_csv(os.path.join(work, 'seg_test_val.csv')) + os.makedirs(os.path.join(work, col), exist_ok=True) + transformed_csv_dict[col]['train'].to_csv(os.path.join(work, col, 'train.csv')) + transformed_csv_dict[col]['val'].to_csv(os.path.join(work, col, 'valid.csv')) task_runner = copy(plan).get_task_runner(collaborator_data_loaders[col]) if use_pretrained_model: diff --git a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml index 91fb853..928d318 100644 --- a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml +++ b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml @@ -33,12 +33,12 @@ task_runner : device : cpu gandlf_config : batch_size: 1 - clip_grad: null - clip_mode: null + clip_grad: None + clip_mode: None data_augmentation: {} data_postprocessing: {} data_preprocessing: - normalize: null + normalize: None enable_padding: false in_memory: false inference_mechanism : @@ -63,7 +63,7 @@ task_runner : - 4 dimension: 3 final_layer: softmax - ignore_label_validation: null + ignore_label_validation: None norm_type: instance nested_training: testing: 1 diff --git a/Task_1/openfl-workspace/fets_challenge_workspace/smaller_split.csv b/Task_1/openfl-workspace/fets_challenge_workspace/smaller_split.csv new file mode 100644 index 0000000..e1701a7 --- /dev/null +++ b/Task_1/openfl-workspace/fets_challenge_workspace/smaller_split.csv @@ -0,0 +1,7 @@ +Partition_ID,Subject_ID +2,FeTS2022_01412 +2,FeTS2022_01415 +2,FeTS2022_01411 +3,FeTS2022_01439 +3,FeTS2022_01435 +3,FeTS2022_01434 diff --git a/Task_1/setup.py b/Task_1/setup.py index 6f2c352..312aa5f 100644 --- a/Task_1/setup.py +++ b/Task_1/setup.py @@ -29,7 +29,7 @@ include_package_data=True, install_requires=[ 'openfl @ git+https://github.com/intel/openfl.git@v1.5.1', - 'GANDLF @ git+https://github.com/CBICA/GaNDLF.git@0.0.20', + 'GANDLF @ git+https://github.com/CBICA/GaNDLF.git@0.0.17', 'fets @ git+https://github.com/FETS-AI/Algorithms.git@fets_challenge', ], python_requires='>=3.9', From ed7442a8234a96d61572cd68f9ebefcb26cf3063 Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Wed, 11 Sep 2024 14:35:25 -0400 Subject: [PATCH 04/22] GaNDLF pinned to 0.0.17 --- Task_1/cert/ca/root-ca.crt | 42 ++++----- Task_1/cert/ca/root-ca/private/root-ca.key | 74 +++++++-------- Task_1/cert/ca/signing-ca.crt | 50 +++++----- Task_1/cert/ca/signing-ca.csr | 36 ++++---- .../cert/ca/signing-ca/private/signing-ca.key | 74 +++++++-------- Task_1/cert/cert_chain.crt | 92 +++++++++---------- Task_1/cert/client/col_one.crt | 46 +++++----- Task_1/cert/client/col_one.key | 74 +++++++-------- Task_1/cert/client/col_two.crt | 42 ++++----- Task_1/cert/client/col_two.key | 74 +++++++-------- Task_1/cert/col_one.csr | 36 ++++---- Task_1/cert/col_two.csr | 36 ++++---- .../server/agg_in-ota-232347.ads.iu.edu.crt | 42 ++++----- .../server/agg_in-ota-232347.ads.iu.edu.csr | 36 ++++---- .../server/agg_in-ota-232347.ads.iu.edu.key | 74 +++++++-------- Task_1/fets_challenge/experiment.py | 1 + 16 files changed, 415 insertions(+), 414 deletions(-) diff --git a/Task_1/cert/ca/root-ca.crt b/Task_1/cert/ca/root-ca.crt index 00262b2..5849970 100644 --- a/Task_1/cert/ca/root-ca.crt +++ b/Task_1/cert/ca/root-ca.crt @@ -1,27 +1,27 @@ -----BEGIN CERTIFICATE----- -MIIEhTCCAu2gAwIBAgIQLrN44bz3TGOWMR8fl02jJTANBgkqhkiG9w0BAQwFADB0 +MIIEhTCCAu2gAwIBAgIQf/LP+qCNTsu9Jpr1CRWy7jANBgkqhkiG9w0BAQwFADB0 MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRcw FQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEXMBUG -A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTExMTgyNjUwWhcNMjUwOTExMTgy -NjUwWjB0MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt +A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTExMTgzMzM5WhcNMjUwOTExMTgz +MzM5WjB0MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt cGxlMRcwFQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIElu YzEXMBUGA1UECwwOU2ltcGxlIFJvb3QgQ0EwggGiMA0GCSqGSIb3DQEBAQUAA4IB -jwAwggGKAoIBgQCgtJ7lpcdeil/UP5tTDu9vFWVjRomsHqpOhFqt2WJwxaLvxX+f -Fp3hfQbuM6U8PO90LEig7VL0xl9U4N0FvtylSK8EM/zIPnUdRKwj+EYFDos1+RLl -5gTbD0nuyYobjbxLPLflaOlu+dI2CxVq7wcQBcVD6t+GdTROF+WFhaRSbw8s6gtP -4WrjetikjRWz71tKfLiXyNZ9RC/hojF9C05GCBDUB94TiI9BeteXnxR6aIzbgWsO -DfKieFIh2MYwDezKMaiM0T6rVqN8Sux4ZY0jjra3yzWGElNQOHCei9L++0VeTVtH -rmVWJk+mC4/g4WkyEHzxDXr+xJZYLwrOoF9qLkWoH9IEpJ3j6kX+KMHfFDa/0g0g -tGMg2J06AjwXijPVoIErzQYtzABGQJeeVCup9xDnSOMirGHwMxq1Nsj0TwX38C5x -eFy5pXyib43xcSXcQoP/cQslubiiAvF6MJEU/ZHV3U4/DgidINIvi9uYhDIifUcT -WI/3JBiaJwz5HL0CAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B -AQwFAAOCAYEAYMYQdCHtdTTge0yE4L0fPCCAWw9DWDxciJ4mCjHsLaISNa2O2K71 -a6sY5yyw8IUat/ZjqCjlfFAoqVktQ33xeotvqminfmS4oh4uwaaLmd0kHToH8yC9 -Io7XXIJRsWBMgMmtadIQZrHWlqwy01B96Utm0LOoy9V3Scd6XK2TsNtprBt8Ub1v -PUxRLlJSWraS7RameNTCATKUT2hbKwrk+/1sI3nx3UjM6aY35qVhO+4rZbE4I6bY -0heQEzK8EJi4HpOzsx8J+xXzGx23WcMaXDfV56mxR3mfo8vF1K4Biu6DyN4f5RdH -ajYIiybKXw9YM4LkeosAwEVie+bN1a67Tfc27QEkzJ0Dth28x2f1/EbDiLqvpjUD -x6B3y85LJHL0DyJT2uw53eF8Ic0FSZs/SWH7NnYbKj8OAWBT3bWeE6M0zsqpwOyT -vMRbDDYEUqrEr3Jc7/kUzxutoEU8uD0gOGVEM/F4SB37E63ArXw0my2bzAFaLmYC -LxgmB9qLOqiX +jwAwggGKAoIBgQCYaWP6SbNjJaQ/43pIyigPEgmV95l9GmpxfP/h/VDyyA5IvbPh +ZIjvwUM+nKkPt1AlJPAUZeJC4OU4rCtJ+VPoSEPIZTS/b1DD5f4GSqyo0mKyvMBz +kNfrFXmdeFnCg396+mIvyceC1+lKC0B9wbxv9/2wEOqGlQJIzIJBbr517LDaZs7T +QbrjpecMjAa1B959sxvQeDa3kgSJXzwbKSu5XHy0sxa7LSwVrf/3YIZ1c+q/yNPw +ocN6goDGb6VP51sIbCP5XssmdBB8xhxJ9vYip/HnfsZ+fOXUJAoi+/UwoTHCIEOR +ETZn7WiESWMu36EQW8M+gDqYE1CiCADJN57np9YZhJXBHGJKEK7IVrT5fYDnVsBF +YN7bMDCrvj86kq9QKLntfz+SUmlz9ZWkVVIqtjO5ukkwe+UWKovIbfyuV6WSoX0W +JPItv/ixXuW4fnkftUnq62F45pvFx0dfZNLwbvKLfEN/YPm5alsLK5OPwVJpm2MX +PuQCiozNenV+c1cCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B +AQwFAAOCAYEAdcnP9d3assTHyye+aYX4x892YolGrRh3I9FALZXAFvdw7lG2HO1n +INltE1VA7giSfDyt9304Xmfnv7y4rKP/eH4Plnl5hLI31Ox/ZMPkBNqN9PvmdT6S +kfAVHq1Mw8koTPyu0gQwJERqBhKJwHYwAZZiSLEjxawgGtXSEV4Yly/ShXS3+R2D +6OdVOkrZx0vDZoIgE7BO5hV+xssPTZueasVCQTTMHq5dRkscVVUIlYrvx7KOOIU9 +gcWNvNp+IBDXRDNaLfb107TxSnLtnHF3t6IKlhBHqEnf6rRmHE1wqyFyMNssg6Qm +AjvZzDFjhwlOXjN5/KG3+5veh07ZIlb9Wfez4FbswDSpbEgcarPGEhzPjOjEjQX5 +fZg7w3+kzHn92MWvVDPFa3LEdTI/FM5h/vx3O4b3xNX15pWuz1WIdQS49vq8Z3kk +/RLd/wg4730HcdVoLem2v/RvTcJ+NOI+iwrKbst7xMjs4K/rm3BY4dorX2XoyVG2 +tdt3IBDuOSDC -----END CERTIFICATE----- diff --git a/Task_1/cert/ca/root-ca/private/root-ca.key b/Task_1/cert/ca/root-ca/private/root-ca.key index c3f20b3..7b48fb3 100644 --- a/Task_1/cert/ca/root-ca/private/root-ca.key +++ b/Task_1/cert/ca/root-ca/private/root-ca.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/ca/signing-ca.crt b/Task_1/cert/ca/signing-ca.crt index 5d2c7f2..0f53f66 100644 --- a/Task_1/cert/ca/signing-ca.crt +++ b/Task_1/cert/ca/signing-ca.crt @@ -1,27 +1,27 @@ -----BEGIN CERTIFICATE----- -MIIEizCCAvOgAwIBAgIQWISXxdEmSAmgCatUq8iEczANBgkqhkiG9w0BAQwFADB0 -MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRcw -FQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEXMBUG -A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTExMTgyNjUwWhcNMjUwOTExMTgy -NjUwWjB6MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt -cGxlMRowGAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxl -IEluYzEaMBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwggGiMA0GCSqGSIb3DQEB -AQUAA4IBjwAwggGKAoIBgQCbmWTUl2Pg1rdfPj2/vbURDLQF0jiDgEveVlgZ/t3M -CkdwQH32yQQIRwaNFbPxDY6L+F2pkaFjh4pF1gttr7FWl9MBobnSkNsvC+2X8UON -22bmbbK6S5hxxCX/el0goWncifVS6H9rqeaFHvSKBSywYN1JrriTwXKOSVqVLwfW -eYEaTsLWxFK1fYrMH6/v3n3Pv81VaUMePKdDqm/6cwS/W53rGbJIKJqvz+yDtAsQ -2+QlPq1Ndgpaasyxm7LGHfS2+8ysVwhE5oEbAgKyADMTFXQKgg05P+lUxEzMVSvW -rbRad3wgJZ81fXZCGsfAcUaWVrmJRPoAMAWhFA+5X8p4StU/RNWsMjD/Mi7Rp5iZ -1wfdiFG5QpWTegkAIx8rtAUL5/Grhyk3yLcy9jhh1cyL2XjbZPpeqqtzdz1VFbbD -cTkpbyRtXACrYnFsDF4wnUj16Dgcn7ULSMt0/Sd/C76LcTw3mJ6EJOwHrADNvheS -wgqHpg4fX4+7VCv7IK561VMCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq -hkiG9w0BAQwFAAOCAYEAXDl3Ae85p2CCqugLw088WFlmYUW4MWoZgnuEzTyRYwwu -7A+04N5Z2pRP4o1M5L67r8JR/tF6ljwJYkee25bW922RIDzPElUrk+O7hm4+rsz6 -SpncV5Sgd36Fp3b6JDdkRA7On61x1t9rtfPD02z1LCdUgWhjbJtTlUj0h4Uc4RDk -Mcv4hwODnVaRVrkRalYX8rPR/QeVacJedLX0YUktCuoDuAqpvYmaXWFDSL7HQ46m -2/e/rbGiU0aYeRwoqhfx/tMy0+mm/8hSwHfWPqn37HFspeJAr+5Ikd4q0yagayg2 -EyjTFQMQaPka5JtaCuGppAJa9tBLLSm/GyuuZIBsX1S9LH6z2HP+Y3rHYck7n872 -na41IDd7z4Z/iQcb9Gj4z96gGLdkYihZLWdTZBwsSerR1/bwnmmTXfJ9Cb9zftfD -LcJmD8qw+y3ZoQO4Zls/TehMD67dsGYuOezHxq/nKVCoCLsChnDHEmrg2s7P67ab -574/n6oO4gdP7OtirQGm +MIIEjDCCAvSgAwIBAgIRAJD9tSiG9UzqnOZtT3QGfmowDQYJKoZIhvcNAQEMBQAw +dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX +MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV +BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDkxMTE4MzMzOVoXDTI1MDkxMTE4 +MzMzOVowejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp +bXBsZTEaMBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBs +ZSBJbmMxGjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMIIBojANBgkqhkiG9w0B +AQEFAAOCAY8AMIIBigKCAYEA30K6CRhyHQAYSuiKcxwUVWkzy3jyFWfPiANkYxuU +JIoHwxH8zysVh5iZpkbv0gyMagvQ8Tl6yWxAUrWG2/auxgZMKwOkiDF60CT4MD5b +1Brsh80lgrtL8Pwho3r7SqZx1Scas3zQeOyciO+XthVuLuUzTUJrI2vKL+t7Jehs +4K/r3fwh4N+tvHvKtJZcfVREIlFatUgbi0vsqspFTBNWS6/JEY6f7YQeJICijgw8 +vMU5wDGxZma1J3gGancloORUNl7hf5/rGlRqaTM2FqQh2fFHElL84w7oIYfybMIA +ANGizLtiHP3cX2hmiVHradDOFfu2zcMXk1cxJpBwhdUXZu2+MpewaqIxl0gwCFK+ +JXf3hhvaf2UYF6ITjrDcTzM+dafVhnF9K9/K+LfhlZp+4oi4JmuDe3O0A96dTbVd +Vleguwz8PAHfbPoSVqMuXZ9Mgrn6SSn+WW3ubDFbfKsQBq3Bk8ix0ebAAw4og0i4 +KTZxOza/AaAHz88mmidlKSBJAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJ +KoZIhvcNAQEMBQADggGBAAlWaBArd6CKJZNDi144TUJgF9pI2ZS1WeG82z+oLeCE +5fUznPVdJP908xOGZS4egsdSHdqaurFwmVkmpSHyePowKaG7PAvgFsGNjKzELu73 +VqeZKR2AwwVoNvR4bR8V/0k8lf4f+t3Y/mtzwfJD8hIHC9lzXrE+njQqLx2Boa/C +KxnXN7EaRhwCDHUqsUmfYaixCZUwVnas9BbLoobdcFcC7C3Q462YSuWDwRp6te67 +bCtjDxMOXQfMPoY3+JDAzR9qzVhdinw4HMDZDv/KKVNahmAl4jplr5qGnP8EIPwI +8VDSUMUEHFHpYr+KDjCrqtVX/IT2NTJh+1rOuAnPquyeV39VV+0Mao15ilMMbTNX +fN6cv71+CbTNN1OUgJ1KyzEs0i4PSTeafiteJAGec+rz+6Ie9DHdVbIOs0n7U9w1 +pCJAdSqklmHdA14EabLK8lIX/7V8FYVqyHc9htzGUbHSeAswVEPzibn6tEBu2nh8 +B2wscdMHuGj3SUOmwyDadg== -----END CERTIFICATE----- diff --git a/Task_1/cert/ca/signing-ca.csr b/Task_1/cert/ca/signing-ca.csr index c3102e5..8fc3fa1 100644 --- a/Task_1/cert/ca/signing-ca.csr +++ b/Task_1/cert/ca/signing-ca.csr @@ -2,22 +2,22 @@ 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 -----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/ca/signing-ca/private/signing-ca.key b/Task_1/cert/ca/signing-ca/private/signing-ca.key index f407126..0467c67 100644 --- a/Task_1/cert/ca/signing-ca/private/signing-ca.key +++ b/Task_1/cert/ca/signing-ca/private/signing-ca.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/cert_chain.crt b/Task_1/cert/cert_chain.crt index ad4ed03..44f9aaa 100644 --- a/Task_1/cert/cert_chain.crt +++ b/Task_1/cert/cert_chain.crt @@ -1,54 +1,54 @@ -----BEGIN CERTIFICATE----- -MIIEhTCCAu2gAwIBAgIQLrN44bz3TGOWMR8fl02jJTANBgkqhkiG9w0BAQwFADB0 +MIIEhTCCAu2gAwIBAgIQf/LP+qCNTsu9Jpr1CRWy7jANBgkqhkiG9w0BAQwFADB0 MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRcw FQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEXMBUG -A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTExMTgyNjUwWhcNMjUwOTExMTgy -NjUwWjB0MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt +A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTExMTgzMzM5WhcNMjUwOTExMTgz +MzM5WjB0MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt cGxlMRcwFQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIElu YzEXMBUGA1UECwwOU2ltcGxlIFJvb3QgQ0EwggGiMA0GCSqGSIb3DQEBAQUAA4IB -jwAwggGKAoIBgQCgtJ7lpcdeil/UP5tTDu9vFWVjRomsHqpOhFqt2WJwxaLvxX+f -Fp3hfQbuM6U8PO90LEig7VL0xl9U4N0FvtylSK8EM/zIPnUdRKwj+EYFDos1+RLl -5gTbD0nuyYobjbxLPLflaOlu+dI2CxVq7wcQBcVD6t+GdTROF+WFhaRSbw8s6gtP -4WrjetikjRWz71tKfLiXyNZ9RC/hojF9C05GCBDUB94TiI9BeteXnxR6aIzbgWsO -DfKieFIh2MYwDezKMaiM0T6rVqN8Sux4ZY0jjra3yzWGElNQOHCei9L++0VeTVtH -rmVWJk+mC4/g4WkyEHzxDXr+xJZYLwrOoF9qLkWoH9IEpJ3j6kX+KMHfFDa/0g0g -tGMg2J06AjwXijPVoIErzQYtzABGQJeeVCup9xDnSOMirGHwMxq1Nsj0TwX38C5x -eFy5pXyib43xcSXcQoP/cQslubiiAvF6MJEU/ZHV3U4/DgidINIvi9uYhDIifUcT -WI/3JBiaJwz5HL0CAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B -AQwFAAOCAYEAYMYQdCHtdTTge0yE4L0fPCCAWw9DWDxciJ4mCjHsLaISNa2O2K71 -a6sY5yyw8IUat/ZjqCjlfFAoqVktQ33xeotvqminfmS4oh4uwaaLmd0kHToH8yC9 -Io7XXIJRsWBMgMmtadIQZrHWlqwy01B96Utm0LOoy9V3Scd6XK2TsNtprBt8Ub1v -PUxRLlJSWraS7RameNTCATKUT2hbKwrk+/1sI3nx3UjM6aY35qVhO+4rZbE4I6bY -0heQEzK8EJi4HpOzsx8J+xXzGx23WcMaXDfV56mxR3mfo8vF1K4Biu6DyN4f5RdH -ajYIiybKXw9YM4LkeosAwEVie+bN1a67Tfc27QEkzJ0Dth28x2f1/EbDiLqvpjUD -x6B3y85LJHL0DyJT2uw53eF8Ic0FSZs/SWH7NnYbKj8OAWBT3bWeE6M0zsqpwOyT -vMRbDDYEUqrEr3Jc7/kUzxutoEU8uD0gOGVEM/F4SB37E63ArXw0my2bzAFaLmYC -LxgmB9qLOqiX +jwAwggGKAoIBgQCYaWP6SbNjJaQ/43pIyigPEgmV95l9GmpxfP/h/VDyyA5IvbPh +ZIjvwUM+nKkPt1AlJPAUZeJC4OU4rCtJ+VPoSEPIZTS/b1DD5f4GSqyo0mKyvMBz +kNfrFXmdeFnCg396+mIvyceC1+lKC0B9wbxv9/2wEOqGlQJIzIJBbr517LDaZs7T +QbrjpecMjAa1B959sxvQeDa3kgSJXzwbKSu5XHy0sxa7LSwVrf/3YIZ1c+q/yNPw +ocN6goDGb6VP51sIbCP5XssmdBB8xhxJ9vYip/HnfsZ+fOXUJAoi+/UwoTHCIEOR +ETZn7WiESWMu36EQW8M+gDqYE1CiCADJN57np9YZhJXBHGJKEK7IVrT5fYDnVsBF +YN7bMDCrvj86kq9QKLntfz+SUmlz9ZWkVVIqtjO5ukkwe+UWKovIbfyuV6WSoX0W +JPItv/ixXuW4fnkftUnq62F45pvFx0dfZNLwbvKLfEN/YPm5alsLK5OPwVJpm2MX +PuQCiozNenV+c1cCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B +AQwFAAOCAYEAdcnP9d3assTHyye+aYX4x892YolGrRh3I9FALZXAFvdw7lG2HO1n +INltE1VA7giSfDyt9304Xmfnv7y4rKP/eH4Plnl5hLI31Ox/ZMPkBNqN9PvmdT6S +kfAVHq1Mw8koTPyu0gQwJERqBhKJwHYwAZZiSLEjxawgGtXSEV4Yly/ShXS3+R2D +6OdVOkrZx0vDZoIgE7BO5hV+xssPTZueasVCQTTMHq5dRkscVVUIlYrvx7KOOIU9 +gcWNvNp+IBDXRDNaLfb107TxSnLtnHF3t6IKlhBHqEnf6rRmHE1wqyFyMNssg6Qm +AjvZzDFjhwlOXjN5/KG3+5veh07ZIlb9Wfez4FbswDSpbEgcarPGEhzPjOjEjQX5 +fZg7w3+kzHn92MWvVDPFa3LEdTI/FM5h/vx3O4b3xNX15pWuz1WIdQS49vq8Z3kk +/RLd/wg4730HcdVoLem2v/RvTcJ+NOI+iwrKbst7xMjs4K/rm3BY4dorX2XoyVG2 +tdt3IBDuOSDC -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- -MIIEizCCAvOgAwIBAgIQWISXxdEmSAmgCatUq8iEczANBgkqhkiG9w0BAQwFADB0 -MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRcw -FQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEXMBUG -A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTExMTgyNjUwWhcNMjUwOTExMTgy -NjUwWjB6MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt -cGxlMRowGAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxl -IEluYzEaMBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwggGiMA0GCSqGSIb3DQEB -AQUAA4IBjwAwggGKAoIBgQCbmWTUl2Pg1rdfPj2/vbURDLQF0jiDgEveVlgZ/t3M -CkdwQH32yQQIRwaNFbPxDY6L+F2pkaFjh4pF1gttr7FWl9MBobnSkNsvC+2X8UON -22bmbbK6S5hxxCX/el0goWncifVS6H9rqeaFHvSKBSywYN1JrriTwXKOSVqVLwfW -eYEaTsLWxFK1fYrMH6/v3n3Pv81VaUMePKdDqm/6cwS/W53rGbJIKJqvz+yDtAsQ -2+QlPq1Ndgpaasyxm7LGHfS2+8ysVwhE5oEbAgKyADMTFXQKgg05P+lUxEzMVSvW -rbRad3wgJZ81fXZCGsfAcUaWVrmJRPoAMAWhFA+5X8p4StU/RNWsMjD/Mi7Rp5iZ -1wfdiFG5QpWTegkAIx8rtAUL5/Grhyk3yLcy9jhh1cyL2XjbZPpeqqtzdz1VFbbD -cTkpbyRtXACrYnFsDF4wnUj16Dgcn7ULSMt0/Sd/C76LcTw3mJ6EJOwHrADNvheS -wgqHpg4fX4+7VCv7IK561VMCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq -hkiG9w0BAQwFAAOCAYEAXDl3Ae85p2CCqugLw088WFlmYUW4MWoZgnuEzTyRYwwu -7A+04N5Z2pRP4o1M5L67r8JR/tF6ljwJYkee25bW922RIDzPElUrk+O7hm4+rsz6 -SpncV5Sgd36Fp3b6JDdkRA7On61x1t9rtfPD02z1LCdUgWhjbJtTlUj0h4Uc4RDk -Mcv4hwODnVaRVrkRalYX8rPR/QeVacJedLX0YUktCuoDuAqpvYmaXWFDSL7HQ46m -2/e/rbGiU0aYeRwoqhfx/tMy0+mm/8hSwHfWPqn37HFspeJAr+5Ikd4q0yagayg2 -EyjTFQMQaPka5JtaCuGppAJa9tBLLSm/GyuuZIBsX1S9LH6z2HP+Y3rHYck7n872 -na41IDd7z4Z/iQcb9Gj4z96gGLdkYihZLWdTZBwsSerR1/bwnmmTXfJ9Cb9zftfD -LcJmD8qw+y3ZoQO4Zls/TehMD67dsGYuOezHxq/nKVCoCLsChnDHEmrg2s7P67ab -574/n6oO4gdP7OtirQGm +MIIEjDCCAvSgAwIBAgIRAJD9tSiG9UzqnOZtT3QGfmowDQYJKoZIhvcNAQEMBQAw +dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX +MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV +BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDkxMTE4MzMzOVoXDTI1MDkxMTE4 +MzMzOVowejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp +bXBsZTEaMBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBs +ZSBJbmMxGjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMIIBojANBgkqhkiG9w0B +AQEFAAOCAY8AMIIBigKCAYEA30K6CRhyHQAYSuiKcxwUVWkzy3jyFWfPiANkYxuU +JIoHwxH8zysVh5iZpkbv0gyMagvQ8Tl6yWxAUrWG2/auxgZMKwOkiDF60CT4MD5b +1Brsh80lgrtL8Pwho3r7SqZx1Scas3zQeOyciO+XthVuLuUzTUJrI2vKL+t7Jehs +4K/r3fwh4N+tvHvKtJZcfVREIlFatUgbi0vsqspFTBNWS6/JEY6f7YQeJICijgw8 +vMU5wDGxZma1J3gGancloORUNl7hf5/rGlRqaTM2FqQh2fFHElL84w7oIYfybMIA +ANGizLtiHP3cX2hmiVHradDOFfu2zcMXk1cxJpBwhdUXZu2+MpewaqIxl0gwCFK+ +JXf3hhvaf2UYF6ITjrDcTzM+dafVhnF9K9/K+LfhlZp+4oi4JmuDe3O0A96dTbVd +Vleguwz8PAHfbPoSVqMuXZ9Mgrn6SSn+WW3ubDFbfKsQBq3Bk8ix0ebAAw4og0i4 +KTZxOza/AaAHz88mmidlKSBJAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJ +KoZIhvcNAQEMBQADggGBAAlWaBArd6CKJZNDi144TUJgF9pI2ZS1WeG82z+oLeCE +5fUznPVdJP908xOGZS4egsdSHdqaurFwmVkmpSHyePowKaG7PAvgFsGNjKzELu73 +VqeZKR2AwwVoNvR4bR8V/0k8lf4f+t3Y/mtzwfJD8hIHC9lzXrE+njQqLx2Boa/C +KxnXN7EaRhwCDHUqsUmfYaixCZUwVnas9BbLoobdcFcC7C3Q462YSuWDwRp6te67 +bCtjDxMOXQfMPoY3+JDAzR9qzVhdinw4HMDZDv/KKVNahmAl4jplr5qGnP8EIPwI +8VDSUMUEHFHpYr+KDjCrqtVX/IT2NTJh+1rOuAnPquyeV39VV+0Mao15ilMMbTNX +fN6cv71+CbTNN1OUgJ1KyzEs0i4PSTeafiteJAGec+rz+6Ie9DHdVbIOs0n7U9w1 +pCJAdSqklmHdA14EabLK8lIX/7V8FYVqyHc9htzGUbHSeAswVEPzibn6tEBu2nh8 +B2wscdMHuGj3SUOmwyDadg== -----END CERTIFICATE----- diff --git a/Task_1/cert/client/col_one.crt b/Task_1/cert/client/col_one.crt index b809ce3..cdd17d5 100644 --- a/Task_1/cert/client/col_one.crt +++ b/Task_1/cert/client/col_one.crt @@ -1,25 +1,25 @@ -----BEGIN CERTIFICATE----- -MIIEMzCCApugAwIBAgIRAMw0FyEIY0jRiWZGwRKVwtIwDQYJKoZIhvcNAQEMBQAw -ejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEa -MBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMx -GjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMB4XDTI0MDkxMTE4MjY1MVoXDTI1 -MDkxMTE4MjY1MVowDjEMMAoGA1UEAwwDb25lMIIBojANBgkqhkiG9w0BAQEFAAOC -AY8AMIIBigKCAYEApuGur6nfZT+aabOJvV5gZfV0ceTLgCYbyh/m2pbmP4FOyEdp -lLEvWxKQ8K1nZXT2h4geXCwtsnLgPGIN+BQZzP9q/dXxhYqNxbUVBNfVKDehyfhk -B/QbwEwkyir+VF0mXj8OKd73rpymzzbiCJKjeEJlRLBapfL9jzkxmbJiJBkAw1aC -tGYALyMpGWWwYiqPBWwNoCTv02hK6CFRTWttTIKmdMAUa05c9Vam36LizhZ5Hkft -e0OtRb/cHL4Dq5zd6W2UQeoAoAwUnyz6F9kehd2n38lG7EUpKA6588KOtJXFCJKI -TkWFlmUihwDbnY2Y9sZFemn0kme88R225jxMW2Go8jCR98VsvL+qoghyMLog94iv -NyZEfASmCGxXiWIEkZj6bLkI2TIvFfEQfv0qu1sbg0IjZVeC9K7yOpIOUhiBq/VC -8ePSP9KkHee/VNSwU01P8Jb7S0o3DWhY0YbQI6HoDqJX8Zv/dI11Unip71UQUYXC -TIWaEFcu8g7hvlr7AgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAwDgYDVR0RBAcwBYID -b25lMA0GCSqGSIb3DQEBDAUAA4IBgQB9Z8xSOhZ7j2i4t1wT9oGTiR24dWQpCP3R -qNVVsLg/Tkm+heKkZKA9qLoE75H8SSCsbMmjW6pvVEoMe/aqeu5CjdapUS/NWE4l -WmKxKKefyIZc95kvh68VPJVQcq6gpZIcnjaFeRfzdmEnFsQhIsp8KjPA8axPyyow -OUIQ2MHIX+y2lUqA307+XTTbKLc+0ouLg4O+Cs8TqFhVD3bZ/2In6z7dA97v5Mpa -gfH4BOO0W7imd2IDvbD2UMpgNLc3KZUul0bxjRxAKWJStoDkeIJ7dUtp9ALD1cvt -6SpPwSDPXxLEBCWMZSCnUhMONUkwFGH4pY+6ikYG4h/kMtCrlIg/3WGIub5eza+2 -h0uatEtmm4F1xzVIJfXIM/u+MDNBpEsq0AC5Ob3qLvSYYhWwXVcp03pP7ODIta2U -al5b6Ch9EAauxVshm7wnAKlRwb1kCgbQ9TpcX+pOBZSvFSmDMANrkXXVr+EfiiPA -cxt9wVtpWIsjRuQfeMnDElFR+lUvzI4= +MIIEMjCCApqgAwIBAgIQH7cox9gfQuKaAwDHzUHYCDANBgkqhkiG9w0BAQwFADB6 +MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRow +GAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEa +MBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwHhcNMjQwOTExMTgzMzM5WhcNMjUw +OTExMTgzMzM5WjAOMQwwCgYDVQQDDANvbmUwggGiMA0GCSqGSIb3DQEBAQUAA4IB +jwAwggGKAoIBgQDbD1K2p5KT+bNLlu2pCblCq0vC16YJG+bKxIDII5yJKS0E4eEY +0esxdTiEHQL9ZQ+XB73xGr+7gW1VAEvuKDFUrxzV1Ab1gPtuHbPzuFUtcWo6Jvao +TayezL3SV5nTmhdBxXGID+oDC7P6Xua6GZ4/u/VlywrHEuZXS8EpaeALYnrSmSaA +y9KpCDMa14pkmklfyt2i/8EEd2a0SSPzc/jBfIbmiQOtkjlyHSzNx3QNTXMduwHC +aifsvqqbkqr8hpqM0UwHAW9JmwFfAgC0Y3gE540Y09DDU8ZlS0/MAmi8q3kJXI6l +pqiUHSrHdD3gprI8ZdRZGf7pRh4oe4Q4w0C1AXSl2bqYHLoNcimwpuFKgBSl7uy/ +Fv0OhXuB2/c7I3JpKroScD8WJl3Sq5gqowQa1fkwSDSaL55hRK0VQRBYGZ7QVLhd +6oww4KitlytVV23eXCw8ae2Qt0HllRd4g1J7yIWezHLP8DlTOpsq1JIicqdtM0ls +lsROKhpU7X+R2EcCAwEAAaMgMB4wDAYDVR0TAQH/BAIwADAOBgNVHREEBzAFggNv +bmUwDQYJKoZIhvcNAQEMBQADggGBAEgkqWlrDbA4s2qs6ZDNVyiFVmVkwVAT3CvP +B3CyP2mLQT56DdOP3QmltoEfVgSbbwgkAO5COE/EzFS0PyMqhNWrtZAS43W1fMg2 +sTyYXGsVAjz1yPTe35Led4uM8eGmh8lOTEedxZJSJemmCJL+QYET/VWHdZ/e8SjD +kvzZrvPWOIfaBpoDqx3xXOXZZYVQkfCnwDwod/Uay2zzAQ9GKjTGBl3HKUSFoLcG +4gkM986zlUqgaekjvxRO4s2+UDS2BLzQcKxa7hHIIdZ3b0ShncbEU1j+o8tsS5zn +U/pEtpewz6JsrN6WVXOl7fIvLa2zpAmNFeNTshheb4ArcKklwGtXKG69DuRJmbIp +qQ/cB+KA66LfWh53WjU0J0TyVNf4hH+RXcG+mvq83/iO/skv2CgJGvTIAQwvnUCy +tfV2+VqntvwEawBB9PjkdK+qLjjNO9WGoCJN4mW0n5DxAJMZgmLs1eVGlUXt4vXH +peih13By9Tz4Km02zQmWgOSM+qrJSg== -----END CERTIFICATE----- diff --git a/Task_1/cert/client/col_one.key b/Task_1/cert/client/col_one.key index 48910b7..a2b8adc 100644 --- a/Task_1/cert/client/col_one.key +++ b/Task_1/cert/client/col_one.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/client/col_two.crt b/Task_1/cert/client/col_two.crt index 730ec05..59caaed 100644 --- a/Task_1/cert/client/col_two.crt +++ b/Task_1/cert/client/col_two.crt @@ -1,25 +1,25 @@ -----BEGIN CERTIFICATE----- -MIIEMzCCApugAwIBAgIRAJu3qMb8yULrtxNZGLWZLx4wDQYJKoZIhvcNAQEMBQAw +MIIEMzCCApugAwIBAgIRAJ4G0+mvck3TvDS56TvxcyUwDQYJKoZIhvcNAQEMBQAw ejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEa MBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMx -GjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMB4XDTI0MDkxMTE4MjY1MVoXDTI1 -MDkxMTE4MjY1MVowDjEMMAoGA1UEAwwDdHdvMIIBojANBgkqhkiG9w0BAQEFAAOC -AY8AMIIBigKCAYEA3xZYYf0702FoEQ81aw+WdE64NWP0qWahkrveGHLQEB7f9jyd -BvvarlgQSd5LesZDlIV+OZp/otW9/UL1BRCocov83yvattp7zVnBXxYcEoFlMeCJ -A2RvN3bp77wM5mLg+cgp3VTqZutapVEIGokMuA/nfL+X5R0JhI0HNSg5Om6fLewb -BDqOJ2gg5Bs2HNTtkZYimnPXHmHzWPxryBDBDVqwVkA9N4lFdjs6068zzVa2hwqS -rnZuyCvWP5JLv69JmCOQbpAYWqITMtxru0ukFtEiXQMBjD+M/qmfzdR7FBNRM4uy -5UIFu5EXii1bT5w/pCqqjKLr8VnovKDZgszWRvJHDIidrFPiIi7Cc8JfTxtSnpb0 -iaotRq/HpczS9Pn3V5eggkIZJeVfpDjHgv6RO15FXr6ClqSYiE0eg3/dr7j11d7t -K41ABUlBGcyaxuDypdWgaY3n0Oi3r1Wg+n2tpMtEcBtVjjPoYslWP6kiswbS4rQz -fBEtEg5JeFRJqzAxAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAwDgYDVR0RBAcwBYID -dHdvMA0GCSqGSIb3DQEBDAUAA4IBgQBEmotad5+zfkjv1UhFaxnNWm9Xsq95W+9P -dugMvnOe/nv/CWpRFGlr5vC0uB+jN2SENh62NuleIpsOi0Lr96PbVbHFSDKTakyg -T4G9ZUBQv6O62FzkUkbhOId/YvfRL+g8OmmuvTyX0KPmS6MvH4QQrA8sQwH22X56 -0VN51K2+R5tLHuid25U72Y0Yt69YQTSoU1BtDNSz5HtlkHfiHe6AM0cmRoaTdw4e -3R/wIGLv91Z7NgvMyR4ao4H4CWWSX1ZhgTbc6sR52iCZG0XAD9lfxAROFPftPxWe -rGIuBcc/fWLeEQJMoHa5M58oKaORj1Ul6Da3Ot/sSjkPuctX7tNyfLhf+0K63M1f -Hwt972SkbyhjoCcNmHvZtB4H9tBe3S2ZG2jWAMStPg87eEAdSHLKmbWmDHNUjCZd -B6viRCSnQiC1uKgh8WiitIDg1ARoA+1EiiBdQs8Nc5mF7ocMt8vvJXLd35x3AYjw -ymfr5BJUrFlNfNNcL8C8ruZtsIe1Fxw= +GjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMB4XDTI0MDkxMTE4MzM0MFoXDTI1 +MDkxMTE4MzM0MFowDjEMMAoGA1UEAwwDdHdvMIIBojANBgkqhkiG9w0BAQEFAAOC +AY8AMIIBigKCAYEA1OHA3roNj4ju6pObbgdLhoCToD9iRGkzUJd4w4N1UqgA2p6R +AWxEqaGpBZ+DYyk3PGxHb8fogG1ETXr2I5KsQKs90pJqWP6coeFb9e+BqYQb7ts1 +0yZgstiPJWTyaXjiIiQPhRvMFFdNnukIbOodtW5Ok4TNTOySNMzuzdMmqZU/Y2Hr +KO22zGE0kDnqe7MstQknMHrKtXGPyCC3YEJ9iDGf3jz4Cn5ty0zX4MGFqz4nw2Bi +FV2ra4LKjDOV5Xi5fLLoMoKTAYUKWOrc9oxfrATKWci+rUKJ30RUif0xj8nvdInm +JYRBBmyZ4u77NM4GTQV5Dgf5Vf9t+/IgOU+rLZeqG+y6FjbzGW4vbIvkmzuY9Aau +isztfR5Hgjr2kZxK2LUPwJy9n3qo6HypPeu1y9HdB4TTpPqdnPPVdxQI0pVfSHCP +AODWdHnqxwfwTzGQmJ+QH32Xv/g7RyHwaBU8IdYn8nXga0VCWLGqf/ZtFXkY7m0B +VlgQqsyXwl2pL3NLAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAwDgYDVR0RBAcwBYID +dHdvMA0GCSqGSIb3DQEBDAUAA4IBgQBG04+4fcPYJgrFCPMnS71Kvo2pu8IgpCzR +zzHD0ZLJB2GXhKuOe5gFuEcCiGKWlqfJTP2MHdTbAHbXi0+6HPLc5X1VuED7vTRP +YpcgvmjZjkz3HU8hILvKGZApU+P7YWhCRN5/ukqnFbwW37u29bxj3m7XcMzN2+eI +s1R6ZBLnVwz/5YarJaLwwvTi+FciAyQDPIsFcWP/r6Poe7l4CdqSIf1zrC1Fna9Q +xQt7BrCLdQOdgSQaC9Y6gF69v+dVc9RUP5WD4/6L8EmeKl9VL0no2zeuScQbtg9A +c2NMyNg99F0I1ZUvMjo5WFeT5oe3Z1Qn4KIVBAWeM5UfpNAJggba7GJ1dAoF3CvG +aZEwAwKvxgHQoowoD+lfUEewo0hC61kH7BuozEH9COs5lL/Pu8p2p2/sLRtO+iF8 +Y2jRJ7uSKNpeHO4HwNnBGMMUNv0u8xr5LBccpSuu2WX8C5YJYtg2afNJNfWsbYUJ +Sd9R4wSmeO5SPrj+SVgcz0CUiSYueSE= -----END CERTIFICATE----- diff --git a/Task_1/cert/client/col_two.key b/Task_1/cert/client/col_two.key index 90dccaf..61e0701 100644 --- a/Task_1/cert/client/col_two.key +++ b/Task_1/cert/client/col_two.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/col_one.csr b/Task_1/cert/col_one.csr index 294a766..b0c7548 100644 --- a/Task_1/cert/col_one.csr +++ b/Task_1/cert/col_one.csr @@ -1,22 +1,22 @@ -----BEGIN CERTIFICATE REQUEST----- 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 -----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/col_two.csr b/Task_1/cert/col_two.csr index caafbe7..9af7b75 100644 --- a/Task_1/cert/col_two.csr +++ b/Task_1/cert/col_two.csr @@ -1,22 +1,22 @@ -----BEGIN CERTIFICATE REQUEST----- MIIDqjCCAhICAQAwDjEMMAoGA1UEAwwDdHdvMIIBojANBgkqhkiG9w0BAQEFAAOC -AY8AMIIBigKCAYEA3xZYYf0702FoEQ81aw+WdE64NWP0qWahkrveGHLQEB7f9jyd -BvvarlgQSd5LesZDlIV+OZp/otW9/UL1BRCocov83yvattp7zVnBXxYcEoFlMeCJ -A2RvN3bp77wM5mLg+cgp3VTqZutapVEIGokMuA/nfL+X5R0JhI0HNSg5Om6fLewb -BDqOJ2gg5Bs2HNTtkZYimnPXHmHzWPxryBDBDVqwVkA9N4lFdjs6068zzVa2hwqS -rnZuyCvWP5JLv69JmCOQbpAYWqITMtxru0ukFtEiXQMBjD+M/qmfzdR7FBNRM4uy -5UIFu5EXii1bT5w/pCqqjKLr8VnovKDZgszWRvJHDIidrFPiIi7Cc8JfTxtSnpb0 -iaotRq/HpczS9Pn3V5eggkIZJeVfpDjHgv6RO15FXr6ClqSYiE0eg3/dr7j11d7t -K41ABUlBGcyaxuDypdWgaY3n0Oi3r1Wg+n2tpMtEcBtVjjPoYslWP6kiswbS4rQz -fBEtEg5JeFRJqzAxAgMBAAGgVzBVBgkqhkiG9w0BCQ4xSDBGMAwGA1UdEwEB/wQC +AY8AMIIBigKCAYEA1OHA3roNj4ju6pObbgdLhoCToD9iRGkzUJd4w4N1UqgA2p6R +AWxEqaGpBZ+DYyk3PGxHb8fogG1ETXr2I5KsQKs90pJqWP6coeFb9e+BqYQb7ts1 +0yZgstiPJWTyaXjiIiQPhRvMFFdNnukIbOodtW5Ok4TNTOySNMzuzdMmqZU/Y2Hr +KO22zGE0kDnqe7MstQknMHrKtXGPyCC3YEJ9iDGf3jz4Cn5ty0zX4MGFqz4nw2Bi +FV2ra4LKjDOV5Xi5fLLoMoKTAYUKWOrc9oxfrATKWci+rUKJ30RUif0xj8nvdInm +JYRBBmyZ4u77NM4GTQV5Dgf5Vf9t+/IgOU+rLZeqG+y6FjbzGW4vbIvkmzuY9Aau +isztfR5Hgjr2kZxK2LUPwJy9n3qo6HypPeu1y9HdB4TTpPqdnPPVdxQI0pVfSHCP +AODWdHnqxwfwTzGQmJ+QH32Xv/g7RyHwaBU8IdYn8nXga0VCWLGqf/ZtFXkY7m0B +VlgQqsyXwl2pL3NLAgMBAAGgVzBVBgkqhkiG9w0BCQ4xSDBGMAwGA1UdEwEB/wQC MAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDgYDVR0PAQH/BAQDAgWgMA4GA1Ud -EQQHMAWCA3R3bzANBgkqhkiG9w0BAQwFAAOCAYEA0V2tjJ0IOCqx+aQUgPcYKMF6 -7DmazcTsgwuZL7ZF9VtLAaa3bOIwoZ285JBgXoIZ1+GdVfTf6zZpRSKRBHaAhkOn -nQOqhO2kAenPTPpQarpQqldWaXw1Lbv/cbudlJMDLXrDnmHpBHzfmKk3WqtlqI+M -jlgGPsIUGBpjCTe3rgd76iv80LxW+mRwSKgh2VYMJo7KOLhmnuexhLi8M2Kuajk0 -6x+/ZQIaY2lh8HPMccAdws6ILi4l5o+fhHyCNhuHS34t7lE6PlkOpzWTR2QHMGVB -ZgIdiuO4A6EDHjb8f//2jDp2NME4LdmkwD1zgwWXMWMw2YFA+eRLohTXrM5fokaD -3tK52eiV3HpcQ0t0eB2UdIUN7SNIF9fCG05ha5AacBfJ0IV8fua8DChlzLT9wrRm -1s9oP3H4GTJYzReEFkPoa2zBtZOoZ7hx9od7saIAvyEmOZMpzyCMV+2/Jx21ctO6 -bP2WEwa1JGCZureg4oebw1GsUBqjed7jebzLLuVF +EQQHMAWCA3R3bzANBgkqhkiG9w0BAQwFAAOCAYEAlCwGpOHV6b6sFkkLPhQXFJqE +kXuuhQw83fgwoQhkborUhJkmRK1OHSS/qorKschEe0EJUgHmSdFhyCPrynAtbGku +JreI4jfuzVGMOGllUwjCDHfJRnvNlUneZtjp2R+qc6s5jSG29e0N6RRqXDS6AYLE +WRqrDUN0LvCrXpcm6yCHAy9B0EhXKEkTpIg7R/0uktIGHy3R6aZOMUONI978m3kX +beSekDa0E+gtta9vYB6kkBYgNSiM4JWsJ1U+w2xQ6/em4EsrwCn8jekLy7fqBMQ2 +M3aUkneRZmg9H+RaYidU344LDathZgoBzJbsOwHrpEithDKO+4ifBtIBEyBquCrX +TEQzIR3AB9u274f5FWjLED0RSPF1LPhbXEHQ6vIuEia4gkmgemeg+R7rd+73tlCx +IaiE1JksMuK3ZJBi274w37uJn8L+5I2hmir4e8IioELS6pFmhJLzTxMkBE8hIX6l +BltdYmwDkhxGwCL2kOnMRnQC2V2nLacZU0u2SaSB -----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt index a4c46cf..633940b 100644 --- a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt +++ b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt @@ -1,26 +1,26 @@ -----BEGIN CERTIFICATE----- -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 -VaIf1r7nNToy1dBNk+WG2yQ= +CSqGSIb3DQEBDAUAA4IBgQAPNCUl93k9/ORf5VnqZthcxcTF+QH/vk2qEAncfari +StMDI0ZLnNCmWQQhg3OVZAq/SrpfH7jgdeXmHhk5TsCtKm48muR2slNO5QNEkKu3 +f3jU/1TBOjXE5VxNe06/ITFrYwiBmkY58fOy19XbN3y1Jw28ypt5UcO26lDEDrC/ +axVo66PomD54mBV/9A9mZFow3Yofb1rOXy//vp+9HmD8Ga0Gn4y9wKq+eneDppTn +ZgUzJT9vVjMQWQPUOSoHWWSfde8Ld7mlj/IhXIsjoFjlwZ8jNvL/+UN+CQidwNr4 +WIrGsxvQu03YE0tN0DqNFLwZOxXUQXHDS86lQEesHk3YTOBRXpEjNMiiOKcvP+bi +mw5b2NnEMR/LomBU1tJmkUc/Hg3fU4/eNLwEr4GhXQ5VCCndaYPEy3EmloG1S37B +XKK4YESilMcGotkzrlUtoAkSAig+4Wx2iXP8opMMiqo6mX/YvGuPEQSXkmuzW8a/ +A7k9iH7GU0iUwzaSNf9W0mY= -----END CERTIFICATE----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr index 57855a3..daca1be 100644 --- a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr +++ b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr @@ -1,23 +1,23 @@ -----BEGIN CERTIFICATE REQUEST----- MIID1DCCAjwCAQAwIzEhMB8GA1UEAwwYaW4tb3RhLTIzMjM0Ny5hZHMuaXUuZWR1 -MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAtCWlTj/3PMafbJiDkKks -8nGqfg0LUx9MCAb5iIigyV6ie0gDZJsbiI3V4s7Am75GTOD8M7WoOZg3cTc2Zk9C -XlY9IEB1KRDroggSI57AQeF9tPESe71D+VuNxW+fywxqLa+lGPsQBPIvf1qLPQ0/ -TLGfh1mOXEfkBQEyb7AX1/WRYGM7zK3MP4feQQfSu3GIx2J5obJVskrzKgARbRMe -L4IqlAkHkP7oNEc+GXVmYMpj0IymUPn+fVEtEzjc+KqABSAYAyMrhoERLYIn0yJZ -e1p8S94Ul1Mms/XF7g7Vl5diW18EgdGbT4fzTwiMxk6878/smutzsNlmmIFkwcbp -BADcycE1n3LfqSe7OaUu5bL9BT6FxbZXR2nxIgjSxB1Vf488kYYbhHk3ZGciFETn -MO7mHWIpP9q6ZnxnmzSzayKwZtdES8ZfDEMjJeSi2DHlZVvdP2JuNojXJgvw6c0Q -pNAfcFjMeIeG4niG0inhlwQLCWC6veKGPMb2KmuCVoKBAgMBAAGgbDBqBgkqhkiG +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAyPkgPfmtcwH/cUH/9fWi +pdTjT99WU5mYRel8ZXV62/zYeVB7wIUkvmKVkupeLWM7AZVde8QwZk112WcVyIy8 +AZnM5gupyIc19a1+k+Q+lcDzB6OJV6y64/IEDDMX+H5wVTpV/1zM053OZRsGp6VQ +XUpYbiij0i5pBWRFeZi7e/dCJi7Si3rdmUITLl3VLNAIhdBb10+7xQTSUnuTHyHj +x/5ZtM0hwnlhvTo6HgaE4klvThEg/glKjn/nDX3Kco6UZIXt46QlFM7UaoTg9zZB +cRpgdvcjFvO5dlSednoMv2wFrVEAgdzPOcjInjZMFE0zK7OKGnA7gLKAmc70cleW +wQDQ6668qIWADf1RyMDyCjZ+ozBncHMvOlkQEdJkImW5amM6RcTnNJDpeK0PmEpf +p2+npwTYaeQy/M0Ax4bLbVscAOfcJpYgr2xiLJ0u+CG7ETwJL58tAlV9mP+4yQyE +1DWkIlKTNzTCcmM/XfrQcxUh4QKeDPq7UWN+s1TVCWQxAgMBAAGgbDBqBgkqhkiG 9w0BCQ4xXTBbMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwEw DgYDVR0PAQH/BAQDAgWgMCMGA1UdEQQcMBqCGGluLW90YS0yMzIzNDcuYWRzLml1 -LmVkdTANBgkqhkiG9w0BAQwFAAOCAYEADzFEFHJhK6AHi9dvjAHXKCccgsSEZphx -6UGCr14GOgt7UJoiTavc3hSmCWLaj5HSrp8GMfP+96RWb1Bcx2MNccVuR/kzzNdn -WuTzW4CWxT0XFz168CBKpzYz0EMLFmXQ5AArFyqf+nZ5r1qplGYkvnmy9QFQ/jnh -+kHIMPbCTEa2cd1XahJdoYTZozXsxLRB4XxzNmsEIbmuZJmXJgWRdzEjhysec5kc -G22306GhhHzAo2gt/hlH71Oqu2X0SjroiivrbtJ9D9i2u+x+BVTWwVJJqL2W7gMN -+KNHX4nftoUiopUqmh+NWiFcbM29CP/izm70HohoUfl1AplV0d3wWgn9z24xaPbk -PFHlHrE5EvLfGf3W8usiTBEs10Gh8vIX/bdYn9flJ3Ixl3gRW2Fr/mXUZt/sXx6r -eIE910wFr2UmLrmCWHAzO838SG6EIcv8XaXXyT1ayHPGvneZqbS/aObZuBDwykDo -v27MJTivVuYO938ZhJXgaY+GFEeDYnCJ +LmVkdTANBgkqhkiG9w0BAQwFAAOCAYEAhh8AeJTmk4D0uYe3/+fwLzgFG0csjF++ +PL8GKZewkWLQz2/AEO29B/vXU3QZNJh1iRkvFnRykgaJ1qbpT4wA4oifPxf2Dg/y ++EdFB3iONhW4sRs7vXOylqm5ql4o1r1y7kDEA59+1O9WoIko1YtOjUudidNwmld/ +qygEVrPoLSpsKkzDveP8ELfNbzJYOyg1bI1Xcs0WYKNRBe2zML5+2ul2rZcpeUbr +o9SI/Y+oYBbNeDyqP5zd7gfKWA6cNw24ZNZ8GXmJpkiwcdR34pYkB/s9S3HhdtqY +EhpSCNBBcftRE77AEB1oiQZPEyKTuwh5WhNFIZ0piw7vJ2sa+VD4Qr1yctrY4zxv +CmJPAbFSLRsWEfaKwlg/qTwN9L91jFFy7er1zZD+Pu8Ea6Tod3LDT1zSaOGk/fvW +WY5lXYhpkG6hHT1wcx7ttsPd4TZ2d/Rl1Pb6iFHkVpLXd+1uExHie32O5f/dypIn +6iJUyb4og+Z2+itZYCxpze8XfjmVlW2H -----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key index c680f4f..77e8bff 100644 --- a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key +++ b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -MIIG4gIBAAKCAYEAtCWlTj/3PMafbJiDkKks8nGqfg0LUx9MCAb5iIigyV6ie0gD -ZJsbiI3V4s7Am75GTOD8M7WoOZg3cTc2Zk9CXlY9IEB1KRDroggSI57AQeF9tPES -e71D+VuNxW+fywxqLa+lGPsQBPIvf1qLPQ0/TLGfh1mOXEfkBQEyb7AX1/WRYGM7 -zK3MP4feQQfSu3GIx2J5obJVskrzKgARbRMeL4IqlAkHkP7oNEc+GXVmYMpj0Iym -UPn+fVEtEzjc+KqABSAYAyMrhoERLYIn0yJZe1p8S94Ul1Mms/XF7g7Vl5diW18E -gdGbT4fzTwiMxk6878/smutzsNlmmIFkwcbpBADcycE1n3LfqSe7OaUu5bL9BT6F -xbZXR2nxIgjSxB1Vf488kYYbhHk3ZGciFETnMO7mHWIpP9q6ZnxnmzSzayKwZtdE -S8ZfDEMjJeSi2DHlZVvdP2JuNojXJgvw6c0QpNAfcFjMeIeG4niG0inhlwQLCWC6 -veKGPMb2KmuCVoKBAgMBAAECggGAEG8XPpVUBge2GztqFCg0xRzEsYlZ2UBDiL9v -I+sX5OrkznOOOK80Mq/CvXVASazw35pOM57srO1jkGjZpflwy+eY3bB3p7KHFnHf -Sr/UmOX72GX+Gkr0sKKvIx3o4UZ9iLOrb2UW6+aWmer+BQiod8QD8j5jn+xAg0rd -yaXSNQWuWJFQ7x4DQh/wUPUoXqhvsoW7pBo/WlufRXt6W32ZHTsmDHlq5um0L/G4 -Wuz0dRu9gZTVJtG5iz/cqXJgaTBvhAsTB3o2N/x66JamOoUuvSt3K32NzRca2Tt9 -YV26z8kX2X+5bflounkDjznD1iz4kn7hSEAnF90vFLwdVlrm0kMbzXnaNC9IgQul -bZ2zfQM9mvXHWsnj3c0Y/0fskLkoIlTiFbM0EOVojU8VfWx5T+jKvv1iWec0mg24 -4I1zX+4fsgvun1GzhJZuFW9TYuDiqrZpnx2JBwymPhznwdlz0Xwju0x/OT48Zyj+ -UBrwPm1mhaPw6ZDdVu1p9AYkOt/ZAoHBAPZUpa7HW7UHkpJTc4cDajhHe/2NOaAN -cf1+AglQIzb3vwZDxe3xz4W6lfyif2Ig7d7vYX6qKzyv5HJ3HkhqZo3r+5YPdFna -3/7VXh2bOLEKwu0A59c/+vOfshOqQwrdX52S2AmjtuzzZAF2/dk+W2KBkgdUY9iv -a9cgjZD5nWQ4PkZejOIuPKnZ/ub4B/T60IqiXqAwQydbfuxt+DsLl0zhcid6AVTP -7scBPJMKaZf0/iUnd4TWr8H4dv17kM+XWQKBwQC7N+0MEykdVhvmTQiRqbzwkEUy -1RcI+2gQCVcg0iaHfHCwftmv4+XkQ8pXC/PiYtctHlHSyQ8IUMEqeAoL+C6Xwwno -nsteyF73gJUzwVX9C+0pUIC1uMWfTEJpdF5LEmVwIP7544xh+npqN4OCIj7SieHZ -NnuhFyZHBfWX00NmKW7OcMbm+1kZsJrYQMS8Dlpk2cFaughkvQctsOG0X0WLrl/k -PZ787LigqNlcNpIgjEWernebQvt35m621ny+B2kCgcAOsFWA6pppXR48Y4WME4QN -/xVBtV4uUR7vAsiUTZcL/BIECZ6P5c9+JfYzrmzyKQyGMrgZmYQihkqVGM1RfCbJ -Z70E4b8KbKbWx1ppYYwr4nxlLZyllUcdp/QygACncTP2bX88c+rAjnL0M2hHwBQq -95cBoOKjVTKVDXfjoT7lbwUnpRO5mRA9AKbWlwvCbAJrgesqmjYm7qnO52/Z9YL8 -LqVj/T5/FDck3soB6qkJSq6tAIF8BmFMq8hMrUWhW2ECgcANV/QWOztf8uY0KONm -dmGYB8BW2ic1Ja4KDpBeL3w9hdoGSlQ7nBOjjE1cnOZ6CS9q8NFGI7xljFPoMfwN -VFgFywnmwYKfM8rI+yonMS1uxq3Vlv5FdXDoZKgLGhcqZJpEPqXNq7EyvoaBEYnW -+Zfeq6MkNyTim2LIBx20/4K7QlK6dgFHLzzvfs3agetDuAYrT/XfAIlenLZpREUh -9PRg+0GsY9P0FO8nzEEJuH37weOoZqjxsPl5Vzwm3eywIpkCgcAvHqfkCV3MZlnd -Qo+xOMGYwAenBhcIPUG1DKoQmha1h8QNk51oBFnV1OfRf6JXUsjhFbQsSEi11+hh -wMudNrZIrDcVMfRbe/sbxZvP11clTr/rmrP/5ciYHeyyYupq4AQiuCBjJ4Z1s/8f -HxbTYI1AIVoCxbsgekWLmInw0w5za6F4/C86GML8hLFR6eYryrfBpp4V2ArgWtP/ -UOgg0tfsf6OKaFhqEgMD2ZUjTjnDowHMDqhtwcDeCCzfdOjBPh0= +MIIG4wIBAAKCAYEAyPkgPfmtcwH/cUH/9fWipdTjT99WU5mYRel8ZXV62/zYeVB7 +wIUkvmKVkupeLWM7AZVde8QwZk112WcVyIy8AZnM5gupyIc19a1+k+Q+lcDzB6OJ +V6y64/IEDDMX+H5wVTpV/1zM053OZRsGp6VQXUpYbiij0i5pBWRFeZi7e/dCJi7S +i3rdmUITLl3VLNAIhdBb10+7xQTSUnuTHyHjx/5ZtM0hwnlhvTo6HgaE4klvThEg +/glKjn/nDX3Kco6UZIXt46QlFM7UaoTg9zZBcRpgdvcjFvO5dlSednoMv2wFrVEA +gdzPOcjInjZMFE0zK7OKGnA7gLKAmc70cleWwQDQ6668qIWADf1RyMDyCjZ+ozBn +cHMvOlkQEdJkImW5amM6RcTnNJDpeK0PmEpfp2+npwTYaeQy/M0Ax4bLbVscAOfc +JpYgr2xiLJ0u+CG7ETwJL58tAlV9mP+4yQyE1DWkIlKTNzTCcmM/XfrQcxUh4QKe +DPq7UWN+s1TVCWQxAgMBAAECggGABEp3YwNb7e7uvIUPeTmln5tIQCoRTocivmli +B8uGlEBVgd+TSNS+6Fa0AVdCK/9ooNvGy2/wpZqFR99A0o+YqwMU4huBJEAoyYZL +A87VfD6KodDey5GrStcduYH0wtA2R0eP0vww/lqp77QwQ++OY/OEqFNzTfdCNESE +DDjT1e19StHommRE63MC9FQ6CzMk33CHqXTxGh+EexDa3wkK8zftw+O2Uw/i45ak +64OxniA5wWWxueLKZfj6nqnfIuuC22CwlFISwZdxYZPc628S+F0Ua5Y8muDmsZtJ +MWg4aZkZ1GiOKBMvt1MaY9sPKcuv2+TaKfujcZ+YPTYWeV/qO0uzJWfaOdRSh+tX +tYWje+4mdOIBhf3Qnqc43nQSH1up/1vj73TU1sNE+S2AHFHCyQV4FCSItX4HC1xk +KmaiSLRvHpIR6VNCTcX8oK3m5cNSfLyIYyr2Vhpu6yC1NoG3BYx07M6KxYE+NZ+w +rrrXersehsUd+mLvJWKFRvSSfpGtAoHBAO7mX3x4ExWhWFtUq9XRNYlEtlVO+7sW +8Fa4zDqke5JX8shfHXdk6r46mAtW9E6FsTzhVXh1Vra+Q+1DqnRWM/JIOEBFyen/ +TZNoukj4QdI9BVG58CWHy/44eGKU2FWtk8q0bshB4pO/B1MURfYA7lJ6DydnhLpB +BuEC12KPzfRryFy/KmoZ7L/vZzUncJCH3X3Nh/a+QwCDzSIG7fGbE0l9hqeetQgw +wymadiyZwzcuU0hFpgt/4+zNAeZGsq4TdQKBwQDXW8d7rlIAPS2RXKqIiW0oXOhx +ZYXhPFIcFytvTmVv8jHP4V0AnhOu3JetLnet1vBglKFuAt2bEJMQeCLkdS1YlyBP +v+tY1opAyiyWLZZFq+vu/nbtXhSGNRRWG0YbVm36cvXfWA+iTzXQEfFSir0RxK7A +udlr5pWl+nT+LkEmSmzAQPBq5teVPPbR23PpactFCB5jw2lsYwsP5jSwB42Tx4iw +RMy/o5YcBj+gEAKQRYfb5vUT7bs0iBiLxIy4Ik0CgcBlhUyKjlQ92uS7Ww3yvQbt +IGADfJ8I8ESN9dYEDaXdmLY5ZAIXnLEMycWW/Aqx26pn3rH9kI+a9NvU1e53pbJJ +gVs2JPIbGD0VKWoQXD9MYlYCVuuwZzbO/5xY+Du+nRazC14Qh78LXiB0s6bPVbHx +JqGN8zW6GKwdrqFs5wN0nOD2WN5jXET5g3juY6Y4JSSAs3jV6CB89YWUsjEnfOkD +T+6LCKyRoHcvFM6nQWht6KfHjKF1PZHULYJjIyQHSYkCgcAx1vS4o+QoWAA2tupk +hOF1SOMmcydjs/EQvS/5J3yERtnOUUqTvQGzIywbETjzS14ADAW8Dv+4RkKyugrh +MlkXOopoynKt8aC3U9KzwsMXRq1odw2Q64f2c0xMjS1RYFQ9dOOAF8IufwRmLfDa +eG8/MHR898XgmdGiQu9Wb9/1+51ldOHu65OS3zQD5zTRHQHE7RcTYYMBaX6C5HTn +FChovfHdUV7NLw+rVqrc4TemqeDCPJYVUZxUkPaVShyC9LUCgcEArbYMlKRc6JAl +xoB8uuJMr9AN3U3au6B6fw2yRtVTI3ehPtGF9rESfKg/DbhTd52r+sf4h7Isl2dD +hOno6taJuPj5HaLNN1WQU3DlnjwhEaqbsc+PTjLpUjA5yfeNKt5xTIN8p27vJOeK +a5QUiOzRtPy/Kyri9odOvb5IiNaaDCRoPSw/80MnkCx66HfDoGR6lqG5xfMEGxrl +IpALh0ch3zEQ0hCbzfMZe+irkppYbCh2UYlrOqNJhJeDCABRKlw/ -----END RSA PRIVATE KEY----- diff --git a/Task_1/fets_challenge/experiment.py b/Task_1/fets_challenge/experiment.py index ddef758..23ff669 100644 --- a/Task_1/fets_challenge/experiment.py +++ b/Task_1/fets_challenge/experiment.py @@ -14,6 +14,7 @@ import numpy as np import pandas as pd from openfl.utilities import TensorKey +from openfl.utilities.split import split_tensor_dict_for_holdouts from openfl.protocols import utils import openfl.native as fx import torch From 9f3d2bf8849ef2a11a8657c84e13d66ee5968420 Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Mon, 16 Sep 2024 11:31:13 -0400 Subject: [PATCH 05/22] . --- Task_1/.gitignore | 2 + Task_1/cert/ca/root-ca.crt | 50 ++++----- Task_1/cert/ca/root-ca/private/root-ca.key | 74 ++++++------- Task_1/cert/ca/signing-ca.crt | 50 ++++----- Task_1/cert/ca/signing-ca.csr | 36 +++---- .../cert/ca/signing-ca/private/signing-ca.key | 74 ++++++------- Task_1/cert/cert_chain.crt | 100 +++++++++--------- Task_1/cert/client/col_one.crt | 42 ++++---- Task_1/cert/client/col_one.key | 74 ++++++------- Task_1/cert/client/col_two.crt | 46 ++++---- Task_1/cert/client/col_two.key | 74 ++++++------- Task_1/cert/col_one.csr | 36 +++---- Task_1/cert/col_two.csr | 36 +++---- .../server/agg_in-ota-232347.ads.iu.edu.crt | 42 ++++---- .../server/agg_in-ota-232347.ads.iu.edu.csr | 36 +++---- .../server/agg_in-ota-232347.ads.iu.edu.key | 74 ++++++------- .../fets_challenge_workspace/plan/plan.yaml | 8 +- 17 files changed, 428 insertions(+), 426 deletions(-) diff --git a/Task_1/.gitignore b/Task_1/.gitignore index 230a809..264d695 100644 --- a/Task_1/.gitignore +++ b/Task_1/.gitignore @@ -4,3 +4,5 @@ FeTS_Challenge_RL.py FeTS_Challenge_RecEng.py FeTS_Challenge_leonardklausman.py *final_submission* +build/* +*cert* diff --git a/Task_1/cert/ca/root-ca.crt b/Task_1/cert/ca/root-ca.crt index 5849970..330270d 100644 --- a/Task_1/cert/ca/root-ca.crt +++ b/Task_1/cert/ca/root-ca.crt @@ -1,27 +1,27 @@ -----BEGIN CERTIFICATE----- -MIIEhTCCAu2gAwIBAgIQf/LP+qCNTsu9Jpr1CRWy7jANBgkqhkiG9w0BAQwFADB0 -MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRcw -FQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEXMBUG -A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTExMTgzMzM5WhcNMjUwOTExMTgz -MzM5WjB0MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt -cGxlMRcwFQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIElu -YzEXMBUGA1UECwwOU2ltcGxlIFJvb3QgQ0EwggGiMA0GCSqGSIb3DQEBAQUAA4IB -jwAwggGKAoIBgQCYaWP6SbNjJaQ/43pIyigPEgmV95l9GmpxfP/h/VDyyA5IvbPh -ZIjvwUM+nKkPt1AlJPAUZeJC4OU4rCtJ+VPoSEPIZTS/b1DD5f4GSqyo0mKyvMBz -kNfrFXmdeFnCg396+mIvyceC1+lKC0B9wbxv9/2wEOqGlQJIzIJBbr517LDaZs7T -QbrjpecMjAa1B959sxvQeDa3kgSJXzwbKSu5XHy0sxa7LSwVrf/3YIZ1c+q/yNPw -ocN6goDGb6VP51sIbCP5XssmdBB8xhxJ9vYip/HnfsZ+fOXUJAoi+/UwoTHCIEOR -ETZn7WiESWMu36EQW8M+gDqYE1CiCADJN57np9YZhJXBHGJKEK7IVrT5fYDnVsBF -YN7bMDCrvj86kq9QKLntfz+SUmlz9ZWkVVIqtjO5ukkwe+UWKovIbfyuV6WSoX0W -JPItv/ixXuW4fnkftUnq62F45pvFx0dfZNLwbvKLfEN/YPm5alsLK5OPwVJpm2MX -PuQCiozNenV+c1cCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B -AQwFAAOCAYEAdcnP9d3assTHyye+aYX4x892YolGrRh3I9FALZXAFvdw7lG2HO1n -INltE1VA7giSfDyt9304Xmfnv7y4rKP/eH4Plnl5hLI31Ox/ZMPkBNqN9PvmdT6S -kfAVHq1Mw8koTPyu0gQwJERqBhKJwHYwAZZiSLEjxawgGtXSEV4Yly/ShXS3+R2D -6OdVOkrZx0vDZoIgE7BO5hV+xssPTZueasVCQTTMHq5dRkscVVUIlYrvx7KOOIU9 -gcWNvNp+IBDXRDNaLfb107TxSnLtnHF3t6IKlhBHqEnf6rRmHE1wqyFyMNssg6Qm -AjvZzDFjhwlOXjN5/KG3+5veh07ZIlb9Wfez4FbswDSpbEgcarPGEhzPjOjEjQX5 -fZg7w3+kzHn92MWvVDPFa3LEdTI/FM5h/vx3O4b3xNX15pWuz1WIdQS49vq8Z3kk -/RLd/wg4730HcdVoLem2v/RvTcJ+NOI+iwrKbst7xMjs4K/rm3BY4dorX2XoyVG2 -tdt3IBDuOSDC +MIIEhjCCAu6gAwIBAgIRANUyVSicTEI8mvC0oI+yDUswDQYJKoZIhvcNAQEMBQAw +dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX +MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV +BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDkxNTAwNDkzNFoXDTI1MDkxNTAw +NDkzNFowdDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp +bXBsZTEXMBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJ +bmMxFzAVBgNVBAsMDlNpbXBsZSBSb290IENBMIIBojANBgkqhkiG9w0BAQEFAAOC +AY8AMIIBigKCAYEA3pjjbfACLCqi5GHZ/RqxZQIg08B3kBWdowCbSmkDtiCgLZx4 +Ed3JNhLNneHYf5hkseWfzIluNsEO5hMouZ4/lTxc+rkx+ArpHl8s8PuSkxg7GUQj +g1em2kdn+PKCSOAPAwXRV2gp5G0lYPdmNUNlt7ub/n+KZ06P7kTlZ3Yrh5+EC1Hb +0K7lO2oY+FO6B2/Pwod4vWufdJUL7tRrjYSoV3nBYjUmtIbxEbgwnpzElge8eb0B +6m05h2Nmewox4ZItfeDISUrk9N4Ux5cPVmcPXNkwHMQvKBn2OIgJsaOWlDcE5JiW +f7OG0AzZx4hFzkTyyYUTfzwyEOiO3G8GtZscKBJe0xBh2ggISKjTVhLsTBsiTz3i +XR8QmK/NvXM6BElwKXbzQqYFMKZUNHRnw3AUAYce3D+s8u7jGTBq3fhKgggy7K5L +iypKDRhQDg+gchznPoZeEJjgm2qiT+hn32q9USgHIvwswfudajHkVNCM7oGMz8H/ +GdoIXcIWNMtKV4gvAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN +AQEMBQADggGBACPuW17XRhwJC6Grdygb4sHxK7HqxWv6SzjQTK1aaEUtYXF76J4J +BNrvFNm425LMVPyiY2gInAYsys+H5iASlzWikigGrrDT4kQOT7GTd9+49C8LW5tA +qWwKM3eWBAk4waxn/OYWOwqSXFEVqEkWv4jE1rcRGX+J5FhyZfZ7NvFmmqaqoAH8 ++Lp3IM5cVTl19DPGBwT3fJ1V1TP9dV+RkziXSLEy8w3XdTrghBL3ZdXoIpPhcbJR +dk9Jh7hESrT7a2PVZr/w5a7V+g6Yab+1NXQ0jAz9e8cM1kPP3HYpIhrvUetJm1eJ +D0Um1m6zItOM/AFbr7JMszcUHIZ2qSw3Chl2T6ZTHm0wL/UbtZWhBll42WJ/Tqnx +JZLllFpTmckg+qYJ0tA4qnGMcW0/XJUTOOj7ECsQRHRJc0gEQnTbwYlBY+/k67dU +lqdsIADt4Ee7a4EOuH6QGk2FSTGZitQs9v+dDBTT3Io5ZQIw9B+TLIjXrUheAY20 +epcLyiWOb2qOKA== -----END CERTIFICATE----- diff --git a/Task_1/cert/ca/root-ca/private/root-ca.key b/Task_1/cert/ca/root-ca/private/root-ca.key index 7b48fb3..f6dcbba 100644 --- a/Task_1/cert/ca/root-ca/private/root-ca.key +++ b/Task_1/cert/ca/root-ca/private/root-ca.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -MIIG4wIBAAKCAYEAmGlj+kmzYyWkP+N6SMooDxIJlfeZfRpqcXz/4f1Q8sgOSL2z -4WSI78FDPpypD7dQJSTwFGXiQuDlOKwrSflT6EhDyGU0v29Qw+X+BkqsqNJisrzA -c5DX6xV5nXhZwoN/evpiL8nHgtfpSgtAfcG8b/f9sBDqhpUCSMyCQW6+deyw2mbO -00G646XnDIwGtQfefbMb0Hg2t5IEiV88GykruVx8tLMWuy0sFa3/92CGdXPqv8jT -8KHDeoKAxm+lT+dbCGwj+V7LJnQQfMYcSfb2Iqfx537Gfnzl1CQKIvv1MKExwiBD -kRE2Z+1ohEljLt+hEFvDPoA6mBNQoggAyTee56fWGYSVwRxiShCuyFa0+X2A51bA -RWDe2zAwq74/OpKvUCi57X8/klJpc/WVpFVSKrYzubpJMHvlFiqLyG38rlelkqF9 -FiTyLb/4sV7luH55H7VJ6utheOabxcdHX2TS8G7yi3xDf2D5uWpbCyuTj8FSaZtj -Fz7kAoqMzXp1fnNXAgMBAAECggGAAS4KWMJVTIEwF6aFKHxteaBkHpsUvxkt6xmn -9BySkdk78xLfikZ4S5LYGGtSC7hu5bq2zmbzgh0Hk+a79w33uPvw5Q4+LZ/eT4Xq -RNYzJqNqTC6V4XnPkhb6eAjvI52s+6C7PdohXJabTGLF6bNO6CGn/xhCbdmdc5Qn -C1FLfCeMPu8+I/iFn9mFmQfvIrD1kfeJpurR/Eh5wdkmN/ebn7W4PsCG09rHqpX2 -6KKrUnbGlxwmN93+C2a95HYHdj+OO8rg0IL5bfUmYz9Vusxff6zokQN+JN9euRiv -LvS8/M+cWnvGOaSkyJDfYlYPwoXTadtls9i+n9ojc/hUiEtn3GQibAYjo7MwxJFj -XDZe7vFakXgkoK2gwA0oY/F11WeSae/HkqoQSzRDLxtIGtDFLlGJN+pJPjoEKrtd -JOXmcNwUoykQgkt84To9u7DfK64cK48h7nDwSsLLxp35WmXT7SNrpWUBnJgX84Nn -Kh1mAbnTxO32CX+ClZyZ+ojdvurxAoHBAMXu6wkHjDbc9prKmaOKSfRDfzb9JLAD -m2JMIMcEHOxZWMXdfzXeLI29OC4elXi9i/2gZ8QJZDr68eZ+hPBmLtb0czy0hRN/ -u6qDuc5vJ94TVL2OdNfB8lwWyJTx0wLHADGZ+5lubxhKwwrCEv/sssFWVHUfXWK5 -7SxbY3G1mMZvulAbz/gHKWZ9r0AmLzzSUFYWkFtyyDghxDzUGnG1ClYIVrIRtyvo -hgZrEgEwqnO+bPVq3cL4/rDcgPXZNylihQKBwQDFH7vFDUSFVP4Y9KAvn6fImCGo -EQbg4nOWIx+zeLbar4s6xEJ2rp5EU99TwXZKBYVBFQ/VZyASB5B3BVyVO6lbDB8q -kwKha0ztLiDo4kNyD5dlTXW8i7N4au3Bw8n5MFvwta1Iz74B/bLW+Ad4klaJTpzw -FR9ZvLlNSKkML3kNUc1d68WpYymjCPNbuR59C2+ZMabv6kShxpbn8NXzJVwhoGj6 -Y/w2Wjy6YzC5ogoumNlMS0gKfl6HlAOIJlDxeysCgcEAu2JAqL+4gogV/t0nLqhQ -8yqjWQ+2l9wSUrD3pvHB4A+F92yGbhzz2Qv2D9Nsdm4cBfTBx9mMRjokoK3OdTiH -x4CNSD8ubRNUO02RrlmVSKzMYNhozYoTRBNduYRm3A5BpLO+ebcO/dRpadnp2tff -MyHjuy4CXuDeJEwwjQn6pIJJxGVQMeO10g3Sx8xelBoXbCjYaXr1Cg8NlPjIQDXA -n0otqU8UNkFgANuEpBPKiuEQjhap81d+5zkZ7aXCjy9xAoHAQW0e7XBR5c8n5zCK -WkQrdDDKOvYrykhfBN3zj6XpSvwowgCR7sJWVWdhIHN9x2O9rrRG5RWtV06bbGWj -LQT4WPfVAFR68wiiJ7a/xYwTxq/WGBF1mnbjwnv7HezWBJdAbMxgD2KkNhT2XtND -54jqn/gvrp/UH/y7pCMRuLGpA/q6pwmyOV5oW2yFGVSAAhDhoX8RYV/oF6nKPIF7 -AZDM23xaW4EEHSYmMdbqPTLDHmQs+12hM5pt1aIS6gWNqBixAoHAHmVLl0D4lHqF -WTvUsSAKyeBw0ViGQZryN07J/LWW/WRfLrYeFW7OV+ksf6uY7YsjUkTVZfktew1T -igPVqm7kAuPBNdifZygGdUtZyqlSPKlqQddZ11/v3Kwqrc3IyyWHCcjplTPHpW3y -0gxocloLMMmcKhdUwAT1AHP5Fk7WJSK13N9WK+qJi+cwBRFmKRoc1L2XGNQPx1zO -NEDpmSfEZaFSx264OaFN3tOZ7kBNsk0ROW6ncYpOIsnKEXX5EGDK +MIIG5QIBAAKCAYEA3pjjbfACLCqi5GHZ/RqxZQIg08B3kBWdowCbSmkDtiCgLZx4 +Ed3JNhLNneHYf5hkseWfzIluNsEO5hMouZ4/lTxc+rkx+ArpHl8s8PuSkxg7GUQj +g1em2kdn+PKCSOAPAwXRV2gp5G0lYPdmNUNlt7ub/n+KZ06P7kTlZ3Yrh5+EC1Hb +0K7lO2oY+FO6B2/Pwod4vWufdJUL7tRrjYSoV3nBYjUmtIbxEbgwnpzElge8eb0B +6m05h2Nmewox4ZItfeDISUrk9N4Ux5cPVmcPXNkwHMQvKBn2OIgJsaOWlDcE5JiW +f7OG0AzZx4hFzkTyyYUTfzwyEOiO3G8GtZscKBJe0xBh2ggISKjTVhLsTBsiTz3i +XR8QmK/NvXM6BElwKXbzQqYFMKZUNHRnw3AUAYce3D+s8u7jGTBq3fhKgggy7K5L +iypKDRhQDg+gchznPoZeEJjgm2qiT+hn32q9USgHIvwswfudajHkVNCM7oGMz8H/ +GdoIXcIWNMtKV4gvAgMBAAECggGASCRU0TSP/7BxyoLMG3OjOpFOAlLGbTQUOtff +fGY8hbJdN2sWnvO6WoQNj7W6bN//AojhGXEQ/z3ijj53XHElOkCuAbQztagTlXxT +HGbsQjAAN1gWCmNF+EhcMhqmjufO9bPU/PcNXLLjAmIsBecp+DodfIXpXUHg89/w +WW+6++F+8gw9qYyFTpQ8M38vM2nRc8JkJz/SFf6YN3cwxFTSGkejnSiMusVhK9T+ +LOmx7M3lD69qB4gOtQpKFGZhdDHjYaXz+KPz023C8CPTdAbpthxocd/6NFz8FF8U +UIzXCya2iigKBK7mVkzJuWUCt2yO/k0AckpKJeQRr3+WtdOiZwoJ5XpUynkfoepX +IZdQTUz3lDc2GPOTugj7rxZXLbhSwWzfmPbGMIeoj47+N9oDk5+lQuOUSlHig2Bb +YfdIkQy/Nr6uDASwnSBIq93G/SIFaiv8qQlkzRMJ6gMHIc2e3LBVynm4Ms4lcHJD +NSkhDBcMr9sw1qKo2gtO5hyuk8yBAoHBAPhSDJb64OvhG3TxDsWnsNmuTgbL67WK +shj7uZTIBP0Mvht9cPjfDLg3RfjSRThS7JCUYG+Id4JEFeyac6TzWpKEtp8tPOiC +bC9jVZo1ekqWMb8Fq8npzM+IgbcAVsYD4v0gcp8PgLWn9baiJLMIRmXLGGaq7oj0 +TGklzRv0hgn6zBymwxR8GcD3wnh33ZusPuPTYGSizIRPxA8LgL+1PSLU+IyUcd7U +uOaT2zqi2YZTFIFdi0HPrn7UYZqSnzTUFwKBwQDlezAw6lVTgM1hORlATZ5hJzyM +2lLSmwY0PZ/bqaCJNgUD8MRfepNK/yKIoKS9GfZHQkmVmVoiF8xMefWjq5w8mVAU +NcAf7QuGlw0pg/FrhRLgEkqg+eiyJfl8u+ZgUImuUatIldpN5OaNWcLu8b3S2VOp +o4GY3KO81Ls8JijXD2xc7VhRCvywloDnLzSUkl/kFVrykMPiv/RemQIQUhTumWpA +NcBULaOjogqON9jBd4xgCgAdnWaKs76c+XSmw6kCgcEA0dfUV8oORIboQvxqdVFu +O6X2vfuZZsKcGkyu2THmNUmNZYGt9EHZZ9sdwFVAtYYt70fT7qyuAWEz/cvPqjcT +9Pk9smnyLLH6ZllVP4mtnFYsF7bdIzX2I/LBWzpoGdGzAiFne08If3o+RGXlCX4W +r3LfXfNYvFdmMv0ExXjvxIMx9YxfEnKE+PLmXhM9LI50XuaDcMe6eJ1Hm0cnN9oa +ndLHb1UKnTm6Pu/3tSdlFwQiMegxBB5S4U7sZEk/TM9lAoHBAIDQqbiLkeIRxzfw +CVCjQWhf0glu9FbsVos0nGt9yHO9MwuHN3QxJkVO+l+fbVoJHMnbV9r1/jZtDW1Q +eKarSkRp+x2dHn/NXE7ss6K+QeKNDI9jNSkvn4OA9Y8jGqquCtsjVPalx6k5+IEY +BeiDIn8dJ21uLu1TzUXOVFvrP7mZGsb/JDg55qZplWowgV902wb5RdgrkwnRnqcL +VLE8oitdSttIUPHvvI+6AhrbFn1jUhUHCBGXrVvmkfUjwmtqIQKBwQCWa31G2hkw +6KgQNWJbXFQVnKbYGG7u4MVY6UGZ7JtmHNawIMNhhkXu4KFjlWxoyd714d1pDRzr +el6+AHxCq8mUfOk+6QQmO5F+ZfXVf1DVPE8Yow8DIqUY7cK+X9qhztEjSZG+7DAT +SscpvT7K64ri7j5Z2O2YJr9T/NyN8BsdC0G9Twhs7NNaH4Kg+NtKAJqVOoWbDD5g +jH77YJBZWXtABWjjIv8yOrBm7gUMfnhTJmrDF3SOtIK1mxJyrm5b3cc= -----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/ca/signing-ca.crt b/Task_1/cert/ca/signing-ca.crt index 0f53f66..074143d 100644 --- a/Task_1/cert/ca/signing-ca.crt +++ b/Task_1/cert/ca/signing-ca.crt @@ -1,27 +1,27 @@ -----BEGIN CERTIFICATE----- -MIIEjDCCAvSgAwIBAgIRAJD9tSiG9UzqnOZtT3QGfmowDQYJKoZIhvcNAQEMBQAw -dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX -MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV -BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDkxMTE4MzMzOVoXDTI1MDkxMTE4 -MzMzOVowejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp -bXBsZTEaMBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBs -ZSBJbmMxGjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMIIBojANBgkqhkiG9w0B -AQEFAAOCAY8AMIIBigKCAYEA30K6CRhyHQAYSuiKcxwUVWkzy3jyFWfPiANkYxuU -JIoHwxH8zysVh5iZpkbv0gyMagvQ8Tl6yWxAUrWG2/auxgZMKwOkiDF60CT4MD5b -1Brsh80lgrtL8Pwho3r7SqZx1Scas3zQeOyciO+XthVuLuUzTUJrI2vKL+t7Jehs -4K/r3fwh4N+tvHvKtJZcfVREIlFatUgbi0vsqspFTBNWS6/JEY6f7YQeJICijgw8 -vMU5wDGxZma1J3gGancloORUNl7hf5/rGlRqaTM2FqQh2fFHElL84w7oIYfybMIA -ANGizLtiHP3cX2hmiVHradDOFfu2zcMXk1cxJpBwhdUXZu2+MpewaqIxl0gwCFK+ -JXf3hhvaf2UYF6ITjrDcTzM+dafVhnF9K9/K+LfhlZp+4oi4JmuDe3O0A96dTbVd -Vleguwz8PAHfbPoSVqMuXZ9Mgrn6SSn+WW3ubDFbfKsQBq3Bk8ix0ebAAw4og0i4 -KTZxOza/AaAHz88mmidlKSBJAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJ -KoZIhvcNAQEMBQADggGBAAlWaBArd6CKJZNDi144TUJgF9pI2ZS1WeG82z+oLeCE -5fUznPVdJP908xOGZS4egsdSHdqaurFwmVkmpSHyePowKaG7PAvgFsGNjKzELu73 -VqeZKR2AwwVoNvR4bR8V/0k8lf4f+t3Y/mtzwfJD8hIHC9lzXrE+njQqLx2Boa/C -KxnXN7EaRhwCDHUqsUmfYaixCZUwVnas9BbLoobdcFcC7C3Q462YSuWDwRp6te67 -bCtjDxMOXQfMPoY3+JDAzR9qzVhdinw4HMDZDv/KKVNahmAl4jplr5qGnP8EIPwI -8VDSUMUEHFHpYr+KDjCrqtVX/IT2NTJh+1rOuAnPquyeV39VV+0Mao15ilMMbTNX -fN6cv71+CbTNN1OUgJ1KyzEs0i4PSTeafiteJAGec+rz+6Ie9DHdVbIOs0n7U9w1 -pCJAdSqklmHdA14EabLK8lIX/7V8FYVqyHc9htzGUbHSeAswVEPzibn6tEBu2nh8 -B2wscdMHuGj3SUOmwyDadg== +MIIEizCCAvOgAwIBAgIQTCSYz6JWTOKcSzpyyILwBjANBgkqhkiG9w0BAQwFADB0 +MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRcw +FQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEXMBUG +A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTE1MDA0OTM0WhcNMjUwOTE1MDA0 +OTM0WjB6MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt +cGxlMRowGAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxl +IEluYzEaMBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwggGiMA0GCSqGSIb3DQEB +AQUAA4IBjwAwggGKAoIBgQCSoTKIyxHxymN/xOHHcnwIdUxB9BtrbNXiGeh9AxW+ +7k5ieWBi5GW9yARf7TWh5UgaZwFj1K8BC4/V42UCIQZPt26iw/+3cE3tZQRHP96H +mfVDcr04ZXDLvjn+I6sWzgjzFgoij918ueoZOOYj3TYth7poAKwj8+Krmy16RH0s +6Mvp/dzsakcOBtFwtVtvA33NKjfofs8b009e8KNWw/x5GhWaAi7s84ybCIhibNZY +i70iC3iPH/T5KC6kyOfup4oYmmHyqAtA6ommgwCveXPLkXl4Z2b6gYsd7lu3tB9c +j/8wCoWR7VEvEKMTKt9lHxx4LLwLNbt5GNvE+YP1sQpol/QEagTajt/Oi325URzS +At/NXqOBMO7P/x2yLOP7MqWXX1658PUQ7kf8D5bFXVUFIka9pY3BP6gLgIgyo65V +dc/9kiKiZUi4pXtl+J+TUXH6akA68qJJrUQ57Ok4cyln/LATpi2zpoIWQDcbmLDL +Y1C2mEe6y0AOssjCtZ5DSN0CAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQwFAAOCAYEAMa8ar5Spzn7y1um+UF7eVHKWULN4HSwFQGSBtnxdlImi +JumYegN5ly7rvYFV23Pc+hIaMUSvaENO3y22HA6A8WYtNPnHBc5Hzbt0ApOpyToJ +wGRjtRJ7QrG4xXW0pANegpTyjiyqa0hnfv5PJKU84Dua0vBOCqJTIc6PGpPj4D+R +JsmsMzeGiyNMbWHTPzCDQnI5rIyskK09g6/Fpz+d/e70R+ivmNoXKS3d+uuprOh+ +WhY6R1g1TeF1Y+xhO5EO/RmT2ZY2S80N0XRQqZFBSLObq/YxoTcTem9aIZfMLYSs +v+0muNPtZ00jHfDezPpSkK2l00CAEwHyulDA4Jm26IT8+Z4xklPsJIsBMiLZpNwA +FoxUnwrkN5pn+dg98BIrVYTKBTbiGcNbPXtdLUHyQBxkjqap6TSaoxQ+tecG1eFE +DzkyEHHMMr1yC51QOdcTFEBVGiXmRL7s/4aZxYRa/bCeGGiIMNqh9New3qdR8zGN +70aiOffFfzhh3fQIdLvm -----END CERTIFICATE----- diff --git a/Task_1/cert/ca/signing-ca.csr b/Task_1/cert/ca/signing-ca.csr index 8fc3fa1..d012d2d 100644 --- a/Task_1/cert/ca/signing-ca.csr +++ b/Task_1/cert/ca/signing-ca.csr @@ -2,22 +2,22 @@ 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 -----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/ca/signing-ca/private/signing-ca.key b/Task_1/cert/ca/signing-ca/private/signing-ca.key index 0467c67..e6d2660 100644 --- a/Task_1/cert/ca/signing-ca/private/signing-ca.key +++ b/Task_1/cert/ca/signing-ca/private/signing-ca.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/cert_chain.crt b/Task_1/cert/cert_chain.crt index 44f9aaa..2f8be64 100644 --- a/Task_1/cert/cert_chain.crt +++ b/Task_1/cert/cert_chain.crt @@ -1,54 +1,54 @@ -----BEGIN CERTIFICATE----- -MIIEhTCCAu2gAwIBAgIQf/LP+qCNTsu9Jpr1CRWy7jANBgkqhkiG9w0BAQwFADB0 -MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRcw -FQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEXMBUG -A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTExMTgzMzM5WhcNMjUwOTExMTgz -MzM5WjB0MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt -cGxlMRcwFQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIElu -YzEXMBUGA1UECwwOU2ltcGxlIFJvb3QgQ0EwggGiMA0GCSqGSIb3DQEBAQUAA4IB -jwAwggGKAoIBgQCYaWP6SbNjJaQ/43pIyigPEgmV95l9GmpxfP/h/VDyyA5IvbPh -ZIjvwUM+nKkPt1AlJPAUZeJC4OU4rCtJ+VPoSEPIZTS/b1DD5f4GSqyo0mKyvMBz -kNfrFXmdeFnCg396+mIvyceC1+lKC0B9wbxv9/2wEOqGlQJIzIJBbr517LDaZs7T -QbrjpecMjAa1B959sxvQeDa3kgSJXzwbKSu5XHy0sxa7LSwVrf/3YIZ1c+q/yNPw -ocN6goDGb6VP51sIbCP5XssmdBB8xhxJ9vYip/HnfsZ+fOXUJAoi+/UwoTHCIEOR -ETZn7WiESWMu36EQW8M+gDqYE1CiCADJN57np9YZhJXBHGJKEK7IVrT5fYDnVsBF -YN7bMDCrvj86kq9QKLntfz+SUmlz9ZWkVVIqtjO5ukkwe+UWKovIbfyuV6WSoX0W -JPItv/ixXuW4fnkftUnq62F45pvFx0dfZNLwbvKLfEN/YPm5alsLK5OPwVJpm2MX -PuQCiozNenV+c1cCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B -AQwFAAOCAYEAdcnP9d3assTHyye+aYX4x892YolGrRh3I9FALZXAFvdw7lG2HO1n -INltE1VA7giSfDyt9304Xmfnv7y4rKP/eH4Plnl5hLI31Ox/ZMPkBNqN9PvmdT6S -kfAVHq1Mw8koTPyu0gQwJERqBhKJwHYwAZZiSLEjxawgGtXSEV4Yly/ShXS3+R2D -6OdVOkrZx0vDZoIgE7BO5hV+xssPTZueasVCQTTMHq5dRkscVVUIlYrvx7KOOIU9 -gcWNvNp+IBDXRDNaLfb107TxSnLtnHF3t6IKlhBHqEnf6rRmHE1wqyFyMNssg6Qm -AjvZzDFjhwlOXjN5/KG3+5veh07ZIlb9Wfez4FbswDSpbEgcarPGEhzPjOjEjQX5 -fZg7w3+kzHn92MWvVDPFa3LEdTI/FM5h/vx3O4b3xNX15pWuz1WIdQS49vq8Z3kk -/RLd/wg4730HcdVoLem2v/RvTcJ+NOI+iwrKbst7xMjs4K/rm3BY4dorX2XoyVG2 -tdt3IBDuOSDC ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEjDCCAvSgAwIBAgIRAJD9tSiG9UzqnOZtT3QGfmowDQYJKoZIhvcNAQEMBQAw +MIIEhjCCAu6gAwIBAgIRANUyVSicTEI8mvC0oI+yDUswDQYJKoZIhvcNAQEMBQAw dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV -BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDkxMTE4MzMzOVoXDTI1MDkxMTE4 -MzMzOVowejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp -bXBsZTEaMBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBs -ZSBJbmMxGjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMIIBojANBgkqhkiG9w0B -AQEFAAOCAY8AMIIBigKCAYEA30K6CRhyHQAYSuiKcxwUVWkzy3jyFWfPiANkYxuU -JIoHwxH8zysVh5iZpkbv0gyMagvQ8Tl6yWxAUrWG2/auxgZMKwOkiDF60CT4MD5b -1Brsh80lgrtL8Pwho3r7SqZx1Scas3zQeOyciO+XthVuLuUzTUJrI2vKL+t7Jehs -4K/r3fwh4N+tvHvKtJZcfVREIlFatUgbi0vsqspFTBNWS6/JEY6f7YQeJICijgw8 -vMU5wDGxZma1J3gGancloORUNl7hf5/rGlRqaTM2FqQh2fFHElL84w7oIYfybMIA -ANGizLtiHP3cX2hmiVHradDOFfu2zcMXk1cxJpBwhdUXZu2+MpewaqIxl0gwCFK+ -JXf3hhvaf2UYF6ITjrDcTzM+dafVhnF9K9/K+LfhlZp+4oi4JmuDe3O0A96dTbVd -Vleguwz8PAHfbPoSVqMuXZ9Mgrn6SSn+WW3ubDFbfKsQBq3Bk8ix0ebAAw4og0i4 -KTZxOza/AaAHz88mmidlKSBJAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJ -KoZIhvcNAQEMBQADggGBAAlWaBArd6CKJZNDi144TUJgF9pI2ZS1WeG82z+oLeCE -5fUznPVdJP908xOGZS4egsdSHdqaurFwmVkmpSHyePowKaG7PAvgFsGNjKzELu73 -VqeZKR2AwwVoNvR4bR8V/0k8lf4f+t3Y/mtzwfJD8hIHC9lzXrE+njQqLx2Boa/C -KxnXN7EaRhwCDHUqsUmfYaixCZUwVnas9BbLoobdcFcC7C3Q462YSuWDwRp6te67 -bCtjDxMOXQfMPoY3+JDAzR9qzVhdinw4HMDZDv/KKVNahmAl4jplr5qGnP8EIPwI -8VDSUMUEHFHpYr+KDjCrqtVX/IT2NTJh+1rOuAnPquyeV39VV+0Mao15ilMMbTNX -fN6cv71+CbTNN1OUgJ1KyzEs0i4PSTeafiteJAGec+rz+6Ie9DHdVbIOs0n7U9w1 -pCJAdSqklmHdA14EabLK8lIX/7V8FYVqyHc9htzGUbHSeAswVEPzibn6tEBu2nh8 -B2wscdMHuGj3SUOmwyDadg== +BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDkxNTAwNDkzNFoXDTI1MDkxNTAw +NDkzNFowdDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp +bXBsZTEXMBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJ +bmMxFzAVBgNVBAsMDlNpbXBsZSBSb290IENBMIIBojANBgkqhkiG9w0BAQEFAAOC +AY8AMIIBigKCAYEA3pjjbfACLCqi5GHZ/RqxZQIg08B3kBWdowCbSmkDtiCgLZx4 +Ed3JNhLNneHYf5hkseWfzIluNsEO5hMouZ4/lTxc+rkx+ArpHl8s8PuSkxg7GUQj +g1em2kdn+PKCSOAPAwXRV2gp5G0lYPdmNUNlt7ub/n+KZ06P7kTlZ3Yrh5+EC1Hb +0K7lO2oY+FO6B2/Pwod4vWufdJUL7tRrjYSoV3nBYjUmtIbxEbgwnpzElge8eb0B +6m05h2Nmewox4ZItfeDISUrk9N4Ux5cPVmcPXNkwHMQvKBn2OIgJsaOWlDcE5JiW +f7OG0AzZx4hFzkTyyYUTfzwyEOiO3G8GtZscKBJe0xBh2ggISKjTVhLsTBsiTz3i +XR8QmK/NvXM6BElwKXbzQqYFMKZUNHRnw3AUAYce3D+s8u7jGTBq3fhKgggy7K5L +iypKDRhQDg+gchznPoZeEJjgm2qiT+hn32q9USgHIvwswfudajHkVNCM7oGMz8H/ +GdoIXcIWNMtKV4gvAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN +AQEMBQADggGBACPuW17XRhwJC6Grdygb4sHxK7HqxWv6SzjQTK1aaEUtYXF76J4J +BNrvFNm425LMVPyiY2gInAYsys+H5iASlzWikigGrrDT4kQOT7GTd9+49C8LW5tA +qWwKM3eWBAk4waxn/OYWOwqSXFEVqEkWv4jE1rcRGX+J5FhyZfZ7NvFmmqaqoAH8 ++Lp3IM5cVTl19DPGBwT3fJ1V1TP9dV+RkziXSLEy8w3XdTrghBL3ZdXoIpPhcbJR +dk9Jh7hESrT7a2PVZr/w5a7V+g6Yab+1NXQ0jAz9e8cM1kPP3HYpIhrvUetJm1eJ +D0Um1m6zItOM/AFbr7JMszcUHIZ2qSw3Chl2T6ZTHm0wL/UbtZWhBll42WJ/Tqnx +JZLllFpTmckg+qYJ0tA4qnGMcW0/XJUTOOj7ECsQRHRJc0gEQnTbwYlBY+/k67dU +lqdsIADt4Ee7a4EOuH6QGk2FSTGZitQs9v+dDBTT3Io5ZQIw9B+TLIjXrUheAY20 +epcLyiWOb2qOKA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEizCCAvOgAwIBAgIQTCSYz6JWTOKcSzpyyILwBjANBgkqhkiG9w0BAQwFADB0 +MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRcw +FQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEXMBUG +A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTE1MDA0OTM0WhcNMjUwOTE1MDA0 +OTM0WjB6MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt +cGxlMRowGAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxl +IEluYzEaMBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwggGiMA0GCSqGSIb3DQEB +AQUAA4IBjwAwggGKAoIBgQCSoTKIyxHxymN/xOHHcnwIdUxB9BtrbNXiGeh9AxW+ +7k5ieWBi5GW9yARf7TWh5UgaZwFj1K8BC4/V42UCIQZPt26iw/+3cE3tZQRHP96H +mfVDcr04ZXDLvjn+I6sWzgjzFgoij918ueoZOOYj3TYth7poAKwj8+Krmy16RH0s +6Mvp/dzsakcOBtFwtVtvA33NKjfofs8b009e8KNWw/x5GhWaAi7s84ybCIhibNZY +i70iC3iPH/T5KC6kyOfup4oYmmHyqAtA6ommgwCveXPLkXl4Z2b6gYsd7lu3tB9c +j/8wCoWR7VEvEKMTKt9lHxx4LLwLNbt5GNvE+YP1sQpol/QEagTajt/Oi325URzS +At/NXqOBMO7P/x2yLOP7MqWXX1658PUQ7kf8D5bFXVUFIka9pY3BP6gLgIgyo65V +dc/9kiKiZUi4pXtl+J+TUXH6akA68qJJrUQ57Ok4cyln/LATpi2zpoIWQDcbmLDL +Y1C2mEe6y0AOssjCtZ5DSN0CAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQwFAAOCAYEAMa8ar5Spzn7y1um+UF7eVHKWULN4HSwFQGSBtnxdlImi +JumYegN5ly7rvYFV23Pc+hIaMUSvaENO3y22HA6A8WYtNPnHBc5Hzbt0ApOpyToJ +wGRjtRJ7QrG4xXW0pANegpTyjiyqa0hnfv5PJKU84Dua0vBOCqJTIc6PGpPj4D+R +JsmsMzeGiyNMbWHTPzCDQnI5rIyskK09g6/Fpz+d/e70R+ivmNoXKS3d+uuprOh+ +WhY6R1g1TeF1Y+xhO5EO/RmT2ZY2S80N0XRQqZFBSLObq/YxoTcTem9aIZfMLYSs +v+0muNPtZ00jHfDezPpSkK2l00CAEwHyulDA4Jm26IT8+Z4xklPsJIsBMiLZpNwA +FoxUnwrkN5pn+dg98BIrVYTKBTbiGcNbPXtdLUHyQBxkjqap6TSaoxQ+tecG1eFE +DzkyEHHMMr1yC51QOdcTFEBVGiXmRL7s/4aZxYRa/bCeGGiIMNqh9New3qdR8zGN +70aiOffFfzhh3fQIdLvm -----END CERTIFICATE----- diff --git a/Task_1/cert/client/col_one.crt b/Task_1/cert/client/col_one.crt index cdd17d5..7e291b1 100644 --- a/Task_1/cert/client/col_one.crt +++ b/Task_1/cert/client/col_one.crt @@ -1,25 +1,25 @@ -----BEGIN CERTIFICATE----- -MIIEMjCCApqgAwIBAgIQH7cox9gfQuKaAwDHzUHYCDANBgkqhkiG9w0BAQwFADB6 +MIIEMjCCApqgAwIBAgIQNfEzpo1jSS+9JWBVZESH/DANBgkqhkiG9w0BAQwFADB6 MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRow GAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEa -MBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwHhcNMjQwOTExMTgzMzM5WhcNMjUw -OTExMTgzMzM5WjAOMQwwCgYDVQQDDANvbmUwggGiMA0GCSqGSIb3DQEBAQUAA4IB -jwAwggGKAoIBgQDbD1K2p5KT+bNLlu2pCblCq0vC16YJG+bKxIDII5yJKS0E4eEY -0esxdTiEHQL9ZQ+XB73xGr+7gW1VAEvuKDFUrxzV1Ab1gPtuHbPzuFUtcWo6Jvao -TayezL3SV5nTmhdBxXGID+oDC7P6Xua6GZ4/u/VlywrHEuZXS8EpaeALYnrSmSaA -y9KpCDMa14pkmklfyt2i/8EEd2a0SSPzc/jBfIbmiQOtkjlyHSzNx3QNTXMduwHC -aifsvqqbkqr8hpqM0UwHAW9JmwFfAgC0Y3gE540Y09DDU8ZlS0/MAmi8q3kJXI6l -pqiUHSrHdD3gprI8ZdRZGf7pRh4oe4Q4w0C1AXSl2bqYHLoNcimwpuFKgBSl7uy/ -Fv0OhXuB2/c7I3JpKroScD8WJl3Sq5gqowQa1fkwSDSaL55hRK0VQRBYGZ7QVLhd -6oww4KitlytVV23eXCw8ae2Qt0HllRd4g1J7yIWezHLP8DlTOpsq1JIicqdtM0ls -lsROKhpU7X+R2EcCAwEAAaMgMB4wDAYDVR0TAQH/BAIwADAOBgNVHREEBzAFggNv -bmUwDQYJKoZIhvcNAQEMBQADggGBAEgkqWlrDbA4s2qs6ZDNVyiFVmVkwVAT3CvP -B3CyP2mLQT56DdOP3QmltoEfVgSbbwgkAO5COE/EzFS0PyMqhNWrtZAS43W1fMg2 -sTyYXGsVAjz1yPTe35Led4uM8eGmh8lOTEedxZJSJemmCJL+QYET/VWHdZ/e8SjD -kvzZrvPWOIfaBpoDqx3xXOXZZYVQkfCnwDwod/Uay2zzAQ9GKjTGBl3HKUSFoLcG -4gkM986zlUqgaekjvxRO4s2+UDS2BLzQcKxa7hHIIdZ3b0ShncbEU1j+o8tsS5zn -U/pEtpewz6JsrN6WVXOl7fIvLa2zpAmNFeNTshheb4ArcKklwGtXKG69DuRJmbIp -qQ/cB+KA66LfWh53WjU0J0TyVNf4hH+RXcG+mvq83/iO/skv2CgJGvTIAQwvnUCy -tfV2+VqntvwEawBB9PjkdK+qLjjNO9WGoCJN4mW0n5DxAJMZgmLs1eVGlUXt4vXH -peih13By9Tz4Km02zQmWgOSM+qrJSg== +MBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwHhcNMjQwOTE1MDA0OTM1WhcNMjUw +OTE1MDA0OTM1WjAOMQwwCgYDVQQDDANvbmUwggGiMA0GCSqGSIb3DQEBAQUAA4IB +jwAwggGKAoIBgQDSUqi9Av++Vss8J51EtHlJc9eO+WbenkahPvhC9f5fEqpO+Ij8 +q18em77xIJ9b+b/vpnSibtzgCJOjoS7340jpLFURtJvVTIDr2ROeJ5jn99DROUws +qN1GkGINtz4y8DeDdM1NyO03wq2Ao+Mu60f/40Qz18MR6nY1wqY3GPQwb2LwkIrg +kLim5zZhQ34x7Tj2IY0pr6juucVtyNxKcoFFEM40ZxUBICmcuvpTt0ZYuWShtuZS +Fb2FVB1lTEErRxPLcjvYjGRhNqfUhL0yc5eC8UrWg/qdS42wRQ0IdOrWTHw9XrG/ +MUCQ0JI4cHc8TV6w+G66V6+O+/DKzaLCLqqSQDWVtzOwYocx8CPUvRK5oM/n4Fon +H7EotU15KzcpVk3O+rSy7FqpvgSoUZclx6ePAIlkBX6Qwdio7RGAQ7Ke/ufK5baU +eEnzjT3b6iLn8EucOrwVjdd/UtDg69E0DqHeueDOj0mL4RI4+mkrXVrqBMZN280k +a1js4urJYe8ncw8CAwEAAaMgMB4wDAYDVR0TAQH/BAIwADAOBgNVHREEBzAFggNv +bmUwDQYJKoZIhvcNAQEMBQADggGBABtn5qGLjZFj6fYUYmo1EIA1bteXLnEBsMLj +f4ZeIrqoXUHlRWtLHwpw/1329aopnsuKUK5ywGu3aTzOkm3FTYBVTP03B/LpMKC6 +1M6ArxdpT+nGUL7U1nzBOY+dZApsLe9+5ztASoAJlpNmLbC1jhBE0vqsk3U29iJa +3iDTfBTO5XCKEYa8N9sOPsJR20/09SgRvux0qisPKTwRhKMwy9iuJe3LCCeuG5PU +FLURQKg2K+4o/xxPFIQ3nFaLc/KYE6vkKe4FBBd4s7DKDmqgCptC7y/EOeSBzMpt +Z2o9mvjD3tnhY+DC0KsleWofNPz6/LhSla8q4wA3hrG97YDlW9JyBjOD/GPlwfum +KZDdW9RiFCGwMKk2nfqwdfYPyMYUokC/e2PNZi6gjSuHKQA/f/N7AV+o29MkmITh +d4zIFKAS709FRQckPGRBi9TPMxy4IG03lA8og6/uNPGlfnBZqbWlZhLoWciy1bq+ +i2031OWrOLPqdalSFup5EGoWFd2k/Q== -----END CERTIFICATE----- diff --git a/Task_1/cert/client/col_one.key b/Task_1/cert/client/col_one.key index a2b8adc..df60307 100644 --- a/Task_1/cert/client/col_one.key +++ b/Task_1/cert/client/col_one.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/client/col_two.crt b/Task_1/cert/client/col_two.crt index 59caaed..6747564 100644 --- a/Task_1/cert/client/col_two.crt +++ b/Task_1/cert/client/col_two.crt @@ -1,25 +1,25 @@ -----BEGIN CERTIFICATE----- -MIIEMzCCApugAwIBAgIRAJ4G0+mvck3TvDS56TvxcyUwDQYJKoZIhvcNAQEMBQAw -ejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEa -MBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMx -GjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMB4XDTI0MDkxMTE4MzM0MFoXDTI1 -MDkxMTE4MzM0MFowDjEMMAoGA1UEAwwDdHdvMIIBojANBgkqhkiG9w0BAQEFAAOC -AY8AMIIBigKCAYEA1OHA3roNj4ju6pObbgdLhoCToD9iRGkzUJd4w4N1UqgA2p6R -AWxEqaGpBZ+DYyk3PGxHb8fogG1ETXr2I5KsQKs90pJqWP6coeFb9e+BqYQb7ts1 -0yZgstiPJWTyaXjiIiQPhRvMFFdNnukIbOodtW5Ok4TNTOySNMzuzdMmqZU/Y2Hr -KO22zGE0kDnqe7MstQknMHrKtXGPyCC3YEJ9iDGf3jz4Cn5ty0zX4MGFqz4nw2Bi -FV2ra4LKjDOV5Xi5fLLoMoKTAYUKWOrc9oxfrATKWci+rUKJ30RUif0xj8nvdInm -JYRBBmyZ4u77NM4GTQV5Dgf5Vf9t+/IgOU+rLZeqG+y6FjbzGW4vbIvkmzuY9Aau -isztfR5Hgjr2kZxK2LUPwJy9n3qo6HypPeu1y9HdB4TTpPqdnPPVdxQI0pVfSHCP -AODWdHnqxwfwTzGQmJ+QH32Xv/g7RyHwaBU8IdYn8nXga0VCWLGqf/ZtFXkY7m0B -VlgQqsyXwl2pL3NLAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAwDgYDVR0RBAcwBYID -dHdvMA0GCSqGSIb3DQEBDAUAA4IBgQBG04+4fcPYJgrFCPMnS71Kvo2pu8IgpCzR -zzHD0ZLJB2GXhKuOe5gFuEcCiGKWlqfJTP2MHdTbAHbXi0+6HPLc5X1VuED7vTRP -YpcgvmjZjkz3HU8hILvKGZApU+P7YWhCRN5/ukqnFbwW37u29bxj3m7XcMzN2+eI -s1R6ZBLnVwz/5YarJaLwwvTi+FciAyQDPIsFcWP/r6Poe7l4CdqSIf1zrC1Fna9Q -xQt7BrCLdQOdgSQaC9Y6gF69v+dVc9RUP5WD4/6L8EmeKl9VL0no2zeuScQbtg9A -c2NMyNg99F0I1ZUvMjo5WFeT5oe3Z1Qn4KIVBAWeM5UfpNAJggba7GJ1dAoF3CvG -aZEwAwKvxgHQoowoD+lfUEewo0hC61kH7BuozEH9COs5lL/Pu8p2p2/sLRtO+iF8 -Y2jRJ7uSKNpeHO4HwNnBGMMUNv0u8xr5LBccpSuu2WX8C5YJYtg2afNJNfWsbYUJ -Sd9R4wSmeO5SPrj+SVgcz0CUiSYueSE= +MIIEMjCCApqgAwIBAgIQQdOTMXWlTbqBnHEYVoMYDDANBgkqhkiG9w0BAQwFADB6 +MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRow +GAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEa +MBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwHhcNMjQwOTE1MDA0OTM1WhcNMjUw +OTE1MDA0OTM1WjAOMQwwCgYDVQQDDAN0d28wggGiMA0GCSqGSIb3DQEBAQUAA4IB +jwAwggGKAoIBgQChMcjEgd5fJc/Zneg7gO5DJLjQJ3QzpRRsdtjuFUO8z78jSaX5 +QpzPDbeCeZLASsa8G4NqBVeoT51zOUi2Wysf7hmZYKeLtN1Lz9RUbkuEs4FsKHxm +st44Pz18NLq0vXpf1NYB/0Lbzx3oVulZOrZdIBuAydq7620mXBlt8Aao5pubUeLn +95wOUXS5r8Rlyu61f2gAp4EemGPV7yAjTuaB3zqGkAK6ALrNj9cWUd/IMFGG8NV5 +Zkxmq6+2Ei88GVBlQTaej2kr7ttNiOWuGqJF5YL961GwDVZa026m5mPvVrFE/4xN +gBeIaWsaSYOCmxZNhgnRCcM+w7CKtBY44uB/cwO55rjxZhq1Kn8PpVegXiky3cra +hnoM9B1ZzOBIK1hi/1kH8BK05BT8ZyGYcKBt6CHSDm2G/08D9ZvKjL1e6eCNmHw9 +uzuflWtyd7/OL12aai09CZyF0A46JL+kfc61FIwYx8asornVXOX9ElUOo3yiofHG +kxnCwXHeBFmoyzUCAwEAAaMgMB4wDAYDVR0TAQH/BAIwADAOBgNVHREEBzAFggN0 +d28wDQYJKoZIhvcNAQEMBQADggGBAGDZBuUc8qasKU2XD2zSjhOEY7rcpF30lrMj +v3CoLyBNoTpxQAWTqNWSGqMXKS/YwI9q8A59+xVXUB9t4kn8G3OMdSm5m1m5JrNq +DmZtzdPnUUjFQjwqSEleCfC49M5tNB7AJKF2grgYc0Sgr76DLP6RDW7tGMV+STe3 +WHHTJfL1uz3RlbeaVOHLgJdcSfmNjcEkHNDTWQFA8CZGCpEndlKPnTHR38EeSD1z +lGE5mPuW0FyPAR6QXlQGAa0y1AXAKvfQI1FQfss3leGA0uHejqgp7h857LaIsqIh +u6Hxt2HzB/JwWcDXYLQwitjCxyBYSLL+RDz63eFCibEMBDxpDjjEGGpoFpgQr4rC +4vxlWOwDPgpUEWESu+eIskivZ+eJPwUfki0SAPl3uqxcQ698cZXtYmxlfIH1xya7 +7zelyqPT7M9EXdL9EZgkkBQtq0EkkYcWtB8+VO+gsyVAOW9vlfaypqD4HoqGaOJr +Nwbh+mNDbLxzVawAccqH1GQAWBAglw== -----END CERTIFICATE----- diff --git a/Task_1/cert/client/col_two.key b/Task_1/cert/client/col_two.key index 61e0701..07d00cb 100644 --- a/Task_1/cert/client/col_two.key +++ b/Task_1/cert/client/col_two.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/Task_1/cert/col_one.csr b/Task_1/cert/col_one.csr index b0c7548..7d57803 100644 --- a/Task_1/cert/col_one.csr +++ b/Task_1/cert/col_one.csr @@ -1,22 +1,22 @@ -----BEGIN CERTIFICATE REQUEST----- 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 -----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/col_two.csr b/Task_1/cert/col_two.csr index 9af7b75..99b8569 100644 --- a/Task_1/cert/col_two.csr +++ b/Task_1/cert/col_two.csr @@ -1,22 +1,22 @@ -----BEGIN CERTIFICATE REQUEST----- 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 -----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt index 633940b..d154e76 100644 --- a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt +++ b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt @@ -1,26 +1,26 @@ -----BEGIN CERTIFICATE----- -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 -A7k9iH7GU0iUwzaSNf9W0mY= +CSqGSIb3DQEBDAUAA4IBgQAkraehk5D79BIR0spjrD92A6QOZnXimvJqlucJ+Rje +S7qsAaDkgYNK7G0GtWsDpOVnlTgnvpu2i0mMUZSdTBbYGPVEOzJXGUis8oQMVF5X +rVNhbU2NBt8eZFu6Tzo4iUT/kWQkOdGHqzLqNc7xhbi2T6Lc/nP8OLbKggPcIsj2 +PfWY6YHmez5j7+yEwcrEuIlPBOXT9piK8Bu1e8r8zG2JgQuvJPvkxPkWmlUVbfs/ +MuMNys40HFNojXzy6CNthZdQWrB2lfbXzftDPgZq5dG+zlkO3CnGtXU3dKtnUiUe +cEZgoYg6oDvEPu1SpbO0o3FJiUjih4OPnLNYqM0IGsIDbjvZmXfAXLGmKa3/1wgk +aYiOg6D2fA+5OPVGwc/dghHtpItjvywo8Go1Ru1A5n+UdqAqaieW9pRxJ487dkTT +B7DoKH9Z/l4ssl1Vdaxab5+OUN5UyvrYN8Ef5Tc8lrdDQ0xHMM3DHopnykjpS9sL +pEt6HajrrXP8+FZ7yrPuzRM= -----END CERTIFICATE----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr index daca1be..d7a90ad 100644 --- a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr +++ b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr @@ -1,23 +1,23 @@ -----BEGIN CERTIFICATE REQUEST----- MIID1DCCAjwCAQAwIzEhMB8GA1UEAwwYaW4tb3RhLTIzMjM0Ny5hZHMuaXUuZWR1 -MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAyPkgPfmtcwH/cUH/9fWi -pdTjT99WU5mYRel8ZXV62/zYeVB7wIUkvmKVkupeLWM7AZVde8QwZk112WcVyIy8 -AZnM5gupyIc19a1+k+Q+lcDzB6OJV6y64/IEDDMX+H5wVTpV/1zM053OZRsGp6VQ -XUpYbiij0i5pBWRFeZi7e/dCJi7Si3rdmUITLl3VLNAIhdBb10+7xQTSUnuTHyHj -x/5ZtM0hwnlhvTo6HgaE4klvThEg/glKjn/nDX3Kco6UZIXt46QlFM7UaoTg9zZB -cRpgdvcjFvO5dlSednoMv2wFrVEAgdzPOcjInjZMFE0zK7OKGnA7gLKAmc70cleW -wQDQ6668qIWADf1RyMDyCjZ+ozBncHMvOlkQEdJkImW5amM6RcTnNJDpeK0PmEpf -p2+npwTYaeQy/M0Ax4bLbVscAOfcJpYgr2xiLJ0u+CG7ETwJL58tAlV9mP+4yQyE -1DWkIlKTNzTCcmM/XfrQcxUh4QKeDPq7UWN+s1TVCWQxAgMBAAGgbDBqBgkqhkiG +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAx6Nu/uIYD5BH2BTwdL7k +JSxzNoMtR6hRfOVA83xZk8K42+pJFrvRV0mj8qWefl8Hcqd+Lacth9ZrenrUfA3z +SW/GnNtsDDfVdOHwJQ72IjjGArOS45++ndx85NO+a6dBRx87FPsfggBMUmz59+93 +ywK7oWSvBTwSHGcXwvvFRy3xwpnSXDs5C8yW3eDxAtPlz2vuCZFle+Ekus/5TGHG ++8HTRxAYSaWOaxeOM8xUa/IWrydSHN7RyIlFXbsWIx1lWrqu69aU31uYckHkLCaA +k2vs8SAhixR+9mysnk4hRstRoyZObIHHD9TbOvTdYUMkFh1F9jEKdSk5iZ6EaqIC +2KcpjAbFriHuZMFKW0jnT+RrJYjg+sNv2p9C//fAexciGknGfYfD54LLUWkP01OI +FYq3v+XDkJL8nxl4smyFcN0KNXsq3NH6uU/nD+S6ck5DnWCQad1TmWUndQISazbe +ZXna3hM7ipfgaqTr4+zETrLDUZXRBHsxXCwIwSN3uHAXAgMBAAGgbDBqBgkqhkiG 9w0BCQ4xXTBbMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwEw DgYDVR0PAQH/BAQDAgWgMCMGA1UdEQQcMBqCGGluLW90YS0yMzIzNDcuYWRzLml1 -LmVkdTANBgkqhkiG9w0BAQwFAAOCAYEAhh8AeJTmk4D0uYe3/+fwLzgFG0csjF++ -PL8GKZewkWLQz2/AEO29B/vXU3QZNJh1iRkvFnRykgaJ1qbpT4wA4oifPxf2Dg/y -+EdFB3iONhW4sRs7vXOylqm5ql4o1r1y7kDEA59+1O9WoIko1YtOjUudidNwmld/ -qygEVrPoLSpsKkzDveP8ELfNbzJYOyg1bI1Xcs0WYKNRBe2zML5+2ul2rZcpeUbr -o9SI/Y+oYBbNeDyqP5zd7gfKWA6cNw24ZNZ8GXmJpkiwcdR34pYkB/s9S3HhdtqY -EhpSCNBBcftRE77AEB1oiQZPEyKTuwh5WhNFIZ0piw7vJ2sa+VD4Qr1yctrY4zxv -CmJPAbFSLRsWEfaKwlg/qTwN9L91jFFy7er1zZD+Pu8Ea6Tod3LDT1zSaOGk/fvW -WY5lXYhpkG6hHT1wcx7ttsPd4TZ2d/Rl1Pb6iFHkVpLXd+1uExHie32O5f/dypIn -6iJUyb4og+Z2+itZYCxpze8XfjmVlW2H +LmVkdTANBgkqhkiG9w0BAQwFAAOCAYEAMtIS4vU4AFCbqNLdBeXTtNGDzNg581tM +rq0NfPNa7dhfFDJ0r+ci7GJFuDui6kmEYi3fpea67Ba7xz0mwQB2TVd4/qDhHSsB +EmIyeVLDli7h0bkenUNXtchGiYIHpn+2xgJWKiRfHEBTQ5uYAvCRt25VQm4uOi3H +xbAe1w3wkQa/Wj8D3Bw5OHUTb85uoo8g2MQNKpmny2Cmf4O6OrcWUglgbT6wFhnV +uiWZ8O9JjrxCcTUqsCe+jGiGLa+tJGKJ5U1gDnuZphZftDAtqn5cstoC0wvWX3Ij +y9rscrFRnZ/L6fAPVjYY2p73yyavDTPbU7G7GwGCZ5khzFkYEPL358WFgACK3OOW +DuVgnumyRU8xRTjUFi8V5hADh70i6NnxzTos/36wGgd5uQkx4wSLy+jExJfL1CHr +wjnpr0te42kOtBptXbNOrV282Gc7hup/wRPhG6iaV1It780TlOJ7mAy0NR13R5hQ +K3zb0Km8kzrBZgDHsEXM/pnBD52P4CqY -----END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key index 77e8bff..c667675 100644 --- a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key +++ b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key @@ -1,39 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml index 928d318..60c6509 100644 --- a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml +++ b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml @@ -33,8 +33,8 @@ task_runner : device : cpu gandlf_config : batch_size: 1 - clip_grad: None - clip_mode: None + clip_mode: norm + clip_grad: 0.1 data_augmentation: {} data_postprocessing: {} data_preprocessing: @@ -50,8 +50,8 @@ task_runner : output_dir: '.' metrics: - dice - - dice_per_label - - hd95_per_label + # - dice_per_label + # - hd95_per_label model: amp: true architecture: resunet From d9cddd1f9176acd3cdf98f7ebeb178238d220bbc Mon Sep 17 00:00:00 2001 From: kta-intel Date: Sat, 28 Sep 2024 06:34:00 -0700 Subject: [PATCH 06/22] updates to enable latest openfl and gandlf Signed-off-by: kta-intel --- Task_1/fets_challenge/experiment.py | 78 +++++++++---------- Task_1/fets_challenge/inference.py | 12 +-- .../fets_challenge_workspace/plan/plan.yaml | 3 +- Task_1/setup.py | 4 +- 4 files changed, 50 insertions(+), 47 deletions(-) diff --git a/Task_1/fets_challenge/experiment.py b/Task_1/fets_challenge/experiment.py index 23ff669..1bf25d3 100644 --- a/Task_1/fets_challenge/experiment.py +++ b/Task_1/fets_challenge/experiment.py @@ -254,7 +254,7 @@ def run_challenge_experiment(aggregation_function, save_checkpoints=True, restore_from_checkpoint_folder=None, include_validation_with_hausdorff=True, - use_pretrained_model=True): + use_pretrained_model=False): fx.init('fets_challenge_workspace') @@ -367,18 +367,18 @@ def run_challenge_experiment(aggregation_function, 'time': [], 'convergence_score': [], 'round_dice': [], - 'dice_label_0': [], - 'dice_label_1': [], - 'dice_label_2': [], - 'dice_label_4': [], + # 'dice_label_0': [], + # 'dice_label_1': [], + # 'dice_label_2': [], + # 'dice_label_4': [], } - if include_validation_with_hausdorff: - experiment_results.update({ - 'hausdorff95_label_0': [], - 'hausdorff95_label_1': [], - 'hausdorff95_label_2': [], - 'hausdorff95_label_4': [], - }) + # if include_validation_with_hausdorff: + # experiment_results.update({ + # 'hausdorff95_label_0': [], + # 'hausdorff95_label_1': [], + # 'hausdorff95_label_2': [], + # 'hausdorff95_label_4': [], + # }) if restore_from_checkpoint_folder is None: @@ -496,15 +496,15 @@ def run_challenge_experiment(aggregation_function, # get the performace validation scores for the round round_dice = get_metric('valid_dice', round_num, aggregator.tensor_db) - dice_label_0 = get_metric('valid_dice_per_label_0', round_num, aggregator.tensor_db) - dice_label_1 = get_metric('valid_dice_per_label_1', round_num, aggregator.tensor_db) - dice_label_2 = get_metric('valid_dice_per_label_2', round_num, aggregator.tensor_db) - dice_label_4 = get_metric('valid_dice_per_label_4', round_num, aggregator.tensor_db) - if include_validation_with_hausdorff: - hausdorff95_label_0 = get_metric('valid_hd95_per_label_0', round_num, aggregator.tensor_db) - hausdorff95_label_1 = get_metric('valid_hd95_per_label_1', round_num, aggregator.tensor_db) - hausdorff95_label_2 = get_metric('valid_hd95_per_label_2', round_num, aggregator.tensor_db) - hausdorff95_label_4 = get_metric('valid_hd95_per_label_4', round_num, aggregator.tensor_db) + # dice_label_0 = get_metric('valid_dice_per_label_0', round_num, aggregator.tensor_db) + # dice_label_1 = get_metric('valid_dice_per_label_1', round_num, aggregator.tensor_db) + # dice_label_2 = get_metric('valid_dice_per_label_2', round_num, aggregator.tensor_db) + # dice_label_4 = get_metric('valid_dice_per_label_4', round_num, aggregator.tensor_db) + # if include_validation_with_hausdorff: + # hausdorff95_label_0 = get_metric('valid_hd95_per_label_0', round_num, aggregator.tensor_db) + # hausdorff95_label_1 = get_metric('valid_hd95_per_label_1', round_num, aggregator.tensor_db) + # hausdorff95_label_2 = get_metric('valid_hd95_per_label_2', round_num, aggregator.tensor_db) + # hausdorff95_label_4 = get_metric('valid_hd95_per_label_4', round_num, aggregator.tensor_db) # update best score if best_dice < round_dice: @@ -537,30 +537,30 @@ def run_challenge_experiment(aggregation_function, summary = '"**** END OF ROUND {} SUMMARY *****"'.format(round_num) summary += "\n\tSimulation Time: {} minutes".format(round(total_simulated_time / 60, 2)) summary += "\n\t(Projected) Convergence Score: {}".format(projected_auc) - summary += "\n\tDICE Label 0: {}".format(dice_label_0) - summary += "\n\tDICE Label 1: {}".format(dice_label_1) - summary += "\n\tDICE Label 2: {}".format(dice_label_2) - summary += "\n\tDICE Label 4: {}".format(dice_label_4) - if include_validation_with_hausdorff: - summary += "\n\tHausdorff95 Label 0: {}".format(hausdorff95_label_0) - summary += "\n\tHausdorff95 Label 1: {}".format(hausdorff95_label_1) - summary += "\n\tHausdorff95 Label 2: {}".format(hausdorff95_label_2) - summary += "\n\tHausdorff95 Label 4: {}".format(hausdorff95_label_4) + # summary += "\n\tDICE Label 0: {}".format(dice_label_0) + # summary += "\n\tDICE Label 1: {}".format(dice_label_1) + # summary += "\n\tDICE Label 2: {}".format(dice_label_2) + # summary += "\n\tDICE Label 4: {}".format(dice_label_4) + # if include_validation_with_hausdorff: + # summary += "\n\tHausdorff95 Label 0: {}".format(hausdorff95_label_0) + # summary += "\n\tHausdorff95 Label 1: {}".format(hausdorff95_label_1) + # summary += "\n\tHausdorff95 Label 2: {}".format(hausdorff95_label_2) + # summary += "\n\tHausdorff95 Label 4: {}".format(hausdorff95_label_4) experiment_results['round'].append(round_num) experiment_results['time'].append(total_simulated_time) experiment_results['convergence_score'].append(projected_auc) experiment_results['round_dice'].append(round_dice) - experiment_results['dice_label_0'].append(dice_label_0) - experiment_results['dice_label_1'].append(dice_label_1) - experiment_results['dice_label_2'].append(dice_label_2) - experiment_results['dice_label_4'].append(dice_label_4) - if include_validation_with_hausdorff: - experiment_results['hausdorff95_label_0'].append(hausdorff95_label_0) - experiment_results['hausdorff95_label_1'].append(hausdorff95_label_1) - experiment_results['hausdorff95_label_2'].append(hausdorff95_label_2) - experiment_results['hausdorff95_label_4'].append(hausdorff95_label_4) + # experiment_results['dice_label_0'].append(dice_label_0) + # experiment_results['dice_label_1'].append(dice_label_1) + # experiment_results['dice_label_2'].append(dice_label_2) + # experiment_results['dice_label_4'].append(dice_label_4) + # if include_validation_with_hausdorff: + # experiment_results['hausdorff95_label_0'].append(hausdorff95_label_0) + # experiment_results['hausdorff95_label_1'].append(hausdorff95_label_1) + # experiment_results['hausdorff95_label_2'].append(hausdorff95_label_2) + # experiment_results['hausdorff95_label_4'].append(hausdorff95_label_4) logger.info(summary) if save_checkpoints: diff --git a/Task_1/fets_challenge/inference.py b/Task_1/fets_challenge/inference.py index 13f0680..732fa5c 100644 --- a/Task_1/fets_challenge/inference.py +++ b/Task_1/fets_challenge/inference.py @@ -81,7 +81,8 @@ def generate_validation_csv(data_path, validation_csv_filename, working_dir): 0.0, 'placeholder', training_and_validation=False) - validation_csv_dict.to_csv(os.path.join(working_dir, 'validation_paths.csv'),index=False) + os.makedirs(os.path.join(working_dir, 'inference_col'), exist_ok=True) + validation_csv_dict.to_csv(os.path.join(working_dir, 'inference_col', 'valid.csv'),index=False) def replace_initializations(done_replacing, array, mask, replacement_value, initialization_value): """ @@ -228,12 +229,13 @@ def model_outputs_to_disc(data_path, # Update the plan if necessary plan = fx.update_plan(overrides) - plan.config['task_runner']['settings']['fets_config_dict']['save_output'] = True - plan.config['task_runner']['settings']['fets_config_dict']['output_dir'] = output_path + plan.config['task_runner']['settings']['gandlf_config']['save_output'] = True + plan.config['task_runner']['settings']['gandlf_config']['output_dir'] = output_path # overwrite datapath value for a single 'InferenceCol' collaborator - plan.cols_data_paths['InferenceCol'] = data_path - + # plan.cols_data_paths['InferenceCol'] = data_path + plan.cols_data_paths['InferenceCol'] = 'inference_col' + # get the inference data loader data_loader = copy(plan).get_data_loader('InferenceCol') diff --git a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml index 60c6509..912c614 100644 --- a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml +++ b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml @@ -92,9 +92,10 @@ task_runner : track_memory_usage: false verbose: false version: - maximum: 0.0.14 + maximum: 0.1.0 minimum: 0.0.14 weighted_loss: true + modality: rad network : diff --git a/Task_1/setup.py b/Task_1/setup.py index 312aa5f..49a02f6 100644 --- a/Task_1/setup.py +++ b/Task_1/setup.py @@ -28,8 +28,8 @@ ], include_package_data=True, install_requires=[ - 'openfl @ git+https://github.com/intel/openfl.git@v1.5.1', - 'GANDLF @ git+https://github.com/CBICA/GaNDLF.git@0.0.17', + 'openfl @ git+https://github.com/securefederatedai/openfl.git@kta-intel/fets-2024-patch-1', + 'GANDLF @ git+https://github.com/CBICA/GaNDLF.git@0.1.0', 'fets @ git+https://github.com/FETS-AI/Algorithms.git@fets_challenge', ], python_requires='>=3.9', From 1362595d66141eb8f54c8ed289f892f3b0f99d1b Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Sat, 28 Sep 2024 17:19:57 -0400 Subject: [PATCH 07/22] added classification plan, made separate plans folder for multiple yaml blueprints --- Task_1/.gitignore | 4 +- Task_1/FeTS_Challenge.py | 1 + .../fets_challenge_workspace/plan/plan.yaml | 11 +- Task_1/fets_challenge.egg-info/PKG-INFO | 6 +- Task_1/fets_challenge.egg-info/requires.txt | 4 +- .../fets_challenge_workspace/plan/plan.yaml | 27 ++-- Task_1/plans/cla_plan.yaml | 142 ++++++++++++++++++ Task_1/plans/seg_plan.yaml | 141 +++++++++++++++++ 8 files changed, 311 insertions(+), 25 deletions(-) create mode 100644 Task_1/plans/cla_plan.yaml create mode 100644 Task_1/plans/seg_plan.yaml diff --git a/Task_1/.gitignore b/Task_1/.gitignore index 264d695..f3220d1 100644 --- a/Task_1/.gitignore +++ b/Task_1/.gitignore @@ -4,5 +4,5 @@ FeTS_Challenge_RL.py FeTS_Challenge_RecEng.py FeTS_Challenge_leonardklausman.py *final_submission* -build/* -*cert* +build* +cert* diff --git a/Task_1/FeTS_Challenge.py b/Task_1/FeTS_Challenge.py index 028b954..50c0fdb 100644 --- a/Task_1/FeTS_Challenge.py +++ b/Task_1/FeTS_Challenge.py @@ -528,6 +528,7 @@ def FedAvgM_Selection(local_tensors, # change this to point to the parent directory of the data brats_training_data_parent_dir = '/home/locolinux2/datasets/MICCAI_FeTS2022_TrainingData' +brats_training_data_parent_dir = '/home/locolinux2/datasets/MICCAI_FeTS2022_Resized' # increase this if you need a longer history for your algorithms # decrease this if you need to reduce system RAM consumption diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml index 928d318..912c614 100644 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml +++ b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml @@ -33,8 +33,8 @@ task_runner : device : cpu gandlf_config : batch_size: 1 - clip_grad: None - clip_mode: None + clip_mode: norm + clip_grad: 0.1 data_augmentation: {} data_postprocessing: {} data_preprocessing: @@ -50,8 +50,8 @@ task_runner : output_dir: '.' metrics: - dice - - dice_per_label - - hd95_per_label + # - dice_per_label + # - hd95_per_label model: amp: true architecture: resunet @@ -92,9 +92,10 @@ task_runner : track_memory_usage: false verbose: false version: - maximum: 0.0.14 + maximum: 0.1.0 minimum: 0.0.14 weighted_loss: true + modality: rad network : diff --git a/Task_1/fets_challenge.egg-info/PKG-INFO b/Task_1/fets_challenge.egg-info/PKG-INFO index f4f9e12..0566eb6 100644 --- a/Task_1/fets_challenge.egg-info/PKG-INFO +++ b/Task_1/fets_challenge.egg-info/PKG-INFO @@ -14,11 +14,11 @@ Classifier: Programming Language :: Python :: 3 Requires-Python: >=3.9 Description-Content-Type: text/markdown License-File: LICENSE -Requires-Dist: openfl@ git+https://github.com/intel/openfl.git@v1.5.1 -Requires-Dist: GANDLF@ git+https://github.com/CBICA/GaNDLF.git@0.0.17 +Requires-Dist: openfl@ git+https://github.com/securefederatedai/openfl.git@kta-intel/fets-2024-patch-1 +Requires-Dist: GANDLF@ git+https://github.com/CBICA/GaNDLF.git@0.1.0 Requires-Dist: fets@ git+https://github.com/FETS-AI/Algorithms.git@fets_challenge -# FeTS 2022 Challenge Task 1 +# FeTS 2024+ Challenge Task 1 Task 1 (**"Federated Training"**) aims at effective weight aggregation methods for the creation of a consensus model given a pre-defined segmentation algorithm for training, while also (optionally) accounting for network outages. Please ask any additional questions in our discussion pages on our github site and we will try to update this README.md as we identify confusions/gaps in our explanations and instructions. diff --git a/Task_1/fets_challenge.egg-info/requires.txt b/Task_1/fets_challenge.egg-info/requires.txt index ecf3c20..72ddcc1 100644 --- a/Task_1/fets_challenge.egg-info/requires.txt +++ b/Task_1/fets_challenge.egg-info/requires.txt @@ -1,3 +1,3 @@ -openfl@ git+https://github.com/intel/openfl.git@v1.5.1 -GANDLF@ git+https://github.com/CBICA/GaNDLF.git@0.0.17 +openfl@ git+https://github.com/securefederatedai/openfl.git@kta-intel/fets-2024-patch-1 +GANDLF@ git+https://github.com/CBICA/GaNDLF.git@0.1.0 fets@ git+https://github.com/FETS-AI/Algorithms.git@fets_challenge diff --git a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml index 912c614..e7c1ace 100644 --- a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml +++ b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml @@ -23,15 +23,17 @@ data_loader : defaults : plan/defaults/data_loader.yaml template : openfl.federated.data.loader_gandlf.GaNDLFDataLoaderWrapper settings : - feature_shape : [32, 32, 32] + feature_shape : [128,128,64] #[32,32,32] task_runner : template : src.fets_challenge_model.FeTSChallengeModel settings : - train_csv : seg_test_train.csv - val_csv : seg_test_val.csv + train_csv : cla_test_train.csv + val_csv : cla_test_val.csv device : cpu gandlf_config : + problem_type: classification + label: None batch_size: 1 clip_mode: norm clip_grad: 0.1 @@ -45,26 +47,25 @@ task_runner : grid_aggregator_overlap: crop patch_overlap: 0 learning_rate: 0.001 - loss_function: dc + loss_function: cel medcam_enabled: false output_dir: '.' metrics: - - dice - # - dice_per_label - # - hd95_per_label + - accuracy + - recall model: - amp: true - architecture: resunet + amp: false + architecture: densenet base_filters: 32 + norm_type: batch class_list: - 0 - 1 - 2 - - 4 + - 3 dimension: 3 final_layer: softmax ignore_label_validation: None - norm_type: instance nested_training: testing: 1 validation: -5 @@ -74,8 +75,8 @@ task_runner : parallel_compute_command: '' patch_sampler: label patch_size: - - 64 - - 64 + - 128 + - 128 - 64 patience: 100 pin_memory_dataloader: false diff --git a/Task_1/plans/cla_plan.yaml b/Task_1/plans/cla_plan.yaml new file mode 100644 index 0000000..e7c1ace --- /dev/null +++ b/Task_1/plans/cla_plan.yaml @@ -0,0 +1,142 @@ +# Copyright (C) 2022 Intel Corporation +# Licensed subject to the terms of the separately executed evaluation license agreement between Intel Corporation and you. + +aggregator : + defaults : plan/defaults/aggregator.yaml + template : openfl.component.Aggregator + settings : + init_state_path : save/fets_seg_test_init.pbuf + best_state_path : save/fets_seg_test_best.pbuf + last_state_path : save/fets_seg_test_last.pbuf + rounds_to_train : 3 + write_logs : true + + +collaborator : + defaults : plan/defaults/collaborator.yaml + template : openfl.component.Collaborator + settings : + delta_updates : false + opt_treatment : RESET + +data_loader : + defaults : plan/defaults/data_loader.yaml + template : openfl.federated.data.loader_gandlf.GaNDLFDataLoaderWrapper + settings : + feature_shape : [128,128,64] #[32,32,32] + +task_runner : + template : src.fets_challenge_model.FeTSChallengeModel + settings : + train_csv : cla_test_train.csv + val_csv : cla_test_val.csv + device : cpu + gandlf_config : + problem_type: classification + label: None + batch_size: 1 + clip_mode: norm + clip_grad: 0.1 + data_augmentation: {} + data_postprocessing: {} + data_preprocessing: + normalize: None + enable_padding: false + in_memory: false + inference_mechanism : + grid_aggregator_overlap: crop + patch_overlap: 0 + learning_rate: 0.001 + loss_function: cel + medcam_enabled: false + output_dir: '.' + metrics: + - accuracy + - recall + model: + amp: false + architecture: densenet + base_filters: 32 + norm_type: batch + class_list: + - 0 + - 1 + - 2 + - 3 + dimension: 3 + final_layer: softmax + ignore_label_validation: None + nested_training: + testing: 1 + validation: -5 + num_epochs: 1 + optimizer: + type: sgd + parallel_compute_command: '' + patch_sampler: label + patch_size: + - 128 + - 128 + - 64 + patience: 100 + pin_memory_dataloader: false + print_rgb_label_warning: true + q_max_length: 100 + q_num_workers: 0 + q_samples_per_volume: 40 + q_verbose: false + save_output: false + save_training: false + scaling_factor: 1 + scheduler: + type: triangle_modified + track_memory_usage: false + verbose: false + version: + maximum: 0.1.0 + minimum: 0.0.14 + weighted_loss: true + modality: rad + + +network : + defaults : plan/defaults/network.yaml + +assigner: + template : src.challenge_assigner.FeTSChallengeAssigner + settings : + training_tasks : + - aggregated_model_validation + - train + - locally_tuned_model_validation + validation_tasks : + - aggregated_model_validation + +tasks : + aggregated_model_validation: + function : validate + kwargs : + apply : global + metrics : + - valid_loss + - valid_dice + + locally_tuned_model_validation: + function : validate + kwargs : + apply: local + metrics : + - valid_loss + - valid_dice + + train: + function : train + kwargs : + metrics : + - loss + - train_dice + epochs : 1 + + +compression_pipeline : + defaults : plan/defaults/compression_pipeline.yaml diff --git a/Task_1/plans/seg_plan.yaml b/Task_1/plans/seg_plan.yaml new file mode 100644 index 0000000..912c614 --- /dev/null +++ b/Task_1/plans/seg_plan.yaml @@ -0,0 +1,141 @@ +# Copyright (C) 2022 Intel Corporation +# Licensed subject to the terms of the separately executed evaluation license agreement between Intel Corporation and you. + +aggregator : + defaults : plan/defaults/aggregator.yaml + template : openfl.component.Aggregator + settings : + init_state_path : save/fets_seg_test_init.pbuf + best_state_path : save/fets_seg_test_best.pbuf + last_state_path : save/fets_seg_test_last.pbuf + rounds_to_train : 3 + write_logs : true + + +collaborator : + defaults : plan/defaults/collaborator.yaml + template : openfl.component.Collaborator + settings : + delta_updates : false + opt_treatment : RESET + +data_loader : + defaults : plan/defaults/data_loader.yaml + template : openfl.federated.data.loader_gandlf.GaNDLFDataLoaderWrapper + settings : + feature_shape : [32, 32, 32] + +task_runner : + template : src.fets_challenge_model.FeTSChallengeModel + settings : + train_csv : seg_test_train.csv + val_csv : seg_test_val.csv + device : cpu + gandlf_config : + batch_size: 1 + clip_mode: norm + clip_grad: 0.1 + data_augmentation: {} + data_postprocessing: {} + data_preprocessing: + normalize: None + enable_padding: false + in_memory: false + inference_mechanism : + grid_aggregator_overlap: crop + patch_overlap: 0 + learning_rate: 0.001 + loss_function: dc + medcam_enabled: false + output_dir: '.' + metrics: + - dice + # - dice_per_label + # - hd95_per_label + model: + amp: true + architecture: resunet + base_filters: 32 + class_list: + - 0 + - 1 + - 2 + - 4 + dimension: 3 + final_layer: softmax + ignore_label_validation: None + norm_type: instance + nested_training: + testing: 1 + validation: -5 + num_epochs: 1 + optimizer: + type: sgd + parallel_compute_command: '' + patch_sampler: label + patch_size: + - 64 + - 64 + - 64 + patience: 100 + pin_memory_dataloader: false + print_rgb_label_warning: true + q_max_length: 100 + q_num_workers: 0 + q_samples_per_volume: 40 + q_verbose: false + save_output: false + save_training: false + scaling_factor: 1 + scheduler: + type: triangle_modified + track_memory_usage: false + verbose: false + version: + maximum: 0.1.0 + minimum: 0.0.14 + weighted_loss: true + modality: rad + + +network : + defaults : plan/defaults/network.yaml + +assigner: + template : src.challenge_assigner.FeTSChallengeAssigner + settings : + training_tasks : + - aggregated_model_validation + - train + - locally_tuned_model_validation + validation_tasks : + - aggregated_model_validation + +tasks : + aggregated_model_validation: + function : validate + kwargs : + apply : global + metrics : + - valid_loss + - valid_dice + + locally_tuned_model_validation: + function : validate + kwargs : + apply: local + metrics : + - valid_loss + - valid_dice + + train: + function : train + kwargs : + metrics : + - loss + - train_dice + epochs : 1 + + +compression_pipeline : + defaults : plan/defaults/compression_pipeline.yaml From daeb8dbf81b9e339a5c0ed530b4d95dc7f142663 Mon Sep 17 00:00:00 2001 From: Sarthak Pati Date: Mon, 30 Sep 2024 08:58:57 -0400 Subject: [PATCH 08/22] Update plan.yaml --- .../openfl-workspace/fets_challenge_workspace/plan/plan.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml index e7c1ace..90fa048 100644 --- a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml +++ b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml @@ -73,7 +73,7 @@ task_runner : optimizer: type: sgd parallel_compute_command: '' - patch_sampler: label + patch_sampler: uniform patch_size: - 128 - 128 @@ -95,7 +95,7 @@ task_runner : version: maximum: 0.1.0 minimum: 0.0.14 - weighted_loss: true + weighted_loss: false modality: rad From 9114aebb7cef8a0e4b960840a1b4f5a671d6bf24 Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Mon, 30 Sep 2024 14:03:08 -0400 Subject: [PATCH 09/22] simplified config --- .../fets_challenge_workspace/plan/plan.yaml | 66 +++++++------------ 1 file changed, 25 insertions(+), 41 deletions(-) diff --git a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml index 90fa048..8708a52 100644 --- a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml +++ b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml @@ -32,71 +32,55 @@ task_runner : val_csv : cla_test_val.csv device : cpu gandlf_config : - problem_type: classification - label: None - batch_size: 1 - clip_mode: norm - clip_grad: 0.1 + # label: None + # clip_mode: norm + # clip_grad: 0.1 + output_dir: '.' + + batch_size: 8 data_augmentation: {} - data_postprocessing: {} - data_preprocessing: - normalize: None - enable_padding: false + data_preprocessing: {} in_memory: false - inference_mechanism : - grid_aggregator_overlap: crop - patch_overlap: 0 learning_rate: 0.001 - loss_function: cel - medcam_enabled: false - output_dir: '.' + loss_function: ce metrics: - - accuracy - - recall + - classification_accuracy + modality: rad model: amp: false - architecture: densenet - base_filters: 32 - norm_type: batch + onnx_export: false + architecture: vgg11 + base_filters: 16 class_list: - - 0 - - 1 - - 2 - - 3 + - '0' + - '1' + - '2' + - '3' dimension: 3 final_layer: softmax - ignore_label_validation: None + num_channels: 4 + norm_type: instance + weighted_loss: false + num_epochs: 500 nested_training: testing: 1 - validation: -5 - num_epochs: 1 - optimizer: - type: sgd - parallel_compute_command: '' + validation: -4 ## these are 4 because there is one site (i.e., Site3) that has only 4 samples. + optimizer: adam patch_sampler: uniform patch_size: - 128 - 128 - 64 patience: 100 - pin_memory_dataloader: false - print_rgb_label_warning: true q_max_length: 100 q_num_workers: 0 q_samples_per_volume: 40 q_verbose: false - save_output: false - save_training: false - scaling_factor: 1 - scheduler: - type: triangle_modified - track_memory_usage: false - verbose: false + save_masks: false + scheduler: triangle version: maximum: 0.1.0 minimum: 0.0.14 - weighted_loss: false - modality: rad network : From d7a837604253afb54594fceb05a0f12af2fbf8c4 Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Tue, 1 Oct 2024 14:46:46 -0400 Subject: [PATCH 10/22] added extract_csv for classification - i.e. generating of csv files for classification --- Task_1/fets_challenge/experiment.py | 13 +++- Task_1/fets_challenge/gandlf_csv_adapter.py | 62 ++++++++++++++++++- .../fets_challenge_workspace/plan/plan.yaml | 7 ++- 3 files changed, 74 insertions(+), 8 deletions(-) diff --git a/Task_1/fets_challenge/experiment.py b/Task_1/fets_challenge/experiment.py index 1bf25d3..bbb91f9 100644 --- a/Task_1/fets_challenge/experiment.py +++ b/Task_1/fets_challenge/experiment.py @@ -19,7 +19,7 @@ import openfl.native as fx import torch -from .gandlf_csv_adapter import construct_fedsim_csv, extract_csv_partitions +from .gandlf_csv_adapter import construct_fedsim_csv, extract_segmentation_csv_partitions, extract_classification_csv_partitions from .custom_aggregation_wrapper import CustomAggregationWrapper from .checkpoint_utils import setup_checkpoint_folder, save_checkpoint, load_checkpoint @@ -290,7 +290,7 @@ def run_challenge_experiment(aggregation_function, print("****Debugging: plan is", plan) if not include_validation_with_hausdorff: - plan.config['task_runner']['settings']['fets_config_dict']['metrics'] = ['dice','dice_per_label'] + plan.config['task_runner']['settings']['gandlf_config']['metrics'] = ['dice','dice_per_label'] # Overwrite collaborator names plan.authorized_cols = collaborator_names @@ -307,7 +307,14 @@ def run_challenge_experiment(aggregation_function, # get the data loaders for each collaborator collaborator_data_loaders = {col: copy(plan).get_data_loader(col) for col in collaborator_names} - transformed_csv_dict = extract_csv_partitions(os.path.join(work, 'gandlf_paths.csv')) + # Check the task type and use the appropriate function + if plan.config['task_runner']['settings']['gandlf_config']['problem_type'] == 'segmentation': + transformed_csv_dict = extract_segmentation_csv_partitions(os.path.join(work, 'gandlf_paths.csv')) + elif plan.config['task_runner']['settings']['gandlf_config']['problem_type'] == 'classification': + transformed_csv_dict = extract_classification_csv_partitions(os.path.join(work, 'gandlf_paths.csv')) + else: + raise ValueError("Invalid problem type. Expected 'segmentation' or 'classification'.") + # get the task runner, passing the first data loader for col in collaborator_data_loaders: #Insert logic to serialize train / val CSVs here diff --git a/Task_1/fets_challenge/gandlf_csv_adapter.py b/Task_1/fets_challenge/gandlf_csv_adapter.py index cafad78..ec13510 100644 --- a/Task_1/fets_challenge/gandlf_csv_adapter.py +++ b/Task_1/fets_challenge/gandlf_csv_adapter.py @@ -5,7 +5,7 @@ # Patrick Foley (Intel) # Micah Sheller (Intel) -import os +import os, sys import numpy as np import pandas as pd @@ -195,7 +195,7 @@ def construct_validation_dataframe(paths_dict, val_headers, numeric_header_name_ -def extract_csv_partitions(csv_path): +def extract_segmentation_csv_partitions(csv_path): df = pd.read_csv(csv_path) df = df.rename(columns={'0': 'SubjectID', '1': 'Channel_0', '2': 'Channel_1', '3': 'Channel_2', @@ -212,3 +212,61 @@ def extract_csv_partitions(csv_path): return transformed_csv_dict +def extract_classification_csv_partitions(csv_path): + df = pd.read_csv(csv_path) + df = df.rename(columns={'0': 'SubjectID', '1': 'Channel_0', + '2': 'Channel_1', '3': 'Channel_2', + '4': 'Channel_3', '5': 'Label'}) + + cols = df['Partition_ID'].unique() + transformed_csv_dict = {} + + # Define a mapping for channel labels + channel_label_mapping = { + 'Channel_0': 0, # t1 + 'Channel_1': 1, # t2 + 'Channel_2': 2, # flair + 'Channel_3': 3 # t1ce + } + + for col in cols: + transformed_csv_dict[str(col)] = {} + + # Create lists for train and val partitions + train_list = [] + val_list = [] + + # Filter rows by partition + for _, row in df[df['Partition_ID'] == col].iterrows(): + subject_id = row['SubjectID'] + train_or_val = row['TrainOrVal'] + + # Iterate through the channels (up to 4 channels) + for channel_name, channel_index in channel_label_mapping.items(): + channel_path = row[channel_name] + + # Create a row for the CSV output with the correct channel label + row_dict = { + 'SubjectID': subject_id, + 'Channel': channel_path, + 'ValueToPredict': channel_index # Correct label (0-3 for t1, t2, flair, t1ce) + } + + # Add row to the correct partition list + if train_or_val == 'train': + train_list.append(row_dict) + else: + val_list.append(row_dict) + + # Convert lists to DataFrames for train and val + transformed_csv_dict[str(col)]['train'] = pd.DataFrame(train_list) + transformed_csv_dict[str(col)]['val'] = pd.DataFrame(val_list) + + # Prints for easy debugging + print(f"\n=== Sample of Partition {col} - Train Data ===") + transformed_csv_dict[str(col)]['train'].head(10).to_csv(sys.stdout, index=False) + + print(f"\n=== Sample of Partition {col} - Validation Data ===") + transformed_csv_dict[str(col)]['val'].head(10).to_csv(sys.stdout, index=False) + + return transformed_csv_dict diff --git a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml index 8708a52..e6d08e6 100644 --- a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml +++ b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml @@ -28,10 +28,11 @@ data_loader : task_runner : template : src.fets_challenge_model.FeTSChallengeModel settings : - train_csv : cla_test_train.csv - val_csv : cla_test_val.csv + # train_csv : cla_test_train.csv + # val_csv : cla_test_val.csv device : cpu gandlf_config : + problem_type: classification # label: None # clip_mode: norm # clip_grad: 0.1 @@ -42,7 +43,7 @@ task_runner : data_preprocessing: {} in_memory: false learning_rate: 0.001 - loss_function: ce + loss_function: cel metrics: - classification_accuracy modality: rad From e4ae50017095d38c082405772b5aa150930d6de9 Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Tue, 1 Oct 2024 14:48:19 -0400 Subject: [PATCH 11/22] added extract_csv for classification - i.e. generating of csv files for classification --- Task_1/fets_challenge/gandlf_csv_adapter.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Task_1/fets_challenge/gandlf_csv_adapter.py b/Task_1/fets_challenge/gandlf_csv_adapter.py index ec13510..958806d 100644 --- a/Task_1/fets_challenge/gandlf_csv_adapter.py +++ b/Task_1/fets_challenge/gandlf_csv_adapter.py @@ -210,6 +210,13 @@ def extract_segmentation_csv_partitions(csv_path): transformed_csv_dict[str(col)]['val'] = \ df[(df['Partition_ID'] == col) & (df['TrainOrVal'] == 'val')].drop(columns=['TrainOrVal','Partition_ID']) + # Prints for easy debugging + print(f"\n=== Sample of Partition {col} - Train Data ===") + transformed_csv_dict[str(col)]['train'].head(10).to_csv(sys.stdout, index=False) + + print(f"\n=== Sample of Partition {col} - Validation Data ===") + transformed_csv_dict[str(col)]['val'].head(10).to_csv(sys.stdout, index=False) + return transformed_csv_dict def extract_classification_csv_partitions(csv_path): From 6463cb0976f25f50938275197eaff2b133d6f2cd Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Thu, 3 Oct 2024 03:56:05 -0400 Subject: [PATCH 12/22] functional classification --- Task_1/FeTS_Challenge.py | 2 +- Task_1/fets_challenge/gandlf_csv_adapter.py | 20 ++--- .../fets_challenge_workspace/plan/plan.yaml | 11 ++- Task_1/plans/cla_plan.yaml | 74 ++++++++----------- 4 files changed, 49 insertions(+), 58 deletions(-) diff --git a/Task_1/FeTS_Challenge.py b/Task_1/FeTS_Challenge.py index 50c0fdb..e78589c 100644 --- a/Task_1/FeTS_Challenge.py +++ b/Task_1/FeTS_Challenge.py @@ -539,7 +539,7 @@ def FedAvgM_Selection(local_tensors, # you'll want to increase this most likely. You can set it as high as you like, # however, the experiment will exit once the simulated time exceeds one week. -rounds_to_train = 5 +rounds_to_train = 20 # (bool) Determines whether checkpoints should be saved during the experiment. # The checkpoints can grow quite large (5-10GB) so only the latest will be saved when this parameter is enabled diff --git a/Task_1/fets_challenge/gandlf_csv_adapter.py b/Task_1/fets_challenge/gandlf_csv_adapter.py index 958806d..39b9cd5 100644 --- a/Task_1/fets_challenge/gandlf_csv_adapter.py +++ b/Task_1/fets_challenge/gandlf_csv_adapter.py @@ -211,12 +211,12 @@ def extract_segmentation_csv_partitions(csv_path): df[(df['Partition_ID'] == col) & (df['TrainOrVal'] == 'val')].drop(columns=['TrainOrVal','Partition_ID']) # Prints for easy debugging - print(f"\n=== Sample of Partition {col} - Train Data ===") - transformed_csv_dict[str(col)]['train'].head(10).to_csv(sys.stdout, index=False) + # print(f"\n=== Sample of Partition {col} - Train Data ===") + # transformed_csv_dict[str(col)]['train'].head(10).to_csv(sys.stdout, index=False) + + # print(f"\n=== Sample of Partition {col} - Validation Data ===") + # transformed_csv_dict[str(col)]['val'].head(10).to_csv(sys.stdout, index=False) - print(f"\n=== Sample of Partition {col} - Validation Data ===") - transformed_csv_dict[str(col)]['val'].head(10).to_csv(sys.stdout, index=False) - return transformed_csv_dict def extract_classification_csv_partitions(csv_path): @@ -269,11 +269,11 @@ def extract_classification_csv_partitions(csv_path): transformed_csv_dict[str(col)]['train'] = pd.DataFrame(train_list) transformed_csv_dict[str(col)]['val'] = pd.DataFrame(val_list) - # Prints for easy debugging - print(f"\n=== Sample of Partition {col} - Train Data ===") - transformed_csv_dict[str(col)]['train'].head(10).to_csv(sys.stdout, index=False) + # # Prints for easy debugging + # print(f"\n=== Sample of Partition {col} - Train Data ===") + # transformed_csv_dict[str(col)]['train'].head(10).to_csv(sys.stdout, index=False) - print(f"\n=== Sample of Partition {col} - Validation Data ===") - transformed_csv_dict[str(col)]['val'].head(10).to_csv(sys.stdout, index=False) + # print(f"\n=== Sample of Partition {col} - Validation Data ===") + # transformed_csv_dict[str(col)]['val'].head(10).to_csv(sys.stdout, index=False) return transformed_csv_dict diff --git a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml index e6d08e6..ceb1b85 100644 --- a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml +++ b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml @@ -32,7 +32,7 @@ task_runner : # val_csv : cla_test_val.csv device : cpu gandlf_config : - problem_type: classification + problem_type: classification #segmentation, classification # label: None # clip_mode: norm # clip_grad: 0.1 @@ -45,12 +45,15 @@ task_runner : learning_rate: 0.001 loss_function: cel metrics: - - classification_accuracy + - classification_accuracy + - recall + - precision + - f1 modality: rad model: amp: false onnx_export: false - architecture: vgg11 + architecture: densenet121 base_filters: 16 class_list: - '0' @@ -59,7 +62,7 @@ task_runner : - '3' dimension: 3 final_layer: softmax - num_channels: 4 + num_channels: 1 norm_type: instance weighted_loss: false num_epochs: 500 diff --git a/Task_1/plans/cla_plan.yaml b/Task_1/plans/cla_plan.yaml index e7c1ace..ceb1b85 100644 --- a/Task_1/plans/cla_plan.yaml +++ b/Task_1/plans/cla_plan.yaml @@ -28,75 +28,63 @@ data_loader : task_runner : template : src.fets_challenge_model.FeTSChallengeModel settings : - train_csv : cla_test_train.csv - val_csv : cla_test_val.csv + # train_csv : cla_test_train.csv + # val_csv : cla_test_val.csv device : cpu gandlf_config : - problem_type: classification - label: None - batch_size: 1 - clip_mode: norm - clip_grad: 0.1 + problem_type: classification #segmentation, classification + # label: None + # clip_mode: norm + # clip_grad: 0.1 + output_dir: '.' + + batch_size: 8 data_augmentation: {} - data_postprocessing: {} - data_preprocessing: - normalize: None - enable_padding: false + data_preprocessing: {} in_memory: false - inference_mechanism : - grid_aggregator_overlap: crop - patch_overlap: 0 learning_rate: 0.001 loss_function: cel - medcam_enabled: false - output_dir: '.' metrics: - - accuracy - - recall + - classification_accuracy + - recall + - precision + - f1 + modality: rad model: amp: false - architecture: densenet - base_filters: 32 - norm_type: batch + onnx_export: false + architecture: densenet121 + base_filters: 16 class_list: - - 0 - - 1 - - 2 - - 3 + - '0' + - '1' + - '2' + - '3' dimension: 3 final_layer: softmax - ignore_label_validation: None + num_channels: 1 + norm_type: instance + weighted_loss: false + num_epochs: 500 nested_training: testing: 1 - validation: -5 - num_epochs: 1 - optimizer: - type: sgd - parallel_compute_command: '' - patch_sampler: label + validation: -4 ## these are 4 because there is one site (i.e., Site3) that has only 4 samples. + optimizer: adam + patch_sampler: uniform patch_size: - 128 - 128 - 64 patience: 100 - pin_memory_dataloader: false - print_rgb_label_warning: true q_max_length: 100 q_num_workers: 0 q_samples_per_volume: 40 q_verbose: false - save_output: false - save_training: false - scaling_factor: 1 - scheduler: - type: triangle_modified - track_memory_usage: false - verbose: false + save_masks: false + scheduler: triangle version: maximum: 0.1.0 minimum: 0.0.14 - weighted_loss: true - modality: rad network : From be1a55aa9625275f875115fd1f2e1064145e381d Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Sun, 13 Oct 2024 16:50:09 -0400 Subject: [PATCH 13/22] classification works --- .gitignore | 2 - Task_1/FeTS_Challenge.py | 5 +- Task_1/build/lib/fets_challenge/__init__.py | 7 - .../lib/fets_challenge/checkpoint_utils.py | 51 - .../custom_aggregation_wrapper.py | 30 - Task_1/build/lib/fets_challenge/experiment.py | 593 -------- .../lib/fets_challenge/gandlf_csv_adapter.py | 214 --- Task_1/build/lib/fets_challenge/inference.py | 251 ---- .../lib/fets_challenge/spec_sens_code.py | 113 -- .../partitioning_1.csv | 1252 ----------------- .../partitioning_2.csv | 1252 ----------------- .../fets_challenge_workspace/plan/cols.yaml | 3 - .../fets_challenge_workspace/plan/data.yaml | 4 - .../fets_challenge_workspace/plan/defaults | 2 - .../fets_challenge_workspace/plan/plan.yaml | 141 -- .../fets_challenge_workspace/requirements.txt | 2 - .../fets_challenge_workspace/small_split.csv | 11 - .../fets_challenge_workspace/src/__init__.py | 10 - .../src/challenge_assigner.py | 40 - .../src/fets_challenge_model.py | 208 --- .../fets_challenge_workspace/validation.csv | 220 --- Task_1/cert/ca/root-ca.crt | 27 - Task_1/cert/ca/root-ca/db/root-ca.crl.srl | 1 - Task_1/cert/ca/root-ca/db/root-ca.crt.srl | 1 - Task_1/cert/ca/root-ca/db/root-ca.db | 0 Task_1/cert/ca/root-ca/db/root-ca.db.attr | 0 Task_1/cert/ca/root-ca/private/root-ca.key | 39 - Task_1/cert/ca/signing-ca.crt | 27 - Task_1/cert/ca/signing-ca.csr | 23 - .../cert/ca/signing-ca/db/signing-ca.crl.srl | 1 - .../cert/ca/signing-ca/db/signing-ca.crt.srl | 1 - Task_1/cert/ca/signing-ca/db/signing-ca.db | 0 .../cert/ca/signing-ca/db/signing-ca.db.attr | 0 .../cert/ca/signing-ca/private/signing-ca.key | 39 - Task_1/cert/cert_chain.crt | 54 - Task_1/cert/client/col_one.crt | 25 - Task_1/cert/client/col_one.key | 39 - Task_1/cert/client/col_two.crt | 25 - Task_1/cert/client/col_two.key | 39 - Task_1/cert/col_one.csr | 22 - Task_1/cert/col_two.csr | 22 - .../server/agg_in-ota-232347.ads.iu.edu.crt | 26 - .../server/agg_in-ota-232347.ads.iu.edu.csr | 23 - .../server/agg_in-ota-232347.ads.iu.edu.key | 39 - Task_1/fets_challenge/experiment.py | 93 +- 45 files changed, 61 insertions(+), 4916 deletions(-) delete mode 100644 .gitignore delete mode 100644 Task_1/build/lib/fets_challenge/__init__.py delete mode 100644 Task_1/build/lib/fets_challenge/checkpoint_utils.py delete mode 100644 Task_1/build/lib/fets_challenge/custom_aggregation_wrapper.py delete mode 100644 Task_1/build/lib/fets_challenge/experiment.py delete mode 100644 Task_1/build/lib/fets_challenge/gandlf_csv_adapter.py delete mode 100644 Task_1/build/lib/fets_challenge/inference.py delete mode 100644 Task_1/build/lib/fets_challenge/spec_sens_code.py delete mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_1.csv delete mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_2.csv delete mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/cols.yaml delete mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/data.yaml delete mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/defaults delete mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml delete mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/requirements.txt delete mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/small_split.csv delete mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/__init__.py delete mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/challenge_assigner.py delete mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py delete mode 100644 Task_1/build/lib/openfl-workspace/fets_challenge_workspace/validation.csv delete mode 100644 Task_1/cert/ca/root-ca.crt delete mode 100644 Task_1/cert/ca/root-ca/db/root-ca.crl.srl delete mode 100644 Task_1/cert/ca/root-ca/db/root-ca.crt.srl delete mode 100644 Task_1/cert/ca/root-ca/db/root-ca.db delete mode 100644 Task_1/cert/ca/root-ca/db/root-ca.db.attr delete mode 100644 Task_1/cert/ca/root-ca/private/root-ca.key delete mode 100644 Task_1/cert/ca/signing-ca.crt delete mode 100644 Task_1/cert/ca/signing-ca.csr delete mode 100644 Task_1/cert/ca/signing-ca/db/signing-ca.crl.srl delete mode 100644 Task_1/cert/ca/signing-ca/db/signing-ca.crt.srl delete mode 100644 Task_1/cert/ca/signing-ca/db/signing-ca.db delete mode 100644 Task_1/cert/ca/signing-ca/db/signing-ca.db.attr delete mode 100644 Task_1/cert/ca/signing-ca/private/signing-ca.key delete mode 100644 Task_1/cert/cert_chain.crt delete mode 100644 Task_1/cert/client/col_one.crt delete mode 100644 Task_1/cert/client/col_one.key delete mode 100644 Task_1/cert/client/col_two.crt delete mode 100644 Task_1/cert/client/col_two.key delete mode 100644 Task_1/cert/col_one.csr delete mode 100644 Task_1/cert/col_two.csr delete mode 100644 Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt delete mode 100644 Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr delete mode 100644 Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key diff --git a/.gitignore b/.gitignore deleted file mode 100644 index bfb58cb..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -Task_1/venv/* -Task_1/fets_challenge/__pycache__/* diff --git a/Task_1/FeTS_Challenge.py b/Task_1/FeTS_Challenge.py index e78589c..bc9b0cb 100644 --- a/Task_1/FeTS_Challenge.py +++ b/Task_1/FeTS_Challenge.py @@ -518,13 +518,14 @@ def FedAvgM_Selection(local_tensors, # to those you specify immediately above. Changing the below value to False will change # this fact, excluding the three hausdorff measurements. As hausdorff distance is # expensive to compute, excluding them will speed up your experiments. -include_validation_with_hausdorff=True +include_validation_with_hausdorff=True # IF SET TO FALSE WHOLE CODE RUNS SEGMENTATION FOR SOME REASON # We encourage participants to experiment with partitioning_1 and partitioning_2, as well as to create # other partitionings to test your changes for generalization to multiple partitionings. #institution_split_csv_filename = 'partitioning_1.csv' #institution_split_csv_filename = 'partitioning_1.csv' -institution_split_csv_filename = '/home/locolinux2/datasets/MICCAI_FeTS2022_TrainingData/partitioning_2.csv' #'small_split.csv' +institution_split_csv_filename = '/home/locolinux2/datasets/MICCAI_FeTS2022_TrainingData/partitioning_2.csv' +institution_split_csv_filename = '/home/locolinux2/datasets/MICCAI_FeTS2022_TrainingData/sanity_partitioning.csv' # a small subset for sanity checks and debugging. Comment out to run the actual challenge partition. # change this to point to the parent directory of the data brats_training_data_parent_dir = '/home/locolinux2/datasets/MICCAI_FeTS2022_TrainingData' diff --git a/Task_1/build/lib/fets_challenge/__init__.py b/Task_1/build/lib/fets_challenge/__init__.py deleted file mode 100644 index d050e7d..0000000 --- a/Task_1/build/lib/fets_challenge/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2022 - -# Contributing Authors (alphabetical): -# Micah Sheller (Intel) - -from .experiment import run_challenge_experiment -from .inference import model_outputs_to_disc diff --git a/Task_1/build/lib/fets_challenge/checkpoint_utils.py b/Task_1/build/lib/fets_challenge/checkpoint_utils.py deleted file mode 100644 index 30d5706..0000000 --- a/Task_1/build/lib/fets_challenge/checkpoint_utils.py +++ /dev/null @@ -1,51 +0,0 @@ -import pandas as pd -import pickle -from pathlib import Path -from glob import glob -from sys import exit -from logging import getLogger - -logger = getLogger(__name__) - -def setup_checkpoint_folder(): - # Create checkpoint - Path("checkpoint").mkdir(parents=True, exist_ok=True) - existing_checkpoints = glob('checkpoint/*') - if len(existing_checkpoints) == 0: - checkpoint_num = 1 - else: - # Increment the existing checkpoint by 1 - checkpoint_num = sorted([int(x.replace('checkpoint/experiment_','')) for x in existing_checkpoints])[-1] + 1 - experiment_folder = f'experiment_{checkpoint_num}' - checkpoint_folder = f'checkpoint/{experiment_folder}' - Path(checkpoint_folder).mkdir(parents=True, exist_ok=False) - return experiment_folder - -def save_checkpoint(checkpoint_folder, aggregator, - collaborator_names, collaborators, - round_num, collaborator_time_stats, - total_simulated_time, best_dice, - best_dice_over_time_auc, - collaborators_chosen_each_round, - collaborator_times_per_round, - experiment_results, - summary): - """ - Save latest checkpoint - """ - # Save aggregator tensor_db - aggregator.tensor_db.tensor_db.to_pickle(f'checkpoint/{checkpoint_folder}/aggregator_tensor_db.pkl') - with open(f'checkpoint/{checkpoint_folder}/state.pkl', 'wb') as f: - pickle.dump([collaborator_names, round_num, collaborator_time_stats, total_simulated_time, - best_dice, best_dice_over_time_auc, collaborators_chosen_each_round, - collaborator_times_per_round, experiment_results, summary], f) - -def load_checkpoint(checkpoint_folder): - """ - Reload checkpoint from 'checkpoint/experiment_*' - """ - aggregator_tensor_db = pd.read_pickle(f'checkpoint/{checkpoint_folder}/aggregator_tensor_db.pkl') - with open(f'checkpoint/{checkpoint_folder}/state.pkl', 'rb') as f: - state = pickle.load(f) - - return state + [aggregator_tensor_db] diff --git a/Task_1/build/lib/fets_challenge/custom_aggregation_wrapper.py b/Task_1/build/lib/fets_challenge/custom_aggregation_wrapper.py deleted file mode 100644 index 63472a6..0000000 --- a/Task_1/build/lib/fets_challenge/custom_aggregation_wrapper.py +++ /dev/null @@ -1,30 +0,0 @@ -from openfl.interface.aggregation_functions.experimental import PrivilegedAggregationFunction - - -# extends the openfl agg func interface to include challenge-relevant information -class CustomAggregationWrapper(PrivilegedAggregationFunction): - def __init__(self, func): - super().__init__() - self.func = func - self.collaborators_chosen_each_round = None - self.collaborator_times_per_round = None - - def set_state_data_for_round(self, - collaborators_chosen_each_round, - collaborator_times_per_round): - self.collaborators_chosen_each_round = collaborators_chosen_each_round - self.collaborator_times_per_round = collaborator_times_per_round - - # pass-through that includes additional information from the challenge experiment wrapper - def call(self, - local_tensors, - tensor_db, - tensor_name, - fl_round, - *__): - return self.func(local_tensors, - tensor_db, - tensor_name, - fl_round, - self.collaborators_chosen_each_round, - self.collaborator_times_per_round) diff --git a/Task_1/build/lib/fets_challenge/experiment.py b/Task_1/build/lib/fets_challenge/experiment.py deleted file mode 100644 index a55bda5..0000000 --- a/Task_1/build/lib/fets_challenge/experiment.py +++ /dev/null @@ -1,593 +0,0 @@ -# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2022 - -# Contributing Authors (alphabetical): -# Patrick Foley (Intel), Micah Sheller (Intel) - -import os -import warnings -from collections import namedtuple -from copy import copy -import shutil -from logging import getLogger -from pathlib import Path - -import numpy as np -import pandas as pd -from openfl.utilities import TensorKey -from openfl.protocols import utils -import openfl.native as fx -import torch - -from .gandlf_csv_adapter import construct_fedsim_csv, extract_csv_partitions -from .custom_aggregation_wrapper import CustomAggregationWrapper -from .checkpoint_utils import setup_checkpoint_folder, save_checkpoint, load_checkpoint - -# one week -# MINUTE = 60 -# HOUR = 60 * MINUTE -# DAY = 24 * HOUR -# WEEK = 7 * DAY -MAX_SIMULATION_TIME = 7 * 24 * 60 * 60 - -## COLLABORATOR TIMING DISTRIBUTIONS -# These data are derived from the actual timing information in the real-world FeTS information -# They reflect a subset of the institutions involved. -# Tuples are (mean, stddev) in seconds - -# time to train one patient -TRAINING_TIMES = [(6.710741331207654, 0.8726112813698301), - (2.7343911917098445, 0.023976155580152165), - (3.173076923076923, 0.04154320960517865), - (6.580379746835443, 0.22461890673025595), - (3.452046783625731, 0.47136389322749656), - (6.090788461700995, 0.08541499003440205), - (3.206933911159263, 0.1927067498514361), - (3.3358208955223883, 0.2950567549663471), - (4.391304347826087, 0.37464538999161057), - (6.324805129494594, 0.1413885448869165), - (7.415133477633478, 1.1198881747151301), - (5.806410256410255, 0.029926699295169234), - (6.300204918032787, 0.24932319729777577), - (5.886317567567567, 0.018627858809133223), - (5.478184991273998, 0.04902740607167421), - (6.32440159574468, 0.15838847558954935), - (20.661918328585003, 6.085405543890793), - (3.197901325478645, 0.07049966132127056), - (6.523963730569948, 0.2533266757118492), - (2.6540077569489338, 0.025503099659276184), - (1.8025746183640918, 0.06805805332403576)] - -# time to validate one patient -VALIDATION_TIMES = [(23.129135113591072, 2.5975116854269507), - (12.965544041450777, 0.3476297824941513), - (14.782051282051283, 0.5262660449172765), - (16.444936708860762, 0.42613177203005187), - (15.728654970760235, 4.327559980390658), - (12.946098012884802, 0.2449927822869217), - (15.335950126991456, 1.1587597276712558), - (24.024875621890544, 3.087348297794285), - (38.361702127659576, 2.240113332190875), - (16.320970580839827, 0.4995108101783225), - (30.805555555555554, 3.1836337269688237), - (12.100899742930592, 0.41122386959584895), - (13.099897540983607, 0.6693132795197584), - (9.690202702702702, 0.17513593019922968), - (10.06980802792321, 0.7947848617875114), - (14.605333333333334, 0.6012305898922827), - (36.30294396961064, 9.24123672148819), - (16.9130060292851, 0.7452868131028928), - (40.244078460399706, 3.7700993678269037), - (13.161603102779575, 0.1975347910041472), - (11.222161868549701, 0.7021223062972527)] - -# time to download the model -DOWNLOAD_TIMES = [(112.42869743589742, 14.456734719659513), - (117.26870618556701, 12.549951446132013), - (13.059666666666667, 4.8700489616521185), - (47.50220338983051, 14.92128656898884), - (162.27864210526315, 32.562113378948396), - (99.46072058823529, 13.808785580783224), - (33.6347090909091, 25.00299299660141), - (216.25489393939392, 19.176465340447848), - (217.4117230769231, 20.757673955585453), - (98.38857297297298, 13.205048376808929), - (88.87509473684209, 23.152936862511545), - (66.96994262295081, 16.682497150763503), - (36.668852040816326, 13.759109844677598), - (149.31716326530614, 26.018185409516104), - (139.847, 80.04755583050091), - (54.97624444444445, 16.645170929316794)] - -# time to upload the model -UPLOAD_TIMES = [(192.28497409326425, 21.537450985376967), - (194.60103626943004, 24.194406902237056), - (20.0, 0.0), - (52.43859649122807, 5.047207127169352), - (182.82417582417582, 14.793519078918195), - (143.38059701492537, 7.910690646792151), - (30.695652173913043, 9.668122350904568), - (430.95360824742266, 54.97790476867727), - (348.3174603174603, 30.14347985347738), - (141.43715846994536, 5.271340868190727), - (158.7433155080214, 64.87526819391198), - (81.06086956521739, 7.003461202082419), - (32.60621761658031, 5.0418315093016615), - (281.5388601036269, 90.60338778706557), - (194.34065934065933, 36.6519776778435), - (66.53787878787878, 16.456280602190606)] - -logger = getLogger(__name__) -# This catches PyTorch UserWarnings for CPU -warnings.filterwarnings("ignore", category=UserWarning) - -CollaboratorTimeStats = namedtuple('CollaboratorTimeStats', - [ - 'validation_mean', - 'training_mean', - 'download_speed_mean', - 'upload_speed_mean', - 'validation_std', - 'training_std', - 'download_speed_std', - 'upload_speed_std', - ] - ) - -def gen_collaborator_time_stats(collaborator_names, seed=0xFEEDFACE): - - np.random.seed(seed) - - stats = {} - for col in collaborator_names: - ml_index = np.random.randint(len(VALIDATION_TIMES)) - validation = VALIDATION_TIMES[ml_index] - training = TRAINING_TIMES[ml_index] - net_index = np.random.randint(len(DOWNLOAD_TIMES)) - download = DOWNLOAD_TIMES[net_index] - upload = UPLOAD_TIMES[net_index] - - stats[col] = CollaboratorTimeStats(validation_mean=validation[0], - training_mean=training[0], - download_speed_mean=download[0], - upload_speed_mean=upload[0], - validation_std=validation[1], - training_std=training[1], - download_speed_std=download[1], - upload_speed_std=upload[1]) - return stats - -def compute_times_per_collaborator(collaborator_names, - training_collaborators, - epochs_per_round, - collaborator_data, - collaborator_time_stats, - round_num): - np.random.seed(round_num) - times = {} - for col in collaborator_names: - time = 0 - - # stats - stats = collaborator_time_stats[col] - - # download time - download_time = np.random.normal(loc=stats.download_speed_mean, - scale=stats.download_speed_std) - download_time = max(1, download_time) - time += download_time - - # data loader - data = collaborator_data[col] - - # validation time - data_size = data.get_valid_data_size() - validation_time_per = np.random.normal(loc=stats.validation_mean, - scale=stats.validation_std) - validation_time_per = max(1, validation_time_per) - time += data_size * validation_time_per - - # only if training - if col in training_collaborators: - # training time - data_size = data.get_train_data_size() - training_time_per = np.random.normal(loc=stats.training_mean, - scale=stats.training_std) - training_time_per = max(1, training_time_per) - - # training data size depends on the hparams - data_size *= epochs_per_round - time += data_size * training_time_per - - # if training, we also validate the locally updated model - data_size = data.get_valid_data_size() - validation_time_per = np.random.normal(loc=stats.validation_mean, - scale=stats.validation_std) - validation_time_per = max(1, validation_time_per) - time += data_size * validation_time_per - - # upload time - upload_time = np.random.normal(loc=stats.upload_speed_mean, - scale=stats.upload_speed_std) - upload_time = max(1, upload_time) - time += upload_time - - times[col] = time - return times - -def split_tensor_dict_into_floats_and_non_floats(tensor_dict): - """ - Split the tensor dictionary into float and non-floating point values. - - Splits a tensor dictionary into float and non-float values. - - Args: - tensor_dict: A dictionary of tensors - - Returns: - Two dictionaries: the first contains all of the floating point tensors - and the second contains all of the non-floating point tensors - - """ - float_dict = {} - non_float_dict = {} - for k, v in tensor_dict.items(): - if np.issubdtype(v.dtype, np.floating): - float_dict[k] = v - else: - non_float_dict[k] = v - return float_dict, non_float_dict - -def get_metric(metric, fl_round, tensor_db): - metric_name = metric - target_tags = ('metric', 'validate_agg') - return float(tensor_db.tensor_db.query("tensor_name == @metric_name and round == @fl_round and tags == @target_tags").nparray) - -def run_challenge_experiment(aggregation_function, - choose_training_collaborators, - training_hyper_parameters_for_round, - institution_split_csv_filename, - brats_training_data_parent_dir, - db_store_rounds=5, - rounds_to_train=5, - device='cpu', - save_checkpoints=True, - restore_from_checkpoint_folder=None, - include_validation_with_hausdorff=True, - use_pretrained_model=True): - - fx.init('fets_challenge_workspace') - - from sys import path, exit - - file = Path(__file__).resolve() - root = file.parent.resolve() # interface root, containing command modules - work = Path.cwd().resolve() - - path.append(str(root)) - path.insert(0, str(work)) - - # create gandlf_csv and get collaborator names - gandlf_csv_path = os.path.join(work, 'gandlf_paths.csv') - # split_csv_path = os.path.join(work, institution_split_csv_filename) - collaborator_names = construct_fedsim_csv(brats_training_data_parent_dir, - institution_split_csv_filename, - 0.8, - gandlf_csv_path) - - aggregation_wrapper = CustomAggregationWrapper(aggregation_function) - - overrides = { - 'aggregator.settings.rounds_to_train': rounds_to_train, - 'aggregator.settings.db_store_rounds': db_store_rounds, - 'tasks.train.aggregation_type': aggregation_wrapper, - 'task_runner.settings.device': device, - } - - - # Update the plan if necessary - plan = fx.update_plan(overrides) - print("****Debugging: plan is", plan) - - if not include_validation_with_hausdorff: - plan.config['task_runner']['settings']['fets_config_dict']['metrics'] = ['dice','dice_per_label'] - - # Overwrite collaborator names - plan.authorized_cols = collaborator_names - # overwrite datapath values with the collaborator name itself - for col in collaborator_names: - plan.cols_data_paths[col] = col - - # # Update the plan's data loader template for each collaborator - # correct_template = "openfl.federated.data.loader_gandlf" - - # # Modify the plan's data loader settings if needed - # plan.config['data_loader'][col] = correct_template - - # get the data loaders for each collaborator - collaborator_data_loaders = {col: copy(plan).get_data_loader(col) for col in collaborator_names} - - transformed_csv_dict = extract_csv_partitions(os.path.join(work, 'gandlf_paths.csv')) - # get the task runner, passing the first data loader - for col in collaborator_data_loaders: - #Insert logic to serialize train / val CSVs here - os.makedirs(os.path.join(work, col), exist_ok=True) - transformed_csv_dict[col]['train'].to_csv(os.path.join(work, col, 'train.csv')) - transformed_csv_dict[col]['val'].to_csv(os.path.join(work, col, 'val.csv')) - task_runner = copy(plan).get_task_runner(collaborator_data_loaders[col]) - - if use_pretrained_model: - print('Loading pretrained model...') - if device == 'cpu': - checkpoint = torch.load(f'{root}/pretrained_model/resunet_pretrained.pth',map_location=torch.device('cpu')) - task_runner.model.load_state_dict(checkpoint['model_state_dict']) - task_runner.optimizer.load_state_dict(checkpoint['optimizer_state_dict']) - else: - checkpoint = torch.load(f'{root}/pretrained_model/resunet_pretrained.pth') - task_runner.model.load_state_dict(checkpoint['model_state_dict']) - task_runner.optimizer.load_state_dict(checkpoint['optimizer_state_dict']) - - tensor_pipe = plan.get_tensor_pipe() - - # Initialize model weights - init_state_path = plan.config['aggregator']['settings']['init_state_path'] - tensor_dict, _ = split_tensor_dict_for_holdouts(logger, task_runner.get_tensor_dict(False)) - - model_snap = utils.construct_model_proto(tensor_dict=tensor_dict, - round_number=0, - tensor_pipe=tensor_pipe) - - utils.dump_proto(model_proto=model_snap, fpath=init_state_path) - - # get the aggregator, now that we have the initial weights file set up - logger.info('Creating aggregator...') - aggregator = plan.get_aggregator() - # manually override the aggregator UUID (for checkpoint resume when rounds change) - aggregator.uuid = 'aggregator' - aggregator._load_initial_tensors() - - # create our collaborators - logger.info('Creating collaborators...') - collaborators = {col: copy(plan).get_collaborator(col, task_runner=task_runner, client=aggregator) for col in collaborator_names} - - collaborator_time_stats = gen_collaborator_time_stats(plan.authorized_cols) - - collaborators_chosen_each_round = {} - collaborator_times_per_round = {} - - logger.info('Starting experiment') - - total_simulated_time = 0 - best_dice = -1.0 - best_dice_over_time_auc = 0 - - # results dataframe data - experiment_results = { - 'round':[], - 'time': [], - 'convergence_score': [], - 'round_dice': [], - 'dice_label_0': [], - 'dice_label_1': [], - 'dice_label_2': [], - 'dice_label_4': [], - } - if include_validation_with_hausdorff: - experiment_results.update({ - 'hausdorff95_label_0': [], - 'hausdorff95_label_1': [], - 'hausdorff95_label_2': [], - 'hausdorff95_label_4': [], - }) - - - if restore_from_checkpoint_folder is None: - checkpoint_folder = setup_checkpoint_folder() - logger.info(f'\nCreated experiment folder {checkpoint_folder}...') - starting_round_num = 0 - else: - if not Path(f'checkpoint/{restore_from_checkpoint_folder}').exists(): - logger.warning(f'Could not find provided checkpoint folder: {restore_from_checkpoint_folder}. Exiting...') - exit(1) - else: - logger.info(f'Attempting to load last completed round from {restore_from_checkpoint_folder}') - state = load_checkpoint(restore_from_checkpoint_folder) - checkpoint_folder = restore_from_checkpoint_folder - - [loaded_collaborator_names, starting_round_num, collaborator_time_stats, - total_simulated_time, best_dice, best_dice_over_time_auc, - collaborators_chosen_each_round, collaborator_times_per_round, - experiment_results, summary, agg_tensor_db] = state - - if loaded_collaborator_names != collaborator_names: - logger.error(f'Collaborator names found in checkpoint ({loaded_collaborator_names}) ' - f'do not match provided collaborators ({collaborator_names})') - exit(1) - - logger.info(f'Previous summary for round {starting_round_num}') - logger.info(summary) - - starting_round_num += 1 - aggregator.tensor_db.tensor_db = agg_tensor_db - aggregator.round_number = starting_round_num - - - for round_num in range(starting_round_num, rounds_to_train): - # pick collaborators to train for the round - training_collaborators = choose_training_collaborators(collaborator_names, - aggregator.tensor_db._iterate(), - round_num, - collaborators_chosen_each_round, - collaborator_times_per_round) - - logger.info('Collaborators chosen to train for round {}:\n\t{}'.format(round_num, training_collaborators)) - - # save the collaborators chosen this round - collaborators_chosen_each_round[round_num] = training_collaborators - - # get the hyper-parameters from the competitor - hparams = training_hyper_parameters_for_round(collaborator_names, - aggregator.tensor_db._iterate(), - round_num, - collaborators_chosen_each_round, - collaborator_times_per_round) - - learning_rate, epochs_per_round = hparams - - if (epochs_per_round is None): - logger.warning('Hyper-parameter function warning: function returned None for "epochs_per_round". Setting "epochs_per_round" to 1') - epochs_per_round = 1 - - hparam_message = "\n\tlearning rate: {}".format(learning_rate) - - hparam_message += "\n\tepochs_per_round: {}".format(epochs_per_round) - - logger.info("Hyper-parameters for round {}:{}".format(round_num, hparam_message)) - - # cache each tensor in the aggregator tensor_db - hparam_dict = {} - tk = TensorKey(tensor_name='learning_rate', - origin=aggregator.uuid, - round_number=round_num, - report=False, - tags=('hparam', 'model')) - hparam_dict[tk] = np.array(learning_rate) - tk = TensorKey(tensor_name='epochs_per_round', - origin=aggregator.uuid, - round_number=round_num, - report=False, - tags=('hparam', 'model')) - hparam_dict[tk] = np.array(epochs_per_round) - aggregator.tensor_db.cache_tensor(hparam_dict) - - # pre-compute the times for each collaborator - times_per_collaborator = compute_times_per_collaborator(collaborator_names, - training_collaborators, - epochs_per_round, - collaborator_data_loaders, - collaborator_time_stats, - round_num) - collaborator_times_per_round[round_num] = times_per_collaborator - - aggregator.assigner.set_training_collaborators(training_collaborators) - - # update the state in the aggregation wrapper - aggregation_wrapper.set_state_data_for_round(collaborators_chosen_each_round, collaborator_times_per_round) - - # turn the times list into a list of tuples and sort it - times_list = [(t, col) for col, t in times_per_collaborator.items()] - times_list = sorted(times_list) - - # now call each collaborator in order of time - # FIXME: this doesn't break up each task. We need this if we're doing straggler handling - for t, col in times_list: - # set the task_runner data loader - task_runner.data_loader = collaborator_data_loaders[col] - - # run the collaborator - collaborators[col].run_simulation() - - logger.info("Collaborator {} took simulated time: {} minutes".format(col, round(t / 60, 2))) - - # the round time is the max of the times_list - round_time = max([t for t, _ in times_list]) - total_simulated_time += round_time - - - # get the performace validation scores for the round - round_dice = get_metric('valid_dice', round_num, aggregator.tensor_db) - dice_label_0 = get_metric('valid_dice_per_label_0', round_num, aggregator.tensor_db) - dice_label_1 = get_metric('valid_dice_per_label_1', round_num, aggregator.tensor_db) - dice_label_2 = get_metric('valid_dice_per_label_2', round_num, aggregator.tensor_db) - dice_label_4 = get_metric('valid_dice_per_label_4', round_num, aggregator.tensor_db) - if include_validation_with_hausdorff: - hausdorff95_label_0 = get_metric('valid_hd95_per_label_0', round_num, aggregator.tensor_db) - hausdorff95_label_1 = get_metric('valid_hd95_per_label_1', round_num, aggregator.tensor_db) - hausdorff95_label_2 = get_metric('valid_hd95_per_label_2', round_num, aggregator.tensor_db) - hausdorff95_label_4 = get_metric('valid_hd95_per_label_4', round_num, aggregator.tensor_db) - - # update best score - if best_dice < round_dice: - best_dice = round_dice - # Set the weights for the final model - if round_num == 0: - # here the initial model was validated (temp model does not exist) - logger.info(f'Skipping best model saving to disk as it is a random initialization.') - elif not os.path.exists(f'checkpoint/{checkpoint_folder}/temp_model.pkl'): - raise ValueError(f'Expected temporary model at: checkpoint/{checkpoint_folder}/temp_model.pkl to exist but it was not found.') - else: - # here the temp model was the one validated - shutil.copyfile(src=f'checkpoint/{checkpoint_folder}/temp_model.pkl',dst=f'checkpoint/{checkpoint_folder}/best_model.pkl') - logger.info(f'Saved model with best average binary DICE: {best_dice} to ~/.local/workspace/checkpoint/{checkpoint_folder}/best_model.pkl') - - ## RUN VALIDATION ON INTERMEDIATE CONSENSUS MODEL - # set the task_runner data loader - # task_runner.data_loader = collaborator_data_loaders[col] - - ## CONVERGENCE METRIC COMPUTATION - # update the auc score - best_dice_over_time_auc += best_dice * round_time - - # project the auc score as remaining time * best dice - # this projection assumes that the current best score is carried forward for the entire week - projected_auc = (MAX_SIMULATION_TIME - total_simulated_time) * best_dice + best_dice_over_time_auc - projected_auc /= MAX_SIMULATION_TIME - - # End of round summary - summary = '"**** END OF ROUND {} SUMMARY *****"'.format(round_num) - summary += "\n\tSimulation Time: {} minutes".format(round(total_simulated_time / 60, 2)) - summary += "\n\t(Projected) Convergence Score: {}".format(projected_auc) - summary += "\n\tDICE Label 0: {}".format(dice_label_0) - summary += "\n\tDICE Label 1: {}".format(dice_label_1) - summary += "\n\tDICE Label 2: {}".format(dice_label_2) - summary += "\n\tDICE Label 4: {}".format(dice_label_4) - if include_validation_with_hausdorff: - summary += "\n\tHausdorff95 Label 0: {}".format(hausdorff95_label_0) - summary += "\n\tHausdorff95 Label 1: {}".format(hausdorff95_label_1) - summary += "\n\tHausdorff95 Label 2: {}".format(hausdorff95_label_2) - summary += "\n\tHausdorff95 Label 4: {}".format(hausdorff95_label_4) - - - experiment_results['round'].append(round_num) - experiment_results['time'].append(total_simulated_time) - experiment_results['convergence_score'].append(projected_auc) - experiment_results['round_dice'].append(round_dice) - experiment_results['dice_label_0'].append(dice_label_0) - experiment_results['dice_label_1'].append(dice_label_1) - experiment_results['dice_label_2'].append(dice_label_2) - experiment_results['dice_label_4'].append(dice_label_4) - if include_validation_with_hausdorff: - experiment_results['hausdorff95_label_0'].append(hausdorff95_label_0) - experiment_results['hausdorff95_label_1'].append(hausdorff95_label_1) - experiment_results['hausdorff95_label_2'].append(hausdorff95_label_2) - experiment_results['hausdorff95_label_4'].append(hausdorff95_label_4) - logger.info(summary) - - if save_checkpoints: - logger.info(f'Saving checkpoint for round {round_num}') - logger.info(f'To resume from this checkpoint, set the restore_from_checkpoint_folder parameter to \'{checkpoint_folder}\'') - save_checkpoint(checkpoint_folder, aggregator, - collaborator_names, collaborators, - round_num, collaborator_time_stats, - total_simulated_time, best_dice, - best_dice_over_time_auc, - collaborators_chosen_each_round, - collaborator_times_per_round, - experiment_results, - summary) - - # if the total_simulated_time has exceeded the maximum time, we break - # in practice, this means that the previous round's model is the last model scored, - # so a long final round should not actually benefit the competitor, since that final - # model is never globally validated - if total_simulated_time > MAX_SIMULATION_TIME: - logger.info("Simulation time exceeded. Ending Experiment") - break - - # save the most recent aggregated model in native format to be copied over as best when appropriate - # (note this model has not been validated by the collaborators yet) - task_runner.rebuild_model(round_num, aggregator.last_tensor_dict, validation=True) - task_runner.save_native(f'checkpoint/{checkpoint_folder}/temp_model.pkl') - - - - return pd.DataFrame.from_dict(experiment_results), checkpoint_folder diff --git a/Task_1/build/lib/fets_challenge/gandlf_csv_adapter.py b/Task_1/build/lib/fets_challenge/gandlf_csv_adapter.py deleted file mode 100644 index cafad78..0000000 --- a/Task_1/build/lib/fets_challenge/gandlf_csv_adapter.py +++ /dev/null @@ -1,214 +0,0 @@ -# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2022 - -# Contributing Authors (alphabetical): -# Brandon Edwards (Intel) -# Patrick Foley (Intel) -# Micah Sheller (Intel) - -import os - -import numpy as np -import pandas as pd - -from fets.data.base_utils import get_appropriate_file_paths_from_subject_dir - - -# some hard-coded keys -# feature stack order determines order of feature stack modes -# (so must be consistent across datasets used on a given model) -# dependency here with mode naming convention used in get_appropriate_file_paths_from_subject_dir -feature_modes = ['T1', 'T2', 'FLAIR', 'T1CE'] -label_tag = 'Label' - -# using numerical header names -numeric_header_names = {'T1': 1, - 'T2': 2, - 'FLAIR': 3, - 'T1CE': 4, - 'Label': 5} - -# used to map from numbers back to keys -numeric_header_name_to_key = {value: key for key, value in numeric_header_names.items()} - -# column names for dataframe used to create csv - -# 0 is for the subject name, 1-4 for modes and 5 for label (as above) -train_val_headers = [0, 1, 2, 3, 4, 5] -val_headers = [0, 1, 2, 3, 4] - -# hard coded samples used to train the FeTS2022 initial model -# and therefore best to keep out of split insitution validation -# set -init_train = ['FeTS2022_00159','FeTS2022_00172','FeTS2022_00187','FeTS2022_00199','FeTS2022_00211','FeTS2022_00221', \ - 'FeTS2022_00235','FeTS2022_00243','FeTS2022_00258','FeTS2022_00269','FeTS2022_00282','FeTS2022_00291', \ - 'FeTS2022_00300','FeTS2022_00311','FeTS2022_00321','FeTS2022_00332','FeTS2022_00344','FeTS2022_00353', \ - 'FeTS2022_00370','FeTS2022_00380','FeTS2022_00391','FeTS2022_00403','FeTS2022_00413','FeTS2022_00425', \ - 'FeTS2022_00440','FeTS2022_01000','FeTS2022_01038','FeTS2022_01046','FeTS2022_01054','FeTS2022_01062', \ - 'FeTS2022_01070','FeTS2022_01078','FeTS2022_01086','FeTS2022_01094','FeTS2022_01102','FeTS2022_01110', \ - 'FeTS2022_01118','FeTS2022_01126','FeTS2022_01134','FeTS2022_01205','FeTS2022_01213','FeTS2022_01221', \ - 'FeTS2022_01229','FeTS2022_01237','FeTS2022_01245','FeTS2022_01253','FeTS2022_01261','FeTS2022_01269', \ - 'FeTS2022_01277','FeTS2022_01293','FeTS2022_01307','FeTS2022_01315','FeTS2022_01323','FeTS2022_01331', \ - 'FeTS2022_01339','FeTS2022_01347','FeTS2022_01355','FeTS2022_01363','FeTS2022_01371','FeTS2022_01379', \ - 'FeTS2022_01387','FeTS2022_01395','FeTS2022_01403'] - - -def train_val_split(subdirs, percent_train, shuffle=True): - - if percent_train < 0 or percent_train >=1: - raise ValueError('Percent train must be >= 0 and < 1.') - - # record original length of subdirs - n_subdirs = len(subdirs) - if n_subdirs == 0: - raise ValueError('An empty list was provided to split.') - - train_subdirs = [subdir for subdir in subdirs if subdir in init_train] - # limit subdirs to those that do not lie in init_train - subdirs = [subdir for subdir in subdirs if subdir not in init_train] - - assert len(subdirs) + len(train_subdirs) == n_subdirs - - if shuffle: - np.random.shuffle(subdirs) - - cutpoint = int(n_subdirs * percent_train) - len(train_subdirs) - - train_subdirs = train_subdirs + subdirs[:cutpoint] - val_subdirs = subdirs[cutpoint:] - - if shuffle: - np.random.shuffle(train_subdirs) - - return train_subdirs, val_subdirs - - -def paths_dict_to_dataframe(paths_dict, train_val_headers, numeric_header_name_to_key): - - # intitialize columns - columns = {header: [] for header in train_val_headers} - columns['TrainOrVal'] = [] - columns['Partition_ID'] = [] - - for inst_name, inst_paths_dict in paths_dict.items(): - for usage in ['train', 'val']: - for key_to_fpath in inst_paths_dict[usage]: - columns['Partition_ID'].append(inst_name) - columns['TrainOrVal'].append(usage) - for header in train_val_headers: - if header == 0: - # grabbing the the data subfolder name as the subject id - columns[header].append(key_to_fpath['Subject_ID']) - else: - columns[header].append(key_to_fpath[numeric_header_name_to_key[header]]) - - return pd.DataFrame(columns, dtype=str) - - -def construct_fedsim_csv(pardir, - split_subdirs_path, - percent_train, - federated_simulation_train_val_csv_path, - training_and_validation=True): - - # read in the csv defining the subdirs per institution - split_subdirs = pd.read_csv(split_subdirs_path, dtype=str) - - if not set(['Partition_ID', 'Subject_ID']).issubset(set(split_subdirs.columns)): - raise ValueError("The provided csv at {} must at minimum contain the columns 'Partition_ID' and 'Subject_ID', but the columns are: {}".format(split_subdirs_path, list(split_subdirs.columns))) - - # sanity check that all subdirs provided in the dataframe are unique - if not split_subdirs['Subject_ID'].is_unique: - raise ValueError("Repeated references to the same data subdir were found in the 'Subject_ID' column of {}".format(split_subdirs_path)) - - train_val_specified = ('TrainOrVal' in split_subdirs.columns) - if train_val_specified: - print("Inferring train/val split using 'TrainOrVal' column of split_subdirs csv") - else: - print("No 'TrainOrVal' column found in split_subdirs csv, so performing automated split using percent_train of {}".format(percent_train)) - - - inst_names = list(split_subdirs['Partition_ID'].unique()) - - paths_dict = {inst_name: {'train': [], 'val': []} for inst_name in inst_names} - for inst_name in inst_names: - - if train_val_specified: - train_subdirs = list(split_subdirs[(split_subdirs['Partition_ID']==inst_name) & (split_subdirs['TrainOrVal']=='train')]['Subject_ID']) - val_subdirs = list(split_subdirs[(split_subdirs['Partition_ID']==inst_name) & (split_subdirs['TrainOrVal']=='val')]['Subject_ID']) - if len(train_subdirs) == 0: - raise ValueError("Train/val split specified in {} for insitution {} indicates an empty training set.".format(split_subdirs_path, inst_name)) - if len(val_subdirs) == 0: - raise ValueError("Train/val split specified in {} for insitution {} indicates an empty val set.".format(split_subdirs_path, inst_name)) - else: - subdirs = list(split_subdirs[split_subdirs['Partition_ID']==inst_name]['Subject_ID']) - train_subdirs, val_subdirs = train_val_split(subdirs=subdirs, percent_train=percent_train) - - for subdir in train_subdirs: - inner_dict = get_appropriate_file_paths_from_subject_dir(os.path.join(pardir, subdir), include_labels=True) - inner_dict['Subject_ID'] = subdir - paths_dict[inst_name]['train'].append(inner_dict) - - for subdir in val_subdirs: - inner_dict = get_appropriate_file_paths_from_subject_dir(os.path.join(pardir, subdir), include_labels=training_and_validation) - inner_dict['Subject_ID'] = subdir - paths_dict[inst_name]['val'].append(inner_dict) - - # now construct the dataframe and save it as a csv - if training_and_validation: - df = paths_dict_to_dataframe(paths_dict=paths_dict, - train_val_headers=train_val_headers, - numeric_header_name_to_key=numeric_header_name_to_key) - else: - df = construct_validation_dataframe(paths_dict=paths_dict, - val_headers=val_headers, - numeric_header_name_to_key=numeric_header_name_to_key) - return df - - df.to_csv(federated_simulation_train_val_csv_path, index=False) - return list(sorted(df.Partition_ID.unique())) - -def construct_validation_dataframe(paths_dict, val_headers, numeric_header_name_to_key): - - # intitialize columns - columns = {str(header): [] for header in val_headers} - columns['TrainOrVal'] = [] - columns['Partition_ID'] = [] - - for inst_name, inst_paths_dict in paths_dict.items(): - for usage in ['train', 'val']: - for key_to_fpath in inst_paths_dict[usage]: - columns['Partition_ID'].append(inst_name) - columns['TrainOrVal'].append(usage) - for header in val_headers: - if header == 0: - # grabbing the the data subfolder name as the subject id - columns[str(header)].append(key_to_fpath['Subject_ID']) - else: - columns[str(header)].append(key_to_fpath[numeric_header_name_to_key[header]]) - - df = pd.DataFrame(columns, dtype=str) - df = df.drop(columns=['TrainOrVal','Partition_ID']) - df = df.rename(columns={'0': 'SubjectID', '1': 'Channel_0', - '2': 'Channel_1', '3': 'Channel_2', - '4': 'Channel_3'}) - return df - - - -def extract_csv_partitions(csv_path): - df = pd.read_csv(csv_path) - df = df.rename(columns={'0': 'SubjectID', '1': 'Channel_0', - '2': 'Channel_1', '3': 'Channel_2', - '4': 'Channel_3', '5': 'Label'}) - cols = df['Partition_ID'].unique() - transformed_csv_dict = {} - - for col in cols: - transformed_csv_dict[str(col)] = {} - transformed_csv_dict[str(col)]['train'] = \ - df[(df['Partition_ID'] == col) & (df['TrainOrVal'] == 'train')].drop(columns=['TrainOrVal','Partition_ID']) - transformed_csv_dict[str(col)]['val'] = \ - df[(df['Partition_ID'] == col) & (df['TrainOrVal'] == 'val')].drop(columns=['TrainOrVal','Partition_ID']) - - return transformed_csv_dict - diff --git a/Task_1/build/lib/fets_challenge/inference.py b/Task_1/build/lib/fets_challenge/inference.py deleted file mode 100644 index 13f0680..0000000 --- a/Task_1/build/lib/fets_challenge/inference.py +++ /dev/null @@ -1,251 +0,0 @@ -# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2022 - -# Contributing Authors (alphabetical): -# Brandon Edwards (Intel), Patrick Foley (Intel), Micah Sheller (Intel) - -import os -from copy import copy -from logging import getLogger -from pathlib import Path - -import numpy as np -import SimpleITK as sitk - -import torch, torchio - -import openfl.native as fx -from .gandlf_csv_adapter import construct_fedsim_csv - -logger = getLogger(__name__) - -# some hard coded variables -channel_keys = ['1', '2', '3', '4'] -class_label_map = {0:0, 1:1, 2:2, 4:4} -class_list = list(np.sort(list(class_label_map.values()))) - -def nan_check(tensor, tensor_description): - tensor = tensor.cpu() - if torch.any(torch.isnan(tensor)): - raise ValueError("A " + tensor_description + " was found to have nan values.") - - -def binarize(array, threshold=0.5): - """ - Get binarized output using threshold. - """ - - if (np.amax(array) > 1.0) or (np.amin(array) < 0.0): - raise ValueError('Voxel value fed to lambda in converting to original labels was out of range.') - - # obtain binarized output - binarized = array.copy() - zero_mask = (binarized <= threshold) - binarized[zero_mask] = 0.0 - binarized[~zero_mask] = 1.0 - - return binarized - - -def get_binarized_and_belief(array, threshold=0.5): - - """ - Get binarized output using threshold and report the belief values for each of the - channels along the last axis. Belief value is a list of indices along the last axis, and is - determined by the order of how close (closest first) each binarization is from its original in this last axis - so belief should have the same shape as arrray. - Assumptions: - - array is float valued in the range [0.0, 1.0] - """ - - # check assumption above - if (np.amax(array) > 1.0) or (np.amin(array) < 0.0): - raise ValueError('Voxel value fed to lambda in converting to original labels was out of range.') - - # obtain binarized output - binarized = binarize(array=array, threshold=threshold) - - # we will sort from least to greatest, so least suspicion is what we will believe - raw_suspicion = np.absolute(array - binarized) - - belief = np.argsort(raw_suspicion, axis=-1) - - return binarized, belief - -def generate_validation_csv(data_path, validation_csv_filename, working_dir): - """ - Create the validation CSV to be consumed by the FeTSChallengeTaskRunner - """ - validation_csv_path = os.path.join(working_dir, validation_csv_filename) - validation_csv_dict = construct_fedsim_csv(data_path, - validation_csv_path, - 0.0, - 'placeholder', - training_and_validation=False) - validation_csv_dict.to_csv(os.path.join(working_dir, 'validation_paths.csv'),index=False) - -def replace_initializations(done_replacing, array, mask, replacement_value, initialization_value): - """ - Replace in array[mask] intitialization values with replacement value, - ensuring that the locations to replace all held initialization values - """ - - # sanity check - if np.any(mask) and done_replacing: - raise ValueError('Being given locations to replace and yet told that we are done replacing.') - - # check that the mask and array have the same shape - if array.shape != mask.shape: - raise ValueError('Attempting to replace using a mask shape: {} not equal to the array shape: {}'.format(mask.shape, array.shape)) - - # check that the mask only points to locations with initialized values - if np.any(array[mask] != initialization_value): - raise ValueError('Attempting to overwrite a non-initialization value.') - - array[mask] = replacement_value - - done_replacing = np.all(array!=initialization_value) - - return array, done_replacing - - -def check_subarray(array1, array2): - """ - Checks to see where array2 is a subarray of array1. - Assumptions: - - array2 has one axis and is equal in length to the last axis of array1 - """ - - # check assumption - if (len(array2.shape) != 1) or (array2.shape[0] != array1.shape[-1]): - raise ValueError('Attempting to check for subarray equality when shape assumption does not hold.') - - return np.all(array1==array2, axis=-1) - - -def convert_to_original_labels(array, threshold=0.5, initialization_value=999): - """ - array has float output in the range [0.0, 1.0]. - Last three channels are expected to correspond to ET, TC, and WT respecively. - - """ - - binarized, belief = get_binarized_and_belief(array=array, threshold=threshold) - - #sanity check - if binarized.shape != belief.shape: - raise ValueError('Sanity check did not pass.') - - # initialize with a crazy label we will be sure is gone in the end - slice_all_but_last_channel = tuple([slice(None) for _ in array.shape[:-1]] + [0]) - original_labels = initialization_value * np.ones_like(array[slice_all_but_last_channel]) - - # the outer keys correspond to the binarized values - # the inner keys correspond to the order of indices comingn from argsort(ascending) on suspicion, i.e. - # how far the binarized sigmoid outputs were from the original sigmoid outputs - # for example, (2, 1, 0) means the suspicion from least to greatest was: 'WT', 'TC', 'ET' - # (recall that the order of the last three channels is expected to be: 'ET', 'TC', and 'WT') - mapper = {(0, 0, 0): 0, - (1, 1, 1): 4, - (0, 1, 1): 1, - (0, 0, 1): 2, - (0, 1, 0): {(2, 0, 1): 0, - (2, 1, 0): 0, - (1, 0, 2): 1, - (1, 2, 0): 1, - (0, 2, 1): 0, - (0, 1, 2): 1}, - (1, 1, 0): {(2, 0, 1): 0, - (2, 1, 0): 0, - (1, 0, 2): 4, - (1, 2, 0): 4, - (0, 2, 1): 4, - (0, 1, 2): 4}, - (1, 0, 1): {(2, 0, 1): 4, - (2, 1, 0): 2, - (1, 0, 2): 2, - (1, 2, 0): 2, - (0, 2, 1): 4, - (0, 1, 2): 4}, - (1, 0, 0): {(2, 0, 1): 0, - (2, 1, 0): 0, - (1, 0, 2): 0, - (1, 2, 0): 0, - (0, 2, 1): 4, - (0, 1, 2): 4}} - - - - done_replacing = False - - for binary_key, inner in mapper.items(): - mask1 = check_subarray(array1=binarized, array2=np.array(binary_key)) - if isinstance(inner, int): - original_labels, done_replacing = replace_initializations(done_replacing=done_replacing, - array=original_labels, - mask=mask1, - replacement_value=inner, - initialization_value=initialization_value) - else: - for inner_key, inner_value in inner.items(): - mask2 = np.logical_and(mask1, check_subarray(array1=belief, array2=np.array(inner_key))) - original_labels, done_replacing = replace_initializations(done_replacing=done_replacing, - array=original_labels, - mask=mask2, - replacement_value=inner_value, - initialization_value=initialization_value) - - if not done_replacing: - raise ValueError('About to return so should have been done replacing but told otherwise.') - - return original_labels.astype(np.uint8) - - -def model_outputs_to_disc(data_path, - validation_csv, - output_path, - native_model_path, - outputtag='', - device='cpu'): - - fx.init('fets_challenge_workspace') - - from sys import path, exit - - file = Path(__file__).resolve() - root = file.parent.resolve() # interface root, containing command modules - work = Path.cwd().resolve() - - path.append(str(root)) - path.insert(0, str(work)) - - generate_validation_csv(data_path,validation_csv, working_dir=work) - - overrides = { - 'task_runner.settings.device': device, - 'task_runner.settings.val_csv': 'validation_paths.csv', - 'task_runner.settings.train_csv': None, - } - - # Update the plan if necessary - plan = fx.update_plan(overrides) - plan.config['task_runner']['settings']['fets_config_dict']['save_output'] = True - plan.config['task_runner']['settings']['fets_config_dict']['output_dir'] = output_path - - # overwrite datapath value for a single 'InferenceCol' collaborator - plan.cols_data_paths['InferenceCol'] = data_path - - # get the inference data loader - data_loader = copy(plan).get_data_loader('InferenceCol') - - # get the task runner, passing the data loader - task_runner = copy(plan).get_task_runner(data_loader) - - # Populate model weights - device = torch.device(device) - task_runner.load_native(filepath=native_model_path, map_location=device) - task_runner.opt_treatment = 'RESET' - - logger.info('Starting inference using data from {}\n'.format(data_path)) - - task_runner.inference('aggregator',-1,task_runner.get_tensor_dict(),apply='global') - logger.info(f"\nFinished generating predictions to output folder {output_path}") diff --git a/Task_1/build/lib/fets_challenge/spec_sens_code.py b/Task_1/build/lib/fets_challenge/spec_sens_code.py deleted file mode 100644 index 50d35b9..0000000 --- a/Task_1/build/lib/fets_challenge/spec_sens_code.py +++ /dev/null @@ -1,113 +0,0 @@ -import numpy as np - -def check_shapes_same(output, target): - if output.shape != target.shape: - raise ValueError('Shapes of output {} and target {} do not match.'.format(output.shape, target.shape)) - - -def check_classes_enumerated_along_correct_axis(array, axis, num_classes): - if array.shape[axis] != num_classes: - raise ValueError('The idx={} channel of array should enumerate classes, but its shape is {} and there are {} classes.'.format(axis, array.shape, num_classes)) - - -def check_is_binary_single(array): - unique_values = np.unique(array) - if not set(unique_values).issubset(set([1.0, 0.0])): - raise ValueError('The provided array is not binary as unique values are: {}'.format(unique_values)) - -def apply_threshold(array, threshold=0.5): - - over_threshold = array >= threshold - - bin_tensor = np.zeros_like(array) - bin_tensor[over_threshold] = 1 - - return bin_tensor - - -def binarize_output(output, class_list, modality, threshold=0.5, class_axis=1): - if class_list == ['4', '1||4', '1||2||4']: - check_classes_enumerated_along_correct_axis(array=output, axis=class_axis, num_classes=len(class_list)) - - slices = [slice(None) for _ in output.shape] - - # select appropriate channel for modality, and convert floats to binary using threshold - if modality == 'ET': - slices[class_axis] = 0 - binarized_output = apply_threshold(output[tuple(slices)], threshold=threshold) - elif modality == 'TC': - slices[class_axis] = 1 - binarized_output = apply_threshold(output[tuple(slices)], threshold=threshold) - elif modality == 'WT': - slices[class_axis] = 2 - binarized_output = apply_threshold(output[tuple(slices)], threshold=threshold) - else: - raise ValueError('Modality {} is not currently supported.'.format(modality)) - - else: - raise ValueError("Class list {} is not currently supported.".format(class_list)) - - check_is_binary_single(binarized_output) - - return binarized_output - - -def brats_labels(output, - target, - class_list= ['4', '1||4', '1||2||4'], - binarized=True, - **kwargs): - # take output and target and create: (output_, lable_) - # for tasks in ['enhancing', 'core', 'whole'] - # these can be binary (per-voxel) decisions (if binarized==True) or float valued - if binarized: - output_enhancing = binarize_output(output=output, - class_list=class_list, - modality='ET') - - output_core = binarize_output(output=output, - class_list=class_list, - modality='TC') - - output_whole = binarize_output(output=output, - class_list=class_list, - modality='WT') - - # We detect specific use_cases here, and force a change in the code when another is wanted. - # In all cases, we rely on the order of class_list !!! - if list(class_list) == ['4', '1||4', '1||2||4']: - # In this case we track only enhancing tumor, tumor core, and whole tumor (no background class). - - if not binarized: - - # enhancing signal is channel 0 because of known class_list with fused labels - output_enhancing = output[:,0,:,:,:] - - # core signal is channel 1 because of known class_list with fused labels - output_core = output[:,1,:,:,:] - - # whole signal is channel 2 because of known class_list with fused labels - output_whole = output[:,2,:,:,:] - - - # enhancing signal is channel 0 because of known class_list with fused labels - target_enhancing = target[:,0,:,:,:] - - # core signal is channel 1 because of known class_list with fused labels - target_core = target[:,1,:,:,:] - - # whole signal is channel 2 because of known class_list with fused labels - target_whole = target[:,2,:,:,:] - else: - raise ValueError('No implementation for this model class_list: ', class_list) - - check_shapes_same(output=output_enhancing, target=target_enhancing) - check_shapes_same(output=output_core, target=target_core) - check_shapes_same(output=output_whole, target=target_whole) - - return {'outputs': {'ET': output_enhancing, - 'TC': output_core, - 'WT': output_whole}, - 'targets': {'ET': target_enhancing, - 'TC': target_core, - 'WT': target_whole}} diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_1.csv b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_1.csv deleted file mode 100644 index a5a8fb3..0000000 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_1.csv +++ /dev/null @@ -1,1252 +0,0 @@ -Partition_ID,Subject_ID -1,FeTS2022_01341 -1,FeTS2022_01333 -1,FeTS2022_01077 -1,FeTS2022_01054 -1,FeTS2022_00285 -1,FeTS2022_01308 -1,FeTS2022_01363 -1,FeTS2022_01091 -1,FeTS2022_01273 -1,FeTS2022_01108 -1,FeTS2022_01255 -1,FeTS2022_01301 -1,FeTS2022_00219 -1,FeTS2022_00380 -1,FeTS2022_01349 -1,FeTS2022_00251 -1,FeTS2022_01276 -1,FeTS2022_01407 -1,FeTS2022_01344 -1,FeTS2022_01405 -1,FeTS2022_00218 -1,FeTS2022_01327 -1,FeTS2022_01252 -1,FeTS2022_01132 -1,FeTS2022_01036 -1,FeTS2022_01039 -1,FeTS2022_01366 -1,FeTS2022_00262 -1,FeTS2022_01279 -1,FeTS2022_00839 -1,FeTS2022_01322 -1,FeTS2022_00389 -1,FeTS2022_00390 -1,FeTS2022_00431 -1,FeTS2022_00222 -1,FeTS2022_00373 -1,FeTS2022_00288 -1,FeTS2022_00284 -1,FeTS2022_01088 -1,FeTS2022_00311 -1,FeTS2022_00387 -1,FeTS2022_00258 -1,FeTS2022_01389 -1,FeTS2022_00321 -1,FeTS2022_01249 -1,FeTS2022_01230 -1,FeTS2022_00836 -1,FeTS2022_00348 -1,FeTS2022_01205 -1,FeTS2022_00246 -1,FeTS2022_00314 -1,FeTS2022_01404 -1,FeTS2022_01102 -1,FeTS2022_00379 -1,FeTS2022_01395 -1,FeTS2022_00155 -1,FeTS2022_00170 -1,FeTS2022_01264 -1,FeTS2022_00837 -1,FeTS2022_01372 -1,FeTS2022_00341 -1,FeTS2022_01257 -1,FeTS2022_00329 -1,FeTS2022_00425 -1,FeTS2022_01350 -1,FeTS2022_01247 -1,FeTS2022_01234 -1,FeTS2022_00331 -1,FeTS2022_01128 -1,FeTS2022_01365 -1,FeTS2022_00221 -1,FeTS2022_00298 -1,FeTS2022_00227 -1,FeTS2022_01204 -1,FeTS2022_00204 -1,FeTS2022_01399 -1,FeTS2022_00377 -1,FeTS2022_00343 -1,FeTS2022_00280 -1,FeTS2022_01347 -1,FeTS2022_00210 -1,FeTS2022_01117 -1,FeTS2022_01275 -1,FeTS2022_01034 -1,FeTS2022_00162 -1,FeTS2022_01340 -1,FeTS2022_01212 -1,FeTS2022_01220 -1,FeTS2022_00419 -1,FeTS2022_00340 -1,FeTS2022_00296 -1,FeTS2022_01208 -1,FeTS2022_01064 -1,FeTS2022_00433 -1,FeTS2022_01050 -1,FeTS2022_01278 -1,FeTS2022_00293 -1,FeTS2022_00206 -1,FeTS2022_00356 -1,FeTS2022_00376 -1,FeTS2022_00316 -1,FeTS2022_00403 -1,FeTS2022_01348 -1,FeTS2022_00192 -1,FeTS2022_00313 -1,FeTS2022_01240 -1,FeTS2022_01222 -1,FeTS2022_00344 -1,FeTS2022_00332 -1,FeTS2022_00292 -1,FeTS2022_01392 -1,FeTS2022_00220 -1,FeTS2022_00378 -1,FeTS2022_01130 -1,FeTS2022_01106 -1,FeTS2022_01295 -1,FeTS2022_01409 -1,FeTS2022_01057 -1,FeTS2022_01068 -1,FeTS2022_00320 -1,FeTS2022_00346 -1,FeTS2022_01001 -1,FeTS2022_01207 -1,FeTS2022_01137 -1,FeTS2022_01318 -1,FeTS2022_00289 -1,FeTS2022_00157 -1,FeTS2022_01224 -1,FeTS2022_01367 -1,FeTS2022_01382 -1,FeTS2022_00309 -1,FeTS2022_01008 -1,FeTS2022_01059 -1,FeTS2022_01271 -1,FeTS2022_01110 -1,FeTS2022_01398 -1,FeTS2022_01119 -1,FeTS2022_00209 -1,FeTS2022_01274 -1,FeTS2022_01124 -1,FeTS2022_00241 -1,FeTS2022_00152 -1,FeTS2022_01131 -1,FeTS2022_01353 -1,FeTS2022_00352 -1,FeTS2022_01133 -1,FeTS2022_01084 -1,FeTS2022_00441 -1,FeTS2022_01268 -1,FeTS2022_01210 -1,FeTS2022_01375 -1,FeTS2022_00236 -1,FeTS2022_01218 -1,FeTS2022_01408 -1,FeTS2022_00274 -1,FeTS2022_01118 -1,FeTS2022_01213 -1,FeTS2022_01310 -1,FeTS2022_00194 -1,FeTS2022_00392 -1,FeTS2022_00334 -1,FeTS2022_00270 -1,FeTS2022_01359 -1,FeTS2022_01364 -1,FeTS2022_01336 -1,FeTS2022_01272 -1,FeTS2022_01090 -1,FeTS2022_00412 -1,FeTS2022_00228 -1,FeTS2022_00410 -1,FeTS2022_01239 -1,FeTS2022_01010 -1,FeTS2022_01394 -1,FeTS2022_00282 -1,FeTS2022_00237 -1,FeTS2022_01390 -1,FeTS2022_00382 -1,FeTS2022_00188 -1,FeTS2022_01211 -1,FeTS2022_01376 -1,FeTS2022_01243 -1,FeTS2022_01330 -1,FeTS2022_00253 -1,FeTS2022_01329 -1,FeTS2022_01306 -1,FeTS2022_01081 -1,FeTS2022_01369 -1,FeTS2022_01048 -1,FeTS2022_00328 -1,FeTS2022_00291 -1,FeTS2022_01049 -1,FeTS2022_01263 -1,FeTS2022_00317 -1,FeTS2022_00305 -1,FeTS2022_01265 -1,FeTS2022_00238 -1,FeTS2022_00423 -1,FeTS2022_01127 -1,FeTS2022_01379 -1,FeTS2022_01258 -1,FeTS2022_00299 -1,FeTS2022_01334 -1,FeTS2022_00350 -1,FeTS2022_01109 -1,FeTS2022_01352 -1,FeTS2022_01055 -1,FeTS2022_00167 -1,FeTS2022_01354 -1,FeTS2022_01231 -1,FeTS2022_00185 -1,FeTS2022_00306 -1,FeTS2022_00171 -1,FeTS2022_01261 -1,FeTS2022_01345 -1,FeTS2022_01397 -1,FeTS2022_00399 -1,FeTS2022_01319 -1,FeTS2022_01250 -1,FeTS2022_01097 -1,FeTS2022_01229 -1,FeTS2022_01393 -1,FeTS2022_00430 -1,FeTS2022_01203 -1,FeTS2022_01309 -1,FeTS2022_01342 -1,FeTS2022_01223 -1,FeTS2022_00239 -1,FeTS2022_00275 -1,FeTS2022_00406 -1,FeTS2022_01116 -1,FeTS2022_01380 -1,FeTS2022_00214 -1,FeTS2022_00195 -1,FeTS2022_01314 -1,FeTS2022_01113 -1,FeTS2022_00193 -1,FeTS2022_01259 -1,FeTS2022_00386 -1,FeTS2022_00834 -1,FeTS2022_01227 -1,FeTS2022_01277 -1,FeTS2022_00283 -1,FeTS2022_01099 -1,FeTS2022_00212 -1,FeTS2022_00165 -1,FeTS2022_01332 -1,FeTS2022_00364 -1,FeTS2022_01129 -1,FeTS2022_00301 -1,FeTS2022_01402 -1,FeTS2022_00199 -1,FeTS2022_01066 -1,FeTS2022_01107 -1,FeTS2022_01337 -1,FeTS2022_00230 -1,FeTS2022_01114 -1,FeTS2022_01294 -1,FeTS2022_01370 -1,FeTS2022_01269 -1,FeTS2022_01043 -1,FeTS2022_00359 -1,FeTS2022_01004 -1,FeTS2022_00286 -1,FeTS2022_01038 -1,FeTS2022_00370 -1,FeTS2022_00184 -1,FeTS2022_00360 -1,FeTS2022_01123 -1,FeTS2022_01237 -1,FeTS2022_01086 -1,FeTS2022_00231 -1,FeTS2022_00353 -1,FeTS2022_01254 -1,FeTS2022_01373 -1,FeTS2022_01100 -1,FeTS2022_01214 -1,FeTS2022_01242 -1,FeTS2022_01115 -1,FeTS2022_01331 -1,FeTS2022_00391 -1,FeTS2022_01312 -1,FeTS2022_00324 -1,FeTS2022_01080 -1,FeTS2022_00371 -1,FeTS2022_01396 -1,FeTS2022_00339 -1,FeTS2022_00260 -1,FeTS2022_00243 -1,FeTS2022_00233 -1,FeTS2022_01323 -1,FeTS2022_01248 -1,FeTS2022_00263 -1,FeTS2022_00347 -1,FeTS2022_01233 -1,FeTS2022_00367 -1,FeTS2022_01051 -1,FeTS2022_01126 -1,FeTS2022_01267 -1,FeTS2022_00383 -1,FeTS2022_01357 -1,FeTS2022_00413 -1,FeTS2022_01287 -1,FeTS2022_00349 -1,FeTS2022_01244 -1,FeTS2022_01041 -1,FeTS2022_01236 -1,FeTS2022_01245 -1,FeTS2022_01383 -1,FeTS2022_00196 -1,FeTS2022_01387 -1,FeTS2022_00297 -1,FeTS2022_01103 -1,FeTS2022_01098 -1,FeTS2022_01410 -1,FeTS2022_00440 -1,FeTS2022_01305 -1,FeTS2022_01304 -1,FeTS2022_01074 -1,FeTS2022_01046 -1,FeTS2022_01226 -1,FeTS2022_01253 -1,FeTS2022_01040 -1,FeTS2022_00269 -1,FeTS2022_00310 -1,FeTS2022_01056 -1,FeTS2022_01311 -1,FeTS2022_01338 -1,FeTS2022_00166 -1,FeTS2022_00327 -1,FeTS2022_00254 -1,FeTS2022_01000 -1,FeTS2022_00259 -1,FeTS2022_01134 -1,FeTS2022_01104 -1,FeTS2022_01232 -1,FeTS2022_01286 -1,FeTS2022_01052 -1,FeTS2022_01217 -1,FeTS2022_01238 -1,FeTS2022_00154 -1,FeTS2022_00395 -1,FeTS2022_00267 -1,FeTS2022_00366 -1,FeTS2022_00351 -1,FeTS2022_00159 -1,FeTS2022_00131 -1,FeTS2022_01246 -1,FeTS2022_01060 -1,FeTS2022_01087 -1,FeTS2022_00250 -1,FeTS2022_00234 -1,FeTS2022_01058 -1,FeTS2022_00235 -1,FeTS2022_00203 -1,FeTS2022_00414 -1,FeTS2022_01285 -1,FeTS2022_01071 -1,FeTS2022_01111 -1,FeTS2022_01377 -1,FeTS2022_01355 -1,FeTS2022_01384 -1,FeTS2022_01120 -1,FeTS2022_01082 -1,FeTS2022_01076 -1,FeTS2022_01072 -1,FeTS2022_00303 -1,FeTS2022_00436 -1,FeTS2022_01361 -1,FeTS2022_01073 -1,FeTS2022_00338 -1,FeTS2022_01351 -1,FeTS2022_00273 -1,FeTS2022_00186 -1,FeTS2022_00290 -1,FeTS2022_01381 -1,FeTS2022_01083 -1,FeTS2022_00409 -1,FeTS2022_00281 -1,FeTS2022_00840 -1,FeTS2022_00407 -1,FeTS2022_01094 -1,FeTS2022_01328 -1,FeTS2022_01078 -1,FeTS2022_00312 -1,FeTS2022_01235 -1,FeTS2022_01288 -1,FeTS2022_01391 -1,FeTS2022_01215 -1,FeTS2022_00160 -1,FeTS2022_00421 -1,FeTS2022_01317 -1,FeTS2022_01216 -1,FeTS2022_00178 -1,FeTS2022_00838 -1,FeTS2022_01321 -1,FeTS2022_01037 -1,FeTS2022_00176 -1,FeTS2022_01293 -1,FeTS2022_01219 -1,FeTS2022_01260 -1,FeTS2022_01339 -1,FeTS2022_01325 -1,FeTS2022_00249 -1,FeTS2022_01241 -1,FeTS2022_00211 -1,FeTS2022_01105 -1,FeTS2022_01138 -1,FeTS2022_00261 -1,FeTS2022_01316 -1,FeTS2022_01315 -1,FeTS2022_01256 -1,FeTS2022_00191 -1,FeTS2022_01069 -1,FeTS2022_01062 -1,FeTS2022_01135 -1,FeTS2022_00207 -1,FeTS2022_00401 -1,FeTS2022_00172 -1,FeTS2022_01085 -1,FeTS2022_00247 -1,FeTS2022_01206 -1,FeTS2022_01356 -1,FeTS2022_00325 -1,FeTS2022_00429 -1,FeTS2022_01122 -1,FeTS2022_01374 -1,FeTS2022_00156 -1,FeTS2022_01075 -1,FeTS2022_01362 -1,FeTS2022_01251 -1,FeTS2022_00405 -1,FeTS2022_01047 -1,FeTS2022_00240 -1,FeTS2022_00336 -1,FeTS2022_01092 -1,FeTS2022_01403 -1,FeTS2022_01385 -1,FeTS2022_01096 -1,FeTS2022_00426 -1,FeTS2022_00201 -1,FeTS2022_01335 -1,FeTS2022_00404 -1,FeTS2022_00322 -1,FeTS2022_00294 -1,FeTS2022_01070 -1,FeTS2022_01225 -1,FeTS2022_01067 -1,FeTS2022_00375 -1,FeTS2022_00158 -1,FeTS2022_00177 -1,FeTS2022_00271 -1,FeTS2022_01388 -1,FeTS2022_01053 -1,FeTS2022_01042 -1,FeTS2022_01400 -1,FeTS2022_00183 -1,FeTS2022_01358 -1,FeTS2022_01266 -1,FeTS2022_01360 -1,FeTS2022_00304 -1,FeTS2022_01065 -1,FeTS2022_01093 -1,FeTS2022_00397 -1,FeTS2022_01262 -1,FeTS2022_00217 -1,FeTS2022_01401 -1,FeTS2022_01125 -1,FeTS2022_01406 -1,FeTS2022_01343 -1,FeTS2022_01346 -1,FeTS2022_01089 -1,FeTS2022_00216 -1,FeTS2022_01061 -1,FeTS2022_01299 -1,FeTS2022_00242 -1,FeTS2022_01112 -1,FeTS2022_00300 -1,FeTS2022_01280 -1,FeTS2022_00187 -1,FeTS2022_00318 -1,FeTS2022_01371 -1,FeTS2022_01378 -1,FeTS2022_00418 -1,FeTS2022_01121 -1,FeTS2022_01136 -1,FeTS2022_00266 -1,FeTS2022_01221 -1,FeTS2022_01307 -1,FeTS2022_01386 -1,FeTS2022_00432 -1,FeTS2022_01101 -1,FeTS2022_01228 -1,FeTS2022_01313 -1,FeTS2022_01209 -1,FeTS2022_00388 -1,FeTS2022_01270 -1,FeTS2022_01044 -1,FeTS2022_00417 -1,FeTS2022_01063 -1,FeTS2022_01368 -1,FeTS2022_00369 -1,FeTS2022_01095 -1,FeTS2022_00416 -1,FeTS2022_00400 -1,FeTS2022_01045 -1,FeTS2022_01202 -1,FeTS2022_01326 -1,FeTS2022_01079 -1,FeTS2022_00402 -1,FeTS2022_01320 -1,FeTS2022_01324 -2,FeTS2022_01412 -2,FeTS2022_01415 -2,FeTS2022_01411 -2,FeTS2022_01414 -2,FeTS2022_01413 -2,FeTS2022_01416 -3,FeTS2022_01439 -3,FeTS2022_01435 -3,FeTS2022_01434 -3,FeTS2022_01440 -3,FeTS2022_01431 -3,FeTS2022_01437 -3,FeTS2022_01436 -3,FeTS2022_01433 -3,FeTS2022_01438 -3,FeTS2022_01426 -3,FeTS2022_01427 -3,FeTS2022_01428 -3,FeTS2022_01429 -3,FeTS2022_01432 -3,FeTS2022_01430 -4,FeTS2022_01152 -4,FeTS2022_01178 -4,FeTS2022_01186 -4,FeTS2022_01184 -4,FeTS2022_01181 -4,FeTS2022_01187 -4,FeTS2022_01168 -4,FeTS2022_01196 -4,FeTS2022_01173 -4,FeTS2022_01176 -4,FeTS2022_01200 -4,FeTS2022_00565 -4,FeTS2022_01193 -4,FeTS2022_01174 -4,FeTS2022_01662 -4,FeTS2022_01660 -4,FeTS2022_01201 -4,FeTS2022_01167 -4,FeTS2022_01170 -4,FeTS2022_01179 -4,FeTS2022_01185 -4,FeTS2022_01197 -4,FeTS2022_01172 -4,FeTS2022_01189 -4,FeTS2022_00563 -4,FeTS2022_01180 -4,FeTS2022_01198 -4,FeTS2022_01183 -4,FeTS2022_01151 -4,FeTS2022_01195 -4,FeTS2022_01657 -4,FeTS2022_01194 -4,FeTS2022_01191 -4,FeTS2022_01169 -4,FeTS2022_01171 -4,FeTS2022_00561 -4,FeTS2022_01659 -4,FeTS2022_01661 -4,FeTS2022_01190 -4,FeTS2022_01188 -4,FeTS2022_01199 -4,FeTS2022_01658 -4,FeTS2022_01192 -4,FeTS2022_01175 -4,FeTS2022_01182 -4,FeTS2022_01537 -4,FeTS2022_01177 -5,FeTS2022_00102 -5,FeTS2022_00149 -5,FeTS2022_01290 -5,FeTS2022_00113 -5,FeTS2022_01009 -5,FeTS2022_01007 -5,FeTS2022_01002 -5,FeTS2022_00139 -5,FeTS2022_01292 -5,FeTS2022_00100 -5,FeTS2022_01289 -5,FeTS2022_01291 -5,FeTS2022_01005 -5,FeTS2022_01282 -5,FeTS2022_01003 -5,FeTS2022_00109 -5,FeTS2022_01283 -5,FeTS2022_00999 -5,FeTS2022_01281 -5,FeTS2022_01284 -5,FeTS2022_00151 -5,FeTS2022_00123 -6,FeTS2022_01451 -6,FeTS2022_01453 -6,FeTS2022_01452 -6,FeTS2022_00831 -6,FeTS2022_01448 -6,FeTS2022_01300 -6,FeTS2022_01443 -6,FeTS2022_00136 -6,FeTS2022_01454 -6,FeTS2022_00144 -6,FeTS2022_00121 -6,FeTS2022_01297 -6,FeTS2022_00133 -6,FeTS2022_01447 -6,FeTS2022_00142 -6,FeTS2022_01450 -6,FeTS2022_00120 -6,FeTS2022_01298 -6,FeTS2022_01449 -6,FeTS2022_01442 -6,FeTS2022_01446 -6,FeTS2022_01303 -6,FeTS2022_01296 -6,FeTS2022_00132 -6,FeTS2022_01441 -6,FeTS2022_01445 -6,FeTS2022_01302 -6,FeTS2022_00143 -6,FeTS2022_00105 -6,FeTS2022_01444 -6,FeTS2022_00147 -6,FeTS2022_01455 -6,FeTS2022_00146 -6,FeTS2022_00137 -7,FeTS2022_01459 -7,FeTS2022_01464 -7,FeTS2022_01458 -7,FeTS2022_01457 -7,FeTS2022_01461 -7,FeTS2022_01456 -7,FeTS2022_01460 -7,FeTS2022_01462 -7,FeTS2022_01466 -7,FeTS2022_01465 -7,FeTS2022_01463 -7,FeTS2022_01467 -8,FeTS2022_00140 -8,FeTS2022_01469 -8,FeTS2022_01468 -8,FeTS2022_01470 -8,FeTS2022_00104 -8,FeTS2022_00110 -8,FeTS2022_00112 -8,FeTS2022_00128 -9,FeTS2022_00134 -9,FeTS2022_00150 -9,FeTS2022_00116 -9,FeTS2022_01471 -10,FeTS2022_01472 -10,FeTS2022_00117 -10,FeTS2022_00130 -10,FeTS2022_00138 -10,FeTS2022_01473 -10,FeTS2022_00111 -10,FeTS2022_00124 -10,FeTS2022_00106 -11,FeTS2022_00122 -11,FeTS2022_00148 -11,FeTS2022_01474 -11,FeTS2022_00108 -11,FeTS2022_01144 -11,FeTS2022_00107 -11,FeTS2022_01140 -11,FeTS2022_01146 -11,FeTS2022_01145 -11,FeTS2022_01139 -11,FeTS2022_01141 -11,FeTS2022_01142 -11,FeTS2022_01143 -11,FeTS2022_01475 -12,FeTS2022_01482 -12,FeTS2022_01480 -12,FeTS2022_01485 -12,FeTS2022_01476 -12,FeTS2022_01481 -12,FeTS2022_01483 -12,FeTS2022_01486 -12,FeTS2022_01484 -12,FeTS2022_01479 -12,FeTS2022_01477 -12,FeTS2022_01478 -13,FeTS2022_01491 -13,FeTS2022_01500 -13,FeTS2022_01519 -13,FeTS2022_01516 -13,FeTS2022_01509 -13,FeTS2022_01520 -13,FeTS2022_01508 -13,FeTS2022_01503 -13,FeTS2022_01488 -13,FeTS2022_01492 -13,FeTS2022_01502 -13,FeTS2022_01493 -13,FeTS2022_01497 -13,FeTS2022_01499 -13,FeTS2022_01487 -13,FeTS2022_01505 -13,FeTS2022_01504 -13,FeTS2022_01490 -13,FeTS2022_01507 -13,FeTS2022_01510 -13,FeTS2022_01512 -13,FeTS2022_01514 -13,FeTS2022_01517 -13,FeTS2022_01501 -13,FeTS2022_01518 -13,FeTS2022_01506 -13,FeTS2022_01515 -13,FeTS2022_01511 -13,FeTS2022_01494 -13,FeTS2022_01489 -13,FeTS2022_01513 -13,FeTS2022_01496 -13,FeTS2022_01495 -13,FeTS2022_01521 -13,FeTS2022_01498 -14,FeTS2022_01522 -14,FeTS2022_01525 -14,FeTS2022_01526 -14,FeTS2022_01527 -14,FeTS2022_01524 -14,FeTS2022_01523 -15,FeTS2022_01530 -15,FeTS2022_01536 -15,FeTS2022_01535 -15,FeTS2022_01663 -15,FeTS2022_01534 -15,FeTS2022_01529 -15,FeTS2022_01531 -15,FeTS2022_01666 -15,FeTS2022_01665 -15,FeTS2022_01532 -15,FeTS2022_01664 -15,FeTS2022_01528 -15,FeTS2022_01533 -16,FeTS2022_00584 -16,FeTS2022_00567 -16,FeTS2022_00571 -16,FeTS2022_00582 -16,FeTS2022_00570 -16,FeTS2022_00594 -16,FeTS2022_00597 -16,FeTS2022_00596 -16,FeTS2022_00576 -16,FeTS2022_00572 -16,FeTS2022_00115 -16,FeTS2022_00593 -16,FeTS2022_00588 -16,FeTS2022_00598 -16,FeTS2022_00589 -16,FeTS2022_00574 -16,FeTS2022_00586 -16,FeTS2022_00579 -16,FeTS2022_00590 -16,FeTS2022_00599 -16,FeTS2022_00577 -16,FeTS2022_00575 -16,FeTS2022_00581 -16,FeTS2022_00591 -16,FeTS2022_00569 -16,FeTS2022_00587 -16,FeTS2022_00580 -16,FeTS2022_00583 -16,FeTS2022_00578 -16,FeTS2022_00568 -17,FeTS2022_01423 -17,FeTS2022_01420 -17,FeTS2022_01422 -17,FeTS2022_01417 -17,FeTS2022_01421 -17,FeTS2022_01424 -17,FeTS2022_01418 -17,FeTS2022_01425 -17,FeTS2022_01419 -18,FeTS2022_01628 -18,FeTS2022_01615 -18,FeTS2022_01035 -18,FeTS2022_00732 -18,FeTS2022_00753 -18,FeTS2022_01620 -18,FeTS2022_01637 -18,FeTS2022_01594 -18,FeTS2022_00530 -18,FeTS2022_00772 -18,FeTS2022_01580 -18,FeTS2022_00731 -18,FeTS2022_00540 -18,FeTS2022_00464 -18,FeTS2022_01622 -18,FeTS2022_01154 -18,FeTS2022_01559 -18,FeTS2022_00729 -18,FeTS2022_00708 -18,FeTS2022_00044 -18,FeTS2022_00705 -18,FeTS2022_00645 -18,FeTS2022_01640 -18,FeTS2022_00008 -18,FeTS2022_00746 -18,FeTS2022_01551 -18,FeTS2022_01610 -18,FeTS2022_00061 -18,FeTS2022_00642 -18,FeTS2022_00675 -18,FeTS2022_01651 -18,FeTS2022_00651 -18,FeTS2022_00626 -18,FeTS2022_00028 -18,FeTS2022_01557 -18,FeTS2022_01616 -18,FeTS2022_00684 -18,FeTS2022_01538 -18,FeTS2022_01647 -18,FeTS2022_00688 -18,FeTS2022_00737 -18,FeTS2022_00063 -18,FeTS2022_00758 -18,FeTS2022_01159 -18,FeTS2022_00615 -18,FeTS2022_00621 -18,FeTS2022_01543 -18,FeTS2022_01560 -18,FeTS2022_00058 -18,FeTS2022_00009 -18,FeTS2022_00544 -18,FeTS2022_01611 -18,FeTS2022_00485 -18,FeTS2022_00735 -18,FeTS2022_00659 -18,FeTS2022_00025 -18,FeTS2022_00550 -18,FeTS2022_01599 -18,FeTS2022_00636 -18,FeTS2022_01644 -18,FeTS2022_00716 -18,FeTS2022_00641 -18,FeTS2022_01624 -18,FeTS2022_00547 -18,FeTS2022_00046 -18,FeTS2022_00728 -18,FeTS2022_00045 -18,FeTS2022_00493 -18,FeTS2022_00089 -18,FeTS2022_00622 -18,FeTS2022_01643 -18,FeTS2022_00602 -18,FeTS2022_00035 -18,FeTS2022_01545 -18,FeTS2022_00014 -18,FeTS2022_01566 -18,FeTS2022_00066 -18,FeTS2022_01614 -18,FeTS2022_01591 -18,FeTS2022_00514 -18,FeTS2022_01588 -18,FeTS2022_00520 -18,FeTS2022_01556 -18,FeTS2022_00097 -18,FeTS2022_00555 -18,FeTS2022_00736 -18,FeTS2022_00639 -18,FeTS2022_00479 -18,FeTS2022_01550 -18,FeTS2022_01592 -18,FeTS2022_01626 -18,FeTS2022_00557 -18,FeTS2022_00496 -18,FeTS2022_00778 -18,FeTS2022_01561 -18,FeTS2022_00690 -18,FeTS2022_00750 -18,FeTS2022_01586 -18,FeTS2022_01549 -18,FeTS2022_01555 -18,FeTS2022_01612 -18,FeTS2022_01600 -18,FeTS2022_01629 -18,FeTS2022_01656 -18,FeTS2022_00500 -18,FeTS2022_00529 -18,FeTS2022_00628 -18,FeTS2022_00775 -18,FeTS2022_00523 -18,FeTS2022_00488 -18,FeTS2022_00518 -18,FeTS2022_00000 -18,FeTS2022_00020 -18,FeTS2022_01646 -18,FeTS2022_01638 -18,FeTS2022_00630 -18,FeTS2022_01590 -18,FeTS2022_01613 -18,FeTS2022_01571 -18,FeTS2022_00519 -18,FeTS2022_01617 -18,FeTS2022_01623 -18,FeTS2022_00691 -18,FeTS2022_01027 -18,FeTS2022_00704 -18,FeTS2022_00098 -18,FeTS2022_01558 -18,FeTS2022_00715 -18,FeTS2022_00757 -18,FeTS2022_00084 -18,FeTS2022_00692 -18,FeTS2022_00078 -18,FeTS2022_00747 -18,FeTS2022_01607 -18,FeTS2022_00751 -18,FeTS2022_00011 -18,FeTS2022_00610 -18,FeTS2022_00694 -18,FeTS2022_00026 -18,FeTS2022_00658 -18,FeTS2022_01544 -18,FeTS2022_01583 -18,FeTS2022_00680 -18,FeTS2022_01028 -18,FeTS2022_01636 -18,FeTS2022_00545 -18,FeTS2022_00072 -18,FeTS2022_00016 -18,FeTS2022_01548 -18,FeTS2022_00624 -18,FeTS2022_00676 -18,FeTS2022_00533 -18,FeTS2022_01574 -18,FeTS2022_01582 -18,FeTS2022_00085 -18,FeTS2022_00613 -18,FeTS2022_01593 -18,FeTS2022_00730 -18,FeTS2022_01585 -18,FeTS2022_00524 -18,FeTS2022_00081 -18,FeTS2022_00472 -18,FeTS2022_00478 -18,FeTS2022_00469 -18,FeTS2022_00682 -18,FeTS2022_00733 -18,FeTS2022_00723 -18,FeTS2022_00099 -18,FeTS2022_00744 -18,FeTS2022_00048 -18,FeTS2022_00480 -18,FeTS2022_00650 -18,FeTS2022_00601 -18,FeTS2022_00542 -18,FeTS2022_00667 -18,FeTS2022_00505 -18,FeTS2022_01539 -18,FeTS2022_00764 -18,FeTS2022_00506 -18,FeTS2022_01649 -18,FeTS2022_00032 -18,FeTS2022_00021 -18,FeTS2022_00685 -18,FeTS2022_00611 -18,FeTS2022_00511 -18,FeTS2022_01584 -18,FeTS2022_01635 -18,FeTS2022_00607 -18,FeTS2022_00071 -18,FeTS2022_00687 -18,FeTS2022_00767 -18,FeTS2022_00537 -18,FeTS2022_01630 -18,FeTS2022_00740 -18,FeTS2022_00525 -18,FeTS2022_00725 -18,FeTS2022_00502 -18,FeTS2022_01562 -18,FeTS2022_01577 -18,FeTS2022_01576 -18,FeTS2022_01595 -18,FeTS2022_00654 -18,FeTS2022_00090 -18,FeTS2022_01645 -18,FeTS2022_01564 -18,FeTS2022_01567 -18,FeTS2022_00703 -18,FeTS2022_00043 -18,FeTS2022_00003 -18,FeTS2022_00495 -18,FeTS2022_00017 -18,FeTS2022_00491 -18,FeTS2022_00054 -18,FeTS2022_00510 -18,FeTS2022_00618 -18,FeTS2022_00064 -18,FeTS2022_00024 -18,FeTS2022_00709 -18,FeTS2022_01653 -18,FeTS2022_01579 -18,FeTS2022_01572 -18,FeTS2022_01156 -18,FeTS2022_00707 -18,FeTS2022_01540 -18,FeTS2022_00056 -18,FeTS2022_00620 -18,FeTS2022_00470 -18,FeTS2022_00499 -18,FeTS2022_00640 -18,FeTS2022_00549 -18,FeTS2022_01601 -18,FeTS2022_00608 -18,FeTS2022_00727 -18,FeTS2022_00773 -18,FeTS2022_00504 -18,FeTS2022_01604 -18,FeTS2022_01158 -18,FeTS2022_00051 -18,FeTS2022_00768 -18,FeTS2022_01161 -18,FeTS2022_00765 -18,FeTS2022_00068 -18,FeTS2022_00551 -18,FeTS2022_01605 -18,FeTS2022_00674 -18,FeTS2022_01157 -18,FeTS2022_01631 -18,FeTS2022_00022 -18,FeTS2022_00777 -18,FeTS2022_01609 -18,FeTS2022_01633 -18,FeTS2022_01652 -18,FeTS2022_00759 -18,FeTS2022_01655 -18,FeTS2022_01639 -18,FeTS2022_01563 -18,FeTS2022_00661 -18,FeTS2022_00087 -18,FeTS2022_00030 -18,FeTS2022_00556 -18,FeTS2022_01597 -18,FeTS2022_00724 -18,FeTS2022_00096 -18,FeTS2022_00049 -18,FeTS2022_00683 -18,FeTS2022_00059 -18,FeTS2022_01596 -18,FeTS2022_00498 -18,FeTS2022_00543 -18,FeTS2022_01641 -18,FeTS2022_01542 -18,FeTS2022_00062 -18,FeTS2022_00005 -18,FeTS2022_00646 -18,FeTS2022_00088 -18,FeTS2022_00656 -18,FeTS2022_01589 -18,FeTS2022_01160 -18,FeTS2022_01547 -18,FeTS2022_01606 -18,FeTS2022_00631 -18,FeTS2022_00756 -18,FeTS2022_00619 -18,FeTS2022_00698 -18,FeTS2022_01541 -18,FeTS2022_00539 -18,FeTS2022_00053 -18,FeTS2022_01618 -18,FeTS2022_00693 -18,FeTS2022_00616 -18,FeTS2022_01642 -18,FeTS2022_01632 -18,FeTS2022_00718 -18,FeTS2022_00006 -18,FeTS2022_00466 -18,FeTS2022_01565 -18,FeTS2022_01621 -18,FeTS2022_00697 -18,FeTS2022_00689 -18,FeTS2022_00554 -18,FeTS2022_00638 -18,FeTS2022_00517 -18,FeTS2022_00019 -18,FeTS2022_01650 -18,FeTS2022_01602 -18,FeTS2022_01570 -18,FeTS2022_00655 -18,FeTS2022_00552 -18,FeTS2022_00706 -18,FeTS2022_01654 -18,FeTS2022_00481 -18,FeTS2022_00604 -18,FeTS2022_00612 -18,FeTS2022_00774 -18,FeTS2022_00625 -18,FeTS2022_00070 -18,FeTS2022_00649 -18,FeTS2022_00036 -18,FeTS2022_01546 -18,FeTS2022_00559 -18,FeTS2022_00018 -18,FeTS2022_00507 -18,FeTS2022_00760 -18,FeTS2022_01568 -18,FeTS2022_00094 -18,FeTS2022_00526 -18,FeTS2022_01575 -18,FeTS2022_00512 -18,FeTS2022_00033 -18,FeTS2022_01648 -18,FeTS2022_00052 -18,FeTS2022_01625 -18,FeTS2022_01573 -18,FeTS2022_00623 -18,FeTS2022_01153 -18,FeTS2022_00532 -18,FeTS2022_00516 -18,FeTS2022_00679 -18,FeTS2022_00468 -18,FeTS2022_00494 -18,FeTS2022_00483 -18,FeTS2022_01552 -18,FeTS2022_00606 -18,FeTS2022_00742 -18,FeTS2022_00677 -18,FeTS2022_00652 -18,FeTS2022_00074 -18,FeTS2022_00513 -18,FeTS2022_01581 -18,FeTS2022_00663 -18,FeTS2022_00734 -18,FeTS2022_01619 -18,FeTS2022_00668 -18,FeTS2022_00558 -18,FeTS2022_00002 -18,FeTS2022_01598 -18,FeTS2022_00477 -18,FeTS2022_01634 -18,FeTS2022_00501 -18,FeTS2022_01155 -18,FeTS2022_00077 -18,FeTS2022_01578 -18,FeTS2022_01569 -18,FeTS2022_01603 -18,FeTS2022_00538 -18,FeTS2022_00714 -18,FeTS2022_00031 -18,FeTS2022_01627 -18,FeTS2022_01553 -18,FeTS2022_00548 -18,FeTS2022_00739 -18,FeTS2022_00103 -18,FeTS2022_00528 -18,FeTS2022_01608 -18,FeTS2022_00095 -18,FeTS2022_00060 -18,FeTS2022_01554 -18,FeTS2022_00657 -18,FeTS2022_01587 -18,FeTS2022_00605 -18,FeTS2022_00686 -18,FeTS2022_00012 -19,FeTS2022_01166 -19,FeTS2022_01163 -19,FeTS2022_01165 -19,FeTS2022_01164 -20,FeTS2022_00444 -20,FeTS2022_01014 -20,FeTS2022_00442 -20,FeTS2022_01025 -20,FeTS2022_01024 -20,FeTS2022_00101 -20,FeTS2022_00453 -20,FeTS2022_01013 -20,FeTS2022_01011 -20,FeTS2022_00459 -20,FeTS2022_00457 -20,FeTS2022_01016 -20,FeTS2022_00448 -20,FeTS2022_01023 -20,FeTS2022_01017 -20,FeTS2022_00443 -20,FeTS2022_00455 -20,FeTS2022_00127 -20,FeTS2022_01012 -20,FeTS2022_01018 -20,FeTS2022_01022 -20,FeTS2022_00451 -20,FeTS2022_00445 -20,FeTS2022_00452 -20,FeTS2022_00454 -20,FeTS2022_01019 -20,FeTS2022_01021 -20,FeTS2022_01020 -20,FeTS2022_01026 -20,FeTS2022_00456 -20,FeTS2022_00446 -20,FeTS2022_00449 -20,FeTS2022_01015 -21,FeTS2022_00802 -21,FeTS2022_00788 -21,FeTS2022_00795 -21,FeTS2022_00820 -21,FeTS2022_00782 -21,FeTS2022_00800 -21,FeTS2022_00830 -21,FeTS2022_00824 -21,FeTS2022_00805 -21,FeTS2022_00796 -21,FeTS2022_00823 -21,FeTS2022_00828 -21,FeTS2022_00811 -21,FeTS2022_00789 -21,FeTS2022_00801 -21,FeTS2022_00780 -21,FeTS2022_00781 -21,FeTS2022_00814 -21,FeTS2022_00806 -21,FeTS2022_00810 -21,FeTS2022_00807 -21,FeTS2022_00818 -21,FeTS2022_00791 -21,FeTS2022_00787 -21,FeTS2022_00808 -21,FeTS2022_00809 -21,FeTS2022_00803 -21,FeTS2022_00816 -21,FeTS2022_00819 -21,FeTS2022_00793 -21,FeTS2022_00799 -21,FeTS2022_00797 -21,FeTS2022_00784 -21,FeTS2022_00804 -21,FeTS2022_00792 -22,FeTS2022_01031 -22,FeTS2022_01033 -22,FeTS2022_01030 -22,FeTS2022_00118 -22,FeTS2022_01029 -22,FeTS2022_00126 -22,FeTS2022_01032 -23,FeTS2022_01147 -23,FeTS2022_01149 -23,FeTS2022_01150 -23,FeTS2022_01148 -23,FeTS2022_01162 diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_2.csv b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_2.csv deleted file mode 100644 index 798f651..0000000 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/partitioning_2.csv +++ /dev/null @@ -1,1252 +0,0 @@ -Partition_ID,Subject_ID -1,FeTS2022_01341 -1,FeTS2022_01333 -1,FeTS2022_01077 -1,FeTS2022_01054 -1,FeTS2022_00285 -1,FeTS2022_01308 -1,FeTS2022_01363 -1,FeTS2022_01091 -1,FeTS2022_01273 -1,FeTS2022_01108 -1,FeTS2022_01255 -1,FeTS2022_01301 -1,FeTS2022_00219 -1,FeTS2022_00380 -1,FeTS2022_01349 -1,FeTS2022_00251 -1,FeTS2022_01276 -1,FeTS2022_01407 -1,FeTS2022_01344 -1,FeTS2022_01405 -1,FeTS2022_00218 -1,FeTS2022_01327 -1,FeTS2022_01252 -1,FeTS2022_01132 -1,FeTS2022_01036 -1,FeTS2022_01039 -1,FeTS2022_01366 -1,FeTS2022_00262 -1,FeTS2022_01279 -1,FeTS2022_00839 -1,FeTS2022_01322 -1,FeTS2022_00389 -1,FeTS2022_00390 -1,FeTS2022_00431 -1,FeTS2022_00222 -1,FeTS2022_00373 -1,FeTS2022_00288 -1,FeTS2022_00284 -1,FeTS2022_01088 -1,FeTS2022_00311 -1,FeTS2022_00387 -1,FeTS2022_00258 -1,FeTS2022_01389 -1,FeTS2022_00321 -1,FeTS2022_01249 -1,FeTS2022_01230 -1,FeTS2022_00836 -1,FeTS2022_00348 -1,FeTS2022_01205 -1,FeTS2022_00246 -1,FeTS2022_00314 -1,FeTS2022_01404 -1,FeTS2022_01102 -1,FeTS2022_00379 -1,FeTS2022_01395 -1,FeTS2022_00155 -1,FeTS2022_00170 -1,FeTS2022_01264 -1,FeTS2022_00837 -1,FeTS2022_01372 -1,FeTS2022_00341 -1,FeTS2022_01257 -1,FeTS2022_00329 -1,FeTS2022_00425 -1,FeTS2022_01350 -1,FeTS2022_01247 -1,FeTS2022_01234 -1,FeTS2022_00331 -1,FeTS2022_01128 -1,FeTS2022_01365 -1,FeTS2022_00221 -1,FeTS2022_00298 -1,FeTS2022_00227 -1,FeTS2022_01204 -1,FeTS2022_00204 -1,FeTS2022_01399 -1,FeTS2022_00377 -1,FeTS2022_00343 -1,FeTS2022_00280 -1,FeTS2022_01347 -1,FeTS2022_00210 -1,FeTS2022_01117 -1,FeTS2022_01275 -1,FeTS2022_01034 -1,FeTS2022_00162 -1,FeTS2022_01340 -1,FeTS2022_01212 -1,FeTS2022_01220 -1,FeTS2022_00419 -1,FeTS2022_00340 -1,FeTS2022_00296 -1,FeTS2022_01208 -1,FeTS2022_01064 -1,FeTS2022_00433 -1,FeTS2022_01050 -1,FeTS2022_01278 -1,FeTS2022_00293 -1,FeTS2022_00206 -1,FeTS2022_00356 -1,FeTS2022_00376 -1,FeTS2022_00316 -1,FeTS2022_00403 -1,FeTS2022_01348 -1,FeTS2022_00192 -1,FeTS2022_00313 -1,FeTS2022_01240 -1,FeTS2022_01222 -1,FeTS2022_00344 -1,FeTS2022_00332 -1,FeTS2022_00292 -1,FeTS2022_01392 -1,FeTS2022_00220 -1,FeTS2022_00378 -1,FeTS2022_01130 -1,FeTS2022_01106 -1,FeTS2022_01295 -1,FeTS2022_01409 -1,FeTS2022_01057 -1,FeTS2022_01068 -1,FeTS2022_00320 -1,FeTS2022_00346 -1,FeTS2022_01001 -1,FeTS2022_01207 -1,FeTS2022_01137 -1,FeTS2022_01318 -1,FeTS2022_00289 -1,FeTS2022_00157 -1,FeTS2022_01224 -1,FeTS2022_01367 -1,FeTS2022_01382 -1,FeTS2022_00309 -1,FeTS2022_01008 -1,FeTS2022_01059 -1,FeTS2022_01271 -1,FeTS2022_01110 -1,FeTS2022_01398 -1,FeTS2022_01119 -1,FeTS2022_00209 -1,FeTS2022_01274 -1,FeTS2022_01124 -1,FeTS2022_00241 -1,FeTS2022_00152 -1,FeTS2022_01131 -1,FeTS2022_01353 -1,FeTS2022_00352 -1,FeTS2022_01133 -1,FeTS2022_01084 -1,FeTS2022_00441 -1,FeTS2022_01268 -1,FeTS2022_01210 -1,FeTS2022_01375 -1,FeTS2022_00236 -1,FeTS2022_01218 -1,FeTS2022_01408 -1,FeTS2022_00274 -1,FeTS2022_01118 -1,FeTS2022_01213 -1,FeTS2022_01310 -1,FeTS2022_00194 -1,FeTS2022_00392 -1,FeTS2022_00334 -1,FeTS2022_00270 -1,FeTS2022_01359 -1,FeTS2022_01364 -1,FeTS2022_01336 -1,FeTS2022_01272 -1,FeTS2022_01090 -1,FeTS2022_00412 -1,FeTS2022_00228 -1,FeTS2022_00410 -2,FeTS2022_01239 -2,FeTS2022_01010 -2,FeTS2022_01394 -2,FeTS2022_00282 -2,FeTS2022_00237 -2,FeTS2022_01390 -2,FeTS2022_00382 -2,FeTS2022_00188 -2,FeTS2022_01211 -2,FeTS2022_01376 -2,FeTS2022_01243 -2,FeTS2022_01330 -2,FeTS2022_00253 -2,FeTS2022_01329 -2,FeTS2022_01306 -2,FeTS2022_01081 -2,FeTS2022_01369 -2,FeTS2022_01048 -2,FeTS2022_00328 -2,FeTS2022_00291 -2,FeTS2022_01049 -2,FeTS2022_01263 -2,FeTS2022_00317 -2,FeTS2022_00305 -2,FeTS2022_01265 -2,FeTS2022_00238 -2,FeTS2022_00423 -2,FeTS2022_01127 -2,FeTS2022_01379 -2,FeTS2022_01258 -2,FeTS2022_00299 -2,FeTS2022_01334 -2,FeTS2022_00350 -2,FeTS2022_01109 -2,FeTS2022_01352 -2,FeTS2022_01055 -2,FeTS2022_00167 -2,FeTS2022_01354 -2,FeTS2022_01231 -2,FeTS2022_00185 -2,FeTS2022_00306 -2,FeTS2022_00171 -2,FeTS2022_01261 -2,FeTS2022_01345 -2,FeTS2022_01397 -2,FeTS2022_00399 -2,FeTS2022_01319 -2,FeTS2022_01250 -2,FeTS2022_01097 -2,FeTS2022_01229 -2,FeTS2022_01393 -2,FeTS2022_00430 -2,FeTS2022_01203 -2,FeTS2022_01309 -2,FeTS2022_01342 -2,FeTS2022_01223 -2,FeTS2022_00239 -2,FeTS2022_00275 -2,FeTS2022_00406 -2,FeTS2022_01116 -2,FeTS2022_01380 -2,FeTS2022_00214 -2,FeTS2022_00195 -2,FeTS2022_01314 -2,FeTS2022_01113 -2,FeTS2022_00193 -2,FeTS2022_01259 -2,FeTS2022_00386 -2,FeTS2022_00834 -2,FeTS2022_01227 -2,FeTS2022_01277 -2,FeTS2022_00283 -2,FeTS2022_01099 -2,FeTS2022_00212 -2,FeTS2022_00165 -2,FeTS2022_01332 -2,FeTS2022_00364 -2,FeTS2022_01129 -2,FeTS2022_00301 -2,FeTS2022_01402 -2,FeTS2022_00199 -2,FeTS2022_01066 -2,FeTS2022_01107 -2,FeTS2022_01337 -2,FeTS2022_00230 -2,FeTS2022_01114 -2,FeTS2022_01294 -2,FeTS2022_01370 -2,FeTS2022_01269 -2,FeTS2022_01043 -2,FeTS2022_00359 -2,FeTS2022_01004 -2,FeTS2022_00286 -2,FeTS2022_01038 -2,FeTS2022_00370 -2,FeTS2022_00184 -2,FeTS2022_00360 -2,FeTS2022_01123 -2,FeTS2022_01237 -2,FeTS2022_01086 -2,FeTS2022_00231 -2,FeTS2022_00353 -2,FeTS2022_01254 -2,FeTS2022_01373 -2,FeTS2022_01100 -2,FeTS2022_01214 -2,FeTS2022_01242 -2,FeTS2022_01115 -2,FeTS2022_01331 -2,FeTS2022_00391 -2,FeTS2022_01312 -2,FeTS2022_00324 -2,FeTS2022_01080 -2,FeTS2022_00371 -2,FeTS2022_01396 -2,FeTS2022_00339 -2,FeTS2022_00260 -2,FeTS2022_00243 -2,FeTS2022_00233 -2,FeTS2022_01323 -2,FeTS2022_01248 -2,FeTS2022_00263 -2,FeTS2022_00347 -2,FeTS2022_01233 -2,FeTS2022_00367 -2,FeTS2022_01051 -2,FeTS2022_01126 -2,FeTS2022_01267 -2,FeTS2022_00383 -2,FeTS2022_01357 -2,FeTS2022_00413 -2,FeTS2022_01287 -2,FeTS2022_00349 -2,FeTS2022_01244 -2,FeTS2022_01041 -2,FeTS2022_01236 -2,FeTS2022_01245 -2,FeTS2022_01383 -2,FeTS2022_00196 -2,FeTS2022_01387 -2,FeTS2022_00297 -2,FeTS2022_01103 -2,FeTS2022_01098 -2,FeTS2022_01410 -2,FeTS2022_00440 -2,FeTS2022_01305 -2,FeTS2022_01304 -2,FeTS2022_01074 -2,FeTS2022_01046 -2,FeTS2022_01226 -2,FeTS2022_01253 -2,FeTS2022_01040 -2,FeTS2022_00269 -2,FeTS2022_00310 -2,FeTS2022_01056 -2,FeTS2022_01311 -2,FeTS2022_01338 -2,FeTS2022_00166 -2,FeTS2022_00327 -2,FeTS2022_00254 -2,FeTS2022_01000 -2,FeTS2022_00259 -2,FeTS2022_01134 -2,FeTS2022_01104 -2,FeTS2022_01232 -2,FeTS2022_01286 -2,FeTS2022_01052 -2,FeTS2022_01217 -2,FeTS2022_01238 -2,FeTS2022_00154 -3,FeTS2022_00395 -3,FeTS2022_00267 -3,FeTS2022_00366 -3,FeTS2022_00351 -3,FeTS2022_00159 -3,FeTS2022_00131 -3,FeTS2022_01246 -3,FeTS2022_01060 -3,FeTS2022_01087 -3,FeTS2022_00250 -3,FeTS2022_00234 -3,FeTS2022_01058 -3,FeTS2022_00235 -3,FeTS2022_00203 -3,FeTS2022_00414 -3,FeTS2022_01285 -3,FeTS2022_01071 -3,FeTS2022_01111 -3,FeTS2022_01377 -3,FeTS2022_01355 -3,FeTS2022_01384 -3,FeTS2022_01120 -3,FeTS2022_01082 -3,FeTS2022_01076 -3,FeTS2022_01072 -3,FeTS2022_00303 -3,FeTS2022_00436 -3,FeTS2022_01361 -3,FeTS2022_01073 -3,FeTS2022_00338 -3,FeTS2022_01351 -3,FeTS2022_00273 -3,FeTS2022_00186 -3,FeTS2022_00290 -3,FeTS2022_01381 -3,FeTS2022_01083 -3,FeTS2022_00409 -3,FeTS2022_00281 -3,FeTS2022_00840 -3,FeTS2022_00407 -3,FeTS2022_01094 -3,FeTS2022_01328 -3,FeTS2022_01078 -3,FeTS2022_00312 -3,FeTS2022_01235 -3,FeTS2022_01288 -3,FeTS2022_01391 -3,FeTS2022_01215 -3,FeTS2022_00160 -3,FeTS2022_00421 -3,FeTS2022_01317 -3,FeTS2022_01216 -3,FeTS2022_00178 -3,FeTS2022_00838 -3,FeTS2022_01321 -3,FeTS2022_01037 -3,FeTS2022_00176 -3,FeTS2022_01293 -3,FeTS2022_01219 -3,FeTS2022_01260 -3,FeTS2022_01339 -3,FeTS2022_01325 -3,FeTS2022_00249 -3,FeTS2022_01241 -3,FeTS2022_00211 -3,FeTS2022_01105 -3,FeTS2022_01138 -3,FeTS2022_00261 -3,FeTS2022_01316 -3,FeTS2022_01315 -3,FeTS2022_01256 -3,FeTS2022_00191 -3,FeTS2022_01069 -3,FeTS2022_01062 -3,FeTS2022_01135 -3,FeTS2022_00207 -3,FeTS2022_00401 -3,FeTS2022_00172 -3,FeTS2022_01085 -3,FeTS2022_00247 -3,FeTS2022_01206 -3,FeTS2022_01356 -3,FeTS2022_00325 -3,FeTS2022_00429 -3,FeTS2022_01122 -3,FeTS2022_01374 -3,FeTS2022_00156 -3,FeTS2022_01075 -3,FeTS2022_01362 -3,FeTS2022_01251 -3,FeTS2022_00405 -3,FeTS2022_01047 -3,FeTS2022_00240 -3,FeTS2022_00336 -3,FeTS2022_01092 -3,FeTS2022_01403 -3,FeTS2022_01385 -3,FeTS2022_01096 -3,FeTS2022_00426 -3,FeTS2022_00201 -3,FeTS2022_01335 -3,FeTS2022_00404 -3,FeTS2022_00322 -3,FeTS2022_00294 -3,FeTS2022_01070 -3,FeTS2022_01225 -3,FeTS2022_01067 -3,FeTS2022_00375 -3,FeTS2022_00158 -3,FeTS2022_00177 -3,FeTS2022_00271 -3,FeTS2022_01388 -3,FeTS2022_01053 -3,FeTS2022_01042 -3,FeTS2022_01400 -3,FeTS2022_00183 -3,FeTS2022_01358 -3,FeTS2022_01266 -3,FeTS2022_01360 -3,FeTS2022_00304 -3,FeTS2022_01065 -3,FeTS2022_01093 -3,FeTS2022_00397 -3,FeTS2022_01262 -3,FeTS2022_00217 -3,FeTS2022_01401 -3,FeTS2022_01125 -3,FeTS2022_01406 -3,FeTS2022_01343 -3,FeTS2022_01346 -3,FeTS2022_01089 -3,FeTS2022_00216 -3,FeTS2022_01061 -3,FeTS2022_01299 -3,FeTS2022_00242 -3,FeTS2022_01112 -3,FeTS2022_00300 -3,FeTS2022_01280 -3,FeTS2022_00187 -3,FeTS2022_00318 -3,FeTS2022_01371 -3,FeTS2022_01378 -3,FeTS2022_00418 -3,FeTS2022_01121 -3,FeTS2022_01136 -3,FeTS2022_00266 -3,FeTS2022_01221 -3,FeTS2022_01307 -3,FeTS2022_01386 -3,FeTS2022_00432 -3,FeTS2022_01101 -3,FeTS2022_01228 -3,FeTS2022_01313 -3,FeTS2022_01209 -3,FeTS2022_00388 -3,FeTS2022_01270 -3,FeTS2022_01044 -3,FeTS2022_00417 -3,FeTS2022_01063 -3,FeTS2022_01368 -3,FeTS2022_00369 -3,FeTS2022_01095 -3,FeTS2022_00416 -3,FeTS2022_00400 -3,FeTS2022_01045 -3,FeTS2022_01202 -3,FeTS2022_01326 -3,FeTS2022_01079 -3,FeTS2022_00402 -3,FeTS2022_01320 -3,FeTS2022_01324 -4,FeTS2022_01412 -4,FeTS2022_01415 -4,FeTS2022_01411 -4,FeTS2022_01414 -4,FeTS2022_01413 -4,FeTS2022_01416 -5,FeTS2022_01439 -5,FeTS2022_01435 -5,FeTS2022_01434 -5,FeTS2022_01440 -5,FeTS2022_01431 -5,FeTS2022_01437 -5,FeTS2022_01436 -5,FeTS2022_01433 -5,FeTS2022_01438 -5,FeTS2022_01426 -5,FeTS2022_01427 -5,FeTS2022_01428 -5,FeTS2022_01429 -5,FeTS2022_01432 -5,FeTS2022_01430 -6,FeTS2022_01152 -6,FeTS2022_01178 -6,FeTS2022_01186 -6,FeTS2022_01184 -6,FeTS2022_01181 -6,FeTS2022_01187 -6,FeTS2022_01168 -6,FeTS2022_01196 -6,FeTS2022_01173 -6,FeTS2022_01176 -6,FeTS2022_01200 -6,FeTS2022_00565 -6,FeTS2022_01193 -6,FeTS2022_01174 -6,FeTS2022_01662 -6,FeTS2022_01660 -7,FeTS2022_01201 -7,FeTS2022_01167 -7,FeTS2022_01170 -7,FeTS2022_01179 -7,FeTS2022_01185 -7,FeTS2022_01197 -7,FeTS2022_01172 -7,FeTS2022_01189 -7,FeTS2022_00563 -7,FeTS2022_01180 -7,FeTS2022_01198 -7,FeTS2022_01183 -7,FeTS2022_01151 -7,FeTS2022_01195 -7,FeTS2022_01657 -8,FeTS2022_01194 -8,FeTS2022_01191 -8,FeTS2022_01169 -8,FeTS2022_01171 -8,FeTS2022_00561 -8,FeTS2022_01659 -8,FeTS2022_01661 -8,FeTS2022_01190 -8,FeTS2022_01188 -8,FeTS2022_01199 -8,FeTS2022_01658 -8,FeTS2022_01192 -8,FeTS2022_01175 -8,FeTS2022_01182 -8,FeTS2022_01537 -8,FeTS2022_01177 -9,FeTS2022_00102 -9,FeTS2022_00149 -9,FeTS2022_01290 -9,FeTS2022_00113 -9,FeTS2022_01009 -9,FeTS2022_01007 -9,FeTS2022_01002 -9,FeTS2022_00139 -9,FeTS2022_01292 -9,FeTS2022_00100 -9,FeTS2022_01289 -9,FeTS2022_01291 -9,FeTS2022_01005 -9,FeTS2022_01282 -9,FeTS2022_01003 -9,FeTS2022_00109 -9,FeTS2022_01283 -9,FeTS2022_00999 -9,FeTS2022_01281 -9,FeTS2022_01284 -9,FeTS2022_00151 -9,FeTS2022_00123 -10,FeTS2022_01451 -10,FeTS2022_01453 -10,FeTS2022_01452 -10,FeTS2022_00831 -10,FeTS2022_01448 -10,FeTS2022_01300 -10,FeTS2022_01443 -10,FeTS2022_00136 -10,FeTS2022_01454 -10,FeTS2022_00144 -10,FeTS2022_00121 -10,FeTS2022_01297 -10,FeTS2022_00133 -10,FeTS2022_01447 -10,FeTS2022_00142 -10,FeTS2022_01450 -10,FeTS2022_00120 -10,FeTS2022_01298 -10,FeTS2022_01449 -10,FeTS2022_01442 -10,FeTS2022_01446 -10,FeTS2022_01303 -10,FeTS2022_01296 -10,FeTS2022_00132 -10,FeTS2022_01441 -10,FeTS2022_01445 -10,FeTS2022_01302 -10,FeTS2022_00143 -10,FeTS2022_00105 -10,FeTS2022_01444 -10,FeTS2022_00147 -10,FeTS2022_01455 -10,FeTS2022_00146 -10,FeTS2022_00137 -11,FeTS2022_01459 -11,FeTS2022_01464 -11,FeTS2022_01458 -11,FeTS2022_01457 -11,FeTS2022_01461 -11,FeTS2022_01456 -11,FeTS2022_01460 -11,FeTS2022_01462 -11,FeTS2022_01466 -11,FeTS2022_01465 -11,FeTS2022_01463 -11,FeTS2022_01467 -12,FeTS2022_00140 -12,FeTS2022_01469 -12,FeTS2022_01468 -12,FeTS2022_01470 -12,FeTS2022_00104 -12,FeTS2022_00110 -12,FeTS2022_00112 -12,FeTS2022_00128 -13,FeTS2022_00134 -13,FeTS2022_00150 -13,FeTS2022_00116 -13,FeTS2022_01471 -14,FeTS2022_01472 -14,FeTS2022_00117 -14,FeTS2022_00130 -14,FeTS2022_00138 -14,FeTS2022_01473 -14,FeTS2022_00111 -14,FeTS2022_00124 -14,FeTS2022_00106 -15,FeTS2022_00122 -15,FeTS2022_00148 -15,FeTS2022_01474 -15,FeTS2022_00108 -15,FeTS2022_01144 -15,FeTS2022_00107 -15,FeTS2022_01140 -15,FeTS2022_01146 -15,FeTS2022_01145 -15,FeTS2022_01139 -15,FeTS2022_01141 -15,FeTS2022_01142 -15,FeTS2022_01143 -15,FeTS2022_01475 -16,FeTS2022_01482 -16,FeTS2022_01480 -16,FeTS2022_01485 -16,FeTS2022_01476 -16,FeTS2022_01481 -16,FeTS2022_01483 -16,FeTS2022_01486 -16,FeTS2022_01484 -16,FeTS2022_01479 -16,FeTS2022_01477 -16,FeTS2022_01478 -17,FeTS2022_01491 -17,FeTS2022_01500 -17,FeTS2022_01519 -17,FeTS2022_01516 -17,FeTS2022_01509 -17,FeTS2022_01520 -17,FeTS2022_01508 -17,FeTS2022_01503 -17,FeTS2022_01488 -17,FeTS2022_01492 -17,FeTS2022_01502 -17,FeTS2022_01493 -18,FeTS2022_01497 -18,FeTS2022_01499 -18,FeTS2022_01487 -18,FeTS2022_01505 -18,FeTS2022_01504 -18,FeTS2022_01490 -18,FeTS2022_01507 -18,FeTS2022_01510 -18,FeTS2022_01512 -18,FeTS2022_01514 -18,FeTS2022_01517 -19,FeTS2022_01501 -19,FeTS2022_01518 -19,FeTS2022_01506 -19,FeTS2022_01515 -19,FeTS2022_01511 -19,FeTS2022_01494 -19,FeTS2022_01489 -19,FeTS2022_01513 -19,FeTS2022_01496 -19,FeTS2022_01495 -19,FeTS2022_01521 -19,FeTS2022_01498 -20,FeTS2022_01522 -20,FeTS2022_01525 -20,FeTS2022_01526 -20,FeTS2022_01527 -20,FeTS2022_01524 -20,FeTS2022_01523 -21,FeTS2022_01530 -21,FeTS2022_01536 -21,FeTS2022_01535 -21,FeTS2022_01663 -21,FeTS2022_01534 -21,FeTS2022_01529 -21,FeTS2022_01531 -21,FeTS2022_01666 -21,FeTS2022_01665 -21,FeTS2022_01532 -21,FeTS2022_01664 -21,FeTS2022_01528 -21,FeTS2022_01533 -22,FeTS2022_00584 -22,FeTS2022_00567 -22,FeTS2022_00571 -22,FeTS2022_00582 -22,FeTS2022_00570 -22,FeTS2022_00594 -22,FeTS2022_00597 -22,FeTS2022_00596 -22,FeTS2022_00576 -22,FeTS2022_00572 -22,FeTS2022_00115 -22,FeTS2022_00593 -22,FeTS2022_00588 -22,FeTS2022_00598 -22,FeTS2022_00589 -22,FeTS2022_00574 -22,FeTS2022_00586 -22,FeTS2022_00579 -22,FeTS2022_00590 -22,FeTS2022_00599 -22,FeTS2022_00577 -22,FeTS2022_00575 -22,FeTS2022_00581 -22,FeTS2022_00591 -22,FeTS2022_00569 -22,FeTS2022_00587 -22,FeTS2022_00580 -22,FeTS2022_00583 -22,FeTS2022_00578 -22,FeTS2022_00568 -23,FeTS2022_01423 -23,FeTS2022_01420 -23,FeTS2022_01422 -23,FeTS2022_01417 -23,FeTS2022_01421 -23,FeTS2022_01424 -23,FeTS2022_01418 -23,FeTS2022_01425 -23,FeTS2022_01419 -24,FeTS2022_01628 -24,FeTS2022_01615 -24,FeTS2022_01035 -24,FeTS2022_00732 -24,FeTS2022_00753 -24,FeTS2022_01620 -24,FeTS2022_01637 -24,FeTS2022_01594 -24,FeTS2022_00530 -24,FeTS2022_00772 -24,FeTS2022_01580 -24,FeTS2022_00731 -24,FeTS2022_00540 -24,FeTS2022_00464 -24,FeTS2022_01622 -24,FeTS2022_01154 -24,FeTS2022_01559 -24,FeTS2022_00729 -24,FeTS2022_00708 -24,FeTS2022_00044 -24,FeTS2022_00705 -24,FeTS2022_00645 -24,FeTS2022_01640 -24,FeTS2022_00008 -24,FeTS2022_00746 -24,FeTS2022_01551 -24,FeTS2022_01610 -24,FeTS2022_00061 -24,FeTS2022_00642 -24,FeTS2022_00675 -24,FeTS2022_01651 -24,FeTS2022_00651 -24,FeTS2022_00626 -24,FeTS2022_00028 -24,FeTS2022_01557 -24,FeTS2022_01616 -24,FeTS2022_00684 -24,FeTS2022_01538 -24,FeTS2022_01647 -24,FeTS2022_00688 -24,FeTS2022_00737 -24,FeTS2022_00063 -24,FeTS2022_00758 -24,FeTS2022_01159 -24,FeTS2022_00615 -24,FeTS2022_00621 -24,FeTS2022_01543 -24,FeTS2022_01560 -24,FeTS2022_00058 -24,FeTS2022_00009 -24,FeTS2022_00544 -24,FeTS2022_01611 -24,FeTS2022_00485 -24,FeTS2022_00735 -24,FeTS2022_00659 -24,FeTS2022_00025 -24,FeTS2022_00550 -24,FeTS2022_01599 -24,FeTS2022_00636 -24,FeTS2022_01644 -24,FeTS2022_00716 -24,FeTS2022_00641 -24,FeTS2022_01624 -24,FeTS2022_00547 -24,FeTS2022_00046 -24,FeTS2022_00728 -24,FeTS2022_00045 -24,FeTS2022_00493 -24,FeTS2022_00089 -24,FeTS2022_00622 -24,FeTS2022_01643 -24,FeTS2022_00602 -24,FeTS2022_00035 -24,FeTS2022_01545 -24,FeTS2022_00014 -24,FeTS2022_01566 -24,FeTS2022_00066 -24,FeTS2022_01614 -24,FeTS2022_01591 -24,FeTS2022_00514 -24,FeTS2022_01588 -24,FeTS2022_00520 -24,FeTS2022_01556 -24,FeTS2022_00097 -24,FeTS2022_00555 -24,FeTS2022_00736 -24,FeTS2022_00639 -24,FeTS2022_00479 -24,FeTS2022_01550 -24,FeTS2022_01592 -24,FeTS2022_01626 -24,FeTS2022_00557 -24,FeTS2022_00496 -24,FeTS2022_00778 -24,FeTS2022_01561 -24,FeTS2022_00690 -24,FeTS2022_00750 -24,FeTS2022_01586 -24,FeTS2022_01549 -24,FeTS2022_01555 -24,FeTS2022_01612 -24,FeTS2022_01600 -24,FeTS2022_01629 -24,FeTS2022_01656 -24,FeTS2022_00500 -24,FeTS2022_00529 -24,FeTS2022_00628 -24,FeTS2022_00775 -24,FeTS2022_00523 -24,FeTS2022_00488 -24,FeTS2022_00518 -24,FeTS2022_00000 -24,FeTS2022_00020 -24,FeTS2022_01646 -24,FeTS2022_01638 -24,FeTS2022_00630 -24,FeTS2022_01590 -24,FeTS2022_01613 -24,FeTS2022_01571 -24,FeTS2022_00519 -24,FeTS2022_01617 -24,FeTS2022_01623 -24,FeTS2022_00691 -24,FeTS2022_01027 -24,FeTS2022_00704 -24,FeTS2022_00098 -24,FeTS2022_01558 -25,FeTS2022_00715 -25,FeTS2022_00757 -25,FeTS2022_00084 -25,FeTS2022_00692 -25,FeTS2022_00078 -25,FeTS2022_00747 -25,FeTS2022_01607 -25,FeTS2022_00751 -25,FeTS2022_00011 -25,FeTS2022_00610 -25,FeTS2022_00694 -25,FeTS2022_00026 -25,FeTS2022_00658 -25,FeTS2022_01544 -25,FeTS2022_01583 -25,FeTS2022_00680 -25,FeTS2022_01028 -25,FeTS2022_01636 -25,FeTS2022_00545 -25,FeTS2022_00072 -25,FeTS2022_00016 -25,FeTS2022_01548 -25,FeTS2022_00624 -25,FeTS2022_00676 -25,FeTS2022_00533 -25,FeTS2022_01574 -25,FeTS2022_01582 -25,FeTS2022_00085 -25,FeTS2022_00613 -25,FeTS2022_01593 -25,FeTS2022_00730 -25,FeTS2022_01585 -25,FeTS2022_00524 -25,FeTS2022_00081 -25,FeTS2022_00472 -25,FeTS2022_00478 -25,FeTS2022_00469 -25,FeTS2022_00682 -25,FeTS2022_00733 -25,FeTS2022_00723 -25,FeTS2022_00099 -25,FeTS2022_00744 -25,FeTS2022_00048 -25,FeTS2022_00480 -25,FeTS2022_00650 -25,FeTS2022_00601 -25,FeTS2022_00542 -25,FeTS2022_00667 -25,FeTS2022_00505 -25,FeTS2022_01539 -25,FeTS2022_00764 -25,FeTS2022_00506 -25,FeTS2022_01649 -25,FeTS2022_00032 -25,FeTS2022_00021 -25,FeTS2022_00685 -25,FeTS2022_00611 -25,FeTS2022_00511 -25,FeTS2022_01584 -25,FeTS2022_01635 -25,FeTS2022_00607 -25,FeTS2022_00071 -25,FeTS2022_00687 -25,FeTS2022_00767 -25,FeTS2022_00537 -25,FeTS2022_01630 -25,FeTS2022_00740 -25,FeTS2022_00525 -25,FeTS2022_00725 -25,FeTS2022_00502 -25,FeTS2022_01562 -25,FeTS2022_01577 -25,FeTS2022_01576 -25,FeTS2022_01595 -25,FeTS2022_00654 -25,FeTS2022_00090 -25,FeTS2022_01645 -25,FeTS2022_01564 -25,FeTS2022_01567 -25,FeTS2022_00703 -25,FeTS2022_00043 -25,FeTS2022_00003 -25,FeTS2022_00495 -25,FeTS2022_00017 -25,FeTS2022_00491 -25,FeTS2022_00054 -25,FeTS2022_00510 -25,FeTS2022_00618 -25,FeTS2022_00064 -25,FeTS2022_00024 -25,FeTS2022_00709 -25,FeTS2022_01653 -25,FeTS2022_01579 -25,FeTS2022_01572 -25,FeTS2022_01156 -25,FeTS2022_00707 -25,FeTS2022_01540 -25,FeTS2022_00056 -25,FeTS2022_00620 -25,FeTS2022_00470 -25,FeTS2022_00499 -25,FeTS2022_00640 -25,FeTS2022_00549 -25,FeTS2022_01601 -25,FeTS2022_00608 -25,FeTS2022_00727 -25,FeTS2022_00773 -25,FeTS2022_00504 -25,FeTS2022_01604 -25,FeTS2022_01158 -25,FeTS2022_00051 -25,FeTS2022_00768 -25,FeTS2022_01161 -25,FeTS2022_00765 -25,FeTS2022_00068 -25,FeTS2022_00551 -25,FeTS2022_01605 -25,FeTS2022_00674 -25,FeTS2022_01157 -25,FeTS2022_01631 -25,FeTS2022_00022 -25,FeTS2022_00777 -25,FeTS2022_01609 -25,FeTS2022_01633 -25,FeTS2022_01652 -25,FeTS2022_00759 -25,FeTS2022_01655 -26,FeTS2022_01639 -26,FeTS2022_01563 -26,FeTS2022_00661 -26,FeTS2022_00087 -26,FeTS2022_00030 -26,FeTS2022_00556 -26,FeTS2022_01597 -26,FeTS2022_00724 -26,FeTS2022_00096 -26,FeTS2022_00049 -26,FeTS2022_00683 -26,FeTS2022_00059 -26,FeTS2022_01596 -26,FeTS2022_00498 -26,FeTS2022_00543 -26,FeTS2022_01641 -26,FeTS2022_01542 -26,FeTS2022_00062 -26,FeTS2022_00005 -26,FeTS2022_00646 -26,FeTS2022_00088 -26,FeTS2022_00656 -26,FeTS2022_01589 -26,FeTS2022_01160 -26,FeTS2022_01547 -26,FeTS2022_01606 -26,FeTS2022_00631 -26,FeTS2022_00756 -26,FeTS2022_00619 -26,FeTS2022_00698 -26,FeTS2022_01541 -26,FeTS2022_00539 -26,FeTS2022_00053 -26,FeTS2022_01618 -26,FeTS2022_00693 -26,FeTS2022_00616 -26,FeTS2022_01642 -26,FeTS2022_01632 -26,FeTS2022_00718 -26,FeTS2022_00006 -26,FeTS2022_00466 -26,FeTS2022_01565 -26,FeTS2022_01621 -26,FeTS2022_00697 -26,FeTS2022_00689 -26,FeTS2022_00554 -26,FeTS2022_00638 -26,FeTS2022_00517 -26,FeTS2022_00019 -26,FeTS2022_01650 -26,FeTS2022_01602 -26,FeTS2022_01570 -26,FeTS2022_00655 -26,FeTS2022_00552 -26,FeTS2022_00706 -26,FeTS2022_01654 -26,FeTS2022_00481 -26,FeTS2022_00604 -26,FeTS2022_00612 -26,FeTS2022_00774 -26,FeTS2022_00625 -26,FeTS2022_00070 -26,FeTS2022_00649 -26,FeTS2022_00036 -26,FeTS2022_01546 -26,FeTS2022_00559 -26,FeTS2022_00018 -26,FeTS2022_00507 -26,FeTS2022_00760 -26,FeTS2022_01568 -26,FeTS2022_00094 -26,FeTS2022_00526 -26,FeTS2022_01575 -26,FeTS2022_00512 -26,FeTS2022_00033 -26,FeTS2022_01648 -26,FeTS2022_00052 -26,FeTS2022_01625 -26,FeTS2022_01573 -26,FeTS2022_00623 -26,FeTS2022_01153 -26,FeTS2022_00532 -26,FeTS2022_00516 -26,FeTS2022_00679 -26,FeTS2022_00468 -26,FeTS2022_00494 -26,FeTS2022_00483 -26,FeTS2022_01552 -26,FeTS2022_00606 -26,FeTS2022_00742 -26,FeTS2022_00677 -26,FeTS2022_00652 -26,FeTS2022_00074 -26,FeTS2022_00513 -26,FeTS2022_01581 -26,FeTS2022_00663 -26,FeTS2022_00734 -26,FeTS2022_01619 -26,FeTS2022_00668 -26,FeTS2022_00558 -26,FeTS2022_00002 -26,FeTS2022_01598 -26,FeTS2022_00477 -26,FeTS2022_01634 -26,FeTS2022_00501 -26,FeTS2022_01155 -26,FeTS2022_00077 -26,FeTS2022_01578 -26,FeTS2022_01569 -26,FeTS2022_01603 -26,FeTS2022_00538 -26,FeTS2022_00714 -26,FeTS2022_00031 -26,FeTS2022_01627 -26,FeTS2022_01553 -26,FeTS2022_00548 -26,FeTS2022_00739 -26,FeTS2022_00103 -26,FeTS2022_00528 -26,FeTS2022_01608 -26,FeTS2022_00095 -26,FeTS2022_00060 -26,FeTS2022_01554 -26,FeTS2022_00657 -26,FeTS2022_01587 -26,FeTS2022_00605 -26,FeTS2022_00686 -26,FeTS2022_00012 -27,FeTS2022_01166 -27,FeTS2022_01163 -27,FeTS2022_01165 -27,FeTS2022_01164 -28,FeTS2022_00444 -28,FeTS2022_01014 -28,FeTS2022_00442 -28,FeTS2022_01025 -28,FeTS2022_01024 -28,FeTS2022_00101 -28,FeTS2022_00453 -28,FeTS2022_01013 -28,FeTS2022_01011 -28,FeTS2022_00459 -28,FeTS2022_00457 -28,FeTS2022_01016 -28,FeTS2022_00448 -28,FeTS2022_01023 -28,FeTS2022_01017 -28,FeTS2022_00443 -28,FeTS2022_00455 -28,FeTS2022_00127 -28,FeTS2022_01012 -28,FeTS2022_01018 -28,FeTS2022_01022 -28,FeTS2022_00451 -28,FeTS2022_00445 -28,FeTS2022_00452 -28,FeTS2022_00454 -28,FeTS2022_01019 -28,FeTS2022_01021 -28,FeTS2022_01020 -28,FeTS2022_01026 -28,FeTS2022_00456 -28,FeTS2022_00446 -28,FeTS2022_00449 -28,FeTS2022_01015 -29,FeTS2022_00802 -29,FeTS2022_00788 -29,FeTS2022_00795 -29,FeTS2022_00820 -29,FeTS2022_00782 -29,FeTS2022_00800 -29,FeTS2022_00830 -29,FeTS2022_00824 -29,FeTS2022_00805 -29,FeTS2022_00796 -29,FeTS2022_00823 -29,FeTS2022_00828 -30,FeTS2022_00811 -30,FeTS2022_00789 -30,FeTS2022_00801 -30,FeTS2022_00780 -30,FeTS2022_00781 -30,FeTS2022_00814 -30,FeTS2022_00806 -30,FeTS2022_00810 -30,FeTS2022_00807 -30,FeTS2022_00818 -30,FeTS2022_00791 -31,FeTS2022_00787 -31,FeTS2022_00808 -31,FeTS2022_00809 -31,FeTS2022_00803 -31,FeTS2022_00816 -31,FeTS2022_00819 -31,FeTS2022_00793 -31,FeTS2022_00799 -31,FeTS2022_00797 -31,FeTS2022_00784 -31,FeTS2022_00804 -31,FeTS2022_00792 -32,FeTS2022_01031 -32,FeTS2022_01033 -32,FeTS2022_01030 -32,FeTS2022_00118 -32,FeTS2022_01029 -32,FeTS2022_00126 -32,FeTS2022_01032 -33,FeTS2022_01147 -33,FeTS2022_01149 -33,FeTS2022_01150 -33,FeTS2022_01148 -33,FeTS2022_01162 diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/cols.yaml b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/cols.yaml deleted file mode 100644 index ebd5bec..0000000 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/cols.yaml +++ /dev/null @@ -1,3 +0,0 @@ -# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2021 - -collaborators: \ No newline at end of file diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/data.yaml b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/data.yaml deleted file mode 100644 index 93c8816..0000000 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/data.yaml +++ /dev/null @@ -1,4 +0,0 @@ -# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2021 - -one,1 -two,2 diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/defaults b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/defaults deleted file mode 100644 index fb82f9c..0000000 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/defaults +++ /dev/null @@ -1,2 +0,0 @@ -../../workspace/plan/defaults - diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml deleted file mode 100644 index 912c614..0000000 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/plan/plan.yaml +++ /dev/null @@ -1,141 +0,0 @@ -# Copyright (C) 2022 Intel Corporation -# Licensed subject to the terms of the separately executed evaluation license agreement between Intel Corporation and you. - -aggregator : - defaults : plan/defaults/aggregator.yaml - template : openfl.component.Aggregator - settings : - init_state_path : save/fets_seg_test_init.pbuf - best_state_path : save/fets_seg_test_best.pbuf - last_state_path : save/fets_seg_test_last.pbuf - rounds_to_train : 3 - write_logs : true - - -collaborator : - defaults : plan/defaults/collaborator.yaml - template : openfl.component.Collaborator - settings : - delta_updates : false - opt_treatment : RESET - -data_loader : - defaults : plan/defaults/data_loader.yaml - template : openfl.federated.data.loader_gandlf.GaNDLFDataLoaderWrapper - settings : - feature_shape : [32, 32, 32] - -task_runner : - template : src.fets_challenge_model.FeTSChallengeModel - settings : - train_csv : seg_test_train.csv - val_csv : seg_test_val.csv - device : cpu - gandlf_config : - batch_size: 1 - clip_mode: norm - clip_grad: 0.1 - data_augmentation: {} - data_postprocessing: {} - data_preprocessing: - normalize: None - enable_padding: false - in_memory: false - inference_mechanism : - grid_aggregator_overlap: crop - patch_overlap: 0 - learning_rate: 0.001 - loss_function: dc - medcam_enabled: false - output_dir: '.' - metrics: - - dice - # - dice_per_label - # - hd95_per_label - model: - amp: true - architecture: resunet - base_filters: 32 - class_list: - - 0 - - 1 - - 2 - - 4 - dimension: 3 - final_layer: softmax - ignore_label_validation: None - norm_type: instance - nested_training: - testing: 1 - validation: -5 - num_epochs: 1 - optimizer: - type: sgd - parallel_compute_command: '' - patch_sampler: label - patch_size: - - 64 - - 64 - - 64 - patience: 100 - pin_memory_dataloader: false - print_rgb_label_warning: true - q_max_length: 100 - q_num_workers: 0 - q_samples_per_volume: 40 - q_verbose: false - save_output: false - save_training: false - scaling_factor: 1 - scheduler: - type: triangle_modified - track_memory_usage: false - verbose: false - version: - maximum: 0.1.0 - minimum: 0.0.14 - weighted_loss: true - modality: rad - - -network : - defaults : plan/defaults/network.yaml - -assigner: - template : src.challenge_assigner.FeTSChallengeAssigner - settings : - training_tasks : - - aggregated_model_validation - - train - - locally_tuned_model_validation - validation_tasks : - - aggregated_model_validation - -tasks : - aggregated_model_validation: - function : validate - kwargs : - apply : global - metrics : - - valid_loss - - valid_dice - - locally_tuned_model_validation: - function : validate - kwargs : - apply: local - metrics : - - valid_loss - - valid_dice - - train: - function : train - kwargs : - metrics : - - loss - - train_dice - epochs : 1 - - -compression_pipeline : - defaults : plan/defaults/compression_pipeline.yaml diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/requirements.txt b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/requirements.txt deleted file mode 100644 index 9a7d57c..0000000 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -torchvision -torch diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/small_split.csv b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/small_split.csv deleted file mode 100644 index 50baaca..0000000 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/small_split.csv +++ /dev/null @@ -1,11 +0,0 @@ -Partition_ID,Subject_ID -1,FeTS2022_01341 -1,FeTS2022_01333 -1,FeTS2022_01077 -1,FeTS2022_01324 -2,FeTS2022_01412 -2,FeTS2022_01415 -2,FeTS2022_01411 -3,FeTS2022_01439 -3,FeTS2022_01435 -3,FeTS2022_01434 diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/__init__.py b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/__init__.py deleted file mode 100644 index 1c5a549..0000000 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2021 - -# Contributing Authors (alphabetical): -# Patrick Foley (Intel) -# Micah Sheller (Intel) - -TRAINING_HPARAMS = [ - 'epochs_per_round', - 'learning_rate', -] diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/challenge_assigner.py b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/challenge_assigner.py deleted file mode 100644 index 46e847f..0000000 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/challenge_assigner.py +++ /dev/null @@ -1,40 +0,0 @@ -# Provided by the FeTS Initiative (www.fets.ai) as part of the FeTS Challenge 2022 - -# Contributing Authors (alphabetical): -# Micah Sheller (Intel) - -class FeTSChallengeAssigner: - def __init__(self, tasks, authorized_cols, training_tasks, validation_tasks, **kwargs): - """Initialize.""" - self.training_collaborators = [] - self.tasks = tasks - self.training_tasks = training_tasks - self.validation_tasks = validation_tasks - self.collaborators = authorized_cols - - def set_training_collaborators(self, training_collaborators): - self.training_collaborators = training_collaborators - - - def get_tasks_for_collaborator(self, collaborator_name, round_number): - """Get tasks for the collaborator specified.""" - if collaborator_name in self.training_collaborators: - return self.training_tasks - else: - return self.validation_tasks - - def get_collaborators_for_task(self, task_name, round_number): - """Get collaborators for the task specified.""" - if task_name in self.validation_tasks: - return self.collaborators - else: - return self.training_collaborators - - def get_all_tasks_for_round(self, round_number): - return self.training_tasks - - def get_aggregation_type_for_task(self, task_name): - """Extract aggregation type from self.tasks.""" - if 'aggregation_type' not in self.tasks[task_name]: - return None - return self.tasks[task_name]['aggregation_type'] diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py deleted file mode 100644 index 66a0c82..0000000 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py +++ /dev/null @@ -1,208 +0,0 @@ -# Copyright (C) 2020-2021 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - -"""GaNDLFTaskRunner module.""" - -from copy import deepcopy - -import numpy as np -import torch as pt - -from openfl.utilities.split import split_tensor_dict_for_holdouts -from openfl.utilities import TensorKey - -from openfl.federated.task.runner_gandlf import * - -from GANDLF.compute.generic import create_pytorch_objects -from GANDLF.compute.training_loop import train_network -from GANDLF.compute.forward_pass import validate_network - -from . import TRAINING_HPARAMS - -class FeTSChallengeModel(GaNDLFTaskRunner): - """FeTSChallenge Model class for Federated Learning.""" - - def validate(self, col_name, round_num, input_tensor_dict, - use_tqdm=False, **kwargs): - """Validate. - Run validation of the model on the local data. - Args: - col_name: Name of the collaborator - round_num: What round is it - input_tensor_dict: Required input tensors (for model) - use_tqdm (bool): Use tqdm to print a progress bar (Default=True) - kwargs: Key word arguments passed to GaNDLF main_run - Returns: - global_output_dict: Tensors to send back to the aggregator - local_output_dict: Tensors to maintain in the local TensorDB - """ - self.rebuild_model(round_num, input_tensor_dict, validation=True) - self.model.eval() - # self.model.to(self.device) - - epoch_valid_loss, epoch_valid_metric = validate_network(self.model, - self.data_loader.val_dataloader, - self.scheduler, - self.params, - round_num, - mode="validation") - - self.logger.info(epoch_valid_loss) - self.logger.info(epoch_valid_metric) - - origin = col_name - suffix = 'validate' - if kwargs['apply'] == 'local': - suffix += '_local' - else: - suffix += '_agg' - tags = ('metric', suffix) - - output_tensor_dict = {} - output_tensor_dict[TensorKey('valid_loss', origin, round_num, True, tags)] = np.array(epoch_valid_loss) - for k, v in epoch_valid_metric.items(): - if np.array(v).size == 1: - output_tensor_dict[TensorKey(f'valid_{k}', origin, round_num, True, tags)] = np.array(v) - else: - for idx,label in enumerate([0,1,2,4]): - output_tensor_dict[TensorKey(f'valid_{k}_{label}', origin, round_num, True, tags)] = np.array(v[idx]) - - return output_tensor_dict, {} - - def inference(self, col_name, round_num, input_tensor_dict, - use_tqdm=False, **kwargs): - """Inference. - Run inference of the model on the local data (used for final validation) - Args: - col_name: Name of the collaborator - round_num: What round is it - input_tensor_dict: Required input tensors (for model) - use_tqdm (bool): Use tqdm to print a progress bar (Default=True) - kwargs: Key word arguments passed to GaNDLF main_run - Returns: - global_output_dict: Tensors to send back to the aggregator - local_output_dict: Tensors to maintain in the local TensorDB - """ - self.rebuild_model(round_num, input_tensor_dict, validation=True) - self.model.eval() - # self.model.to(self.device) - - epoch_valid_loss, epoch_valid_metric = validate_network(self.model, - self.data_loader.val_dataloader, - self.scheduler, - self.params, - round_num, - mode="inference") - - origin = col_name - suffix = 'validate' - if kwargs['apply'] == 'local': - suffix += '_local' - else: - suffix += '_agg' - tags = ('metric', suffix) - - output_tensor_dict = {} - output_tensor_dict[TensorKey('valid_loss', origin, round_num, True, tags)] = np.array(epoch_valid_loss) - for k, v in epoch_valid_metric.items(): - if np.array(v).size == 1: - output_tensor_dict[TensorKey(f'valid_{k}', origin, round_num, True, tags)] = np.array(v) - else: - for idx,label in enumerate([0,1,2,4]): - output_tensor_dict[TensorKey(f'valid_{k}_{label}', origin, round_num, True, tags)] = np.array(v[idx]) - - return output_tensor_dict, {} - - - def train(self, col_name, round_num, input_tensor_dict, use_tqdm=False, epochs=1, **kwargs): - """Train batches. - Train the model on the requested number of batches. - Args: - col_name : Name of the collaborator - round_num : What round is it - input_tensor_dict : Required input tensors (for model) - use_tqdm (bool) : Use tqdm to print a progress bar (Default=True) - epochs : The number of epochs to train - crossfold_test : Whether or not to use cross fold trainval/test - to evaluate the quality of the model under fine tuning - (this uses a separate prameter to pass in the data and - config used) - crossfold_test_data_csv : Data csv used to define data used in crossfold test. - This csv does not itself define the folds, just - defines the total data to be used. - crossfold_val_n : number of folds to use for the train,val level of the nested crossfold. - corssfold_test_n : number of folds to use for the trainval,test level of the nested crossfold. - kwargs : Key word arguments passed to GaNDLF main_run - Returns: - global_output_dict : Tensors to send back to the aggregator - local_output_dict : Tensors to maintain in the local TensorDB - """ - - # handle the hparams - epochs_per_round = int(input_tensor_dict.pop('epochs_per_round')) - learning_rate = float(input_tensor_dict.pop('learning_rate')) - - self.rebuild_model(round_num, input_tensor_dict) - # set to "training" mode - self.model.train() - - # Set the learning rate - for group in self.optimizer.param_groups: - group['lr'] = learning_rate - - for epoch in range(epochs_per_round): - self.logger.info(f'Run {epoch} epoch of {round_num} round') - # FIXME: do we want to capture these in an array rather than simply taking the last value? - epoch_train_loss, epoch_train_metric = train_network(self.model, - self.data_loader.train_dataloader, - self.optimizer, - self.params) - - # output model tensors (Doesn't include TensorKey) - tensor_dict = self.get_tensor_dict(with_opt_vars=True) - - metric_dict = {'loss': epoch_train_loss} - for k, v in epoch_train_metric.items(): - if np.array(v).size == 1: - metric_dict[f'train_{k}'] = np.array(v) - else: - for idx,label in enumerate([0,1,2,4]): - metric_dict[f'train_{k}_{label}'] = np.array(v[idx]) - - - # Return global_tensor_dict, local_tensor_dict - # is this even pt-specific really? - global_tensor_dict, local_tensor_dict = create_tensorkey_dicts(tensor_dict, - metric_dict, - col_name, - round_num, - self.logger, - self.tensor_dict_split_fn_kwargs) - - # Update the required tensors if they need to be pulled from the - # aggregator - # TODO this logic can break if different collaborators have different - # roles between rounds. - # For example, if a collaborator only performs validation in the first - # round but training in the second, it has no way of knowing the - # optimizer state tensor names to request from the aggregator because - # these are only created after training occurs. A work around could - # involve doing a single epoch of training on random data to get the - # optimizer names, and then throwing away the model. - if self.opt_treatment == 'CONTINUE_GLOBAL': - self.initialize_tensorkeys_for_functions(with_opt_vars=True) - - # This will signal that the optimizer values are now present, - # and can be loaded when the model is rebuilt - self.train_round_completed = True - - # Return global_tensor_dict, local_tensor_dict - return global_tensor_dict, local_tensor_dict - - def get_required_tensorkeys_for_function(self, func_name, **kwargs): - required = super().get_required_tensorkeys_for_function(func_name, **kwargs) - if func_name == 'train': - round_number = required[0].round_number - for hparam in TRAINING_HPARAMS: - required.append(TensorKey(tensor_name=hparam, origin='GLOBAL', round_number=round_number, report=False, tags=('hparam', 'model'))) - return required diff --git a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/validation.csv b/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/validation.csv deleted file mode 100644 index d0d78f1..0000000 --- a/Task_1/build/lib/openfl-workspace/fets_challenge_workspace/validation.csv +++ /dev/null @@ -1,220 +0,0 @@ -Partition_ID,Subject_ID --1,FeTS2022_01718 --1,FeTS2022_01719 --1,FeTS2022_00573 --1,FeTS2022_00592 --1,FeTS2022_00585 --1,FeTS2022_00595 --1,FeTS2022_01678 --1,FeTS2022_01679 --1,FeTS2022_01680 --1,FeTS2022_01681 --1,FeTS2022_01682 --1,FeTS2022_01683 --1,FeTS2022_01684 --1,FeTS2022_01685 --1,FeTS2022_01686 --1,FeTS2022_00833 --1,FeTS2022_01687 --1,FeTS2022_00384 --1,FeTS2022_01688 --1,FeTS2022_01689 --1,FeTS2022_01690 --1,FeTS2022_01691 --1,FeTS2022_00434 --1,FeTS2022_00333 --1,FeTS2022_00337 --1,FeTS2022_01692 --1,FeTS2022_00229 --1,FeTS2022_01667 --1,FeTS2022_01668 --1,FeTS2022_01669 --1,FeTS2022_01670 --1,FeTS2022_01671 --1,FeTS2022_01672 --1,FeTS2022_01673 --1,FeTS2022_01674 --1,FeTS2022_01675 --1,FeTS2022_01676 --1,FeTS2022_01677 --1,FeTS2022_01720 --1,FeTS2022_01724 --1,FeTS2022_00145 --1,FeTS2022_01693 --1,FeTS2022_01006 --1,FeTS2022_01727 --1,FeTS2022_01694 --1,FeTS2022_01729 --1,FeTS2022_01695 --1,FeTS2022_00997 --1,FeTS2022_01696 --1,FeTS2022_01732 --1,FeTS2022_01697 --1,FeTS2022_01698 --1,FeTS2022_01699 --1,FeTS2022_01700 --1,FeTS2022_01701 --1,FeTS2022_01702 --1,FeTS2022_01703 --1,FeTS2022_00135 --1,FeTS2022_01704 --1,FeTS2022_01705 --1,FeTS2022_01706 --1,FeTS2022_01707 --1,FeTS2022_01708 --1,FeTS2022_01709 --1,FeTS2022_01710 --1,FeTS2022_01711 --1,FeTS2022_01712 --1,FeTS2022_01713 --1,FeTS2022_00129 --1,FeTS2022_00125 --1,FeTS2022_01714 --1,FeTS2022_00119 --1,FeTS2022_01736 --1,FeTS2022_00114 --1,FeTS2022_01738 --1,FeTS2022_00141 --1,FeTS2022_01715 --1,FeTS2022_01716 --1,FeTS2022_01717 --1,FeTS2022_01721 --1,FeTS2022_01756 --1,FeTS2022_01757 --1,FeTS2022_01758 --1,FeTS2022_01759 --1,FeTS2022_01760 --1,FeTS2022_01761 --1,FeTS2022_01762 --1,FeTS2022_01763 --1,FeTS2022_01764 --1,FeTS2022_01765 --1,FeTS2022_01766 --1,FeTS2022_01767 --1,FeTS2022_01768 --1,FeTS2022_01770 --1,FeTS2022_01769 --1,FeTS2022_01772 --1,FeTS2022_01771 --1,FeTS2022_00001 --1,FeTS2022_00013 --1,FeTS2022_00015 --1,FeTS2022_00027 --1,FeTS2022_00037 --1,FeTS2022_00047 --1,FeTS2022_00079 --1,FeTS2022_00080 --1,FeTS2022_00082 --1,FeTS2022_00091 --1,FeTS2022_01722 --1,FeTS2022_01723 --1,FeTS2022_01741 --1,FeTS2022_01725 --1,FeTS2022_01726 --1,FeTS2022_01728 --1,FeTS2022_01742 --1,FeTS2022_01743 --1,FeTS2022_01730 --1,FeTS2022_01744 --1,FeTS2022_01731 --1,FeTS2022_01733 --1,FeTS2022_01734 --1,FeTS2022_01735 --1,FeTS2022_01747 --1,FeTS2022_01737 --1,FeTS2022_01739 --1,FeTS2022_01740 --1,FeTS2022_01745 --1,FeTS2022_01746 --1,FeTS2022_01748 --1,FeTS2022_00153 --1,FeTS2022_01749 --1,FeTS2022_01750 --1,FeTS2022_01751 --1,FeTS2022_01752 --1,FeTS2022_01753 --1,FeTS2022_01754 --1,FeTS2022_01755 --1,FeTS2022_01773 --1,FeTS2022_01774 --1,FeTS2022_01775 --1,FeTS2022_01776 --1,FeTS2022_00161 --1,FeTS2022_00163 --1,FeTS2022_00174 --1,FeTS2022_00181 --1,FeTS2022_00182 --1,FeTS2022_00190 --1,FeTS2022_00200 --1,FeTS2022_00208 --1,FeTS2022_00213 --1,FeTS2022_00252 --1,FeTS2022_00256 --1,FeTS2022_00264 --1,FeTS2022_00287 --1,FeTS2022_00307 --1,FeTS2022_00323 --1,FeTS2022_00335 --1,FeTS2022_00355 --1,FeTS2022_00372 --1,FeTS2022_00381 --1,FeTS2022_00422 --1,FeTS2022_00428 --1,FeTS2022_00438 --1,FeTS2022_00447 --1,FeTS2022_00450 --1,FeTS2022_00458 --1,FeTS2022_00460 --1,FeTS2022_00462 --1,FeTS2022_00463 --1,FeTS2022_00467 --1,FeTS2022_00474 --1,FeTS2022_00489 --1,FeTS2022_00492 --1,FeTS2022_00503 --1,FeTS2022_00521 --1,FeTS2022_00535 --1,FeTS2022_00553 --1,FeTS2022_00560 --1,FeTS2022_00603 --1,FeTS2022_01777 --1,FeTS2022_01778 --1,FeTS2022_01779 --1,FeTS2022_01780 --1,FeTS2022_01781 --1,FeTS2022_01782 --1,FeTS2022_01783 --1,FeTS2022_01784 --1,FeTS2022_01785 --1,FeTS2022_01786 --1,FeTS2022_01787 --1,FeTS2022_01788 --1,FeTS2022_01789 --1,FeTS2022_01790 --1,FeTS2022_00644 --1,FeTS2022_00647 --1,FeTS2022_00662 --1,FeTS2022_00671 --1,FeTS2022_00681 --1,FeTS2022_00699 --1,FeTS2022_00702 --1,FeTS2022_00712 --1,FeTS2022_00719 --1,FeTS2022_00721 --1,FeTS2022_00749 --1,FeTS2022_00762 --1,FeTS2022_00769 --1,FeTS2022_00779 --1,FeTS2022_00821 --1,FeTS2022_00822 --1,FeTS2022_00825 --1,FeTS2022_00826 --1,FeTS2022_00829 --1,FeTS2022_01791 --1,FeTS2022_01792 --1,FeTS2022_01793 --1,FeTS2022_01794 --1,FeTS2022_01795 --1,FeTS2022_01796 --1,FeTS2022_01797 --1,FeTS2022_01798 diff --git a/Task_1/cert/ca/root-ca.crt b/Task_1/cert/ca/root-ca.crt deleted file mode 100644 index 330270d..0000000 --- a/Task_1/cert/ca/root-ca.crt +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEhjCCAu6gAwIBAgIRANUyVSicTEI8mvC0oI+yDUswDQYJKoZIhvcNAQEMBQAw -dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX -MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV -BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDkxNTAwNDkzNFoXDTI1MDkxNTAw -NDkzNFowdDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp -bXBsZTEXMBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJ -bmMxFzAVBgNVBAsMDlNpbXBsZSBSb290IENBMIIBojANBgkqhkiG9w0BAQEFAAOC -AY8AMIIBigKCAYEA3pjjbfACLCqi5GHZ/RqxZQIg08B3kBWdowCbSmkDtiCgLZx4 -Ed3JNhLNneHYf5hkseWfzIluNsEO5hMouZ4/lTxc+rkx+ArpHl8s8PuSkxg7GUQj -g1em2kdn+PKCSOAPAwXRV2gp5G0lYPdmNUNlt7ub/n+KZ06P7kTlZ3Yrh5+EC1Hb -0K7lO2oY+FO6B2/Pwod4vWufdJUL7tRrjYSoV3nBYjUmtIbxEbgwnpzElge8eb0B -6m05h2Nmewox4ZItfeDISUrk9N4Ux5cPVmcPXNkwHMQvKBn2OIgJsaOWlDcE5JiW -f7OG0AzZx4hFzkTyyYUTfzwyEOiO3G8GtZscKBJe0xBh2ggISKjTVhLsTBsiTz3i -XR8QmK/NvXM6BElwKXbzQqYFMKZUNHRnw3AUAYce3D+s8u7jGTBq3fhKgggy7K5L -iypKDRhQDg+gchznPoZeEJjgm2qiT+hn32q9USgHIvwswfudajHkVNCM7oGMz8H/ -GdoIXcIWNMtKV4gvAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN -AQEMBQADggGBACPuW17XRhwJC6Grdygb4sHxK7HqxWv6SzjQTK1aaEUtYXF76J4J -BNrvFNm425LMVPyiY2gInAYsys+H5iASlzWikigGrrDT4kQOT7GTd9+49C8LW5tA -qWwKM3eWBAk4waxn/OYWOwqSXFEVqEkWv4jE1rcRGX+J5FhyZfZ7NvFmmqaqoAH8 -+Lp3IM5cVTl19DPGBwT3fJ1V1TP9dV+RkziXSLEy8w3XdTrghBL3ZdXoIpPhcbJR -dk9Jh7hESrT7a2PVZr/w5a7V+g6Yab+1NXQ0jAz9e8cM1kPP3HYpIhrvUetJm1eJ -D0Um1m6zItOM/AFbr7JMszcUHIZ2qSw3Chl2T6ZTHm0wL/UbtZWhBll42WJ/Tqnx -JZLllFpTmckg+qYJ0tA4qnGMcW0/XJUTOOj7ECsQRHRJc0gEQnTbwYlBY+/k67dU -lqdsIADt4Ee7a4EOuH6QGk2FSTGZitQs9v+dDBTT3Io5ZQIw9B+TLIjXrUheAY20 -epcLyiWOb2qOKA== ------END CERTIFICATE----- diff --git a/Task_1/cert/ca/root-ca/db/root-ca.crl.srl b/Task_1/cert/ca/root-ca/db/root-ca.crl.srl deleted file mode 100644 index a616ad4..0000000 --- a/Task_1/cert/ca/root-ca/db/root-ca.crl.srl +++ /dev/null @@ -1 +0,0 @@ -01 \ No newline at end of file diff --git a/Task_1/cert/ca/root-ca/db/root-ca.crt.srl b/Task_1/cert/ca/root-ca/db/root-ca.crt.srl deleted file mode 100644 index a616ad4..0000000 --- a/Task_1/cert/ca/root-ca/db/root-ca.crt.srl +++ /dev/null @@ -1 +0,0 @@ -01 \ No newline at end of file diff --git a/Task_1/cert/ca/root-ca/db/root-ca.db b/Task_1/cert/ca/root-ca/db/root-ca.db deleted file mode 100644 index e69de29..0000000 diff --git a/Task_1/cert/ca/root-ca/db/root-ca.db.attr b/Task_1/cert/ca/root-ca/db/root-ca.db.attr deleted file mode 100644 index e69de29..0000000 diff --git a/Task_1/cert/ca/root-ca/private/root-ca.key b/Task_1/cert/ca/root-ca/private/root-ca.key deleted file mode 100644 index f6dcbba..0000000 --- a/Task_1/cert/ca/root-ca/private/root-ca.key +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/Task_1/cert/ca/signing-ca.crt b/Task_1/cert/ca/signing-ca.crt deleted file mode 100644 index 074143d..0000000 --- a/Task_1/cert/ca/signing-ca.crt +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEizCCAvOgAwIBAgIQTCSYz6JWTOKcSzpyyILwBjANBgkqhkiG9w0BAQwFADB0 -MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRcw -FQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEXMBUG -A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTE1MDA0OTM0WhcNMjUwOTE1MDA0 -OTM0WjB6MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt -cGxlMRowGAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxl -IEluYzEaMBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwggGiMA0GCSqGSIb3DQEB -AQUAA4IBjwAwggGKAoIBgQCSoTKIyxHxymN/xOHHcnwIdUxB9BtrbNXiGeh9AxW+ -7k5ieWBi5GW9yARf7TWh5UgaZwFj1K8BC4/V42UCIQZPt26iw/+3cE3tZQRHP96H -mfVDcr04ZXDLvjn+I6sWzgjzFgoij918ueoZOOYj3TYth7poAKwj8+Krmy16RH0s -6Mvp/dzsakcOBtFwtVtvA33NKjfofs8b009e8KNWw/x5GhWaAi7s84ybCIhibNZY -i70iC3iPH/T5KC6kyOfup4oYmmHyqAtA6ommgwCveXPLkXl4Z2b6gYsd7lu3tB9c -j/8wCoWR7VEvEKMTKt9lHxx4LLwLNbt5GNvE+YP1sQpol/QEagTajt/Oi325URzS -At/NXqOBMO7P/x2yLOP7MqWXX1658PUQ7kf8D5bFXVUFIka9pY3BP6gLgIgyo65V -dc/9kiKiZUi4pXtl+J+TUXH6akA68qJJrUQ57Ok4cyln/LATpi2zpoIWQDcbmLDL -Y1C2mEe6y0AOssjCtZ5DSN0CAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq -hkiG9w0BAQwFAAOCAYEAMa8ar5Spzn7y1um+UF7eVHKWULN4HSwFQGSBtnxdlImi -JumYegN5ly7rvYFV23Pc+hIaMUSvaENO3y22HA6A8WYtNPnHBc5Hzbt0ApOpyToJ -wGRjtRJ7QrG4xXW0pANegpTyjiyqa0hnfv5PJKU84Dua0vBOCqJTIc6PGpPj4D+R -JsmsMzeGiyNMbWHTPzCDQnI5rIyskK09g6/Fpz+d/e70R+ivmNoXKS3d+uuprOh+ -WhY6R1g1TeF1Y+xhO5EO/RmT2ZY2S80N0XRQqZFBSLObq/YxoTcTem9aIZfMLYSs -v+0muNPtZ00jHfDezPpSkK2l00CAEwHyulDA4Jm26IT8+Z4xklPsJIsBMiLZpNwA -FoxUnwrkN5pn+dg98BIrVYTKBTbiGcNbPXtdLUHyQBxkjqap6TSaoxQ+tecG1eFE -DzkyEHHMMr1yC51QOdcTFEBVGiXmRL7s/4aZxYRa/bCeGGiIMNqh9New3qdR8zGN -70aiOffFfzhh3fQIdLvm ------END CERTIFICATE----- diff --git a/Task_1/cert/ca/signing-ca.csr b/Task_1/cert/ca/signing-ca.csr deleted file mode 100644 index d012d2d..0000000 --- a/Task_1/cert/ca/signing-ca.csr +++ /dev/null @@ -1,23 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIID4TCCAkkCAQAwejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixk -ARkWBnNpbXBsZTEaMBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoM -ClNpbXBsZSBJbmMxGjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMIIBojANBgkq -hkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAkqEyiMsR8cpjf8Thx3J8CHVMQfQba2zV -4hnofQMVvu5OYnlgYuRlvcgEX+01oeVIGmcBY9SvAQuP1eNlAiEGT7duosP/t3BN -7WUERz/eh5n1Q3K9OGVwy745/iOrFs4I8xYKIo/dfLnqGTjmI902LYe6aACsI/Pi -q5stekR9LOjL6f3c7GpHDgbRcLVbbwN9zSo36H7PG9NPXvCjVsP8eRoVmgIu7POM -mwiIYmzWWIu9Igt4jx/0+SgupMjn7qeKGJph8qgLQOqJpoMAr3lzy5F5eGdm+oGL -He5bt7QfXI//MAqFke1RLxCjEyrfZR8ceCy8CzW7eRjbxPmD9bEKaJf0BGoE2o7f -zot9uVEc0gLfzV6jgTDuz/8dsizj+zKll19eufD1EO5H/A+WxV1VBSJGvaWNwT+o -C4CIMqOuVXXP/ZIiomVIuKV7Zfifk1Fx+mpAOvKiSa1EOezpOHMpZ/ywE6Yts6aC -FkA3G5iwy2NQtphHustADrLIwrWeQ0jdAgMBAAGgIjAgBgkqhkiG9w0BCQ4xEzAR -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggGBAFRi3cJmsIBdgNlT -ZYZbqvz20aNeHYlQjL8/gTXBRf/0DgRNijFa81kqiwcBpXhkMqSQTxMQLIny8qM/ -z+3m2xTrCFeaS9FYG/EbbyZTBIR+HDCvbDMHJ2l/ByRV7kGv/oVpZzC7McTBiEtO -L1+h0haGeROTVO3/lLn6z6iI9IRAMNWFFojISV6i8djbXCvzAU2M5w3MN3dGXHBq -SYF2Hk2j527mvPDduhEUOeoNXi2dtQeH1s8vHk1I0Inm8RcJmqivf90ys85PL/Rl -OweyooHqLFRprKIoI0gjJ2MlMaz0BMeMmAx7gOAf57kPifluOKl6dHrhlxfCWEOZ -mI87VcsWau2SfzWfajzV035xb9b4n36WaPgNnVXaJ6TdQ0t0ttDz349CvPBH6ONO -Vy1dgPpLG0DO9R700ggEGTQ+jVhnTdDTxDLM5JFahMtykHnbJOEIR2hIEuOnVbPF -QmDUvIL/CGlOHhgbGiAQFY9o/zLDwZF60EXanN4rePXjRRLJuA== ------END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/ca/signing-ca/db/signing-ca.crl.srl b/Task_1/cert/ca/signing-ca/db/signing-ca.crl.srl deleted file mode 100644 index a616ad4..0000000 --- a/Task_1/cert/ca/signing-ca/db/signing-ca.crl.srl +++ /dev/null @@ -1 +0,0 @@ -01 \ No newline at end of file diff --git a/Task_1/cert/ca/signing-ca/db/signing-ca.crt.srl b/Task_1/cert/ca/signing-ca/db/signing-ca.crt.srl deleted file mode 100644 index a616ad4..0000000 --- a/Task_1/cert/ca/signing-ca/db/signing-ca.crt.srl +++ /dev/null @@ -1 +0,0 @@ -01 \ No newline at end of file diff --git a/Task_1/cert/ca/signing-ca/db/signing-ca.db b/Task_1/cert/ca/signing-ca/db/signing-ca.db deleted file mode 100644 index e69de29..0000000 diff --git a/Task_1/cert/ca/signing-ca/db/signing-ca.db.attr b/Task_1/cert/ca/signing-ca/db/signing-ca.db.attr deleted file mode 100644 index e69de29..0000000 diff --git a/Task_1/cert/ca/signing-ca/private/signing-ca.key b/Task_1/cert/ca/signing-ca/private/signing-ca.key deleted file mode 100644 index e6d2660..0000000 --- a/Task_1/cert/ca/signing-ca/private/signing-ca.key +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/Task_1/cert/cert_chain.crt b/Task_1/cert/cert_chain.crt deleted file mode 100644 index 2f8be64..0000000 --- a/Task_1/cert/cert_chain.crt +++ /dev/null @@ -1,54 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEhjCCAu6gAwIBAgIRANUyVSicTEI8mvC0oI+yDUswDQYJKoZIhvcNAQEMBQAw -dDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEX -MBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMxFzAV -BgNVBAsMDlNpbXBsZSBSb290IENBMB4XDTI0MDkxNTAwNDkzNFoXDTI1MDkxNTAw -NDkzNFowdDETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNp -bXBsZTEXMBUGA1UEAwwOU2ltcGxlIFJvb3QgQ0ExEzARBgNVBAoMClNpbXBsZSBJ -bmMxFzAVBgNVBAsMDlNpbXBsZSBSb290IENBMIIBojANBgkqhkiG9w0BAQEFAAOC -AY8AMIIBigKCAYEA3pjjbfACLCqi5GHZ/RqxZQIg08B3kBWdowCbSmkDtiCgLZx4 -Ed3JNhLNneHYf5hkseWfzIluNsEO5hMouZ4/lTxc+rkx+ArpHl8s8PuSkxg7GUQj -g1em2kdn+PKCSOAPAwXRV2gp5G0lYPdmNUNlt7ub/n+KZ06P7kTlZ3Yrh5+EC1Hb -0K7lO2oY+FO6B2/Pwod4vWufdJUL7tRrjYSoV3nBYjUmtIbxEbgwnpzElge8eb0B -6m05h2Nmewox4ZItfeDISUrk9N4Ux5cPVmcPXNkwHMQvKBn2OIgJsaOWlDcE5JiW -f7OG0AzZx4hFzkTyyYUTfzwyEOiO3G8GtZscKBJe0xBh2ggISKjTVhLsTBsiTz3i -XR8QmK/NvXM6BElwKXbzQqYFMKZUNHRnw3AUAYce3D+s8u7jGTBq3fhKgggy7K5L -iypKDRhQDg+gchznPoZeEJjgm2qiT+hn32q9USgHIvwswfudajHkVNCM7oGMz8H/ -GdoIXcIWNMtKV4gvAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN -AQEMBQADggGBACPuW17XRhwJC6Grdygb4sHxK7HqxWv6SzjQTK1aaEUtYXF76J4J -BNrvFNm425LMVPyiY2gInAYsys+H5iASlzWikigGrrDT4kQOT7GTd9+49C8LW5tA -qWwKM3eWBAk4waxn/OYWOwqSXFEVqEkWv4jE1rcRGX+J5FhyZfZ7NvFmmqaqoAH8 -+Lp3IM5cVTl19DPGBwT3fJ1V1TP9dV+RkziXSLEy8w3XdTrghBL3ZdXoIpPhcbJR -dk9Jh7hESrT7a2PVZr/w5a7V+g6Yab+1NXQ0jAz9e8cM1kPP3HYpIhrvUetJm1eJ -D0Um1m6zItOM/AFbr7JMszcUHIZ2qSw3Chl2T6ZTHm0wL/UbtZWhBll42WJ/Tqnx -JZLllFpTmckg+qYJ0tA4qnGMcW0/XJUTOOj7ECsQRHRJc0gEQnTbwYlBY+/k67dU -lqdsIADt4Ee7a4EOuH6QGk2FSTGZitQs9v+dDBTT3Io5ZQIw9B+TLIjXrUheAY20 -epcLyiWOb2qOKA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEizCCAvOgAwIBAgIQTCSYz6JWTOKcSzpyyILwBjANBgkqhkiG9w0BAQwFADB0 -MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRcw -FQYDVQQDDA5TaW1wbGUgUm9vdCBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEXMBUG -A1UECwwOU2ltcGxlIFJvb3QgQ0EwHhcNMjQwOTE1MDA0OTM0WhcNMjUwOTE1MDA0 -OTM0WjB6MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2lt -cGxlMRowGAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxl -IEluYzEaMBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwggGiMA0GCSqGSIb3DQEB -AQUAA4IBjwAwggGKAoIBgQCSoTKIyxHxymN/xOHHcnwIdUxB9BtrbNXiGeh9AxW+ -7k5ieWBi5GW9yARf7TWh5UgaZwFj1K8BC4/V42UCIQZPt26iw/+3cE3tZQRHP96H -mfVDcr04ZXDLvjn+I6sWzgjzFgoij918ueoZOOYj3TYth7poAKwj8+Krmy16RH0s -6Mvp/dzsakcOBtFwtVtvA33NKjfofs8b009e8KNWw/x5GhWaAi7s84ybCIhibNZY -i70iC3iPH/T5KC6kyOfup4oYmmHyqAtA6ommgwCveXPLkXl4Z2b6gYsd7lu3tB9c -j/8wCoWR7VEvEKMTKt9lHxx4LLwLNbt5GNvE+YP1sQpol/QEagTajt/Oi325URzS -At/NXqOBMO7P/x2yLOP7MqWXX1658PUQ7kf8D5bFXVUFIka9pY3BP6gLgIgyo65V -dc/9kiKiZUi4pXtl+J+TUXH6akA68qJJrUQ57Ok4cyln/LATpi2zpoIWQDcbmLDL -Y1C2mEe6y0AOssjCtZ5DSN0CAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq -hkiG9w0BAQwFAAOCAYEAMa8ar5Spzn7y1um+UF7eVHKWULN4HSwFQGSBtnxdlImi -JumYegN5ly7rvYFV23Pc+hIaMUSvaENO3y22HA6A8WYtNPnHBc5Hzbt0ApOpyToJ -wGRjtRJ7QrG4xXW0pANegpTyjiyqa0hnfv5PJKU84Dua0vBOCqJTIc6PGpPj4D+R -JsmsMzeGiyNMbWHTPzCDQnI5rIyskK09g6/Fpz+d/e70R+ivmNoXKS3d+uuprOh+ -WhY6R1g1TeF1Y+xhO5EO/RmT2ZY2S80N0XRQqZFBSLObq/YxoTcTem9aIZfMLYSs -v+0muNPtZ00jHfDezPpSkK2l00CAEwHyulDA4Jm26IT8+Z4xklPsJIsBMiLZpNwA -FoxUnwrkN5pn+dg98BIrVYTKBTbiGcNbPXtdLUHyQBxkjqap6TSaoxQ+tecG1eFE -DzkyEHHMMr1yC51QOdcTFEBVGiXmRL7s/4aZxYRa/bCeGGiIMNqh9New3qdR8zGN -70aiOffFfzhh3fQIdLvm ------END CERTIFICATE----- diff --git a/Task_1/cert/client/col_one.crt b/Task_1/cert/client/col_one.crt deleted file mode 100644 index 7e291b1..0000000 --- a/Task_1/cert/client/col_one.crt +++ /dev/null @@ -1,25 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEMjCCApqgAwIBAgIQNfEzpo1jSS+9JWBVZESH/DANBgkqhkiG9w0BAQwFADB6 -MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRow -GAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEa -MBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwHhcNMjQwOTE1MDA0OTM1WhcNMjUw -OTE1MDA0OTM1WjAOMQwwCgYDVQQDDANvbmUwggGiMA0GCSqGSIb3DQEBAQUAA4IB -jwAwggGKAoIBgQDSUqi9Av++Vss8J51EtHlJc9eO+WbenkahPvhC9f5fEqpO+Ij8 -q18em77xIJ9b+b/vpnSibtzgCJOjoS7340jpLFURtJvVTIDr2ROeJ5jn99DROUws -qN1GkGINtz4y8DeDdM1NyO03wq2Ao+Mu60f/40Qz18MR6nY1wqY3GPQwb2LwkIrg -kLim5zZhQ34x7Tj2IY0pr6juucVtyNxKcoFFEM40ZxUBICmcuvpTt0ZYuWShtuZS -Fb2FVB1lTEErRxPLcjvYjGRhNqfUhL0yc5eC8UrWg/qdS42wRQ0IdOrWTHw9XrG/ -MUCQ0JI4cHc8TV6w+G66V6+O+/DKzaLCLqqSQDWVtzOwYocx8CPUvRK5oM/n4Fon -H7EotU15KzcpVk3O+rSy7FqpvgSoUZclx6ePAIlkBX6Qwdio7RGAQ7Ke/ufK5baU -eEnzjT3b6iLn8EucOrwVjdd/UtDg69E0DqHeueDOj0mL4RI4+mkrXVrqBMZN280k -a1js4urJYe8ncw8CAwEAAaMgMB4wDAYDVR0TAQH/BAIwADAOBgNVHREEBzAFggNv -bmUwDQYJKoZIhvcNAQEMBQADggGBABtn5qGLjZFj6fYUYmo1EIA1bteXLnEBsMLj -f4ZeIrqoXUHlRWtLHwpw/1329aopnsuKUK5ywGu3aTzOkm3FTYBVTP03B/LpMKC6 -1M6ArxdpT+nGUL7U1nzBOY+dZApsLe9+5ztASoAJlpNmLbC1jhBE0vqsk3U29iJa -3iDTfBTO5XCKEYa8N9sOPsJR20/09SgRvux0qisPKTwRhKMwy9iuJe3LCCeuG5PU -FLURQKg2K+4o/xxPFIQ3nFaLc/KYE6vkKe4FBBd4s7DKDmqgCptC7y/EOeSBzMpt -Z2o9mvjD3tnhY+DC0KsleWofNPz6/LhSla8q4wA3hrG97YDlW9JyBjOD/GPlwfum -KZDdW9RiFCGwMKk2nfqwdfYPyMYUokC/e2PNZi6gjSuHKQA/f/N7AV+o29MkmITh -d4zIFKAS709FRQckPGRBi9TPMxy4IG03lA8og6/uNPGlfnBZqbWlZhLoWciy1bq+ -i2031OWrOLPqdalSFup5EGoWFd2k/Q== ------END CERTIFICATE----- diff --git a/Task_1/cert/client/col_one.key b/Task_1/cert/client/col_one.key deleted file mode 100644 index df60307..0000000 --- a/Task_1/cert/client/col_one.key +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/Task_1/cert/client/col_two.crt b/Task_1/cert/client/col_two.crt deleted file mode 100644 index 6747564..0000000 --- a/Task_1/cert/client/col_two.crt +++ /dev/null @@ -1,25 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEMjCCApqgAwIBAgIQQdOTMXWlTbqBnHEYVoMYDDANBgkqhkiG9w0BAQwFADB6 -MRMwEQYKCZImiZPyLGQBGRYDb3JnMRYwFAYKCZImiZPyLGQBGRYGc2ltcGxlMRow -GAYDVQQDDBFTaW1wbGUgU2lnbmluZyBDQTETMBEGA1UECgwKU2ltcGxlIEluYzEa -MBgGA1UECwwRU2ltcGxlIFNpZ25pbmcgQ0EwHhcNMjQwOTE1MDA0OTM1WhcNMjUw -OTE1MDA0OTM1WjAOMQwwCgYDVQQDDAN0d28wggGiMA0GCSqGSIb3DQEBAQUAA4IB -jwAwggGKAoIBgQChMcjEgd5fJc/Zneg7gO5DJLjQJ3QzpRRsdtjuFUO8z78jSaX5 -QpzPDbeCeZLASsa8G4NqBVeoT51zOUi2Wysf7hmZYKeLtN1Lz9RUbkuEs4FsKHxm -st44Pz18NLq0vXpf1NYB/0Lbzx3oVulZOrZdIBuAydq7620mXBlt8Aao5pubUeLn -95wOUXS5r8Rlyu61f2gAp4EemGPV7yAjTuaB3zqGkAK6ALrNj9cWUd/IMFGG8NV5 -Zkxmq6+2Ei88GVBlQTaej2kr7ttNiOWuGqJF5YL961GwDVZa026m5mPvVrFE/4xN -gBeIaWsaSYOCmxZNhgnRCcM+w7CKtBY44uB/cwO55rjxZhq1Kn8PpVegXiky3cra -hnoM9B1ZzOBIK1hi/1kH8BK05BT8ZyGYcKBt6CHSDm2G/08D9ZvKjL1e6eCNmHw9 -uzuflWtyd7/OL12aai09CZyF0A46JL+kfc61FIwYx8asornVXOX9ElUOo3yiofHG -kxnCwXHeBFmoyzUCAwEAAaMgMB4wDAYDVR0TAQH/BAIwADAOBgNVHREEBzAFggN0 -d28wDQYJKoZIhvcNAQEMBQADggGBAGDZBuUc8qasKU2XD2zSjhOEY7rcpF30lrMj -v3CoLyBNoTpxQAWTqNWSGqMXKS/YwI9q8A59+xVXUB9t4kn8G3OMdSm5m1m5JrNq -DmZtzdPnUUjFQjwqSEleCfC49M5tNB7AJKF2grgYc0Sgr76DLP6RDW7tGMV+STe3 -WHHTJfL1uz3RlbeaVOHLgJdcSfmNjcEkHNDTWQFA8CZGCpEndlKPnTHR38EeSD1z -lGE5mPuW0FyPAR6QXlQGAa0y1AXAKvfQI1FQfss3leGA0uHejqgp7h857LaIsqIh -u6Hxt2HzB/JwWcDXYLQwitjCxyBYSLL+RDz63eFCibEMBDxpDjjEGGpoFpgQr4rC -4vxlWOwDPgpUEWESu+eIskivZ+eJPwUfki0SAPl3uqxcQ698cZXtYmxlfIH1xya7 -7zelyqPT7M9EXdL9EZgkkBQtq0EkkYcWtB8+VO+gsyVAOW9vlfaypqD4HoqGaOJr -Nwbh+mNDbLxzVawAccqH1GQAWBAglw== ------END CERTIFICATE----- diff --git a/Task_1/cert/client/col_two.key b/Task_1/cert/client/col_two.key deleted file mode 100644 index 07d00cb..0000000 --- a/Task_1/cert/client/col_two.key +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/Task_1/cert/col_one.csr b/Task_1/cert/col_one.csr deleted file mode 100644 index 7d57803..0000000 --- a/Task_1/cert/col_one.csr +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIDqjCCAhICAQAwDjEMMAoGA1UEAwwDb25lMIIBojANBgkqhkiG9w0BAQEFAAOC -AY8AMIIBigKCAYEA0lKovQL/vlbLPCedRLR5SXPXjvlm3p5GoT74QvX+XxKqTviI -/KtfHpu+8SCfW/m/76Z0om7c4AiTo6Eu9+NI6SxVEbSb1UyA69kTnieY5/fQ0TlM -LKjdRpBiDbc+MvA3g3TNTcjtN8KtgKPjLutH/+NEM9fDEep2NcKmNxj0MG9i8JCK -4JC4puc2YUN+Me049iGNKa+o7rnFbcjcSnKBRRDONGcVASApnLr6U7dGWLlkobbm -UhW9hVQdZUxBK0cTy3I72IxkYTan1IS9MnOXgvFK1oP6nUuNsEUNCHTq1kx8PV6x -vzFAkNCSOHB3PE1esPhuulevjvvwys2iwi6qkkA1lbczsGKHMfAj1L0SuaDP5+Ba -Jx+xKLVNeSs3KVZNzvq0suxaqb4EqFGXJcenjwCJZAV+kMHYqO0RgEOynv7nyuW2 -lHhJ84092+oi5/BLnDq8FY3Xf1LQ4OvRNA6h3rngzo9Ji+ESOPppK11a6gTGTdvN -JGtY7OLqyWHvJ3MPAgMBAAGgVzBVBgkqhkiG9w0BCQ4xSDBGMAwGA1UdEwEB/wQC -MAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDgYDVR0PAQH/BAQDAgWgMA4GA1Ud -EQQHMAWCA29uZTANBgkqhkiG9w0BAQwFAAOCAYEAppWK64B29f2QESS3FpyHYMoL -+2aTXx0nHe5AXhIr4noZVUzdNj4qJ8l69gxbdOn7igtxQjRUKsKtfFJQnY+kHLYY -h8Ly6W1T0Zu14Tem7earYiohHPpxVHMm8uHIfkxcoxDpFNEF3qByiD4LnrJwM56f -IAbKQFN3C2Q2k0n4MdM/2IJbBqXMBF98ma26tZvOhg/xG9DVPsfOGfr54NHnwRjf -nkk1eSx1tc7VKVP6ady3gxz22gMt92HL6jGYDQMryo97t/icNDl2wUklBHTko2A3 -bP8r+Ml0+c84CcVhugfficI88oewD0s4dn3hKyFmp4Z+PxRXfeYvdS1hEwlMmQ0v -TkDme36eByTnUQZGrubWpt//CeerncCSKIIE04y0pqRv0CBuR7t8ni2/ksUOy+a6 -p8J6KTRgycDHcO4vi/oiSm4D10vOQjjRhgMmClZUVgWTRAqfX22+Qn7YnNtkIUGz -zqkWixfGfpG/oMwRzE8/SnqzaD7BxbYi8/MQOa9f ------END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/col_two.csr b/Task_1/cert/col_two.csr deleted file mode 100644 index 99b8569..0000000 --- a/Task_1/cert/col_two.csr +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIDqjCCAhICAQAwDjEMMAoGA1UEAwwDdHdvMIIBojANBgkqhkiG9w0BAQEFAAOC -AY8AMIIBigKCAYEAoTHIxIHeXyXP2Z3oO4DuQyS40Cd0M6UUbHbY7hVDvM+/I0ml -+UKczw23gnmSwErGvBuDagVXqE+dczlItlsrH+4ZmWCni7TdS8/UVG5LhLOBbCh8 -ZrLeOD89fDS6tL16X9TWAf9C288d6FbpWTq2XSAbgMnau+ttJlwZbfAGqOabm1Hi -5/ecDlF0ua/EZcrutX9oAKeBHphj1e8gI07mgd86hpACugC6zY/XFlHfyDBRhvDV -eWZMZquvthIvPBlQZUE2no9pK+7bTYjlrhqiReWC/etRsA1WWtNupuZj71axRP+M -TYAXiGlrGkmDgpsWTYYJ0QnDPsOwirQWOOLgf3MDuea48WYatSp/D6VXoF4pMt3K -2oZ6DPQdWczgSCtYYv9ZB/AStOQU/GchmHCgbegh0g5thv9PA/Wbyoy9XungjZh8 -Pbs7n5Vrcne/zi9dmmotPQmchdAOOiS/pH3OtRSMGMfGrKK51Vzl/RJVDqN8oqHx -xpMZwsFx3gRZqMs1AgMBAAGgVzBVBgkqhkiG9w0BCQ4xSDBGMAwGA1UdEwEB/wQC -MAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDgYDVR0PAQH/BAQDAgWgMA4GA1Ud -EQQHMAWCA3R3bzANBgkqhkiG9w0BAQwFAAOCAYEAjHRf/xkwhGqgiDA9RT1DVsUW -oL2hclJOivt2tLry3e1y28Wk+Oa+87zPPZTvtpnUGnZzThs/2L/PgR8tk/aSW9oY -Nd9VH1G3avyDeYvjh5r6pyDBvPN0AapSNjtt7ntHwxnY7HFWUlUu6kGZs4ePn25X -fxUsnlv2J6R6bOusWMUqQbUvVRvt+ReinBF3tyLcmyAXwOHp/fwnooFxw6T0E81v -CcP5gWCu9F9Q7wYyN34rp6nCmAxMck1GSJp2P+8n78/YSsrfBhpUNMVDZ5GBoXxo -3pm53aV4QDMp8XJYSlDtuTqSzsa1Z8ndGY6DRNBvhhEdtAmahR4GErqxKoD2X94i -CEf1vG7dNoxCHQ8VYahVowGgPqRAsHnk8hk1UNPpykIrsrK+vqPf7A4itFK1kCA7 -oBg+KNMZYYTPSLaGie8WSoFYjuNK+WV6VRmXCLd467CocbjYZdZnJ/pbFXunftSC -6OZ4ZBQIRFpry5FCWNBfvq2Z/BXx5M5mu4xWbc+T ------END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt deleted file mode 100644 index d154e76..0000000 --- a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.crt +++ /dev/null @@ -1,26 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEXTCCAsWgAwIBAgIRALXHnF7kbEe5vRw7w+Q9pmUwDQYJKoZIhvcNAQEMBQAw -ejETMBEGCgmSJomT8ixkARkWA29yZzEWMBQGCgmSJomT8ixkARkWBnNpbXBsZTEa -MBgGA1UEAwwRU2ltcGxlIFNpZ25pbmcgQ0ExEzARBgNVBAoMClNpbXBsZSBJbmMx -GjAYBgNVBAsMEVNpbXBsZSBTaWduaW5nIENBMB4XDTI0MDkxNTAwNDkzNVoXDTI1 -MDkxNTAwNDkzNVowIzEhMB8GA1UEAwwYaW4tb3RhLTIzMjM0Ny5hZHMuaXUuZWR1 -MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAx6Nu/uIYD5BH2BTwdL7k -JSxzNoMtR6hRfOVA83xZk8K42+pJFrvRV0mj8qWefl8Hcqd+Lacth9ZrenrUfA3z -SW/GnNtsDDfVdOHwJQ72IjjGArOS45++ndx85NO+a6dBRx87FPsfggBMUmz59+93 -ywK7oWSvBTwSHGcXwvvFRy3xwpnSXDs5C8yW3eDxAtPlz2vuCZFle+Ekus/5TGHG -+8HTRxAYSaWOaxeOM8xUa/IWrydSHN7RyIlFXbsWIx1lWrqu69aU31uYckHkLCaA -k2vs8SAhixR+9mysnk4hRstRoyZObIHHD9TbOvTdYUMkFh1F9jEKdSk5iZ6EaqIC -2KcpjAbFriHuZMFKW0jnT+RrJYjg+sNv2p9C//fAexciGknGfYfD54LLUWkP01OI -FYq3v+XDkJL8nxl4smyFcN0KNXsq3NH6uU/nD+S6ck5DnWCQad1TmWUndQISazbe -ZXna3hM7ipfgaqTr4+zETrLDUZXRBHsxXCwIwSN3uHAXAgMBAAGjNTAzMAwGA1Ud -EwEB/wQCMAAwIwYDVR0RBBwwGoIYaW4tb3RhLTIzMjM0Ny5hZHMuaXUuZWR1MA0G -CSqGSIb3DQEBDAUAA4IBgQAkraehk5D79BIR0spjrD92A6QOZnXimvJqlucJ+Rje -S7qsAaDkgYNK7G0GtWsDpOVnlTgnvpu2i0mMUZSdTBbYGPVEOzJXGUis8oQMVF5X -rVNhbU2NBt8eZFu6Tzo4iUT/kWQkOdGHqzLqNc7xhbi2T6Lc/nP8OLbKggPcIsj2 -PfWY6YHmez5j7+yEwcrEuIlPBOXT9piK8Bu1e8r8zG2JgQuvJPvkxPkWmlUVbfs/ -MuMNys40HFNojXzy6CNthZdQWrB2lfbXzftDPgZq5dG+zlkO3CnGtXU3dKtnUiUe -cEZgoYg6oDvEPu1SpbO0o3FJiUjih4OPnLNYqM0IGsIDbjvZmXfAXLGmKa3/1wgk -aYiOg6D2fA+5OPVGwc/dghHtpItjvywo8Go1Ru1A5n+UdqAqaieW9pRxJ487dkTT -B7DoKH9Z/l4ssl1Vdaxab5+OUN5UyvrYN8Ef5Tc8lrdDQ0xHMM3DHopnykjpS9sL -pEt6HajrrXP8+FZ7yrPuzRM= ------END CERTIFICATE----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr deleted file mode 100644 index d7a90ad..0000000 --- a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.csr +++ /dev/null @@ -1,23 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIID1DCCAjwCAQAwIzEhMB8GA1UEAwwYaW4tb3RhLTIzMjM0Ny5hZHMuaXUuZWR1 -MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAx6Nu/uIYD5BH2BTwdL7k -JSxzNoMtR6hRfOVA83xZk8K42+pJFrvRV0mj8qWefl8Hcqd+Lacth9ZrenrUfA3z -SW/GnNtsDDfVdOHwJQ72IjjGArOS45++ndx85NO+a6dBRx87FPsfggBMUmz59+93 -ywK7oWSvBTwSHGcXwvvFRy3xwpnSXDs5C8yW3eDxAtPlz2vuCZFle+Ekus/5TGHG -+8HTRxAYSaWOaxeOM8xUa/IWrydSHN7RyIlFXbsWIx1lWrqu69aU31uYckHkLCaA -k2vs8SAhixR+9mysnk4hRstRoyZObIHHD9TbOvTdYUMkFh1F9jEKdSk5iZ6EaqIC -2KcpjAbFriHuZMFKW0jnT+RrJYjg+sNv2p9C//fAexciGknGfYfD54LLUWkP01OI -FYq3v+XDkJL8nxl4smyFcN0KNXsq3NH6uU/nD+S6ck5DnWCQad1TmWUndQISazbe -ZXna3hM7ipfgaqTr4+zETrLDUZXRBHsxXCwIwSN3uHAXAgMBAAGgbDBqBgkqhkiG -9w0BCQ4xXTBbMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwEw -DgYDVR0PAQH/BAQDAgWgMCMGA1UdEQQcMBqCGGluLW90YS0yMzIzNDcuYWRzLml1 -LmVkdTANBgkqhkiG9w0BAQwFAAOCAYEAMtIS4vU4AFCbqNLdBeXTtNGDzNg581tM -rq0NfPNa7dhfFDJ0r+ci7GJFuDui6kmEYi3fpea67Ba7xz0mwQB2TVd4/qDhHSsB -EmIyeVLDli7h0bkenUNXtchGiYIHpn+2xgJWKiRfHEBTQ5uYAvCRt25VQm4uOi3H -xbAe1w3wkQa/Wj8D3Bw5OHUTb85uoo8g2MQNKpmny2Cmf4O6OrcWUglgbT6wFhnV -uiWZ8O9JjrxCcTUqsCe+jGiGLa+tJGKJ5U1gDnuZphZftDAtqn5cstoC0wvWX3Ij -y9rscrFRnZ/L6fAPVjYY2p73yyavDTPbU7G7GwGCZ5khzFkYEPL358WFgACK3OOW -DuVgnumyRU8xRTjUFi8V5hADh70i6NnxzTos/36wGgd5uQkx4wSLy+jExJfL1CHr -wjnpr0te42kOtBptXbNOrV282Gc7hup/wRPhG6iaV1It780TlOJ7mAy0NR13R5hQ -K3zb0Km8kzrBZgDHsEXM/pnBD52P4CqY ------END CERTIFICATE REQUEST----- diff --git a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key b/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key deleted file mode 100644 index c667675..0000000 --- a/Task_1/cert/server/agg_in-ota-232347.ads.iu.edu.key +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/Task_1/fets_challenge/experiment.py b/Task_1/fets_challenge/experiment.py index bbb91f9..4b9c5e7 100644 --- a/Task_1/fets_challenge/experiment.py +++ b/Task_1/fets_challenge/experiment.py @@ -4,6 +4,7 @@ # Patrick Foley (Intel), Micah Sheller (Intel) import os +from sys import path, exit import warnings from collections import namedtuple from copy import copy @@ -258,8 +259,6 @@ def run_challenge_experiment(aggregation_function, fx.init('fets_challenge_workspace') - from sys import path, exit - file = Path(__file__).resolve() root = file.parent.resolve() # interface root, containing command modules work = Path.cwd().resolve() @@ -365,15 +364,15 @@ def run_challenge_experiment(aggregation_function, logger.info('Starting experiment') total_simulated_time = 0 - best_dice = -1.0 - best_dice_over_time_auc = 0 + best_score = -1.0 + best_score_over_time_auc = 0 # results dataframe data experiment_results = { 'round':[], 'time': [], 'convergence_score': [], - 'round_dice': [], + 'round_score': [], # 'dice_label_0': [], # 'dice_label_1': [], # 'dice_label_2': [], @@ -402,7 +401,7 @@ def run_challenge_experiment(aggregation_function, checkpoint_folder = restore_from_checkpoint_folder [loaded_collaborator_names, starting_round_num, collaborator_time_stats, - total_simulated_time, best_dice, best_dice_over_time_auc, + total_simulated_time, best_score, best_score_over_time_auc, collaborators_chosen_each_round, collaborator_times_per_round, experiment_results, summary, agg_tensor_db] = state @@ -440,6 +439,7 @@ def run_challenge_experiment(aggregation_function, collaborator_times_per_round) learning_rate, epochs_per_round = hparams + # learning_rate, epochs_per_round, _ = hparams #IrfanKhan if (epochs_per_round is None): logger.warning('Hyper-parameter function warning: function returned None for "epochs_per_round". Setting "epochs_per_round" to 1') @@ -502,30 +502,53 @@ def run_challenge_experiment(aggregation_function, # get the performace validation scores for the round - round_dice = get_metric('valid_dice', round_num, aggregator.tensor_db) - # dice_label_0 = get_metric('valid_dice_per_label_0', round_num, aggregator.tensor_db) - # dice_label_1 = get_metric('valid_dice_per_label_1', round_num, aggregator.tensor_db) - # dice_label_2 = get_metric('valid_dice_per_label_2', round_num, aggregator.tensor_db) - # dice_label_4 = get_metric('valid_dice_per_label_4', round_num, aggregator.tensor_db) - # if include_validation_with_hausdorff: - # hausdorff95_label_0 = get_metric('valid_hd95_per_label_0', round_num, aggregator.tensor_db) - # hausdorff95_label_1 = get_metric('valid_hd95_per_label_1', round_num, aggregator.tensor_db) - # hausdorff95_label_2 = get_metric('valid_hd95_per_label_2', round_num, aggregator.tensor_db) - # hausdorff95_label_4 = get_metric('valid_hd95_per_label_4', round_num, aggregator.tensor_db) - - # update best score - if best_dice < round_dice: - best_dice = round_dice - # Set the weights for the final model - if round_num == 0: - # here the initial model was validated (temp model does not exist) - logger.info(f'Skipping best model saving to disk as it is a random initialization.') - elif not os.path.exists(f'checkpoint/{checkpoint_folder}/temp_model.pkl'): - raise ValueError(f'Expected temporary model at: checkpoint/{checkpoint_folder}/temp_model.pkl to exist but it was not found.') - else: - # here the temp model was the one validated - shutil.copyfile(src=f'checkpoint/{checkpoint_folder}/temp_model.pkl',dst=f'checkpoint/{checkpoint_folder}/best_model.pkl') - logger.info(f'Saved model with best average binary DICE: {best_dice} to ~/.local/workspace/checkpoint/{checkpoint_folder}/best_model.pkl') + if plan.config['task_runner']['settings']['gandlf_config']['problem_type'] == 'segmentation': + round_dice = get_metric('valid_dice', round_num, aggregator.tensor_db) + # dice_label_0 = get_metric('valid_dice_per_label_0', round_num, aggregator.tensor_db) + # dice_label_1 = get_metric('valid_dice_per_label_1', round_num, aggregator.tensor_db) + # dice_label_2 = get_metric('valid_dice_per_label_2', round_num, aggregator.tensor_db) + # dice_label_4 = get_metric('valid_dice_per_label_4', round_num, aggregator.tensor_db) + # if include_validation_with_hausdorff: + # hausdorff95_label_0 = get_metric('valid_hd95_per_label_0', round_num, aggregator.tensor_db) + # hausdorff95_label_1 = get_metric('valid_hd95_per_label_1', round_num, aggregator.tensor_db) + # hausdorff95_label_2 = get_metric('valid_hd95_per_label_2', round_num, aggregator.tensor_db) + # hausdorff95_label_4 = get_metric('valid_hd95_per_label_4', round_num, aggregator.tensor_db) + + # update best score + if best_score < round_dice: + best_score = round_dice + # Set the weights for the final model + if round_num == 0: + # here the initial model was validated (temp model does not exist) + logger.info(f'Skipping best model saving to disk as it is a random initialization.') + elif not os.path.exists(f'checkpoint/{checkpoint_folder}/temp_model.pkl'): + raise ValueError(f'Expected temporary model at: checkpoint/{checkpoint_folder}/temp_model.pkl to exist but it was not found.') + else: + # here the temp model was the one validated + shutil.copyfile(src=f'checkpoint/{checkpoint_folder}/temp_model.pkl',dst=f'checkpoint/{checkpoint_folder}/best_model.pkl') + logger.info(f'Saved model with best average binary DICE: {best_score} to ~/.local/workspace/checkpoint/{checkpoint_folder}/best_model.pkl') + + round_score = round_dice + + if plan.config['task_runner']['settings']['gandlf_config']['problem_type'] == 'classification': + round_f1 = get_metric('valid_f1', round_num, aggregator.tensor_db) + + # update best score + if best_score < round_f1: + best_score = round_f1 + # Set the weights for the final model + if round_num == 0: + # here the initial model was validated (temp model does not exist) + logger.info(f'Skipping best model saving to disk as it is a random initialization.') + elif not os.path.exists(f'checkpoint/{checkpoint_folder}/temp_model.pkl'): + raise ValueError(f'Expected temporary model at: checkpoint/{checkpoint_folder}/temp_model.pkl to exist but it was not found.') + else: + # here the temp model was the one validated + shutil.copyfile(src=f'checkpoint/{checkpoint_folder}/temp_model.pkl', dst=f'checkpoint/{checkpoint_folder}/best_model.pkl') + logger.info(f'Saved model with best average binary F1: {best_score} to ~/.local/workspace/checkpoint/{checkpoint_folder}/best_model.pkl') + + round_score = round_f1 + ## RUN VALIDATION ON INTERMEDIATE CONSENSUS MODEL # set the task_runner data loader @@ -533,11 +556,11 @@ def run_challenge_experiment(aggregation_function, ## CONVERGENCE METRIC COMPUTATION # update the auc score - best_dice_over_time_auc += best_dice * round_time + best_score_over_time_auc += best_score * round_time # project the auc score as remaining time * best dice # this projection assumes that the current best score is carried forward for the entire week - projected_auc = (MAX_SIMULATION_TIME - total_simulated_time) * best_dice + best_dice_over_time_auc + projected_auc = (MAX_SIMULATION_TIME - total_simulated_time) * best_score + best_score_over_time_auc projected_auc /= MAX_SIMULATION_TIME # End of round summary @@ -558,7 +581,7 @@ def run_challenge_experiment(aggregation_function, experiment_results['round'].append(round_num) experiment_results['time'].append(total_simulated_time) experiment_results['convergence_score'].append(projected_auc) - experiment_results['round_dice'].append(round_dice) + experiment_results['round_score'].append(round_score) # experiment_results['dice_label_0'].append(dice_label_0) # experiment_results['dice_label_1'].append(dice_label_1) # experiment_results['dice_label_2'].append(dice_label_2) @@ -576,8 +599,8 @@ def run_challenge_experiment(aggregation_function, save_checkpoint(checkpoint_folder, aggregator, collaborator_names, collaborators, round_num, collaborator_time_stats, - total_simulated_time, best_dice, - best_dice_over_time_auc, + total_simulated_time, best_score, + best_score_over_time_auc, collaborators_chosen_each_round, collaborator_times_per_round, experiment_results, From 417d4f8c5b421856c77fe9cb828f40d594a8beb9 Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Thu, 31 Oct 2024 23:22:38 -0400 Subject: [PATCH 14/22] generate_Preds for classification is functional --- Task_1/fets_challenge/gandlf_csv_adapter.py | 60 +++++++++++++++++---- Task_1/fets_challenge/inference.py | 8 +-- Task_1/generate_predictions.py | 10 ++-- Task_1/utils/inspect_pickled_model.py | 22 ++++++++ 4 files changed, 83 insertions(+), 17 deletions(-) create mode 100644 Task_1/utils/inspect_pickled_model.py diff --git a/Task_1/fets_challenge/gandlf_csv_adapter.py b/Task_1/fets_challenge/gandlf_csv_adapter.py index 39b9cd5..59c60d6 100644 --- a/Task_1/fets_challenge/gandlf_csv_adapter.py +++ b/Task_1/fets_challenge/gandlf_csv_adapter.py @@ -108,6 +108,7 @@ def construct_fedsim_csv(pardir, split_subdirs_path, percent_train, federated_simulation_train_val_csv_path, + problem_type, training_and_validation=True): # read in the csv defining the subdirs per institution @@ -159,15 +160,56 @@ def construct_fedsim_csv(pardir, train_val_headers=train_val_headers, numeric_header_name_to_key=numeric_header_name_to_key) else: - df = construct_validation_dataframe(paths_dict=paths_dict, - val_headers=val_headers, - numeric_header_name_to_key=numeric_header_name_to_key) + if problem_type == "classification": + df = construct_validation_dataframe_classification(paths_dict=paths_dict, + val_headers=val_headers, + numeric_header_name_to_key=numeric_header_name_to_key) + elif problem_type == "segmentation": + df = construct_validation_dataframe_segmentation(paths_dict=paths_dict, + val_headers=val_headers, + numeric_header_name_to_key=numeric_header_name_to_key) return df df.to_csv(federated_simulation_train_val_csv_path, index=False) return list(sorted(df.Partition_ID.unique())) -def construct_validation_dataframe(paths_dict, val_headers, numeric_header_name_to_key): + +def construct_validation_dataframe_classification(paths_dict, val_headers, numeric_header_name_to_key): + # Define a mapping for channel labels + channel_label_mapping = { + 'Channel_0': 0, # t1 + 'Channel_1': 1, # t2 + 'Channel_2': 2, # flair + 'Channel_3': 3 # t1ce + } + + # Initialize list to store rows in the new format + rows = [] + + for inst_name, inst_paths_dict in paths_dict.items(): + for usage in ['train', 'val']: + for key_to_fpath in inst_paths_dict[usage]: + subject_id = key_to_fpath['Subject_ID'] + + # Iterate through each channel to create a separate row for each + for header in val_headers: + if header != 0: # Skip SubjectID, as it's handled separately + channel_key = f"Channel_{header - 1}" # Map header to 'Channel_0', 'Channel_1', etc. + channel_path = key_to_fpath[numeric_header_name_to_key[header]] + value_to_predict = channel_label_mapping[channel_key] + + # Append a row with the final headers format + rows.append({ + 'SubjectID': subject_id, + 'Channel': channel_path, + 'ValueToPredict': value_to_predict + }) + + # Convert the list of rows into a DataFrame + df = pd.DataFrame(rows, dtype=str) + return df + +def construct_validation_dataframe_segmentation(paths_dict, val_headers, numeric_header_name_to_key): # intitialize columns columns = {str(header): [] for header in val_headers} @@ -193,8 +235,6 @@ def construct_validation_dataframe(paths_dict, val_headers, numeric_header_name_ '4': 'Channel_3'}) return df - - def extract_segmentation_csv_partitions(csv_path): df = pd.read_csv(csv_path) df = df.rename(columns={'0': 'SubjectID', '1': 'Channel_0', @@ -270,10 +310,10 @@ def extract_classification_csv_partitions(csv_path): transformed_csv_dict[str(col)]['val'] = pd.DataFrame(val_list) # # Prints for easy debugging - # print(f"\n=== Sample of Partition {col} - Train Data ===") - # transformed_csv_dict[str(col)]['train'].head(10).to_csv(sys.stdout, index=False) + print(f"\n=== Sample of Partition {col} - Train Data ===") + transformed_csv_dict[str(col)]['train'].head(10).to_csv(sys.stdout, index=False) - # print(f"\n=== Sample of Partition {col} - Validation Data ===") - # transformed_csv_dict[str(col)]['val'].head(10).to_csv(sys.stdout, index=False) + print(f"\n=== Sample of Partition {col} - Validation Data ===") + transformed_csv_dict[str(col)]['val'].head(10).to_csv(sys.stdout, index=False) return transformed_csv_dict diff --git a/Task_1/fets_challenge/inference.py b/Task_1/fets_challenge/inference.py index 732fa5c..560bbf6 100644 --- a/Task_1/fets_challenge/inference.py +++ b/Task_1/fets_challenge/inference.py @@ -71,7 +71,7 @@ def get_binarized_and_belief(array, threshold=0.5): return binarized, belief -def generate_validation_csv(data_path, validation_csv_filename, working_dir): +def generate_validation_csv(data_path, validation_csv_filename, working_dir, problem_type): """ Create the validation CSV to be consumed by the FeTSChallengeTaskRunner """ @@ -80,7 +80,8 @@ def generate_validation_csv(data_path, validation_csv_filename, working_dir): validation_csv_path, 0.0, 'placeholder', - training_and_validation=False) + training_and_validation=False, + problem_type=problem_type) os.makedirs(os.path.join(working_dir, 'inference_col'), exist_ok=True) validation_csv_dict.to_csv(os.path.join(working_dir, 'inference_col', 'valid.csv'),index=False) @@ -205,6 +206,7 @@ def model_outputs_to_disc(data_path, validation_csv, output_path, native_model_path, + problem_type, outputtag='', device='cpu'): @@ -219,7 +221,7 @@ def model_outputs_to_disc(data_path, path.append(str(root)) path.insert(0, str(work)) - generate_validation_csv(data_path,validation_csv, working_dir=work) + generate_validation_csv(data_path,validation_csv, working_dir=work, problem_type=problem_type) overrides = { 'task_runner.settings.device': device, diff --git a/Task_1/generate_predictions.py b/Task_1/generate_predictions.py index 872a62a..de7d9b7 100644 --- a/Task_1/generate_predictions.py +++ b/Task_1/generate_predictions.py @@ -12,7 +12,7 @@ from pathlib import Path import os from sys import path -from fets_challenge.gandlf_csv_adapter import construct_fedsim_csv, extract_csv_partitions +# from fets_challenge.gandlf_csv_adapter import construct_fedsim_csv, extract_classification_csv_partitions device='cpu' @@ -21,15 +21,16 @@ # you will need to specify the correct experiment folder and the parent directory for # the data you want to run inference over -checkpoint_folder='experiment_1' +checkpoint_folder='experiment_109' +print(f"inference for {checkpoint_folder}") #data_path = -data_path = '/raid/datasets/FeTS22/MICCAI_FeTS2022_ValidationData' +data_path = '/home/locolinux2/datasets/RSNA_ASNR_MICCAI_BraTS2021_TestingData' # you can keep these the same if you wish best_model_path = os.path.join(home, '.local/workspace/checkpoint', checkpoint_folder, 'best_model.pkl') outputs_path = os.path.join(home, '.local/workspace/checkpoint', checkpoint_folder, 'model_outputs') -validation_csv_filename='validation.csv' +validation_csv_filename='final_test.csv' # Using this best model, we can now produce NIfTI files for model outputs @@ -39,5 +40,6 @@ validation_csv=validation_csv_filename, output_path=outputs_path, native_model_path=best_model_path, + problem_type='classification', outputtag='', device=device) diff --git a/Task_1/utils/inspect_pickled_model.py b/Task_1/utils/inspect_pickled_model.py new file mode 100644 index 0000000..0151014 --- /dev/null +++ b/Task_1/utils/inspect_pickled_model.py @@ -0,0 +1,22 @@ +import pickle + +# Path to the pickle file +pickle_file_path = '/home/locolinux2/.local/workspace/checkpoint/experiment_109/best_model.pkl' + +# Function to load and inspect the pickle file +def load_pickle(file_path): + try: + with open(file_path, 'rb') as f: + model_data = pickle.load(f) + print("Pickle file loaded successfully.") + return model_data + except Exception as e: + print(f"Error loading pickle file: {e}") + return None + +# Load the model +model_data = load_pickle(pickle_file_path) + +# Inspect the model (print relevant information) +if model_data: + print("Model Data: ", model_data) From 1e86c7ee3dfc7191844c8b6a8ac8e07129eeea5e Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Wed, 6 Nov 2024 15:22:39 -0500 Subject: [PATCH 15/22] removed egg-info --- Task_1/fets_challenge.egg-info/PKG-INFO | 115 ------------------ Task_1/fets_challenge.egg-info/SOURCES.txt | 29 ----- .../dependency_links.txt | 1 - Task_1/fets_challenge.egg-info/requires.txt | 3 - Task_1/fets_challenge.egg-info/top_level.txt | 2 - 5 files changed, 150 deletions(-) delete mode 100644 Task_1/fets_challenge.egg-info/PKG-INFO delete mode 100644 Task_1/fets_challenge.egg-info/SOURCES.txt delete mode 100644 Task_1/fets_challenge.egg-info/dependency_links.txt delete mode 100644 Task_1/fets_challenge.egg-info/requires.txt delete mode 100644 Task_1/fets_challenge.egg-info/top_level.txt diff --git a/Task_1/fets_challenge.egg-info/PKG-INFO b/Task_1/fets_challenge.egg-info/PKG-INFO deleted file mode 100644 index 0566eb6..0000000 --- a/Task_1/fets_challenge.egg-info/PKG-INFO +++ /dev/null @@ -1,115 +0,0 @@ -Metadata-Version: 2.1 -Name: fets_challenge -Version: 2.0 -Summary: FeTS Challenge Part 1 -Home-page: https://github.com/FETS-AI/Challenge -Author: Sarthak Pati and Ujjwal Baid and Maximilian Zenk and Brandon Edwards and Micah Sheller and G. Anthony Reina and Patrick Foley and Alexey Gruzdev and Jason Martin and Shadi Albarqouni and Yong Chen and Russell Taki Shinohara and Annika Reinke and David Zimmerer and John B. Freymann and Justin S. Kirby and Christos Davatzikos and Rivka R. Colen and Aikaterini Kotrotsou and Daniel Marcus and Mikhail Milchenko and Arash Nazer and Hassan Fathallah-Shaykh and Roland Wiest Andras Jakab and Marc-Andre Weber and Abhishek Mahajan and Lena Maier-Hein and Jens Kleesiek and Bjoern Menze and Klaus Maier-Hein and Spyridon Bakas -Classifier: Environment :: Console -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence -Classifier: Topic :: Scientific/Engineering :: Image Recognition -Classifier: License :: OSI Approved :: FETS UI License -Classifier: Programming Language :: Python :: 3 -Requires-Python: >=3.9 -Description-Content-Type: text/markdown -License-File: LICENSE -Requires-Dist: openfl@ git+https://github.com/securefederatedai/openfl.git@kta-intel/fets-2024-patch-1 -Requires-Dist: GANDLF@ git+https://github.com/CBICA/GaNDLF.git@0.1.0 -Requires-Dist: fets@ git+https://github.com/FETS-AI/Algorithms.git@fets_challenge - -# FeTS 2024+ Challenge Task 1 -Task 1 (**"Federated Training"**) aims at effective weight aggregation methods for the creation of a consensus model given a pre-defined segmentation algorithm for training, while also (optionally) accounting for network outages. - -Please ask any additional questions in our discussion pages on our github site and we will try to update this README.md as we identify confusions/gaps in our explanations and instructions. - -## Getting started - -### System requirements - -1. [Git](https://git-scm.com/downloads) -2. [Git LFS](https://github.com/git-lfs/git-lfs#downloading) -2. Python with virtual environment management system: we recommend using [Anaconda](https://www.anaconda.com/products/individual). -3. **Windows- Only**: Pickle5 requires Microsoft C++ 14.0 or greater from the [C++ build tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/). -> * _Note: if you run into ```UnicodeDecodeError``` during installation, trying pinning ```openfl @ git+https://github.com/intel/openfl.git@v1.4``` in [setup.py](https://github.com/FeTS-AI/Challenge/blob/main/Task_1/setup.py#L31)_ -4. Use CUDA 11 for your installation as CUDA 12 is not compatible with this codebase. - -### Instructions --- IMPORTANT - -1. Register for the FeTS 2022 Challenge [here](https://www.synapse.org/#!Synapse:syn28546456/wiki/617093) and submit a data request. -2. ```git clone https://github.com/FETS-AI/Challenge.git``` -3. ```cd Challenge/Task_1``` -4. ```git lfs pull``` -5. Create virtual environment (python 3.9): using Anaconda, a new environment can be created and activated using the following commands: - ```sh - ## create venv in specific path - conda create -p ./venv python=3.9 -y - conda activate ./venv - ``` -6. ```pip install --upgrade pip``` -7. Install Pytorch (2.3.1) for your system: - ```pip install torch==2.3.1 torchvision==0.18.1``` -*Note all previous versions of pytorch can be found in these instructions:[https://pytorch.org/get-started/previous-versions/](https://pytorch.org/get-started/previous-versions/) -8. Set the environment variable `SKLEARN_ALLOW_DEPRECATED_SKLEARN_PACKAGE_INSTALL=True` (to avoid sklearn deprecation error) -9. ```pip install .``` -> * _Note: if you run into ```ERROR: Failed building wheel for SimpleITK```, try running ```pip install SimpleITK --only-binary :all:``` then rerunning ```pip install .```_ -10. ```python FeTS_Challenge.py``` -> * _Note: if you run into ```ImportError: /home/locolinux/FETS2024/fets2024env/bin/../lib/libstdc++.so.6: version GLIBCXX_3.4.30' not found (required by /home/locolinux/FETS2024/fets2024env/lib/python3.7/site-packages/SimpleITK/_SimpleITK.so)```, try installing a previous version of SimpleITK (version 2.2.0 works) -11. All lower-level details are in the [FeTS Challenge python file](./FeTS_Challenge.py) -12. To view intermediate results with TensorBoard during training, you can run the following command: ```tensorboard --logdir ~/.local/workspace/logs/tensorboard``` - -## Time to Convergence Metric (formerly "communication cost") -Along with the typical DICE and Hausdorff metrics, we include a "time to convergence metric" intended to encourage solutions that converge to good scores quickly in terms of time. We simulate the time taken to run each round so that competitors don't need to be concerned with runtime optimizations such as compiled vs. interpreted code, and so that final scoring will not depend on the hardware used. This simulated time is computed in the experiment.py file and provided in the metrics output of the experiment execution. - -The time to convergence metric will be computed as the area under the validation learning curve over 1 week of simulated time where the horizontal axis measures simulated runtime and the vertical axis measures the current best score, computed as the average of enhancing tumor, tumor core, and whole tumor DICE scores over the validation split of the training data. - -You can find the code for the "time to convergence metric" in the experiment.py file by searching for ## CONVERGENCE METRIC COMPUTATION. - -### How Simulated Time is computed -The simulated time is stochastic, and computed per collaborator, per round, with the round time equaling the greatest round time of all collaborators in the round. - -A given collaborator's round time is computed as the sum of: -- The simulated time taken to download the shared model -- The simulated time taken to validate the shared model -- The simulated time taken to train the model (if training) -- The simulated time taken to validate that collaborator's trained model (if training) -- The simulated time taken to upload that collaborator's model update (if training) - -During the experiment, to generate these simulated times, we first assign each collaborator four normal distrubitions representing: -1. download speed -2. upload speed -3. training speed -4. validation speed - -We then draw from the appropriate distribution when generating one of the times listed above (at each round). - -We assign these network and compute distributions by drawing uniform-randomly from lists of normal distributions created using timing information collected from a subset of the 50+ participants in the May FeTS initiative training of this same model. In this way, the statistics used to simulate timing information come from timing information collected over an actual federation of hospitals that trained this exact model. In particular, for each actual hospital in our subset, we collected: -1. The mean and stdev seconds to download the model -2. The mean and stdev seconds to train a batch -3. The mean and stdev seconds to validate a batch -4. The mean and stdev seconds to upload the model. - -For a given collaborator, these normal distributions are constant throughout the experiment. Again, each possible timing distribution is based on actual timing information from a subset of the hospitals in the FeTS intitiative. You can find these distributions in the experiment.py file (search for ## COLLABORATOR TIMING DISTRIBUTIONS), as well as the random seed used to ensure reproducibility. - -### Use in Ranking - -For ranking of multidimensional outcomes (or metrics), for each team, we will compute the summation of their ranks across the average of the **7** metrics (i.e., time to convergence, and Dice & Hausdorff from 3 regions of interest) described as a univariate overall summary measure. This measure will decide the overall ranking for each specific team. Notably, since all teams are ranked per patient, whereas the communication cost is only accounted once for the complete training phase, the communication cost **will be weighted** according to the number of testing subjects in order to give it **equal importance** to the quality of the tumor segmentations. - - -## Data Partitioning and Sharding -The FeTS 2022 data release consists of a training set and two CSV files - each providing information for how to partition the training data into non-IID institutional subsets. The release will contain subfolders for single patient records whose names have the format `FeTS2022_###`, and two CSV files: -- **partitioning_1.csv** -- **partitioning_2.csv** - -Each of the partitioning CSV files has two columns, `Partition_ID` and `Subject_ID`. The Subject_ID column exhausts of the patient records contained in the release. The InstitutionName column provides an integer identifier indicating to which institution the record should be assigned. The path to a partition CSV can be provided as the value of the parameter ```institution_split_csv_filename``` to the jupyter notebook function run_challenge_experiment to specify the institutional split used when running experimental federated training on your custom federation logic. A description of each of these split CSVs is provided in Table 1. We encourage participants to create and explore training performance for other non-IID splits of the training data to help in developing generalizable customizations to the federated logic that will perform well during the validation and testing phase. A third CSV is hidden from participants and defines a test partitioning to be used in the challenge testing phase. This hidden partitioning (also described in Table 1) is another refinement of the institution split, having similar difficulty level to the institution tumor size split in our own experiments using the default customization functions. - -Table 1: Information for partitionings provided in the FeTS 2022 data release as well as the hidden partitioning not provided in the release (to be used in the competition testing phase). - -| Split name | CSV filename | Description | Number of institutions | -|-------------------------------------|------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------| -| Institution Split | partitioning_1.csv | Split of FeTS 2022 training data by originating institution. | 23 | -| Institution Tumor Size Split | partitioning_2.csv | Refinement of the institution split by tumor size, further splitting the larger institutions according to whether a record’s tumor size fell above or below the mean size for that institution. | 33 | -| Test Split | - not provided - | Undisclosed refinement of the institution split. | Hidden from participants | - - - diff --git a/Task_1/fets_challenge.egg-info/SOURCES.txt b/Task_1/fets_challenge.egg-info/SOURCES.txt deleted file mode 100644 index d39e899..0000000 --- a/Task_1/fets_challenge.egg-info/SOURCES.txt +++ /dev/null @@ -1,29 +0,0 @@ -LICENSE -MANIFEST.in -README.md -setup.py -fets_challenge/__init__.py -fets_challenge/checkpoint_utils.py -fets_challenge/custom_aggregation_wrapper.py -fets_challenge/experiment.py -fets_challenge/gandlf_csv_adapter.py -fets_challenge/inference.py -fets_challenge/spec_sens_code.py -fets_challenge.egg-info/PKG-INFO -fets_challenge.egg-info/SOURCES.txt -fets_challenge.egg-info/dependency_links.txt -fets_challenge.egg-info/requires.txt -fets_challenge.egg-info/top_level.txt -openfl-workspace/fets_challenge_workspace/partitioning_1.csv -openfl-workspace/fets_challenge_workspace/partitioning_2.csv -openfl-workspace/fets_challenge_workspace/requirements.txt -openfl-workspace/fets_challenge_workspace/small_split.csv -openfl-workspace/fets_challenge_workspace/smaller_split.csv -openfl-workspace/fets_challenge_workspace/validation.csv -openfl-workspace/fets_challenge_workspace/plan/cols.yaml -openfl-workspace/fets_challenge_workspace/plan/data.yaml -openfl-workspace/fets_challenge_workspace/plan/defaults -openfl-workspace/fets_challenge_workspace/plan/plan.yaml -openfl-workspace/fets_challenge_workspace/src/__init__.py -openfl-workspace/fets_challenge_workspace/src/challenge_assigner.py -openfl-workspace/fets_challenge_workspace/src/fets_challenge_model.py \ No newline at end of file diff --git a/Task_1/fets_challenge.egg-info/dependency_links.txt b/Task_1/fets_challenge.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/Task_1/fets_challenge.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Task_1/fets_challenge.egg-info/requires.txt b/Task_1/fets_challenge.egg-info/requires.txt deleted file mode 100644 index 72ddcc1..0000000 --- a/Task_1/fets_challenge.egg-info/requires.txt +++ /dev/null @@ -1,3 +0,0 @@ -openfl@ git+https://github.com/securefederatedai/openfl.git@kta-intel/fets-2024-patch-1 -GANDLF@ git+https://github.com/CBICA/GaNDLF.git@0.1.0 -fets@ git+https://github.com/FETS-AI/Algorithms.git@fets_challenge diff --git a/Task_1/fets_challenge.egg-info/top_level.txt b/Task_1/fets_challenge.egg-info/top_level.txt deleted file mode 100644 index 7ad31f7..0000000 --- a/Task_1/fets_challenge.egg-info/top_level.txt +++ /dev/null @@ -1,2 +0,0 @@ -fets_challenge -openfl-workspace From 4ce120d520e12c04556adbbe9dfeaf1053ea3f1f Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Thu, 7 Nov 2024 13:28:35 -0500 Subject: [PATCH 16/22] default to segmentation --- Task_1/generate_predictions.py | 45 ----------- .../fets_challenge_workspace/plan/plan.yaml | 81 +++++++++++-------- 2 files changed, 46 insertions(+), 80 deletions(-) delete mode 100644 Task_1/generate_predictions.py diff --git a/Task_1/generate_predictions.py b/Task_1/generate_predictions.py deleted file mode 100644 index de7d9b7..0000000 --- a/Task_1/generate_predictions.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python -# coding: utf-8 - -# # FeTS Challenge -# -# Contributing Authors (alphabetical order): -# - Brandon Edwards (Intel) -# - Patrick Foley (Intel) -# - Micah Sheller (Intel) - -from fets_challenge import model_outputs_to_disc -from pathlib import Path -import os -from sys import path -# from fets_challenge.gandlf_csv_adapter import construct_fedsim_csv, extract_classification_csv_partitions - -device='cpu' - -# infer participant home folder -home = str(Path.home()) - -# you will need to specify the correct experiment folder and the parent directory for -# the data you want to run inference over -checkpoint_folder='experiment_109' -print(f"inference for {checkpoint_folder}") -#data_path = -data_path = '/home/locolinux2/datasets/RSNA_ASNR_MICCAI_BraTS2021_TestingData' - -# you can keep these the same if you wish -best_model_path = os.path.join(home, '.local/workspace/checkpoint', checkpoint_folder, 'best_model.pkl') -outputs_path = os.path.join(home, '.local/workspace/checkpoint', checkpoint_folder, 'model_outputs') - -validation_csv_filename='final_test.csv' - - -# Using this best model, we can now produce NIfTI files for model outputs -# using a provided data directory - -model_outputs_to_disc(data_path=data_path, - validation_csv=validation_csv_filename, - output_path=outputs_path, - native_model_path=best_model_path, - problem_type='classification', - outputtag='', - device=device) diff --git a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml index ceb1b85..912c614 100644 --- a/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml +++ b/Task_1/openfl-workspace/fets_challenge_workspace/plan/plan.yaml @@ -23,68 +23,79 @@ data_loader : defaults : plan/defaults/data_loader.yaml template : openfl.federated.data.loader_gandlf.GaNDLFDataLoaderWrapper settings : - feature_shape : [128,128,64] #[32,32,32] + feature_shape : [32, 32, 32] task_runner : template : src.fets_challenge_model.FeTSChallengeModel settings : - # train_csv : cla_test_train.csv - # val_csv : cla_test_val.csv + train_csv : seg_test_train.csv + val_csv : seg_test_val.csv device : cpu gandlf_config : - problem_type: classification #segmentation, classification - # label: None - # clip_mode: norm - # clip_grad: 0.1 - output_dir: '.' - - batch_size: 8 + batch_size: 1 + clip_mode: norm + clip_grad: 0.1 data_augmentation: {} - data_preprocessing: {} + data_postprocessing: {} + data_preprocessing: + normalize: None + enable_padding: false in_memory: false + inference_mechanism : + grid_aggregator_overlap: crop + patch_overlap: 0 learning_rate: 0.001 - loss_function: cel + loss_function: dc + medcam_enabled: false + output_dir: '.' metrics: - - classification_accuracy - - recall - - precision - - f1 - modality: rad + - dice + # - dice_per_label + # - hd95_per_label model: - amp: false - onnx_export: false - architecture: densenet121 - base_filters: 16 + amp: true + architecture: resunet + base_filters: 32 class_list: - - '0' - - '1' - - '2' - - '3' + - 0 + - 1 + - 2 + - 4 dimension: 3 final_layer: softmax - num_channels: 1 + ignore_label_validation: None norm_type: instance - weighted_loss: false - num_epochs: 500 nested_training: testing: 1 - validation: -4 ## these are 4 because there is one site (i.e., Site3) that has only 4 samples. - optimizer: adam - patch_sampler: uniform + validation: -5 + num_epochs: 1 + optimizer: + type: sgd + parallel_compute_command: '' + patch_sampler: label patch_size: - - 128 - - 128 + - 64 + - 64 - 64 patience: 100 + pin_memory_dataloader: false + print_rgb_label_warning: true q_max_length: 100 q_num_workers: 0 q_samples_per_volume: 40 q_verbose: false - save_masks: false - scheduler: triangle + save_output: false + save_training: false + scaling_factor: 1 + scheduler: + type: triangle_modified + track_memory_usage: false + verbose: false version: maximum: 0.1.0 minimum: 0.0.14 + weighted_loss: true + modality: rad network : From 70eda3c46f51a4ee804d6afe1b74d7f201b7bc7b Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Fri, 8 Nov 2024 16:18:15 -0500 Subject: [PATCH 17/22] committed gitignore --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..59ad75f --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +Task_1/venv/* +Task_1/my_code +Task_1/ucb_r* +Task_1/fets_challenge/__pycache__/* +*pycache* +Task_1/cert* From f7fd4a39dd2c86beabb64ce0fb2b97c4891752d6 Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Fri, 8 Nov 2024 16:14:00 -0500 Subject: [PATCH 18/22] Update Task_1/README.md Co-authored-by: Sarthak Pati --- Task_1/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Task_1/README.md b/Task_1/README.md index 2779f4a..ab77b29 100644 --- a/Task_1/README.md +++ b/Task_1/README.md @@ -29,7 +29,7 @@ Please ask any additional questions in our discussion pages on our github site a 6. ```pip install --upgrade pip``` 7. Install Pytorch (2.3.1) for your system: ```pip install torch==2.3.1 torchvision==0.18.1``` -*Note all previous versions of pytorch can be found in these instructions:[https://pytorch.org/get-started/previous-versions/](https://pytorch.org/get-started/previous-versions/) +*Note all previous versions of pytorch can be found in [this link](https://pytorch.org/get-started/previous-versions/#v231). 8. Set the environment variable `SKLEARN_ALLOW_DEPRECATED_SKLEARN_PACKAGE_INSTALL=True` (to avoid sklearn deprecation error) 9. ```pip install .``` > * _Note: if you run into ```ERROR: Failed building wheel for SimpleITK```, try running ```pip install SimpleITK --only-binary :all:``` then rerunning ```pip install .```_ From 48510ee89ee8f6cc989c25fafe738162b70fc78d Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Thu, 24 Apr 2025 22:05:03 -0400 Subject: [PATCH 19/22] pinned to Kevin's fix --- Task_1/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Task_1/setup.py b/Task_1/setup.py index 49a02f6..7db297f 100644 --- a/Task_1/setup.py +++ b/Task_1/setup.py @@ -28,7 +28,7 @@ ], include_package_data=True, install_requires=[ - 'openfl @ git+https://github.com/securefederatedai/openfl.git@kta-intel/fets-2024-patch-1', + 'openfl @ git+https://github.com/securefederatedai/openfl.git@84cff481b1ec8c92fc88c759ab5b8b6f950f9ca4', 'GANDLF @ git+https://github.com/CBICA/GaNDLF.git@0.1.0', 'fets @ git+https://github.com/FETS-AI/Algorithms.git@fets_challenge', ], From 221973d5753a418cd354379142153baa2fb21c9c Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Thu, 24 Apr 2025 22:21:54 -0400 Subject: [PATCH 20/22] pathlib added --- Task_1/FeTS_Challenge.py | 14 +++++++++----- Task_1/utils/inspect_pickled_model.py | 6 ++++-- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Task_1/FeTS_Challenge.py b/Task_1/FeTS_Challenge.py index bc9b0cb..9d1525f 100644 --- a/Task_1/FeTS_Challenge.py +++ b/Task_1/FeTS_Challenge.py @@ -14,7 +14,7 @@ import os import numpy as np - +from pathlib import Path from fets_challenge import run_challenge_experiment @@ -524,12 +524,17 @@ def FedAvgM_Selection(local_tensors, # other partitionings to test your changes for generalization to multiple partitionings. #institution_split_csv_filename = 'partitioning_1.csv' #institution_split_csv_filename = 'partitioning_1.csv' + + +# Dynamically get working directory or environment variable +data_root = Path.cwd() / 'datasets' / 'MICCAI_FeTS2022_TrainingData' institution_split_csv_filename = '/home/locolinux2/datasets/MICCAI_FeTS2022_TrainingData/partitioning_2.csv' -institution_split_csv_filename = '/home/locolinux2/datasets/MICCAI_FeTS2022_TrainingData/sanity_partitioning.csv' # a small subset for sanity checks and debugging. Comment out to run the actual challenge partition. +institution_split_csv_filename = data_root / 'sanity_partitioning.csv' + # change this to point to the parent directory of the data -brats_training_data_parent_dir = '/home/locolinux2/datasets/MICCAI_FeTS2022_TrainingData' -brats_training_data_parent_dir = '/home/locolinux2/datasets/MICCAI_FeTS2022_Resized' +data_root = Path.cwd() / 'datasets' / 'MICCAI_FeTS2022_TrainingData' +brats_training_data_parent_dir = Path.cwd() / 'datasets' / 'MICCAI_FeTS2022_Resized' # increase this if you need a longer history for your algorithms # decrease this if you need to reduce system RAM consumption @@ -582,7 +587,6 @@ def FedAvgM_Selection(local_tensors, from fets_challenge import model_outputs_to_disc -from pathlib import Path # infer participant home folder home = str(Path.home()) diff --git a/Task_1/utils/inspect_pickled_model.py b/Task_1/utils/inspect_pickled_model.py index 0151014..702ef3e 100644 --- a/Task_1/utils/inspect_pickled_model.py +++ b/Task_1/utils/inspect_pickled_model.py @@ -1,7 +1,9 @@ import pickle +from pathlib import Path + +# Construct path relative to current working directory +pickle_file_path = Path.cwd() / '.local' / 'workspace' / 'checkpoint' / 'experiment_109' / 'best_model.pkl' -# Path to the pickle file -pickle_file_path = '/home/locolinux2/.local/workspace/checkpoint/experiment_109/best_model.pkl' # Function to load and inspect the pickle file def load_pickle(file_path): From 0b29f6d1d59fa7cdf09ba199290b460c933b3b3a Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Fri, 25 Apr 2025 10:34:24 -0400 Subject: [PATCH 21/22] experiment number separate parameter --- Task_1/utils/inspect_pickled_model.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Task_1/utils/inspect_pickled_model.py b/Task_1/utils/inspect_pickled_model.py index 702ef3e..4481f74 100644 --- a/Task_1/utils/inspect_pickled_model.py +++ b/Task_1/utils/inspect_pickled_model.py @@ -1,8 +1,9 @@ import pickle from pathlib import Path -# Construct path relative to current working directory -pickle_file_path = Path.cwd() / '.local' / 'workspace' / 'checkpoint' / 'experiment_109' / 'best_model.pkl' +experiment_number = 109 # change to your experiment number + +pickle_file_path = Path.cwd() / '.local' / 'workspace' / 'checkpoint' / f'experiment_{experiment_number}' / 'best_model.pkl' # Function to load and inspect the pickle file From c73a39c2659b359a8a33de163e38efea4415dcd5 Mon Sep 17 00:00:00 2001 From: Akis Linardos Date: Fri, 25 Apr 2025 10:36:29 -0400 Subject: [PATCH 22/22] GaNDLF pulled from mlcommons not CBICA --- Task_1/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Task_1/setup.py b/Task_1/setup.py index 7db297f..721304d 100644 --- a/Task_1/setup.py +++ b/Task_1/setup.py @@ -29,7 +29,7 @@ include_package_data=True, install_requires=[ 'openfl @ git+https://github.com/securefederatedai/openfl.git@84cff481b1ec8c92fc88c759ab5b8b6f950f9ca4', - 'GANDLF @ git+https://github.com/CBICA/GaNDLF.git@0.1.0', + 'GANDLF @ git+https://github.com/mlcommons/GaNDLF.git@0.1.0', 'fets @ git+https://github.com/FETS-AI/Algorithms.git@fets_challenge', ], python_requires='>=3.9',