diff --git a/.cproject b/.cproject
index 5f955a8..8efc8e2 100644
--- a/.cproject
+++ b/.cproject
@@ -109,6 +109,14 @@
-
+
+
+
+
+
+
+
+
-
+
+
\ No newline at end of file
diff --git a/.nedfolders b/.nedfolders
index bbccc94..bb3ee37 100644
--- a/.nedfolders
+++ b/.nedfolders
@@ -1,2 +1,5 @@
-simulations/veins
+simulations/grid
+simulations/multi_model
+simulations/simple_example
+simulations/small_lust
src
diff --git a/.project b/.project
index 1ba2b98..bded821 100644
--- a/.project
+++ b/.project
@@ -6,6 +6,11 @@
veins
+
+ org.python.pydev.PyDevBuilder
+
+
+
org.omnetpp.cdt.MakefileBuilder
@@ -35,5 +40,6 @@
org.eclipse.cdt.managedbuilder.core.managedBuildNature
org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
org.omnetpp.main.omnetppnature
+ org.python.pydev.pythonNature
diff --git a/.pydevproject b/.pydevproject
new file mode 100644
index 0000000..2b04565
--- /dev/null
+++ b/.pydevproject
@@ -0,0 +1,5 @@
+
+
+ Default
+ python interpreter
+
diff --git a/README.md b/README.md
index 00e60cc..aa28b14 100644
--- a/README.md
+++ b/README.md
@@ -1,98 +1,106 @@
-
-
-
+# FLEXE: Federated Learning Extension for Veins
-# Flexe
-Flexe is a new framework for simulation of Federated Learning (FL) in Connected and Autonomous Vehicle (CAVs). Its adaptable design allows for the implementation of a variety of FL schemes, including horizontal, vertical, and Federated Transfer Learning. Flexe and PyFlexe are free to download and use, built for customization, and allows for the realistic simulation of wireless networking and vehicle dynamics. The project was partitioned into two, one of which is responsible for vehicle-to-vehicle communication ([Flexe](https://github.com/WellingtonLobato/flexe)) and the other for the construction and training of models ([PyFlexe](https://github.com/WellingtonLobato/PyFlexe)).
+FLEXE is a new framework for simulation of Federated Learning (FL) in Connected and Autonomous Vehicle (CAVs). Its adaptable design allows for the implementation of a variety of FL schemes, including horizontal, vertical, and Federated Transfer Learning. FLEXE is free to download and use, built for customization, and allows for the realistic simulation of wireless networking and vehicle dynamics.
## Getting Started
-We developed FLEXE to make it possible to implement and develop vehicular FL applications within the context of CAVs. It further simplifies the process of modeling specific Machine Learning (ML) and FL applications into environments suitable for CAVs. Specifically, we developed Flexe on top of the Veins network simulator to simulate the dynamics of communication between vehicles.
+These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.
### Prerequisites
-PyFlexe requires the following software to be installed
-- OMNeT++
-- conan
-- grpc
-- TensorFlow
-- PyTorch
+OMNeT++:
+-6.0
+SUMO:
+-
+Veins:
+-5.2
-### OMNeT++ (6 >=) installation
-Please do follow the instructions from the official [OMNeT documentation](https://doc.omnetpp.org/omnetpp/InstallGuide.pdf)
+```
+Give examples
+```
+
+### Installing
+
+A step by step series of examples that tell you how to get a development env running
+
+Say what the step will be
-### Conan installation (1.58.0 >=)
-Please do follow the instructions from the official [conan documentation](https://docs.conan.io/en/latest/installation.html)
```
-pip install conan==1.58.0
+Give the example
```
-### GRPC installation (== 1.38.1)
-Please do follow the instructions from the official [GRPC documentation](https://grpc.io/docs/languages/python/quickstart/)
+And repeat
-### Installing
+```
+until finished
+```
+
+End with an example of getting some data out of the system or using it for a little demo
+
+## Running the tests
-In order to install the necessary packages to run Flexe, just run the following command in the root directory.
+Explain how to run the automated tests for this system
+
+### Break down into end to end tests
+
+Explain what these tests test and why
```
-conan install . --build missing -s compiler.version=10 -s compiler.libcxx=libstdc++11
+Give an example
```
-Import the project into your OMNeT++ IDE workspace by clicking File > Import > General: Existing Projects into Workspace and selecting the directory you unpacked the Flexe module to.
+### And coding style tests
-Flexe is an extension to the well known and widely used Veins simulation framework. See the Veins website for a tutorial, documentation, and publications.
+Explain what these tests test and why
+```
+Give an example
+```
-## Project structure - main components
+## Deployment
+Add additional notes about how to deploy this on a live system
- ├── simulations
- │ ├── grid
- │ ├── small_lust
- │ └── veins
- └── src
- ├── flexe
- │ ├── application
- │ ├── cache
- │ ├── messages
- │ └── proto
- ├── Makefile
- └── makefrag
+## Built With
+
+* [Dropwizard](http://www.dropwizard.io/1.0.2/docs/) - The web framework used
+* [Maven](https://maven.apache.org/) - Dependency Management
+* [ROME](https://rometools.github.io/rome/) - Used to generate RSS Feeds
## Contributing
-Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us.
+Please read [CONTRIBUTING.md](https://gist.github.com/PurpleBooth/b24679402957c63ec426) for details on our code of conduct, and the process for submitting pull requests to us.
## Versioning
-We use [SemVer](http://semver.org/) for versioning.
+We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/your/project/tags).
## Authors
-* **Wellington Lobato** - [WellingtonLobato](https://github.com/WellingtonLobato)
-* **Joahannes B. D. da Costa** - [joahannes](https://github.com/joahannes)
-* **Allan M. de Souza** - [AllanMSouza](https://github.com/AllanMSouza)
-* **Denis Rosario**
-* **Christoph Sommer** - [sommer](https://github.com/sommer)
-* **Leandro A. Villas**
-
-# Citation
-
-PyFlexe and Flexe can reproduce results in the following papers:
-
-```tex
-@INPROCEEDINGS{Lobato2022,
- author={Lobato, Wellington and Costa, Joahannes B. D. Da and Souza, Allan M. de and Rosário, Denis and Sommer, Christoph and Villas, Leandro A.},
- booktitle={2022 IEEE 96th Vehicular Technology Conference (VTC2022-Fall)},
- title={FLEXE: Investigating Federated Learning in Connected Autonomous Vehicle Simulations},
- year={2022},
- pages={1-5},
- doi={10.1109/VTC2022-Fall57202.2022.10012905}
-}
-```
-# Updates
-Flexe Version 3.0.0 in the development phase.
+* **Wellington Lobato** - *Initial work* - [PurpleBooth](https://github.com/PurpleBooth)
+* **Joahannes B. D. da Costa** - *Initial work* - [PurpleBooth](https://github.com/PurpleBooth)
+* **Allan M. de Souza** - *Initial work* - [PurpleBooth](https://github.com/PurpleBooth)
+* **Denis Rosario** - *Initial work* - [PurpleBooth](https://github.com/PurpleBooth)
+* **Christoph Sommer** - *Initial work* - [PurpleBooth](https://github.com/PurpleBooth)
+* **Leandro A. Villas** - *Initial work* - [PurpleBooth](https://github.com/PurpleBooth)
+
+
+See also the list of [contributors](https://github.com/your/project/contributors) who participated in this project.
## License
-This project is licensed under the GPL-2.0 license - see the [COPYING.md](COPYING.md) file for details
+This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details
+
+## Acknowledgments
+
+* Hat tip to anyone whose code was used
+* Inspiration
+* etc
+
+
+conan install . --build missing -s compiler.version=10 -s compiler.libcxx=libstdc++11
+
+PROTO_IN_PATH=/home/jordan/git/Flexe2.0.0/
+PROTO_FILE=/home/jordan/git/Flexe2.0.0/flexe.proto
+PROTO_OUT_PATH=/home/jordan/git/Flexe2.0.0/src/flexe/proto/
+
diff --git a/conanbuildinfo.mak b/conanbuildinfo.mak
index e18732e..184a456 100644
--- a/conanbuildinfo.mak
+++ b/conanbuildinfo.mak
@@ -3,25 +3,25 @@
#-------------------------------------------------------------------#
CONAN_ROOT_GRPC ?= \
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c
CONAN_SYSROOT_GRPC ?= \
CONAN_INCLUDE_DIRS_GRPC += \
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/include
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/include
CONAN_LIB_DIRS_GRPC += \
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/lib
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/lib
CONAN_BIN_DIRS_GRPC += \
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/bin
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/bin
CONAN_BUILD_DIRS_GRPC += \
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/
CONAN_RES_DIRS_GRPC += \
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/res
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/res
CONAN_LIBS_GRPC += \
grpc++_alts \
@@ -56,16 +56,16 @@ CONAN_FRAMEWORKS_GRPC +=
CONAN_FRAMEWORK_PATHS_GRPC +=
CONAN_ROOT_ABSEIL ?= \
-/home/jordan/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d
+/home/wellington/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d
CONAN_SYSROOT_ABSEIL ?= \
CONAN_INCLUDE_DIRS_ABSEIL += \
-/home/jordan/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/include
+/home/wellington/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/include
CONAN_LIB_DIRS_ABSEIL += \
-/home/jordan/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/lib
+/home/wellington/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/lib
CONAN_BIN_DIRS_ABSEIL +=
@@ -161,19 +161,19 @@ CONAN_FRAMEWORKS_ABSEIL +=
CONAN_FRAMEWORK_PATHS_ABSEIL +=
CONAN_ROOT_C-ARES ?= \
-/home/jordan/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745
+/home/wellington/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745
CONAN_SYSROOT_C-ARES ?= \
CONAN_INCLUDE_DIRS_C-ARES += \
-/home/jordan/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/include
+/home/wellington/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/include
CONAN_LIB_DIRS_C-ARES += \
-/home/jordan/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/lib
+/home/wellington/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/lib
CONAN_BIN_DIRS_C-ARES += \
-/home/jordan/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/bin
+/home/wellington/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/bin
CONAN_BUILD_DIRS_C-ARES +=
@@ -201,22 +201,22 @@ CONAN_FRAMEWORKS_C-ARES +=
CONAN_FRAMEWORK_PATHS_C-ARES +=
CONAN_ROOT_OPENSSL ?= \
-/home/jordan/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1
+/home/wellington/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1
CONAN_SYSROOT_OPENSSL ?= \
CONAN_INCLUDE_DIRS_OPENSSL += \
-/home/jordan/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/include
+/home/wellington/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/include
CONAN_LIB_DIRS_OPENSSL += \
-/home/jordan/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/lib
+/home/wellington/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/lib
CONAN_BIN_DIRS_OPENSSL += \
-/home/jordan/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/bin
+/home/wellington/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/bin
CONAN_BUILD_DIRS_OPENSSL += \
-/home/jordan/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/
+/home/wellington/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/
CONAN_RES_DIRS_OPENSSL +=
@@ -244,23 +244,22 @@ CONAN_FRAMEWORKS_OPENSSL +=
CONAN_FRAMEWORK_PATHS_OPENSSL +=
CONAN_ROOT_PROTOBUF ?= \
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131
+/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131
CONAN_SYSROOT_PROTOBUF ?= \
CONAN_INCLUDE_DIRS_PROTOBUF += \
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/include
+/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/include
CONAN_LIB_DIRS_PROTOBUF += \
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/lib
+/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/lib
CONAN_BIN_DIRS_PROTOBUF += \
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/bin
+/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/bin
CONAN_BUILD_DIRS_PROTOBUF += \
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/ \
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/lib/cmake/protobuf
+/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/lib/cmake/protobuf
CONAN_RES_DIRS_PROTOBUF +=
@@ -269,6 +268,7 @@ protoc \
protobuf
CONAN_SYSTEM_LIBS_PROTOBUF += \
+m \
pthread
CONAN_DEFINES_PROTOBUF +=
@@ -286,21 +286,21 @@ CONAN_FRAMEWORKS_PROTOBUF +=
CONAN_FRAMEWORK_PATHS_PROTOBUF +=
CONAN_ROOT_RE2 ?= \
-/home/jordan/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d
+/home/wellington/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d
CONAN_SYSROOT_RE2 ?= \
CONAN_INCLUDE_DIRS_RE2 += \
-/home/jordan/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/include
+/home/wellington/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/include
CONAN_LIB_DIRS_RE2 += \
-/home/jordan/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/lib
+/home/wellington/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/lib
CONAN_BIN_DIRS_RE2 +=
CONAN_BUILD_DIRS_RE2 += \
-/home/jordan/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/
+/home/wellington/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/
CONAN_RES_DIRS_RE2 +=
@@ -326,21 +326,21 @@ CONAN_FRAMEWORKS_RE2 +=
CONAN_FRAMEWORK_PATHS_RE2 +=
CONAN_ROOT_ZLIB ?= \
-/home/jordan/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1
+/home/wellington/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1
CONAN_SYSROOT_ZLIB ?= \
CONAN_INCLUDE_DIRS_ZLIB += \
-/home/jordan/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/include
+/home/wellington/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/include
CONAN_LIB_DIRS_ZLIB += \
-/home/jordan/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/lib
+/home/wellington/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/lib
CONAN_BIN_DIRS_ZLIB +=
CONAN_BUILD_DIRS_ZLIB += \
-/home/jordan/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/
+/home/wellington/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/
CONAN_RES_DIRS_ZLIB +=
diff --git a/conanbuildinfo.txt b/conanbuildinfo.txt
index db70fe0..7358563 100644
--- a/conanbuildinfo.txt
+++ b/conanbuildinfo.txt
@@ -1,37 +1,36 @@
[includedirs]
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/include
-/home/jordan/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/include
-/home/jordan/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/include
-/home/jordan/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/include
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/include
-/home/jordan/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/include
-/home/jordan/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/include
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/include
+/home/wellington/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/include
+/home/wellington/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/include
+/home/wellington/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/include
+/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/include
+/home/wellington/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/include
+/home/wellington/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/include
[libdirs]
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/lib
-/home/jordan/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/lib
-/home/jordan/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/lib
-/home/jordan/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/lib
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/lib
-/home/jordan/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/lib
-/home/jordan/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/lib
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/lib
+/home/wellington/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/lib
+/home/wellington/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/lib
+/home/wellington/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/lib
+/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/lib
+/home/wellington/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/lib
+/home/wellington/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/lib
[bindirs]
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/bin
-/home/jordan/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/bin
-/home/jordan/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/bin
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/bin
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/bin
+/home/wellington/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/bin
+/home/wellington/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/bin
+/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/bin
[resdirs]
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/res
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/res
[builddirs]
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/
-/home/jordan/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/lib/cmake/protobuf
-/home/jordan/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/
-/home/jordan/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/
+/home/wellington/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/
+/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/lib/cmake/protobuf
+/home/wellington/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/
+/home/wellington/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/
[libs]
grpc++_alts
@@ -155,19 +154,19 @@ CARES_STATICLIB
[includedirs_grpc]
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/include
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/include
[libdirs_grpc]
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/lib
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/lib
[bindirs_grpc]
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/bin
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/bin
[resdirs_grpc]
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/res
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/res
[builddirs_grpc]
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/
[libs_grpc]
grpc++_alts
@@ -215,7 +214,7 @@ pthread
[rootpath_grpc]
-/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c
+/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c
[name_grpc]
grpc
@@ -232,10 +231,10 @@ cmake_find_package_multi=gRPC
[includedirs_abseil]
-/home/jordan/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/include
+/home/wellington/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/include
[libdirs_abseil]
-/home/jordan/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/lib
+/home/wellington/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/lib
[bindirs_abseil]
@@ -347,7 +346,7 @@ rt
[rootpath_abseil]
-/home/jordan/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d
+/home/wellington/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d
[name_abseil]
abseil
@@ -364,13 +363,13 @@ cmake_find_package_multi=absl
[includedirs_c-ares]
-/home/jordan/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/include
+/home/wellington/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/include
[libdirs_c-ares]
-/home/jordan/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/lib
+/home/wellington/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/lib
[bindirs_c-ares]
-/home/jordan/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/bin
+/home/wellington/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/bin
[resdirs_c-ares]
@@ -412,7 +411,7 @@ CARES_STATICLIB
[rootpath_c-ares]
-/home/jordan/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745
+/home/wellington/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745
[name_c-ares]
c-ares
@@ -428,19 +427,19 @@ pkg_config=libcares
[includedirs_openssl]
-/home/jordan/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/include
+/home/wellington/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/include
[libdirs_openssl]
-/home/jordan/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/lib
+/home/wellington/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/lib
[bindirs_openssl]
-/home/jordan/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/bin
+/home/wellington/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/bin
[resdirs_openssl]
[builddirs_openssl]
-/home/jordan/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/
+/home/wellington/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/
[libs_openssl]
ssl
@@ -479,7 +478,7 @@ rt
[rootpath_openssl]
-/home/jordan/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1
+/home/wellington/.conan/data/openssl/1.1.1n/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1
[name_openssl]
openssl
@@ -496,26 +495,26 @@ cmake_find_package_multi=OpenSSL
[includedirs_protobuf]
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/include
+/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/include
[libdirs_protobuf]
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/lib
+/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/lib
[bindirs_protobuf]
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/bin
+/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/bin
[resdirs_protobuf]
[builddirs_protobuf]
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/lib/cmake/protobuf
+/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/lib/cmake/protobuf
[libs_protobuf]
protoc
protobuf
[system_libs_protobuf]
+m
pthread
[defines_protobuf]
@@ -546,7 +545,7 @@ pthread
[rootpath_protobuf]
-/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131
+/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131
[name_protobuf]
protobuf
@@ -563,10 +562,10 @@ cmake_find_package_multi=protobuf
[includedirs_re2]
-/home/jordan/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/include
+/home/wellington/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/include
[libdirs_re2]
-/home/jordan/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/lib
+/home/wellington/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/lib
[bindirs_re2]
@@ -575,7 +574,7 @@ cmake_find_package_multi=protobuf
[builddirs_re2]
-/home/jordan/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/
+/home/wellington/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/
[libs_re2]
re2
@@ -612,7 +611,7 @@ pthread
[rootpath_re2]
-/home/jordan/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d
+/home/wellington/.conan/data/re2/20220201/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d
[name_re2]
re2
@@ -628,10 +627,10 @@ re2
[includedirs_zlib]
-/home/jordan/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/include
+/home/wellington/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/include
[libdirs_zlib]
-/home/jordan/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/lib
+/home/wellington/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/lib
[bindirs_zlib]
@@ -640,7 +639,7 @@ re2
[builddirs_zlib]
-/home/jordan/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/
+/home/wellington/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1/
[libs_zlib]
z
@@ -676,7 +675,7 @@ z
[rootpath_zlib]
-/home/jordan/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1
+/home/wellington/.conan/data/zlib/1.2.12/_/_/package/19729b9559f3ae196cad45cb2b97468ccb75dcd1
[name_zlib]
zlib
@@ -700,13 +699,13 @@ cmake_find_package_multi=ZLIB
[USER_re2]
[USER_zlib]
[ENV_grpc]
-GRPC_DEFAULT_SSL_ROOTS_FILE_PATH=/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/res/grpc/roots.pem
-PATH=["/home/jordan/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/bin"]
+GRPC_DEFAULT_SSL_ROOTS_FILE_PATH=/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/res/grpc/roots.pem
+PATH=["/home/wellington/.conan/data/grpc/1.38.1/_/_/package/44ecaec4536223f790dd5e0a72b2d16b1dfaa76c/bin"]
[ENV_abseil]
[ENV_c-ares]
-PATH=["/home/jordan/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/bin"]
+PATH=["/home/wellington/.conan/data/c-ares/1.18.1/_/_/package/29b1a7b6d5a3c9f005e799c80fcc6320c89f9745/bin"]
[ENV_openssl]
[ENV_protobuf]
-PATH=["/home/jordan/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/bin"]
+PATH=["/home/wellington/.conan/data/protobuf/3.17.1/_/_/package/53f76f058631e1c3a500008c75af3f37d7786131/bin"]
[ENV_re2]
[ENV_zlib]
\ No newline at end of file
diff --git a/flexe.proto b/flexe.proto
index 63e4f0a..89b63fb 100644
--- a/flexe.proto
+++ b/flexe.proto
@@ -2,53 +2,96 @@ syntax = "proto3";
package flexe;
-// Defines the service
service Flexe {
//Client Functions
rpc fit (TTRequest) returns (ModelReply) {}
- rpc evaluate (TTRequest) returns (EvaluateReply) {}
- rpc update_model (TTRequest) returns (GenericResponse) {}
+ rpc evaluate (TTRequest) returns (ModelReply) {}
+ rpc update_model (TTRequest) returns (ModelReply) {}
+ rpc get_information (GenericRequest) returns (ModelReply) {}
+ rpc set_information (GenericRequest) returns (ModelReply) {}
+ rpc aggregate_client (TTRequest) returns (ModelReply) {}
+ rpc fit_all (TTRequest) returns (ModelReply) {}
+ rpc evaluate_all (TTRequest) returns (ModelReply) {}
+ rpc update_all (TTRequest) returns (ModelReply) {}
//Server Functions
- rpc aggregate_evaluate (TTRequest) returns (EvaluateReply) {}
- rpc aggregate_fit (ModelRequest) returns (ModelReply) {}
- rpc aggregate_sync_fit (GenericRequest) returns (ModelReply) {}
- rpc server_evaluate (TTRequest) returns (EvaluateReply) {}
- rpc store_model (ModelRequest) returns (GenericResponse) {}
- rpc initialize_parameters (TTRequest) returns (ModelReply) {}
- rpc end (GenericRequest) returns (GenericResponse) {}
-}
-
-message GenericRequest{
- string msg = 1;
-}
-
-message GenericResponse{
- int32 reply = 1;
+ rpc initialize_parameters (TTRequest) returns (ModelReply) {}
+ rpc aggregate_async_fit (AggregationRequest) returns (ModelReply) {}
+ rpc aggregate_sync_fit (AggregationRequest) returns (ModelReply) {}
+ rpc aggregate_evaluate (AggregationRequest) returns (ModelReply) {}
+ rpc set_strategy (GenericRequest) returns (GenericReply) {}
+ rpc get_strategy (GenericRequest) returns (GenericReply) {}
+ rpc center_fit (GenericRequest) returns (ModelReply) {}
+ rpc center_evaluate (GenericRequest) returns (ModelReply) {}
+ rpc end (GenericRequest) returns (GenericReply) {}
}
message TTRequest {
- int32 idVehicle = 1;
- bool trainFlag = 2;
- string modelName = 3;
- int32 epochs = 4;
- int32 batch_size = 5;
+ int32 idEntity = 1;
+ string model = 2;
+ string dataset = 3;
+ string scenario = 4;
+ int32 seed = 5;
+ bool nonIID = 6;
+ int32 idModel = 7;
+ bool trainFlag = 8;
+ int32 epochs = 9;
+ int32 batch = 10;
+ int32 numClients = 11;
+ double percentDataset = 12;
+ string models = 13;
+ string msg = 14;
}
-message EvaluateReply {
- double loss = 1;
- double accuracy = 2;
+message AggregationRequest {
+ int32 idEntity = 1;
+ string model = 2;
+ string dataset = 3;
+ string scenario = 4;
+ int32 seed = 5;
+ bool nonIID = 6;
+ int32 idModel = 7;
+ int32 numClients = 8;
+ string numExamples = 9;
+ string models = 10;
+ string strategy = 11;
+ string msg = 12;
}
-message ModelReply{
- int32 idVehicle = 1;
- repeated bytes tensors = 2;
- int32 num_examples = 3;
+message GenericRequest {
+ int32 idEntity = 1;
+ string model = 2;
+ string dataset = 3;
+ string scenario = 4;
+ int32 seed = 5;
+ bool nonIID = 6;
+ int32 idModel = 7;
+ string msg = 8;
}
-message ModelRequest{
- int32 idVehicle = 1;
- repeated bytes tensors = 2;
- int32 number_of_vehicles = 3;
- int32 num_examples = 4;
+message GenericReply {
+ int32 idEntity = 1;
+ string model = 2;
+ string dataset = 3;
+ string scenario = 4;
+ int32 seed = 5;
+ bool nonIID = 6;
+ int32 idModel = 7;
+ int32 reply = 8;
+ string msg = 9;
}
+
+message ModelReply {
+ int32 idEntity = 1;
+ string model = 2;
+ string dataset = 3;
+ string scenario = 4;
+ int32 seed = 5;
+ bool nonIID = 6;
+ int32 idModel = 7;
+ int32 numExamples = 8;
+ double entropy = 9;
+ double loss = 10;
+ double accuracy = 11;
+ string msg = 12;
+}
\ No newline at end of file
diff --git a/simulations/multi_model/MultiModelScenario.ned b/simulations/multi_model/MultiModelScenario.ned
new file mode 100644
index 0000000..c2a77ac
--- /dev/null
+++ b/simulations/multi_model/MultiModelScenario.ned
@@ -0,0 +1,9 @@
+import org.car2x.veins.nodes.RSU;
+import org.car2x.veins.nodes.Scenario;
+
+network MultiModelScenario extends Scenario{
+ submodules:
+ rsu[5]: RSU {
+ @display("p=200,140;i=veins/sign/yellowdiamond;is=vs");
+ }
+}
diff --git a/simulations/veins/antenna.xml b/simulations/multi_model/antenna.xml
similarity index 100%
rename from simulations/veins/antenna.xml
rename to simulations/multi_model/antenna.xml
diff --git a/simulations/multi_model/config.xml b/simulations/multi_model/config.xml
new file mode 100644
index 0000000..a059adb
--- /dev/null
+++ b/simulations/multi_model/config.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/simulations/multi_model/omnetpp.ini b/simulations/multi_model/omnetpp.ini
new file mode 100644
index 0000000..39b5305
--- /dev/null
+++ b/simulations/multi_model/omnetpp.ini
@@ -0,0 +1,140 @@
+[General]
+cmdenv-express-mode = true
+cmdenv-autoflush = true
+cmdenv-status-frequency = 1s
+**.cmdenv-log-level = info
+
+image-path = ../../images
+
+network = MultiModelScenario
+
+##########################################################
+# Simulation parameters #
+##########################################################
+debug-on-errors = true
+print-undisposed = true
+
+sim-time-limit = 200s
+
+**.scalar-recording = true
+**.vector-recording = true
+
+*.playgroundSizeX = 1000m
+*.playgroundSizeY = 1000m
+*.playgroundSizeZ = 50m
+
+##########################################################
+# Annotation parameters #
+##########################################################
+*.annotations.draw = true
+
+##########################################################
+# TraCIScenarioManager parameters #
+##########################################################
+*.manager.updateInterval = 1s
+*.manager.host = "localhost"
+*.manager.port = 9999
+*.manager.autoShutdown = true
+*.manager.launchConfig = xmldoc("simple_100_clients.launchd.xml")
+*.manager.allowPedestrians = false
+##########################################################
+# RSU SETTINGS #
+# #
+# #
+##########################################################
+*.rsu[0].mobility.x = 0
+*.rsu[0].mobility.y = 0
+*.rsu[0].mobility.z = 3
+
+*.rsu[1].mobility.x = 900
+*.rsu[1].mobility.y = 0
+*.rsu[1].mobility.z = 3
+
+*.rsu[2].mobility.x = 450
+*.rsu[2].mobility.y = 450
+*.rsu[2].mobility.z = 3
+
+*.rsu[3].mobility.x = 0
+*.rsu[3].mobility.y = 900
+*.rsu[3].mobility.z = 3
+
+*.rsu[4].mobility.x = 900
+*.rsu[4].mobility.y = 900
+*.rsu[4].mobility.z = 3
+
+*.rsu[*].applType = "FedRANDOMRSU11p"
+*.rsu[*].appl.headerLength = 80 bit
+*.rsu[*].appl.sendBeacons = false
+*.rsu[*].appl.dataOnSch = false
+*.rsu[*].appl.beaconUserPriority = 7
+*.rsu[*].appl.dataUserPriority = 5
+*.rsu[*].nic.phy80211p.antennaOffsetZ = 0 m
+
+*.rsu[*].appl.model = "GENERIC_MODEL GENERIC_MODEL GENERIC_MODEL"
+*.rsu[*].appl.dataset = "MNIST FMNIST CIFAR10"
+*.rsu[*].appl.scenario = "GRID"
+*.rsu[*].appl.seed = 42
+*.rsu[*].appl.nonIID = true
+*.rsu[*].appl.trainFlag = true
+*.rsu[*].appl.epochs = 1
+*.rsu[*].appl.batch = 1024
+*.rsu[*].appl.numClients = 100
+*.rsu[*].appl.strategy = "FED_AVG"
+*.rsu[*].appl.computationRequirement = "700 900 1600"
+*.rsu[*].appl.roundDeadline = 1.0
+*.rsu[*].appl.K = 1.0
+*.rsu[*].appl.address = "127.0.0.1:5000"
+
+##########################################################
+# 11p specific parameters #
+# #
+# NIC-Settings #
+##########################################################
+*.connectionManager.sendDirect = true
+*.connectionManager.maxInterfDist = 2600m
+*.connectionManager.drawMaxIntfDist = false
+
+*.**.nic.mac1609_4.useServiceChannel = false
+
+#300
+*.node[*].nic.mac1609_4.txPower = 15mW
+*.node[*].nic.mac1609_4.bitrate = 6Mbps
+*.node[*].nic.phy80211p.minPowerLevel = -86dBm
+
+#510
+*.rsu[*].nic.mac1609_4.txPower = 40mW
+*.rsu[*].nic.mac1609_4.bitrate = 6Mbps
+*.rsu[*].nic.phy80211p.minPowerLevel = -86dBm
+
+*.**.nic.phy80211p.useNoiseFloor = true
+*.**.nic.phy80211p.noiseFloor = -98dBm
+
+*.**.nic.phy80211p.decider = xmldoc("config.xml")
+*.**.nic.phy80211p.analogueModels = xmldoc("config.xml")
+*.**.nic.phy80211p.usePropagationDelay = true
+
+*.**.nic.phy80211p.antenna = xmldoc("antenna.xml", "/root/Antenna[@id='monopole']")
+*.node[*].nic.phy80211p.antennaOffsetY = 0 m
+*.node[*].nic.phy80211p.antennaOffsetZ = 1.895 m
+
+##########################################################
+# App Layer #
+##########################################################
+*.node[*].applType = "MLApp"
+*.node[*].appl.headerLength = 80 bit
+*.node[*].appl.sendBeacons = true
+*.node[*].appl.dataOnSch = false
+*.node[*].appl.beaconInterval = 0.1s
+
+*.node[*].appl.epochs = 5
+*.node[*].appl.batch = 32
+*.node[*].appl.computationCapability = uniform(0.5GHz, 4GHz)
+*.node[*].appl.address = "127.0.0.1:5000"
+*.node[*].appl.speedZero = false
+
+##########################################################
+# Mobility #
+##########################################################
+*.node[*].veinsmobility.x = 0
+*.node[*].veinsmobility.y = 0
+*.node[*].veinsmobility.z = 0
\ No newline at end of file
diff --git a/simulations/multi_model/simple_100_clients.fcd.xml b/simulations/multi_model/simple_100_clients.fcd.xml
new file mode 100644
index 0000000..e0785e5
--- /dev/null
+++ b/simulations/multi_model/simple_100_clients.fcd.xml
@@ -0,0 +1,7632 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/simulations/multi_model/simple_100_clients.launchd.xml b/simulations/multi_model/simple_100_clients.launchd.xml
new file mode 100644
index 0000000..addcd9a
--- /dev/null
+++ b/simulations/multi_model/simple_100_clients.launchd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/simulations/multi_model/simple_100_clients.rou.xml b/simulations/multi_model/simple_100_clients.rou.xml
new file mode 100644
index 0000000..26f8f92
--- /dev/null
+++ b/simulations/multi_model/simple_100_clients.rou.xml
@@ -0,0 +1,403 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/simulations/multi_model/simple_100_clients.sumo.cfg b/simulations/multi_model/simple_100_clients.sumo.cfg
new file mode 100644
index 0000000..a4041c3
--- /dev/null
+++ b/simulations/multi_model/simple_100_clients.sumo.cfg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
diff --git a/simulations/multi_model/simple_200_clients.fcd.xml b/simulations/multi_model/simple_200_clients.fcd.xml
new file mode 100644
index 0000000..2eac75f
--- /dev/null
+++ b/simulations/multi_model/simple_200_clients.fcd.xml
@@ -0,0 +1,16769 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/simulations/multi_model/simple_200_clients.launchd.xml b/simulations/multi_model/simple_200_clients.launchd.xml
new file mode 100644
index 0000000..0353fca
--- /dev/null
+++ b/simulations/multi_model/simple_200_clients.launchd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/simulations/multi_model/simple_200_clients.rou.xml b/simulations/multi_model/simple_200_clients.rou.xml
new file mode 100644
index 0000000..5c5d42f
--- /dev/null
+++ b/simulations/multi_model/simple_200_clients.rou.xml
@@ -0,0 +1,803 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/simulations/multi_model/simple_200_clients.sumo.cfg b/simulations/multi_model/simple_200_clients.sumo.cfg
new file mode 100644
index 0000000..2597414
--- /dev/null
+++ b/simulations/multi_model/simple_200_clients.sumo.cfg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/simulations/multi_model/simple_50_clients.fcd.xml b/simulations/multi_model/simple_50_clients.fcd.xml
new file mode 100644
index 0000000..7ef1fde
--- /dev/null
+++ b/simulations/multi_model/simple_50_clients.fcd.xml
@@ -0,0 +1,4345 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/simulations/multi_model/simple_50_clients.launchd.xml b/simulations/multi_model/simple_50_clients.launchd.xml
new file mode 100644
index 0000000..f78a917
--- /dev/null
+++ b/simulations/multi_model/simple_50_clients.launchd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/simulations/multi_model/simple_50_clients.rou.xml b/simulations/multi_model/simple_50_clients.rou.xml
new file mode 100644
index 0000000..97581ca
--- /dev/null
+++ b/simulations/multi_model/simple_50_clients.rou.xml
@@ -0,0 +1,207 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/simulations/multi_model/simple_50_clients.sumo.cfg b/simulations/multi_model/simple_50_clients.sumo.cfg
new file mode 100644
index 0000000..c4757d1
--- /dev/null
+++ b/simulations/multi_model/simple_50_clients.sumo.cfg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
diff --git a/simulations/multi_model/simple_network.net.xml b/simulations/multi_model/simple_network.net.xml
new file mode 100644
index 0000000..fe4618e
--- /dev/null
+++ b/simulations/multi_model/simple_network.net.xml
@@ -0,0 +1,7900 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/simulations/simple_example/SimpleScenario.ned b/simulations/simple_example/SimpleScenario.ned
new file mode 100644
index 0000000..47a6be8
--- /dev/null
+++ b/simulations/simple_example/SimpleScenario.ned
@@ -0,0 +1,9 @@
+import org.car2x.veins.nodes.RSU;
+import org.car2x.veins.nodes.Scenario;
+
+network SimpleScenario extends Scenario{
+ submodules:
+ rsu[1]: RSU {
+ @display("p=150,140;i=veins/sign/yellowdiamond;is=vs");
+ }
+}
diff --git a/simulations/simple_example/antenna.xml b/simulations/simple_example/antenna.xml
new file mode 100644
index 0000000..cbced1d
--- /dev/null
+++ b/simulations/simple_example/antenna.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/simulations/simple_example/config.xml b/simulations/simple_example/config.xml
new file mode 100644
index 0000000..a059adb
--- /dev/null
+++ b/simulations/simple_example/config.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/simulations/veins/omnetpp.ini b/simulations/simple_example/omnetpp.ini
similarity index 70%
rename from simulations/veins/omnetpp.ini
rename to simulations/simple_example/omnetpp.ini
index 1db87d5..325647a 100644
--- a/simulations/veins/omnetpp.ini
+++ b/simulations/simple_example/omnetpp.ini
@@ -6,7 +6,7 @@ cmdenv-status-frequency = 1s
image-path = ../../images
-network = SimulationScenario
+network = SimpleScenario
##########################################################
# Simulation parameters #
@@ -14,26 +14,20 @@ network = SimulationScenario
debug-on-errors = true
print-undisposed = true
-sim-time-limit = 65s
+sim-time-limit = 200s
**.scalar-recording = true
**.vector-recording = true
-*.playgroundSizeX = 2500m
-*.playgroundSizeY = 2500m
+*.playgroundSizeX = 1000m
+*.playgroundSizeY = 1000m
*.playgroundSizeZ = 50m
-
##########################################################
# Annotation parameters #
##########################################################
*.annotations.draw = true
-##########################################################
-# Obstacle parameters #
-##########################################################
-*.obstacles.obstacles = xmldoc("config.xml", "//AnalogueModel[@type='SimpleObstacleShadowing']/obstacles")
-
##########################################################
# TraCIScenarioManager parameters #
##########################################################
@@ -41,28 +35,42 @@ sim-time-limit = 65s
*.manager.host = "localhost"
*.manager.port = 9999
*.manager.autoShutdown = true
-*.manager.launchConfig = xmldoc("erlangen.launchd.xml")
+*.manager.launchConfig = xmldoc("simple_2_clients.launchd.xml")
+*.manager.allowPedestrians = false
##########################################################
# RSU SETTINGS #
# #
# #
##########################################################
-*.rsu[0].mobility.x = 2000
-*.rsu[0].mobility.y = 2000
+*.rsu[0].mobility.x = 500
+*.rsu[0].mobility.y = 500
*.rsu[0].mobility.z = 3
-*.rsu[*].applType = "MLRSU11p"
-*.rsu[*].appl.cloudModuleName = "cloud[0]"
-*.rsu[*].appl.modelName = "./results/MNIST/model_"
-*.rsu[*].appl.epochs = 1
-*.rsu[*].appl.batchSize = 32
+*.rsu[*].applType = "FedLimRSU11p"
*.rsu[*].appl.headerLength = 80 bit
*.rsu[*].appl.sendBeacons = false
*.rsu[*].appl.dataOnSch = false
*.rsu[*].appl.beaconUserPriority = 7
*.rsu[*].appl.dataUserPriority = 5
*.rsu[*].nic.phy80211p.antennaOffsetZ = 0 m
+
+
+*.rsu[*].appl.model = "GENERIC_MODEL"
+*.rsu[*].appl.dataset = "MNIST"
+*.rsu[*].appl.scenario = "GRID"
+*.rsu[*].appl.seed = 42
+*.rsu[*].appl.nonIID = false
+*.rsu[*].appl.trainFlag = true
+*.rsu[*].appl.epochs = 1
+*.rsu[*].appl.batch = 1024
+*.rsu[*].appl.numClients = 2
+*.rsu[*].appl.strategy = "FED_AVG"
+*.rsu[*].appl.computationRequirement = "900"
+*.rsu[*].appl.roundDeadline = 1.0
+*.rsu[*].appl.K = 1.0
+*.rsu[*].appl.address = "127.0.0.1:5000"
+
##########################################################
# 11p specific parameters #
# #
@@ -74,9 +82,14 @@ sim-time-limit = 65s
*.**.nic.mac1609_4.useServiceChannel = false
-*.**.nic.mac1609_4.txPower = 20mW
-*.**.nic.mac1609_4.bitrate = 6Mbps
-*.**.nic.phy80211p.minPowerLevel = -110dBm
+#300
+*.node[*].nic.mac1609_4.txPower = 15mW
+*.node[*].nic.mac1609_4.bitrate = 6Mbps
+*.node[*].nic.phy80211p.minPowerLevel = -86dBm
+
+*.rsu[*].nic.mac1609_4.txPower = 20mW
+*.rsu[*].nic.mac1609_4.bitrate = 6Mbps
+*.rsu[*].nic.phy80211p.minPowerLevel = -110dBm
*.**.nic.phy80211p.useNoiseFloor = true
*.**.nic.phy80211p.noiseFloor = -98dBm
@@ -94,28 +107,18 @@ sim-time-limit = 65s
##########################################################
*.node[*].applType = "MLApp"
*.node[*].appl.headerLength = 80 bit
-*.node[*].appl.sendBeacons = false
+*.node[*].appl.sendBeacons = true
*.node[*].appl.dataOnSch = false
-*.node[*].appl.beaconInterval = 1s
-*.node[*].appl.modelName = "./results/MNIST/model_"
-*.node[*].appl.epochs = 1
-*.node[*].appl.batchSize = 32
-*.node[*].appl.trainInterval = 5.0
+*.node[*].appl.beaconInterval = 0.1s
+*.node[*].appl.epochs = 5
+*.node[*].appl.batch = 32
+*.node[*].appl.computationCapability = uniform(0.5GHz, 4GHz)
+*.node[*].appl.address = "127.0.0.1:5000"
+*.node[*].appl.speedZero = true
##########################################################
# Mobility #
##########################################################
*.node[*].veinsmobility.x = 0
*.node[*].veinsmobility.y = 0
-*.node[*].veinsmobility.z = 0
-
-[Config Default]
-
-[Config WithBeaconing]
-*.rsu[*].appl.sendBeacons = true
-*.node[*].appl.sendBeacons = true
-
-[Config WithChannelSwitching]
-*.**.nic.mac1609_4.useServiceChannel = true
-*.node[*].appl.dataOnSch = true
-*.rsu[*].appl.dataOnSch = true
+*.node[*].veinsmobility.z = 0
\ No newline at end of file
diff --git a/simulations/simple_example/simple_10_clients.launchd.xml b/simulations/simple_example/simple_10_clients.launchd.xml
new file mode 100644
index 0000000..e4dc36b
--- /dev/null
+++ b/simulations/simple_example/simple_10_clients.launchd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/simulations/simple_example/simple_10_clients.rou.xml b/simulations/simple_example/simple_10_clients.rou.xml
new file mode 100644
index 0000000..3184ed8
--- /dev/null
+++ b/simulations/simple_example/simple_10_clients.rou.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/simulations/simple_example/simple_10_clients.sumo.cfg b/simulations/simple_example/simple_10_clients.sumo.cfg
new file mode 100644
index 0000000..c890b55
--- /dev/null
+++ b/simulations/simple_example/simple_10_clients.sumo.cfg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
diff --git a/simulations/simple_example/simple_2_clients.launchd.xml b/simulations/simple_example/simple_2_clients.launchd.xml
new file mode 100644
index 0000000..6b667da
--- /dev/null
+++ b/simulations/simple_example/simple_2_clients.launchd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/simulations/simple_example/simple_2_clients.rou.xml b/simulations/simple_example/simple_2_clients.rou.xml
new file mode 100644
index 0000000..2d63352
--- /dev/null
+++ b/simulations/simple_example/simple_2_clients.rou.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/simulations/simple_example/simple_2_clients.sumo.cfg b/simulations/simple_example/simple_2_clients.sumo.cfg
new file mode 100644
index 0000000..f4e70e8
--- /dev/null
+++ b/simulations/simple_example/simple_2_clients.sumo.cfg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
diff --git a/simulations/simple_example/simple_network.net.xml b/simulations/simple_example/simple_network.net.xml
new file mode 100644
index 0000000..fe4618e
--- /dev/null
+++ b/simulations/simple_example/simple_network.net.xml
@@ -0,0 +1,7900 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/simulations/veins/SimulationScenario.ned b/simulations/veins/SimulationScenario.ned
deleted file mode 100644
index 52a6b22..0000000
--- a/simulations/veins/SimulationScenario.ned
+++ /dev/null
@@ -1,47 +0,0 @@
-import org.car2x.veins.base.connectionManager.ConnectionManager;
-import org.car2x.veins.base.modules.BaseWorldUtility;
-import org.car2x.veins.modules.mobility.traci.TraCIScenarioManager*;
-import org.car2x.veins.modules.obstacle.ObstacleControl;
-import org.car2x.veins.modules.world.annotations.AnnotationManager;
-import org.car2x.veins.nodes.Car;
-import org.car2x.veins.nodes.RSU;
-import org.car2x.veins.visualizer.roads.RoadsCanvasVisualizer;
-
-network SimulationScenario{
- parameters:
- double playgroundSizeX @unit(m); // x size of the area the nodes are in (in meters)
- double playgroundSizeY @unit(m); // y size of the area the nodes are in (in meters)
- double playgroundSizeZ @unit(m); // z size of the area the nodes are in (in meters)
- @display("bgb=$playgroundSizeX,$playgroundSizeY");
- submodules:
- obstacles: ObstacleControl {
- @display("p=240,50");
- }
- annotations: AnnotationManager {
- @display("p=260,50");
- }
- connectionManager: ConnectionManager {
- parameters:
- @display("p=150,0;i=abstract/multicast");
- }
- world: BaseWorldUtility {
- parameters:
- playgroundSizeX = veins_eval_by_version(veins_omnetpp_buildnum(), "playgroundSizeX", 1525, "parent.playgroundSizeX");
- playgroundSizeY = veins_eval_by_version(veins_omnetpp_buildnum(), "playgroundSizeY", 1525, "parent.playgroundSizeY");
- playgroundSizeZ = veins_eval_by_version(veins_omnetpp_buildnum(), "playgroundSizeZ", 1525, "parent.playgroundSizeZ");
- @display("p=30,0;i=misc/globe");
- }
- manager: TraCIScenarioManagerLaunchd {
- parameters:
- @display("p=512,128");
- }
- roadsCanvasVisualizer: RoadsCanvasVisualizer {
- @display("p=300,0");
- }
- node[0]: Car {
- }
- rsu[1]: RSU {
- @display("p=150,140;i=veins/sign/yellowdiamond;is=vs");
- }
- connections allowunconnected:
-}
diff --git a/simulations/veins/config.xml b/simulations/veins/config.xml
deleted file mode 100644
index 03ac7b2..0000000
--- a/simulations/veins/config.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/simulations/veins/erlangen.launchd.xml b/simulations/veins/erlangen.launchd.xml
deleted file mode 100644
index 7b7368b..0000000
--- a/simulations/veins/erlangen.launchd.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/simulations/veins/erlangen.net.xml b/simulations/veins/erlangen.net.xml
deleted file mode 100644
index 7e2b0ee..0000000
--- a/simulations/veins/erlangen.net.xml
+++ /dev/null
@@ -1,10960 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/simulations/veins/erlangen.poly.xml b/simulations/veins/erlangen.poly.xml
deleted file mode 100644
index bb8372d..0000000
--- a/simulations/veins/erlangen.poly.xml
+++ /dev/null
@@ -1,825 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/simulations/veins/erlangen.rou.xml b/simulations/veins/erlangen.rou.xml
deleted file mode 100644
index 4105668..0000000
--- a/simulations/veins/erlangen.rou.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/simulations/veins/erlangen.sumo.cfg b/simulations/veins/erlangen.sumo.cfg
deleted file mode 100644
index a8f3021..0000000
--- a/simulations/veins/erlangen.sumo.cfg
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/simulations/veins/run b/simulations/veins/run
deleted file mode 100755
index 89f67cf..0000000
--- a/simulations/veins/run
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-cd `dirname $0`
-../src/flexe -n .:../src $*
-# for shared lib, use: opp_run -l ../src/flexe -n .:../src $*
diff --git a/src/flexe/application/FedLimRSU11p.cc b/src/flexe/application/FedLimRSU11p.cc
new file mode 100644
index 0000000..a4a1760
--- /dev/null
+++ b/src/flexe/application/FedLimRSU11p.cc
@@ -0,0 +1,213 @@
+#include "FedLimRSU11p.h"
+
+using namespace veins;
+using namespace flexe;
+
+Define_Module(FedLimRSU11p);
+
+FedLimRSU11p::~FedLimRSU11p() {
+ cancelAndDelete(clientSelectionEvt);
+ cancelAndDelete(sendGlobalModelEvt);
+ cancelAndDelete(aggregateModelsEvt);
+ client->end(self, model, dataset, scenario, seed, nonIID, idModel, "");
+ delete client;
+}
+
+
+void FedLimRSU11p::initialize(int stage){
+ DemoBaseApplLayer::initialize(stage);
+ if(stage == 0){
+ self = getParentModule()->getIndex();
+ //NED VARs
+ model = par("model").stringValue();
+ dataset = par("dataset").stringValue();
+ scenario = par("scenario").stringValue();
+ seed = par("seed").intValue();
+ nonIID = par("nonIID").boolValue();
+ idModel = self;
+ trainFlag = par("trainFlag").boolValue();
+ epochs = par("epochs").intValue();
+ batch = par("batch").intValue();
+ numClients = par("numClients").intValue();
+ percentDataset = par("percentDataset").doubleValue();
+ strategy = par("strategy").stringValue();
+ computationRequirement = std::stod(par("computationRequirement").stringValue());
+ roundDeadline = par("roundDeadline").doubleValue();
+ address = par("address").stringValue();
+ K = par("K").doubleValue();
+ //NED VARs
+
+ //METRICS
+ selectClientsMetric = registerSignal("selectClients");
+ receivedClientsMetric = registerSignal("receivedClients");
+ connectedClientsMetric = registerSignal("connectedClients");
+ roundMetric = registerSignal("round");
+ lossTrainMetric = registerSignal("lossTrain");
+ accuracyTrainMetric = registerSignal("accuracyTrain");
+ lossEvaluateMetric = registerSignal("lossEvaluate");
+ accuracyEvaluateMetric = registerSignal("accuracyEvaluate");
+ //METRICS
+ }else if(stage == 1){
+ //First Training
+ chArgs.SetMaxReceiveMessageSize(-1);
+ chArgs.SetMaxSendMessageSize(-1);
+ client = new FlexeClient(grpc::CreateCustomChannel(address, grpc::InsecureChannelCredentials(), chArgs));
+ std::tie(numExamples, entropy, lossModel, accuracyModel, outputMSG) = client->initialize_parameters(self, model, dataset, scenario, seed, nonIID, idModel, trainFlag, epochs, batch, numClients, percentDataset, "NULL", "NULL");
+ emit(lossTrainMetric, (double)lossModel);
+ emit(accuracyTrainMetric, (double)accuracyModel);
+ emit(lossEvaluateMetric, (double)lossModel);
+ emit(accuracyEvaluateMetric, (double)accuracyModel);
+ //First Training
+
+ scheduleAt(simTime().dbl()+0.1, clientSelectionEvt);
+ }
+}
+
+void FedLimRSU11p::onBSM(DemoSafetyMessage* bsm){
+ switch(bsm->getKind()){
+ case SEND_BEACON_EVT:{
+ std::vector vectorName = client->splitSTR(bsm->getName(), ';');
+ std::cout << self << " (RSU|onBSM) Veh-ID: " << vectorName[1] << " SUMO-ID: " << vectorName[0] << " MSG: " << bsm->getName() << endl;
+ std::cout << self << " (RSU|onBSM) Veh-ID: " << vectorName[1] << " Speed: " << bsm->getSpeed() << endl;
+ connectedClientsMap.insert(std::make_pair(std::stoi(vectorName[1]), vectorName[0]));
+ std::cout << "\n" << endl;
+ break;
+ }
+ default:{
+ std::cout << self << " (RSU|onBSM) The message type was not detected. " << bsm->getKind() << endl;
+ std::cout << "\n" << endl;
+ break;
+ }
+ }
+}
+
+void FedLimRSU11p::onWSM(BaseFrame1609_4* wsm){
+ switch(wsm->getKind()){
+ case SEND_GLOBAL_MODEL_EVT:{
+ break;
+ }
+ case SEND_LOCAL_MODEL_EVT:{
+ FlexeMessage* flexe_msg = check_and_cast(wsm);
+ std::cout << self << " (RSU|onWSM) SEND_LOCAL_MODEL_EVT " << simTime().dbl() << " Destination: " << flexe_msg->getIdModel() << endl;
+ if(idModel == flexe_msg->getIdModel()){
+ localModelID = flexe_msg->getSenderID();
+ if(!(std::find(receivedModelsVector.begin(), receivedModelsVector.end(), localModelID) != receivedModelsVector.end())){
+ receivedModelsVector.push_back(localModelID);
+ receivedNumberExamplesVector.push_back(flexe_msg->getNumExamples());
+ }
+ }
+ break;
+ }
+ default:{
+ std::cout << self << " (RSU|onWSM) The message type was not detected. " << wsm->getKind() << endl;
+ break;
+ }
+ }
+}
+
+void FedLimRSU11p::onWSA(DemoServiceAdvertisment* wsa){
+}
+
+void FedLimRSU11p::handleSelfMsg(cMessage* msg){
+ switch(msg->getKind()){
+ case AGGREGATE_MODELS_EVT:{
+ std::cout << self << " (RSU|handleSelfMsg) AGGREGATE_MODELS_EVT " << simTime().dbl() << endl;
+ if(receivedModelsVector.size() != 0){
+ clientsModels = "";
+ numExamplesModels = "";
+ for(std::vector::iterator it = receivedModelsVector.begin(); it != receivedModelsVector.end(); it++){
+ clientsModels = clientsModels + ";" + std::to_string(*it);
+ emit(receivedClientsMetric, (int)*it);
+ }
+ for(std::vector::iterator it = receivedNumberExamplesVector.begin(); it != receivedNumberExamplesVector.end(); it++){
+ numExamplesModels = numExamplesModels + ";" + std::to_string(*it);
+ }
+ emit(roundMetric, (double)roundDeadline);
+
+ std::tie(numExamples, entropy, lossModel, accuracyModel, outputMSG) = client->aggregate_sync_fit(self, model, dataset, scenario, seed, nonIID, idModel, numClients, numExamplesModels, clientsModels, strategy, "NULL");
+ emit(lossTrainMetric, (double)lossModel);
+ emit(accuracyTrainMetric, (double)accuracyModel);
+
+ std::tie(numExamples, entropy, lossModel, accuracyModel, outputMSG) = client->aggregate_evaluate(self, model, dataset, scenario, seed, nonIID, idModel, numClients, numExamplesModels, clientsModels, strategy, "NULL");
+ emit(lossEvaluateMetric, (double)lossModel);
+ emit(accuracyEvaluateMetric, (double)accuracyModel);
+ }
+ //CLEAR DATA STRUCTURES
+ receivedModelsVector.clear();
+ receivedNumberExamplesVector.clear();
+ //CLEAR DATA STRUCTURES
+ std::cout << "\n" << endl;
+ if(!clientSelectionEvt->isScheduled()){
+ scheduleAt(simTime().dbl(), clientSelectionEvt);
+ }
+ break;
+ }
+ case CLIENT_SELECTION_EVT:{
+ std::cout << self << " (RSU|handleSelfMsg) CLIENT_SELECTION_EVT " << simTime().dbl() << endl;
+ selectedClients = "";
+ if(!connectedClientsMap.empty()){
+ std::cout << self << " (RSU|handleSelfMsg) connectedClientsMap NOT EMPTY! " << endl;
+ //CLIENT SELECTION
+ emit(connectedClientsMetric, (int)connectedClientsMap.size());
+ numSelectedClients = std::ceil(connectedClientsMap.size()*K);
+
+ std::cout << self << " (RSU|handleSelfMsg) N. of Connected Clients: " << connectedClientsMap.size() << endl;
+ std::cout << self << " (RSU|handleSelfMsg) N. of Selected Clients: " << numSelectedClients << endl;
+
+ for(std::map::iterator it = connectedClientsMap.begin(); it != connectedClientsMap.end(); ++it) {
+ connectedClientsVector.push_back(it->first);
+ }
+
+ std::srand(time(nullptr));
+ std::random_shuffle(std::begin(connectedClientsVector), std::end(connectedClientsVector));
+ counter = 0;
+ for(std::vector::iterator it = connectedClientsVector.begin(); it != connectedClientsVector.end(); it++){
+ if(counter >= numSelectedClients){
+ break;
+ }
+ std::cout << self << " (RSU|handleSelfMsg) Select Model from Vehicle-ID: " << *it << endl;
+ selectedClients = selectedClients + ";" + std::to_string(*it);
+ emit(selectClientsMetric, *it);
+ counter++;
+ }
+ //CLIENT SELECTION
+
+ //CLEAR DATA STRUCTURES
+ connectedClientsMap.clear();
+ connectedClientsVector.clear();
+ //CLEAR DATA STRUCTURES
+
+ //SEND GLOBAL MODEL
+ FlexeMessage* flexe_msg = new FlexeMessage();
+ DemoBaseApplLayer::populateWSM(flexe_msg);
+ flexe_msg->setKind(SEND_GLOBAL_MODEL_EVT);
+ flexe_msg->setSenderID(self);
+ flexe_msg->setModel(model.c_str());
+ flexe_msg->setDataset(dataset.c_str());
+ flexe_msg->setScenario(scenario.c_str());
+ flexe_msg->setSeed(seed);
+ flexe_msg->setNonIID(nonIID);
+ flexe_msg->setIdModel(idModel);
+ flexe_msg->setNumClients(numClients);
+ flexe_msg->setPercentDataset(percentDataset);
+ flexe_msg->setModelVersion(-1);
+ flexe_msg->setClientSelection(selectedClients.c_str());
+ flexe_msg->setComputationRequirement(computationRequirement);
+ DemoBaseApplLayer::sendDown(flexe_msg);
+ //SEND GLOBAL MODEL
+
+ scheduleAt(simTime().dbl() + roundDeadline, aggregateModelsEvt);
+ }else{
+ if(!clientSelectionEvt->isScheduled()){
+ scheduleAt(simTime().dbl() + 0.1, clientSelectionEvt);
+ }
+ }
+ std::cout << "\n" << endl;
+ break;
+ }
+ default: {
+ std::cout << self << " (RSU|handleSelfMsg) - The message type was not detected. " << msg->getKind() << endl;
+ break;
+ }
+ }
+}
diff --git a/src/flexe/application/FedLimRSU11p.h b/src/flexe/application/FedLimRSU11p.h
new file mode 100644
index 0000000..2fd64e6
--- /dev/null
+++ b/src/flexe/application/FedLimRSU11p.h
@@ -0,0 +1,107 @@
+/**@title
+ * Federated Averaging (FedAVG)
+ *
+ * @brief
+ *
+ *
+ * @author Wellington Lobato (wellington@lrc.ic.unicamp.br)
+ *
+ */
+#pragma once
+#include
+#include
+#include
+#include
+
+#include "veins/modules/application/ieee80211p/DemoBaseApplLayer.h"
+#include "../messages/FlexeMessage_m.h"
+#include "../application/FlexeClient.h"
+
+using namespace omnetpp;
+using namespace veins;
+
+namespace flexe {
+class FedLimRSU11p : public DemoBaseApplLayer {
+public:
+ ~FedLimRSU11p();
+ void initialize(int stage) override;
+
+protected:
+ //MSG TYPE
+ enum selfMessageKinds {
+ AGGREGATE_MODELS_EVT = 16,
+ CLIENT_SELECTION_EVT = 17,
+ SEND_GLOBAL_MODEL_EVT = 18,
+ SEND_LOCAL_MODEL_EVT = 19,
+ };
+ void onBSM(DemoSafetyMessage* bsm) override;
+ void onWSM(BaseFrame1609_4* wsm) override;
+ void onWSA(DemoServiceAdvertisment* wsa) override;
+
+ void handleSelfMsg(cMessage* msg) override;
+
+ //VAR
+ int self;
+ //NED VARs
+ std::string model;
+ std::string dataset;
+ std::string scenario;
+ int seed;
+ bool nonIID;
+ int idModel;
+ bool trainFlag;
+ int epochs;
+ int batch;
+ int numClients;
+ double percentDataset;
+ std::string strategy;
+ double computationRequirement;
+ double roundDeadline;
+ double K;
+ //NED VARs
+
+ int numSelectedClients;
+ int counter;
+ int localModelID;
+ double lossModel;
+ double accuracyModel;
+ int numExamples;
+ double entropy;
+ std::string outputMSG;
+
+ std::string clientsModels;
+ std::string numExamplesModels;
+ std::string selectedClients;
+
+ std::map connectedClientsMap; //(Veins-ID, SUMO-ID)
+ std::vector connectedClientsVector;
+ std::vector receivedModelsVector;
+ std::vector receivedNumberExamplesVector;
+
+ ModelReply modelOutput;
+ GenericReply genericOutput;
+
+ std::string address;
+ grpc::ChannelArguments chArgs;
+ FlexeClient* client = NULL;
+
+ //TRACI
+ TraCIScenarioManager* manager;
+ TraCICommandInterface* traci;
+
+ //MSG
+ cMessage* aggregateModelsEvt = new cMessage("Aggregate received models event", AGGREGATE_MODELS_EVT);
+ cMessage* clientSelectionEvt = new cMessage("Client selection mechanism event", CLIENT_SELECTION_EVT);
+ cMessage* sendGlobalModelEvt = new cMessage("Send Aggregated Model Event", SEND_GLOBAL_MODEL_EVT);
+
+ //METRICS
+ simsignal_t selectClientsMetric;
+ simsignal_t receivedClientsMetric;
+ simsignal_t connectedClientsMetric;
+ simsignal_t roundMetric;
+ simsignal_t lossTrainMetric;
+ simsignal_t accuracyTrainMetric;
+ simsignal_t lossEvaluateMetric;
+ simsignal_t accuracyEvaluateMetric;
+};
+}
diff --git a/src/flexe/application/FedLimRSU11p.ned b/src/flexe/application/FedLimRSU11p.ned
new file mode 100644
index 0000000..84eebe1
--- /dev/null
+++ b/src/flexe/application/FedLimRSU11p.ned
@@ -0,0 +1,52 @@
+package flexe.application;
+import org.car2x.veins.modules.application.ieee80211p.DemoBaseApplLayer;
+
+simple FedLimRSU11p extends DemoBaseApplLayer
+{
+ @class(flexe::FedLimRSU11p);
+ //General Parameters
+ string model = default("NONE");
+ string dataset = default("MNIST");
+ string scenario = default("GRID");
+ int seed = default(42);
+ bool nonIID = default(false);
+ bool trainFlag = default(true);
+ int epochs = default(1);
+ int batch = default(1024);
+ int numClients = default(1);
+ double percentDataset = default(100.0);
+ string strategy = default("FED_AVG");
+ string computationRequirement = default("900"); //in cycles/bit
+
+ //GRPC Address
+ string address = default("127.0.0.1:5000");
+
+ //SemiSync Parameters
+ double roundDeadline = default(60.0);
+ double K = default(1.0); //Selection Fraction of Clients (1.0 -> 100%, 0.5 -> 50%, 0.25 -> 25%)
+
+ @signal[connectedClients](type="long");
+ @statistic[connectedClientsCount](title="connectedClients count"; source="connectedClients"; record=vector,stats; interpolationmode=none);
+
+ @signal[selectClients](type="long");
+ @statistic[selectClientsCount](title="selectClients count"; source="selectClients"; record=vector,stats; interpolationmode=none);
+
+ @signal[receivedClients](type="long");
+ @statistic[receivedClientsClientsCount](title="receivedClients count"; source="receivedClients"; record=vector,stats; interpolationmode=none);
+
+ @signal[round](type="double");
+ @statistic[roundCount](title="round count"; source="round"; record=vector,stats; interpolationmode=none);
+
+ @signal[lossTrain](type="double");
+ @statistic[lossTrainCount](title="lossTrain count"; source="lossTrain"; record=vector,stats; interpolationmode=none);
+
+ @signal[accuracyTrain](type="double");
+ @statistic[accuracyTrainCount](title="accuracyTrain count"; source="accuracyTrain"; record=vector,stats; interpolationmode=none);
+
+ @signal[lossEvaluate](type="double");
+ @statistic[lossEvaluateCount](title="lossEvaluate count"; source="lossEvaluate"; record=vector,stats; interpolationmode=none);
+
+ @signal[accuracyEvaluate](type="double");
+ @statistic[accuracyEvaluateCount](title="accuracyEvaluate count"; source="accuracyEvaluate"; record=vector,stats; interpolationmode=none);
+
+}
\ No newline at end of file
diff --git a/src/flexe/application/FedRANDOMRSU11p.cc b/src/flexe/application/FedRANDOMRSU11p.cc
new file mode 100644
index 0000000..aa11eaf
--- /dev/null
+++ b/src/flexe/application/FedRANDOMRSU11p.cc
@@ -0,0 +1,270 @@
+#include "FedRANDOMRSU11p.h"
+
+using namespace veins;
+using namespace flexe;
+
+Define_Module(FedRANDOMRSU11p);
+
+FedRANDOMRSU11p::~FedRANDOMRSU11p() {
+ cancelAndDelete(clientSelectionEvt);
+ cancelAndDelete(sendGlobalModelEvt);
+ cancelAndDelete(aggregateModelsEvt);
+ for(std::vector::iterator it = datasetVector.begin(); it != datasetVector.end(); it++){
+ dataset = *it;
+ model = datasetModelMap[dataset];
+ client->end(self, model, dataset, scenario, seed, nonIID, idModel, "");
+ }
+
+ delete client;
+}
+
+
+void FedRANDOMRSU11p::initialize(int stage){
+ DemoBaseApplLayer::initialize(stage);
+ if(stage == 0){
+ self = getParentModule()->getIndex();
+ //NED VARs
+ modelVector = cStringTokenizer(par("model")).asVector();
+ datasetVector = cStringTokenizer(par("dataset")).asVector();
+ scenario = par("scenario").stringValue();
+ seed = par("seed").intValue();
+ nonIID = par("nonIID").boolValue();
+ idModel = self;
+ trainFlag = par("trainFlag").boolValue();
+ epochs = par("epochs").intValue();
+ batch = par("batch").intValue();
+ numClients = par("numClients").intValue();
+ percentDataset = par("percentDataset").doubleValue();
+ strategy = par("strategy").stringValue();
+ computationRequirementVector = cStringTokenizer(par("computationRequirement")).asVector();
+ roundDeadline = par("roundDeadline").doubleValue();
+ address = par("address").stringValue();
+ K = par("K").doubleValue();
+ //NED VARs
+
+ //METRICS
+ selectClientsMetric = registerSignal("selectClients");
+ receivedClientsMetric = registerSignal("receivedClients");
+ connectedClientsMetric = registerSignal("connectedClients");
+ roundMetric = registerSignal("round");
+ //METRICS
+ }else if(stage == 1){
+ //First Training
+ chArgs.SetMaxReceiveMessageSize(-1);
+ chArgs.SetMaxSendMessageSize(-1);
+ client = new FlexeClient(grpc::CreateCustomChannel(address, grpc::InsecureChannelCredentials(), chArgs));
+ counter = 0;
+ for(std::vector::iterator it = datasetVector.begin(); it != datasetVector.end(); it++){
+ dataset = *it;
+ model = modelVector[counter];
+ computationRequirement = std::stod(computationRequirementVector[counter]);
+ std::cout << self << " - Initialize Model " << model << " Dataset " << dataset << " Computation Requirement: " << computationRequirement << endl;
+ datasetComputationRequirementMap.insert(std::pair(dataset, computationRequirement));
+ datasetModelMap.insert(std::pair(dataset, model));
+ datasetMetricMap.insert(std::pair(dataset, counter));
+ std::tie(numExamples, entropy, lossModel, accuracyModel, outputMSG) = client->initialize_parameters(self, model, dataset, scenario, seed, nonIID, idModel, trainFlag, epochs, batch, numClients, percentDataset, "NULL", "NULL");
+
+ //Loss Train
+ sprintf(signalName, "lossTrain%s", dataset.c_str());
+ signal = registerSignal(signalName);
+ statisticTemplate = getProperties()->get("statisticTemplate", "lossTrainCount");
+ getEnvir()->addResultRecorders(this, signal, signalName, statisticTemplate);
+ lossTrainSignals[counter] = signal;
+ emit(lossTrainSignals[counter], lossModel);
+
+ //Loss Evaluate
+ sprintf(signalName, "lossEvaluate%s", dataset.c_str());
+ signal = registerSignal(signalName);
+ statisticTemplate = getProperties()->get("statisticTemplate", "lossEvaluateCount");
+ getEnvir()->addResultRecorders(this, signal, signalName, statisticTemplate);
+ lossEvaluateSignals[counter] = signal;
+ emit(lossEvaluateSignals[counter], lossModel);
+
+ //Accuracy Train
+ sprintf(signalName, "accuracyTrain%s", dataset.c_str());
+ signal = registerSignal(signalName);
+ statisticTemplate = getProperties()->get("statisticTemplate", "accuracyTrainCount");
+ getEnvir()->addResultRecorders(this, signal, signalName, statisticTemplate);
+ accuracyTrainSignals[counter] = signal;
+ emit(accuracyTrainSignals[counter], accuracyModel);
+
+ //Accuracy Evaluate
+ sprintf(signalName, "accuracyEvaluate%s", dataset.c_str());
+ signal = registerSignal(signalName);
+ statisticTemplate = getProperties()->get("statisticTemplate", "accuracyEvaluateCount");
+ getEnvir()->addResultRecorders(this, signal, signalName, statisticTemplate);
+ accuracyEvaluateSignals[counter] = signal;
+ emit(accuracyEvaluateSignals[counter], accuracyModel);
+ counter++;
+ }
+ //First Training
+ std::srand(time(nullptr));
+ std::random_shuffle(std::begin(datasetVector), std::end(datasetVector));
+ dataset = datasetVector[0];
+ model = datasetModelMap[dataset];
+ computationRequirement = datasetComputationRequirementMap[dataset];
+ std::cout << self << " - RANDOM Model: " << model << " dataset: " << dataset << " Computation Requirement: " << computationRequirement << endl;
+ scheduleAt(simTime().dbl()+0.1, clientSelectionEvt);
+ }
+}
+
+void FedRANDOMRSU11p::onBSM(DemoSafetyMessage* bsm){
+ switch(bsm->getKind()){
+ case SEND_BEACON_EVT:{
+ std::vector vectorName = client->splitSTR(bsm->getName(), ';');
+ std::cout << self << " (RSU|onBSM) Veh-ID: " << vectorName[1] << " SUMO-ID: " << vectorName[0] << " MSG: " << bsm->getName() << endl;
+ std::cout << self << " (RSU|onBSM) Veh-ID: " << vectorName[1] << " Speed: " << bsm->getSpeed() << endl;
+ connectedClientsMap.insert(std::make_pair(std::stoi(vectorName[1]), vectorName[0]));
+ std::cout << "\n" << endl;
+ break;
+ }
+ default:{
+ std::cout << self << " (RSU|onBSM) The message type was not detected. " << bsm->getKind() << endl;
+ std::cout << "\n" << endl;
+ break;
+ }
+ }
+}
+
+void FedRANDOMRSU11p::onWSM(BaseFrame1609_4* wsm){
+ switch(wsm->getKind()){
+ case SEND_GLOBAL_MODEL_EVT:{
+ break;
+ }
+ case SEND_LOCAL_MODEL_EVT:{
+ FlexeMessage* flexe_msg = check_and_cast(wsm);
+ std::cout << self << " (RSU|onWSM) SEND_LOCAL_MODEL_EVT " << simTime().dbl() << " Destination: " << flexe_msg->getIdModel() << endl;
+ if(idModel == flexe_msg->getIdModel()){
+ localModelID = flexe_msg->getSenderID();
+ if(!(std::find(receivedModelsVector.begin(), receivedModelsVector.end(), localModelID) != receivedModelsVector.end())){
+ receivedModelsVector.push_back(localModelID);
+ receivedNumberExamplesVector.push_back(flexe_msg->getNumExamples());
+ }
+ }
+ break;
+ }
+ default:{
+ std::cout << self << " (RSU|onWSM) The message type was not detected. " << wsm->getKind() << endl;
+ break;
+ }
+ }
+}
+
+void FedRANDOMRSU11p::onWSA(DemoServiceAdvertisment* wsa){
+}
+
+void FedRANDOMRSU11p::handleSelfMsg(cMessage* msg){
+ switch(msg->getKind()){
+ case AGGREGATE_MODELS_EVT:{
+ std::cout << self << " (RSU|handleSelfMsg) AGGREGATE_MODELS_EVT " << simTime().dbl() << endl;
+ if(receivedModelsVector.size() != 0){
+ clientsModels = "";
+ numExamplesModels = "";
+ for(std::vector::iterator it = receivedModelsVector.begin(); it != receivedModelsVector.end(); it++){
+ clientsModels = clientsModels + ";" + std::to_string(*it);
+ emit(receivedClientsMetric, (int)*it);
+ }
+ for(std::vector::iterator it = receivedNumberExamplesVector.begin(); it != receivedNumberExamplesVector.end(); it++){
+ numExamplesModels = numExamplesModels + ";" + std::to_string(*it);
+ }
+ emit(roundMetric, (double)roundDeadline);
+
+ counter = datasetMetricMap[dataset];
+
+ std::tie(numExamples, entropy, lossModel, accuracyModel, outputMSG) = client->aggregate_sync_fit(self, model, dataset, scenario, seed, nonIID, idModel, numClients, numExamplesModels, clientsModels, strategy, "NULL");
+ emit(lossTrainSignals[counter], lossModel);
+ emit(accuracyTrainSignals[counter], accuracyModel);
+
+ std::tie(numExamples, entropy, lossModel, accuracyModel, outputMSG) = client->aggregate_evaluate(self, model, dataset, scenario, seed, nonIID, idModel, numClients, numExamplesModels, clientsModels, strategy, "NULL");
+ emit(lossEvaluateSignals[counter], lossModel);
+ emit(accuracyEvaluateSignals[counter], accuracyModel);
+ }
+ //CLEAR DATA STRUCTURES
+ receivedModelsVector.clear();
+ receivedNumberExamplesVector.clear();
+ //CLEAR DATA STRUCTURES
+
+ //NEW RANDOM MODEL & DATASET
+ std::srand(time(nullptr));
+ std::random_shuffle(std::begin(datasetVector), std::end(datasetVector));
+ dataset = datasetVector[0];
+ model = datasetModelMap[dataset];
+ computationRequirement = datasetComputationRequirementMap[dataset];
+ std::cout << self << " - RANDOM Model: " << model << " dataset: " << dataset << " Computation Requirement: " << computationRequirement << endl;
+ //NEW RANDOM MODEL & DATASET
+
+ std::cout << "\n" << endl;
+ if(!clientSelectionEvt->isScheduled()){
+ scheduleAt(simTime().dbl(), clientSelectionEvt);
+ }
+ break;
+ }
+ case CLIENT_SELECTION_EVT:{
+ std::cout << self << " (RSU|handleSelfMsg) CLIENT_SELECTION_EVT " << simTime().dbl() << endl;
+ selectedClients = "";
+ if(!connectedClientsMap.empty()){
+ std::cout << self << " (RSU|handleSelfMsg) connectedClientsMap NOT EMPTY! " << endl;
+ //CLIENT SELECTION
+ emit(connectedClientsMetric, (int)connectedClientsMap.size());
+ numSelectedClients = std::ceil(connectedClientsMap.size()*K);
+
+ std::cout << self << " (RSU|handleSelfMsg) N. of Connected Clients: " << connectedClientsMap.size() << endl;
+ std::cout << self << " (RSU|handleSelfMsg) N. of Selected Clients: " << numSelectedClients << endl;
+
+ for(std::map::iterator it = connectedClientsMap.begin(); it != connectedClientsMap.end(); ++it) {
+ connectedClientsVector.push_back(it->first);
+ }
+
+ std::srand(time(nullptr));
+ std::random_shuffle(std::begin(connectedClientsVector), std::end(connectedClientsVector));
+ counter = 0;
+ for(std::vector::iterator it = connectedClientsVector.begin(); it != connectedClientsVector.end(); it++){
+ if(counter >= numSelectedClients){
+ break;
+ }
+ std::cout << self << " (RSU|handleSelfMsg) Select Model from Vehicle-ID: " << *it << endl;
+ selectedClients = selectedClients + ";" + std::to_string(*it);
+ emit(selectClientsMetric, *it);
+ counter++;
+ }
+ //CLIENT SELECTION
+
+ //CLEAR DATA STRUCTURES
+ connectedClientsMap.clear();
+ connectedClientsVector.clear();
+ //CLEAR DATA STRUCTURES
+
+ //SEND GLOBAL MODEL
+ FlexeMessage* flexe_msg = new FlexeMessage();
+ DemoBaseApplLayer::populateWSM(flexe_msg);
+ flexe_msg->setKind(SEND_GLOBAL_MODEL_EVT);
+ flexe_msg->setSenderID(self);
+ flexe_msg->setModel(model.c_str());
+ flexe_msg->setDataset(dataset.c_str());
+ flexe_msg->setScenario(scenario.c_str());
+ flexe_msg->setSeed(seed);
+ flexe_msg->setNonIID(nonIID);
+ flexe_msg->setIdModel(idModel);
+ flexe_msg->setNumClients(numClients);
+ flexe_msg->setPercentDataset(percentDataset);
+ flexe_msg->setModelVersion(-1);
+ flexe_msg->setClientSelection(selectedClients.c_str());
+ flexe_msg->setComputationRequirement(computationRequirement);
+ DemoBaseApplLayer::sendDown(flexe_msg);
+ //SEND GLOBAL MODEL
+
+ scheduleAt(simTime().dbl() + roundDeadline, aggregateModelsEvt);
+ }else{
+ if(!clientSelectionEvt->isScheduled()){
+ scheduleAt(simTime().dbl() + 0.1, clientSelectionEvt);
+ }
+ }
+ std::cout << "\n" << endl;
+ break;
+ }
+ default: {
+ std::cout << self << " (RSU|handleSelfMsg) - The message type was not detected. " << msg->getKind() << endl;
+ break;
+ }
+ }
+}
diff --git a/src/flexe/application/FedRANDOMRSU11p.h b/src/flexe/application/FedRANDOMRSU11p.h
new file mode 100644
index 0000000..b7dc8e1
--- /dev/null
+++ b/src/flexe/application/FedRANDOMRSU11p.h
@@ -0,0 +1,122 @@
+/**@title
+ * Federated Averaging (FedAVG)
+ *
+ * @brief
+ *
+ *
+ * @author Wellington Lobato (wellington@lrc.ic.unicamp.br)
+ *
+ */
+#pragma once
+#include
+#include
+#include
+#include
+
+#include "veins/modules/application/ieee80211p/DemoBaseApplLayer.h"
+#include "../messages/FlexeMessage_m.h"
+#include "../application/FlexeClient.h"
+
+using namespace omnetpp;
+using namespace veins;
+
+namespace flexe {
+class FedRANDOMRSU11p : public DemoBaseApplLayer {
+public:
+ ~FedRANDOMRSU11p();
+ void initialize(int stage) override;
+
+protected:
+ //MSG TYPE
+ enum selfMessageKinds {
+ AGGREGATE_MODELS_EVT = 16,
+ CLIENT_SELECTION_EVT = 17,
+ SEND_GLOBAL_MODEL_EVT = 18,
+ SEND_LOCAL_MODEL_EVT = 19,
+ };
+ void onBSM(DemoSafetyMessage* bsm) override;
+ void onWSM(BaseFrame1609_4* wsm) override;
+ void onWSA(DemoServiceAdvertisment* wsa) override;
+
+ void handleSelfMsg(cMessage* msg) override;
+
+ //VAR
+ int self;
+ //NED VARs
+ std::string model;
+ std::string dataset;
+ std::string scenario;
+ int seed;
+ bool nonIID;
+ int idModel;
+ bool trainFlag;
+ int epochs;
+ int batch;
+ int numClients;
+ double percentDataset;
+ std::string strategy;
+ double computationRequirement;
+ double roundDeadline;
+ double K;
+ //NED VARs
+
+ int numSelectedClients;
+ int counter;
+ int localModelID;
+ double lossModel;
+ double accuracyModel;
+ int numExamples;
+ double entropy;
+ char signalName[32];
+ std::string outputMSG;
+ std::string signalMetricName;
+ std::string statisticMetricName;
+
+ std::string clientsModels;
+ std::string numExamplesModels;
+ std::string selectedClients;
+
+ std::map connectedClientsMap; //(Veins-ID, SUMO-ID)
+ std::map datasetComputationRequirementMap; //(Dataset, Computation Requirement)
+ std::map datasetModelMap; //(Dataset, Model)
+ std::map datasetMetricMap; //(Dataset, Metric Index)
+
+ std::vector connectedClientsVector;
+ std::vector receivedModelsVector;
+ std::vector receivedNumberExamplesVector;
+
+ std::vector datasetVector;
+ std::vector modelVector;
+ std::vector computationRequirementVector;
+
+ ModelReply modelOutput;
+ GenericReply genericOutput;
+
+ std::string address;
+ grpc::ChannelArguments chArgs;
+ FlexeClient* client = NULL;
+
+ //TRACI
+ TraCIScenarioManager* manager;
+ TraCICommandInterface* traci;
+
+ //MSG
+ cMessage* aggregateModelsEvt = new cMessage("Aggregate received models event", AGGREGATE_MODELS_EVT);
+ cMessage* clientSelectionEvt = new cMessage("Client selection mechanism event", CLIENT_SELECTION_EVT);
+ cMessage* sendGlobalModelEvt = new cMessage("Send Aggregated Model Event", SEND_GLOBAL_MODEL_EVT);
+
+ //METRICS
+ simsignal_t selectClientsMetric;
+ simsignal_t receivedClientsMetric;
+ simsignal_t connectedClientsMetric;
+ simsignal_t roundMetric;
+ simsignal_t signal;
+ cProperty *statisticTemplate;
+
+ //METRICS FOR 10 DIFFERENT DATASETS
+ simsignal_t lossTrainSignals[10];
+ simsignal_t lossEvaluateSignals[10];
+ simsignal_t accuracyTrainSignals[10];
+ simsignal_t accuracyEvaluateSignals[10];
+};
+}
diff --git a/src/flexe/application/FedRANDOMRSU11p.ned b/src/flexe/application/FedRANDOMRSU11p.ned
new file mode 100644
index 0000000..bcece77
--- /dev/null
+++ b/src/flexe/application/FedRANDOMRSU11p.ned
@@ -0,0 +1,52 @@
+package flexe.application;
+import org.car2x.veins.modules.application.ieee80211p.DemoBaseApplLayer;
+
+simple FedRANDOMRSU11p extends DemoBaseApplLayer
+{
+ @class(flexe::FedRANDOMRSU11p);
+ //General Parameters
+ string model = default("NONE");
+ string dataset = default("MNIST");
+ string scenario = default("GRID");
+ int seed = default(42);
+ bool nonIID = default(false);
+ bool trainFlag = default(true);
+ int epochs = default(1);
+ int batch = default(1024);
+ int numClients = default(1);
+ double percentDataset = default(100.0);
+ string strategy = default("FED_AVG");
+ string computationRequirement = default("900"); //in cycles/bit
+
+ //GRPC Address
+ string address = default("127.0.0.1:5000");
+
+ //SemiSync Parameters
+ double roundDeadline = default(60.0);
+ double K = default(1.0); //Selection Fraction of Clients (1.0 -> 100%, 0.5 -> 50%, 0.25 -> 25%)
+
+ @signal[connectedClients](type="long");
+ @statistic[connectedClientsCount](title="connectedClients count"; source="connectedClients"; record=vector,stats; interpolationmode=none);
+
+ @signal[selectClients](type="long");
+ @statistic[selectClientsCount](title="selectClients count"; source="selectClients"; record=vector,stats; interpolationmode=none);
+
+ @signal[receivedClients](type="long");
+ @statistic[receivedClientsClientsCount](title="receivedClients count"; source="receivedClients"; record=vector,stats; interpolationmode=none);
+
+ @signal[round](type="double");
+ @statistic[roundCount](title="round count"; source="round"; record=vector,stats; interpolationmode=none);
+
+ @signal[lossTrain*](type="double");
+ @statisticTemplate[lossTrainCount](record=vector,stats; interpolationmode=none);
+
+ @signal[accuracyTrain*](type="double");
+ @statisticTemplate[accuracyTrainCount](record=vector,stats; interpolationmode=none);
+
+ @signal[lossEvaluate*](type="double");
+ @statisticTemplate[lossEvaluateCount](record=vector,stats; interpolationmode=none);
+
+ @signal[accuracyEvaluate*](type="double");
+ @statisticTemplate[accuracyEvaluateCount](record=vector,stats; interpolationmode=none);
+
+}
\ No newline at end of file
diff --git a/src/flexe/application/FlexeClient.h b/src/flexe/application/FlexeClient.h
new file mode 100644
index 0000000..494345d
--- /dev/null
+++ b/src/flexe/application/FlexeClient.h
@@ -0,0 +1,759 @@
+#include
+#include
+
+#include "../proto/flexe.grpc.pb.h"
+
+using grpc::Channel;
+using grpc::ClientContext;
+using grpc::Status;
+
+using flexe::Flexe;
+using flexe::TTRequest;
+using flexe::AggregationRequest;
+using flexe::GenericRequest;
+using flexe::GenericReply;
+using flexe::ModelReply;
+
+class FlexeClient {
+ public:
+ FlexeClient(std::shared_ptr channel)
+ : stub_(Flexe::NewStub(channel)) {}
+
+ // Server Functions
+ std::tuple center_fit( //GenericRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ const std::string& msg
+ ){
+ GenericRequest centerFitRequest;
+ centerFitRequest.set_identity(idEntity+1);
+ centerFitRequest.set_model(model);
+ centerFitRequest.set_dataset(dataset);
+ centerFitRequest.set_scenario(scenario);
+ centerFitRequest.set_seed(seed);
+ centerFitRequest.set_noniid(nonIID);
+ centerFitRequest.set_idmodel(idModel+1);
+ centerFitRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->center_fit(&context, centerFitRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Center Fit requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+ std::tuple center_evaluate( //GenericRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ const std::string& msg
+ ){
+ GenericRequest centerEvaluateRequest;
+ centerEvaluateRequest.set_identity(idEntity+1);
+ centerEvaluateRequest.set_model(model);
+ centerEvaluateRequest.set_dataset(dataset);
+ centerEvaluateRequest.set_scenario(scenario);
+ centerEvaluateRequest.set_seed(seed);
+ centerEvaluateRequest.set_noniid(nonIID);
+ centerEvaluateRequest.set_idmodel(idModel+1);
+ centerEvaluateRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->center_evaluate(&context, centerEvaluateRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Center Evaluate requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+ std::tuple set_strategy( //GenericRequest -> GenericReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ const std::string& msg
+ ){
+ GenericRequest setStrategyRequest;
+ setStrategyRequest.set_identity(idEntity+1);
+ setStrategyRequest.set_model(model);
+ setStrategyRequest.set_dataset(dataset);
+ setStrategyRequest.set_scenario(scenario);
+ setStrategyRequest.set_seed(seed);
+ setStrategyRequest.set_noniid(nonIID);
+ setStrategyRequest.set_idmodel(idModel+1);
+ setStrategyRequest.set_msg(msg);
+
+ ClientContext context;
+ GenericReply reply;
+
+ Status status = stub_->set_strategy(&context, setStrategyRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Set Strategy requested successfully!" << endl;
+ return {reply.reply(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, "ERROR"};
+ }
+ }
+
+
+ std::tuple get_strategy( //GenericRequest -> GenericReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ const std::string& msg
+ ){
+ GenericRequest getStrategyRequest;
+ getStrategyRequest.set_identity(idEntity+1);
+ getStrategyRequest.set_model(model);
+ getStrategyRequest.set_dataset(dataset);
+ getStrategyRequest.set_scenario(scenario);
+ getStrategyRequest.set_seed(seed);
+ getStrategyRequest.set_noniid(nonIID);
+ getStrategyRequest.set_idmodel(idModel+1);
+ getStrategyRequest.set_msg(msg);
+
+ ClientContext context;
+ GenericReply reply;
+
+ Status status = stub_->get_strategy(&context, getStrategyRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Get Strategy requested successfully!" << endl;
+ return {reply.reply(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, "ERROR"};
+ }
+ }
+
+ std::tuple end( //GenericRequest -> GenericReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ const std::string& msg
+ ){
+ GenericRequest endRequest;
+ endRequest.set_identity(idEntity+1);
+ endRequest.set_model(model);
+ endRequest.set_dataset(dataset);
+ endRequest.set_scenario(scenario);
+ endRequest.set_seed(seed);
+ endRequest.set_noniid(nonIID);
+ endRequest.set_idmodel(idModel+1);
+ endRequest.set_msg(msg);
+
+ ClientContext context;
+ GenericReply reply;
+
+ Status status = stub_->end(&context, endRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - End requested successfully!" << endl;
+ return {reply.reply(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, "ERROR"};
+ }
+ }
+
+ std::tuple initialize_parameters( //TTRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ bool trainFlag,
+ int epochs,
+ int batch,
+ int numClients,
+ double percentDataset,
+ const std::string& models,
+ const std::string& msg
+ ){
+ TTRequest InitializeParametersRequest;
+ InitializeParametersRequest.set_identity(idEntity+1);
+ InitializeParametersRequest.set_model(model);
+ InitializeParametersRequest.set_dataset(dataset);
+ InitializeParametersRequest.set_scenario(scenario);
+ InitializeParametersRequest.set_seed(seed);
+ InitializeParametersRequest.set_noniid(nonIID);
+ InitializeParametersRequest.set_idmodel(idModel+1);
+ InitializeParametersRequest.set_trainflag(trainFlag);
+ InitializeParametersRequest.set_epochs(epochs);
+ InitializeParametersRequest.set_batch(batch);
+ InitializeParametersRequest.set_numclients(numClients);
+ InitializeParametersRequest.set_percentdataset(percentDataset);
+ InitializeParametersRequest.set_models(models);
+ InitializeParametersRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->initialize_parameters(&context, InitializeParametersRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Initialize Parameters requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+
+ std::tuple aggregate_sync_fit( //AggregationRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ int numClients,
+ const std::string& numExamples,
+ const std::string& models,
+ const std::string& strategy,
+ const std::string& msg
+ ){
+ AggregationRequest aggregateFitRequest;
+ aggregateFitRequest.set_identity(idEntity+1);
+ aggregateFitRequest.set_model(model);
+ aggregateFitRequest.set_dataset(dataset);
+ aggregateFitRequest.set_scenario(scenario);
+ aggregateFitRequest.set_seed(seed);
+ aggregateFitRequest.set_noniid(nonIID);
+ aggregateFitRequest.set_idmodel(idModel+1);
+ aggregateFitRequest.set_numclients(numClients);
+ aggregateFitRequest.set_numexamples(numExamples);
+ aggregateFitRequest.set_models(models);
+ aggregateFitRequest.set_strategy(strategy);
+ aggregateFitRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->aggregate_sync_fit(&context, aggregateFitRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Aggregate Fit requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+
+ std::tuple aggregate_async_fit( //AggregationRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ int numClients,
+ const std::string& numExamples,
+ const std::string& models,
+ const std::string& strategy,
+ const std::string& msg
+ ){
+ AggregationRequest aggregateAsyncFitRequest;
+ aggregateAsyncFitRequest.set_identity(idEntity+1);
+ aggregateAsyncFitRequest.set_model(model);
+ aggregateAsyncFitRequest.set_dataset(dataset);
+ aggregateAsyncFitRequest.set_scenario(scenario);
+ aggregateAsyncFitRequest.set_seed(seed);
+ aggregateAsyncFitRequest.set_noniid(nonIID);
+ aggregateAsyncFitRequest.set_idmodel(idModel+1);
+ aggregateAsyncFitRequest.set_numclients(numClients);
+ aggregateAsyncFitRequest.set_numexamples(numExamples);
+ aggregateAsyncFitRequest.set_models(models);
+ aggregateAsyncFitRequest.set_strategy(strategy);
+ aggregateAsyncFitRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->aggregate_async_fit(&context, aggregateAsyncFitRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Aggregate Async. Fit requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+ std::tuple aggregate_evaluate( //AggregationRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ int numClients,
+ const std::string& numExamples,
+ const std::string& models,
+ const std::string& strategy,
+ const std::string& msg
+ ){
+
+ AggregationRequest aggregateEvaluateRequest;
+ aggregateEvaluateRequest.set_identity(idEntity+1);
+ aggregateEvaluateRequest.set_model(model);
+ aggregateEvaluateRequest.set_dataset(dataset);
+ aggregateEvaluateRequest.set_scenario(scenario);
+ aggregateEvaluateRequest.set_seed(seed);
+ aggregateEvaluateRequest.set_noniid(nonIID);
+ aggregateEvaluateRequest.set_idmodel(idModel+1);
+ aggregateEvaluateRequest.set_numclients(numClients);
+ aggregateEvaluateRequest.set_numexamples(numExamples);
+ aggregateEvaluateRequest.set_models(models);
+ aggregateEvaluateRequest.set_strategy(strategy);
+ aggregateEvaluateRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->aggregate_evaluate(&context, aggregateEvaluateRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Aggregate Evaluate requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+
+ // Client Functions
+ std::tuple fit( //TTRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ bool trainFlag,
+ int epochs,
+ int batch,
+ int numClients,
+ double percentDataset,
+ const std::string& models,
+ const std::string& msg
+ ){
+ TTRequest fitRequest;
+ fitRequest.set_identity(idEntity+1);
+ fitRequest.set_model(model);
+ fitRequest.set_dataset(dataset);
+ fitRequest.set_scenario(scenario);
+ fitRequest.set_seed(seed);
+ fitRequest.set_noniid(nonIID);
+ fitRequest.set_idmodel(idModel+1);
+ fitRequest.set_trainflag(trainFlag);
+ fitRequest.set_epochs(epochs);
+ fitRequest.set_batch(batch);
+ fitRequest.set_numclients(numClients);
+ fitRequest.set_percentdataset(percentDataset);
+ fitRequest.set_models(models);
+ fitRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->fit(&context, fitRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Fit requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+ std::tuple evaluate( //TTRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ bool trainFlag,
+ int epochs,
+ int batch,
+ int numClients,
+ double percentDataset,
+ const std::string& models,
+ const std::string& msg
+ ){
+ TTRequest evaluateRequest;
+ evaluateRequest.set_identity(idEntity+1);
+ evaluateRequest.set_model(model);
+ evaluateRequest.set_dataset(dataset);
+ evaluateRequest.set_scenario(scenario);
+ evaluateRequest.set_seed(seed);
+ evaluateRequest.set_noniid(nonIID);
+ evaluateRequest.set_idmodel(idModel+1);
+ evaluateRequest.set_trainflag(trainFlag);
+ evaluateRequest.set_epochs(epochs);
+ evaluateRequest.set_batch(batch);
+ evaluateRequest.set_numclients(numClients);
+ evaluateRequest.set_percentdataset(percentDataset);
+ evaluateRequest.set_models(models);
+ evaluateRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->evaluate(&context, evaluateRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Evaluation requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+ std::tuple update_model( //TTRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ bool trainFlag,
+ int epochs,
+ int batch,
+ int numClients,
+ double percentDataset,
+ const std::string& models,
+ const std::string& msg
+ ){
+ TTRequest updateRequest;
+ updateRequest.set_identity(idEntity+1);
+ updateRequest.set_model(model);
+ updateRequest.set_dataset(dataset);
+ updateRequest.set_scenario(scenario);
+ updateRequest.set_seed(seed);
+ updateRequest.set_noniid(nonIID);
+ updateRequest.set_idmodel(idModel+1);
+ updateRequest.set_trainflag(trainFlag);
+ updateRequest.set_epochs(epochs);
+ updateRequest.set_batch(batch);
+ updateRequest.set_numclients(numClients);
+ updateRequest.set_percentdataset(percentDataset);
+ updateRequest.set_models(models);
+ updateRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->update_model(&context, updateRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Update requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+ std::tuple get_information( //GenericRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ const std::string& msg
+ ){
+ GenericRequest getInfoRequest;
+ getInfoRequest.set_identity(idEntity+1);
+ getInfoRequest.set_model(model);
+ getInfoRequest.set_dataset(dataset);
+ getInfoRequest.set_scenario(scenario);
+ getInfoRequest.set_seed(seed);
+ getInfoRequest.set_noniid(nonIID);
+ getInfoRequest.set_idmodel(idModel+1);
+ getInfoRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->get_information(&context, getInfoRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Get Info requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+ std::tuple set_information( //GenericRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ const std::string& msg
+ ){
+ GenericRequest setInfoRequest;
+ setInfoRequest.set_identity(idEntity+1);
+ setInfoRequest.set_model(model);
+ setInfoRequest.set_dataset(dataset);
+ setInfoRequest.set_scenario(scenario);
+ setInfoRequest.set_seed(seed);
+ setInfoRequest.set_noniid(nonIID);
+ setInfoRequest.set_idmodel(idModel+1);
+ setInfoRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->set_information(&context, setInfoRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Set Info requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+
+ std::tuple aggregate_client( //TTRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ bool trainFlag,
+ int epochs,
+ int batch,
+ int numClients,
+ double percentDataset,
+ const std::string& models,
+ const std::string& msg
+ ){
+ TTRequest aggregateClientRequest;
+ aggregateClientRequest.set_identity(idEntity+1);
+ aggregateClientRequest.set_model(model);
+ aggregateClientRequest.set_dataset(dataset);
+ aggregateClientRequest.set_scenario(scenario);
+ aggregateClientRequest.set_seed(seed);
+ aggregateClientRequest.set_noniid(nonIID);
+ aggregateClientRequest.set_idmodel(idModel+1);
+ aggregateClientRequest.set_trainflag(trainFlag);
+ aggregateClientRequest.set_epochs(epochs);
+ aggregateClientRequest.set_batch(batch);
+ aggregateClientRequest.set_numclients(numClients);
+ aggregateClientRequest.set_percentdataset(percentDataset);
+ aggregateClientRequest.set_models(models);
+ aggregateClientRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->aggregate_client(&context, aggregateClientRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Aggregate Client requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+
+ std::tuple fit_all( //TTRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ bool trainFlag,
+ int epochs,
+ int batch,
+ int numClients,
+ double percentDataset,
+ const std::string& models,
+ const std::string& msg
+ ){
+ TTRequest fitAllRequest;
+ fitAllRequest.set_identity(idEntity+1);
+ fitAllRequest.set_model(model);
+ fitAllRequest.set_dataset(dataset);
+ fitAllRequest.set_scenario(scenario);
+ fitAllRequest.set_seed(seed);
+ fitAllRequest.set_noniid(nonIID);
+ fitAllRequest.set_idmodel(idModel+1);
+ fitAllRequest.set_trainflag(trainFlag);
+ fitAllRequest.set_epochs(epochs);
+ fitAllRequest.set_batch(batch);
+ fitAllRequest.set_numclients(numClients);
+ fitAllRequest.set_percentdataset(percentDataset);
+ fitAllRequest.set_models(models);
+ fitAllRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->fit_all(&context, fitAllRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Fit All requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+
+ std::tuple evaluate_all( //TTRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ bool trainFlag,
+ int epochs,
+ int batch,
+ int numClients,
+ double percentDataset,
+ const std::string& models,
+ const std::string& msg
+ ){
+ TTRequest evaluateAllRequest;
+ evaluateAllRequest.set_identity(idEntity+1);
+ evaluateAllRequest.set_model(model);
+ evaluateAllRequest.set_dataset(dataset);
+ evaluateAllRequest.set_scenario(scenario);
+ evaluateAllRequest.set_seed(seed);
+ evaluateAllRequest.set_noniid(nonIID);
+ evaluateAllRequest.set_idmodel(idModel+1);
+ evaluateAllRequest.set_trainflag(trainFlag);
+ evaluateAllRequest.set_epochs(epochs);
+ evaluateAllRequest.set_batch(batch);
+ evaluateAllRequest.set_numclients(numClients);
+ evaluateAllRequest.set_percentdataset(percentDataset);
+ evaluateAllRequest.set_models(models);
+ evaluateAllRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->evaluate_all(&context, evaluateAllRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Evaluate All requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+
+ std::tuple update_all( //TTRequest -> ModelReply
+ int idEntity,
+ const std::string& model,
+ const std::string& dataset,
+ const std::string& scenario,
+ int seed,
+ bool nonIID,
+ int idModel,
+ bool trainFlag,
+ int epochs,
+ int batch,
+ int numClients,
+ double percentDataset,
+ const std::string& models,
+ const std::string& msg
+ ){
+ TTRequest updateAllRequest;
+ updateAllRequest.set_identity(idEntity+1);
+ updateAllRequest.set_model(model);
+ updateAllRequest.set_dataset(dataset);
+ updateAllRequest.set_scenario(scenario);
+ updateAllRequest.set_seed(seed);
+ updateAllRequest.set_noniid(nonIID);
+ updateAllRequest.set_idmodel(idModel+1);
+ updateAllRequest.set_trainflag(trainFlag);
+ updateAllRequest.set_epochs(epochs);
+ updateAllRequest.set_batch(batch);
+ updateAllRequest.set_numclients(numClients);
+ updateAllRequest.set_percentdataset(percentDataset);
+ updateAllRequest.set_models(models);
+ updateAllRequest.set_msg(msg);
+
+ ClientContext context;
+ ModelReply reply;
+
+ Status status = stub_->update_all(&context, updateAllRequest, &reply);
+ if(status.ok()){
+ std::cout << idEntity << " - Update All requested successfully!" << endl;
+ return {reply.numexamples(), reply.entropy(), reply.loss(), reply.accuracy(), reply.msg()};
+ } else {
+ std::cout << status.error_code() << " - " << status.error_message() << std::endl;
+ return {-1, -1.0, -1.0, -1.0, "ERROR"};
+ }
+ }
+
+ std::vector splitSTR(const std::string &s, char delim) {
+ std::stringstream ss(s);
+ std::string item;
+ std::vector elems;
+ while (std::getline(ss, item, delim)) {
+ elems.push_back(item);
+ }
+ return elems;
+ }
+
+ private:
+ std::unique_ptr stub_;
+};
diff --git a/src/flexe/application/MLApp.cc b/src/flexe/application/MLApp.cc
index 250f282..770a9dd 100644
--- a/src/flexe/application/MLApp.cc
+++ b/src/flexe/application/MLApp.cc
@@ -9,25 +9,42 @@ void MLApp::initialize(int stage){
DemoBaseApplLayer::initialize(stage);
if (stage == 0) {
self = getParentModule()->getIndex();
+
epochs = par("epochs").intValue();
- batchSize = par("batchSize").intValue();
- modelName = par("modelName").stringValue();
+ batch = par("batch").intValue();
+ speedZero = par("speedZero").boolValue();
+ computationCapability = par("computationCapability").doubleValue();
+ computationCapability = computationCapability*(pow(10, 9));
+
address = par("address").stringValue();
- trainFlag = par("trainFlag").boolValue();
- sendTrainInterval = par("sendTrainInterval").doubleValue();
+
+ trainLatencyMetric = registerSignal("trainLatency");
+ compCapabilityMetric = registerSignal("compCapability");
+ lossTrainMetric = registerSignal("lossTrain");
+ accuracyTrainMetric = registerSignal("accuracyTrain");
+ lossEvaluateMetric = registerSignal("lossEvaluate");
+ accuracyEvaluateMetric = registerSignal("accuracyEvaluate");
+ lossUpdateMetric = registerSignal("lossUpdate");
+ accuracyUpdateMetric = registerSignal("accuracyUpdate");
+
+ emit(compCapabilityMetric, (double)computationCapability);
}
else if (stage == 1) {
chArgs.SetMaxReceiveMessageSize(-1);
chArgs.SetMaxSendMessageSize(-1);
client = new FlexeClient(grpc::CreateCustomChannel(address, grpc::InsecureChannelCredentials(), chArgs));
- modelVersion = 0;
- scheduleAt(simTime().dbl()+(uniform(0.0,0.01)*self), trainModelEvt);
+ computationRequirement = -1;
+ modelVersion = -1;
+ accuracyModel = -1;
+ lossModel = -1;
+ numExamples = -1;
+ entropy = -1;
}
}
MLApp::~MLApp(){
- cancelAndDelete(sendModelEvt);
- cancelAndDelete(trainModelEvt);
+ cancelAndDelete(trainLocalModelEvt);
+ cancelAndDelete(sendResourceRequestEvt);
delete client;
}
@@ -40,11 +57,9 @@ void MLApp::onBSM(DemoSafetyMessage* bsm){
case SEND_BEACON_EVT:{
break;
}
- case SEND_CLOUD_EVT:{
- break;
- }
default:{
std::cout << self << " - (onBSM) The message type was not detected. " << bsm->getKind() << endl;
+ std::cout << "\n" << endl;
break;
}
}
@@ -52,21 +67,74 @@ void MLApp::onBSM(DemoSafetyMessage* bsm){
void MLApp::onWSM(BaseFrame1609_4* wsm){
switch(wsm->getKind()){
- case SEND_CLOUD_EVT:{
- break;
+ case SEND_GLOBAL_MODEL_EVT:{
+ std::cout << self << " - (VEH|onWSM) SEND_GLOBAL_MODEL_EVT " << simTime().dbl() << endl;
+ FlexeMessage* flexe_msg = check_and_cast(wsm);
+ std::cout << self << " - (VEH|onWSM) Selected Clients: " << flexe_msg->getClientSelection() << endl;
+ std::vector selectedClientsVector = client->splitSTR(flexe_msg->getClientSelection(), ';');
+ trainFlag = false;
+
+ model = flexe_msg->getModel();
+ dataset = flexe_msg->getDataset();
+ scenario = flexe_msg->getScenario();
+ seed = flexe_msg->getSeed();
+ nonIID = flexe_msg->getNonIID();
+ idModel = flexe_msg->getIdModel();
+ numClients = flexe_msg->getNumClients();
+ percentDataset = flexe_msg->getPercentDataset();
+ modelVersion = flexe_msg->getModelVersion();
+ computationRequirement = flexe_msg->getComputationRequirement();
+
+ for(std::vector::iterator it = selectedClientsVector.begin(); it != selectedClientsVector.end(); it++){
+ if(std::to_string(self) == *it){
+ std::cout << self << " - (VEH|onWSM) " << self << " == "<< *it << endl;
+ trainFlag = true;
+ break;
+ }
}
- case SEND_FED_MODEL_EVT:{
- FlexeMessage* flexe_msg = check_and_cast(wsm);
- client->update_model(self, trainFlag, modelName, 1, 1);
- modelVersion = flexe_msg->getModelVersion();
- trainFlag = true;
- std::cout << self << " - (onWSM) Update the local model. modelVersion: "<< modelVersion << " SEND_FED_MODEL_EVT: " << simTime().dbl() << endl;
- break;
+ if(trainFlag == true){
+ scheduleAt(simTime().dbl(), trainLocalModelEvt);
+ }else{
+ std::tie(numExamples, entropy, lossModel, accuracyModel, outputMSG) = client->update_model(self, model, dataset, scenario, seed, nonIID, idModel, trainFlag, epochs, batch, numClients, percentDataset, "", "");
+ emit(lossUpdateMetric, (double)lossModel);
+ emit(accuracyUpdateMetric, (double)accuracyModel);
+ std::cout << self << " - (VEH|handleSelfMsg) Update Accuracy: " << accuracyModel << " Loss: " << lossModel << " N. Examples: " << numExamples << endl;
}
- default:{
- std::cout << self << " - (onWSM) The message type was not detected. " << wsm->getKind() << endl;
- break;
+ std::cout << "\n" << endl;
+
+ //CLEAR DATA STRUCTURES
+ selectedClientsVector.clear();
+ //CLEAR DATA STRUCTURES
+ break;
+ }
+ case SEND_LOCAL_MODEL_EVT:{
+ break;
+ }
+ case RESOURCE_REQUEST_EVT:{
+ std::cout << self << " - (VEH|onWSM) RESOURCE_REQUEST_EVT " << simTime().dbl() << endl;
+ FlexeMessage* flexe_msg = check_and_cast(wsm);
+ std::vector clientResourceVector = client->splitSTR(flexe_msg->getClientSelection(), ';');
+ resourceFlag = false;
+ for(std::vector::iterator it = clientResourceVector.begin(); it != clientResourceVector.end(); it++){
+ if(std::to_string(self) == *it){
+ std::cout << self << " - (VEH|onWSM) " << self << " == "<< *it << endl;
+ resourceFlag = true;
+ break;
+ }
}
+ if(resourceFlag == true){
+ scheduleAt(simTime().dbl(), sendResourceRequestEvt);
+ }
+ //CLEAR DATA STRUCTURES
+ clientResourceVector.clear();
+ //CLEAR DATA STRUCTURES
+ break;
+ }
+ default:{
+ std::cout << self << " - (onWSM) The message type was not detected. " << wsm->getKind() << endl;
+ std::cout << "\n" << endl;
+ break;
+ }
}
}
@@ -76,85 +144,72 @@ void MLApp::onWSA(DemoServiceAdvertisment* wsa){
void MLApp::handleSelfMsg(cMessage* msg){
switch (msg->getKind()) {
case SEND_BEACON_EVT:{
+ std::cout << self << " - (VEH|handleSelfMsg) SEND_BEACON_EVT " << simTime().dbl() << endl;
DemoSafetyMessage* bsm = new DemoSafetyMessage();
populateWSM(bsm);
- bsm->setName(std::to_string(self).c_str());
+ std::string sendID = traciVehicle->getVehicleId() + ";" + std::to_string(self);
+ bsm->setName(sendID.c_str());
+ bsm->setSpeed(traciVehicle->getSpeed());
+ bsm->setModelVersion(modelVersion);
+ bsm->setComputationCapability(computationCapability);
sendDown(bsm);
scheduleAt(simTime() + beaconInterval, sendBeaconEvt);
+ std::cout << "\n" << endl;
break;
}
- case TRAIN_MODEL_EVT:{
- modelResponse = client->fit(self, trainFlag, modelName, epochs, batchSize);
- if(trainFlag){
- loss = client->evaluate(self, trainFlag, modelName, batchSize);
- }
- trainFlag = false;
- std::cout << self << " - Loss: " << loss << " TRAIN_MODEL_EVT: " << simTime().dbl() << endl;
- scheduleAt(simTime().dbl()+uniform(0.0,0.01), sendModelEvt);
- break;
- }
-
- case SEND_MODEL_EVT:{
- std::cout << self << " - SEND_MODEL_EVT: " << simTime().dbl() << endl;
- strWeights = "";
- tensorSizeVector.clear();
-
- for(int i=0; i < modelResponse.tensors_size(); i++){
- tensorSizeVector.push_back(modelResponse.tensors(i).size());
- strWeights = strWeights + modelResponse.tensors(i);
- }
-
- std::vector tensors_bytes(strWeights.begin(), strWeights.end());
-
+ case TRAIN_LOCAL_MODEL_EVT:{
+ std::cout << self << " - (VEH|handleSelfMsg) TRAIN_LOCAL_MODEL_EVT " << simTime().dbl() << endl;
+
+ std::tie(numExamples, entropy, lossModel, accuracyModel, outputMSG) = client->fit(self, model, dataset, scenario, seed, nonIID, idModel, trainFlag, epochs, batch, numClients, percentDataset, "", "");
+ emit(lossTrainMetric, (double)lossModel);
+ emit(accuracyTrainMetric, (double)accuracyModel);
+ std::cout << self << " - (VEH|handleSelfMsg) Training Accuracy: " << accuracyModel << " Loss: " << lossModel << " N. Examples: " << numExamples << endl;
+
+ std::tie(numExamples, entropy, lossModel, accuracyModel, outputMSG) = client->evaluate(self, model, dataset, scenario, seed, nonIID, idModel, trainFlag, epochs, batch, numClients, percentDataset, "", "");
+ emit(lossEvaluateMetric, (double)lossModel);
+ emit(accuracyEvaluateMetric, (double)accuracyModel);
+ std::cout << self << " - (VEH|handleSelfMsg) Evaluation Accuracy: " << accuracyModel << " Loss: " << lossModel << " N. Examples: " << numExamples << endl;
+
+ trainingLatency = ((double(numExamples)* computationRequirement)/computationCapability) * epochs;
+ emit(trainLatencyMetric, (double)trainingLatency);
+
+ //SEND_LOCAL_MODEL
FlexeMessage* flexe_msg = new FlexeMessage();
DemoBaseApplLayer::populateWSM(flexe_msg);
-
- flexe_msg->setTensorsArraySize(tensors_bytes.size());
- counter = 0;
- for(std::vector::iterator itr = tensors_bytes.begin(); itr != tensors_bytes.end(); ++itr){
- flexe_msg->setTensors(counter, *itr);
- counter++;
- }
-
- flexe_msg->setTensorsSizeArraySize(modelResponse.tensors_size());
- counter = 0;
- for(std::vector::iterator itr = tensorSizeVector.begin(); itr != tensorSizeVector.end(); ++itr){
- flexe_msg->setTensorsSize(counter, *itr);
- counter++;
- }
-
- flexe_msg->setNum_examples(modelResponse.num_examples());
+ flexe_msg->setKind(SEND_LOCAL_MODEL_EVT);
flexe_msg->setSenderID(self);
- flexe_msg->setKind(SEND_CLOUD_EVT);
+ flexe_msg->setNumExamples(numExamples);
+ flexe_msg->setIdModel(idModel);
flexe_msg->setModelVersion(modelVersion);
- flexe_msg->setLoss(loss);
+ flexe_msg->setLoss(lossModel);
+ flexe_msg->setAccuracy(accuracyModel);
+ flexe_msg->setComputationCapability(computationCapability);
+ flexe_msg->setEntropy(entropy);
+ DemoBaseApplLayer::sendDelayedDown(flexe_msg, trainingLatency);
+ //SEND_LOCAL_MODEL
- // CLEAR MEMORY
- strWeights.clear();
- std::vector().swap(tensors_bytes);
- tensors_bytes.clear();
- tensors_bytes.shrink_to_fit();
-
-
- std::vector().swap(tensorSizeVector);
- tensorSizeVector.clear();
- tensorSizeVector.shrink_to_fit();
-
- modelResponse.Clear();
- // CLEAR MEMORY
-
- DemoBaseApplLayer::sendDelayedDown(flexe_msg, uniform(0.0,0.1));
-
- scheduleAt(simTime().dbl()+sendTrainInterval, trainModelEvt);
+ trainFlag = false;
+ std::cout << "\n" << endl;
break;
}
+ case RESOURCE_REQUEST_EVT:{
+ std::cout << self << " - (VEH|handleSelfMsg) RESOURCE_REQUEST_EVT " << simTime().dbl() << endl;
+ std::tie(numExamples, entropy, lossModel, accuracyModel, outputMSG) = client->get_information(self, model, dataset, scenario, seed, nonIID, idModel, "");
+
+ FlexeMessage* flexe_msg = new FlexeMessage();
+ DemoBaseApplLayer::populateWSM(flexe_msg);
+ flexe_msg->setKind(RESOURCE_REQUEST_EVT);
+ flexe_msg->setSenderID(self);
+ flexe_msg->setNumExamples(numExamples);
+ flexe_msg->setComputationCapability(computationCapability);
+ flexe_msg->setEntropy(entropy);
+ DemoBaseApplLayer::sendDelayedDown(flexe_msg, uniform(0, 0.01));
- case SEND_FED_MODEL_EVT:{
- std::cout << self << " - SEND_FED_MODEL_EVT: " << simTime().dbl() << endl;
+ resourceFlag = false;
+ std::cout << "\n" << endl;
break;
}
-
default: {
std::cout << self << " handleSelfMsg - The message type was not detected. " << msg->getKind() << endl;
break;
@@ -163,5 +218,8 @@ void MLApp::handleSelfMsg(cMessage* msg){
}
void MLApp::handlePositionUpdate(cObject* obj){
+ if(speedZero){
+ traciVehicle->setSpeed(0.0);
+ }
DemoBaseApplLayer::handlePositionUpdate(obj);
}
diff --git a/src/flexe/application/MLApp.h b/src/flexe/application/MLApp.h
index 3f386ce..7882843 100644
--- a/src/flexe/application/MLApp.h
+++ b/src/flexe/application/MLApp.h
@@ -9,89 +9,7 @@
#include "veins/modules/application/ieee80211p/DemoBaseApplLayer.h"
#include "../messages/FlexeMessage_m.h"
-
-#include
-#include
-
-#include "../proto/flexe.grpc.pb.h"
-
-using grpc::Channel;
-using grpc::ClientContext;
-using grpc::Status;
-
-using flexe::Flexe;
-using flexe::TTRequest;
-using flexe::EvaluateReply;
-using flexe::ModelReply;
-using flexe::GenericResponse;
-
-class FlexeClient {
- public:
- FlexeClient(std::shared_ptr channel)
- : stub_(Flexe::NewStub(channel)) {}
-
- double evaluate(int idVehicle, bool trainFlag, const std::string& modelName, int batchSize){
- TTRequest evaluateRequest;
- evaluateRequest.set_idvehicle(idVehicle+1);
- evaluateRequest.set_trainflag(false);
- evaluateRequest.set_modelname(modelName);
- evaluateRequest.set_batch_size(batchSize);
-
- ClientContext context;
- EvaluateReply reply;
-
- Status status = stub_->evaluate(&context, evaluateRequest, &reply);
- if(status.ok()){
- //std::cout << "Evaluation requested successfully!" << endl;
- return reply.loss();
- } else {
- std::cout << status.error_code() << ": " << status.error_message() << std::endl;
- return -1;
- }
- }
-
- ModelReply fit(int idVehicle, bool trainFlag, const std::string& modelName, int epochs, int batchSize){
- TTRequest fitRequest;
- fitRequest.set_idvehicle(idVehicle+1);
- fitRequest.set_trainflag(trainFlag);
- fitRequest.set_modelname(modelName);
- fitRequest.set_epochs(epochs);
- fitRequest.set_batch_size(batchSize);
- ClientContext context;
- ModelReply reply;
-
- Status status = stub_->fit(&context, fitRequest, &reply);
- if(status.ok()){
- //std::cout << "Training requested successfully!" << endl;
- } else {
- std::cout << status.error_code() << ": " << status.error_message() << std::endl;
- }
- return reply;
- }
-
- int update_model(int idVehicle, bool trainFlag, const std::string& modelName, int epochs, int batchSize){
- TTRequest fitRequest;
- fitRequest.set_idvehicle(idVehicle+1);
- fitRequest.set_trainflag(false);
- fitRequest.set_modelname(modelName);
- fitRequest.set_epochs(epochs);
- fitRequest.set_batch_size(batchSize);
- GenericResponse reply;
- ClientContext context;
-
- Status status = stub_->update_model(&context, fitRequest, &reply);
- if(status.ok()){
- //std::cout << "Update the model requested successfully!" << endl;
- return 1;
- }else {
- std::cout << status.error_code() << ": " << status.error_message() << std::endl;
- return -1;
- }
- }
-
- private:
- std::unique_ptr stub_;
-};
+#include "../application/FlexeClient.h"
using namespace omnetpp;
using namespace veins;
@@ -114,38 +32,60 @@ class MLApp : public DemoBaseApplLayer {
//MSG TYPE
enum selfMessageKinds {
- TRAIN_MODEL_EVT = 7,
- SEND_MODEL_EVT,
- SEND_CLOUD_EVT = 10,
- SEND_FED_MODEL_EVT = 17,
+ TRAIN_LOCAL_MODEL_EVT = 16,
+ CLIENT_SELECTION_EVT = 17,
+ SEND_GLOBAL_MODEL_EVT = 18,
+ SEND_LOCAL_MODEL_EVT = 19,
+ RESOURCE_REQUEST_EVT = 20,
};
//VAR
int self;
+ std::string model;
+ std::string dataset;
+ std::string scenario;
+ int seed;
+ bool nonIID;
+ int idModel;
+ bool trainFlag;
int epochs;
- int batchSize;
- int counter;
+ int batch;
+ int numClients;
+ double percentDataset;
+ double computationCapability;
int modelVersion;
- bool trainFlag;
-
- double sendTrainInterval;
- double loss;
-
- std::string modelName;
- std::string strWeights;
+ bool speedZero;
+ bool resourceFlag;
- ModelReply modelResponse;
+ int counter;
+ double computationRequirement;
+ double lossModel;
+ double accuracyModel;
+ int numExamples;
+ double entropy;
+ std::string outputMSG;
+ double trainingLatency;
- std::vector tensorSizeVector;
+ ModelReply modelOutput;
+ GenericReply genericOutput;
std::string address;
grpc::ChannelArguments chArgs;
FlexeClient* client = NULL;
//MSG
- cMessage* trainModelEvt = new cMessage("Train Model Event", TRAIN_MODEL_EVT);
- cMessage* sendModelEvt = new cMessage("Send Model to RSU Event", SEND_MODEL_EVT);
-
+ cMessage* trainLocalModelEvt = new cMessage("Train the local model on the client event", TRAIN_LOCAL_MODEL_EVT);
+ cMessage* sendResourceRequestEvt = new cMessage("Send Resource Request Event", RESOURCE_REQUEST_EVT);
+
+ //METRICS
+ simsignal_t trainLatencyMetric;
+ simsignal_t compCapabilityMetric;
+ simsignal_t lossTrainMetric;
+ simsignal_t accuracyTrainMetric;
+ simsignal_t lossEvaluateMetric;
+ simsignal_t accuracyEvaluateMetric;
+ simsignal_t lossUpdateMetric;
+ simsignal_t accuracyUpdateMetric;
};
}
diff --git a/src/flexe/application/MLApp.ned b/src/flexe/application/MLApp.ned
index d7f98d2..0e0609f 100644
--- a/src/flexe/application/MLApp.ned
+++ b/src/flexe/application/MLApp.ned
@@ -4,10 +4,39 @@ import org.car2x.veins.modules.application.ieee80211p.DemoBaseApplLayer;
simple MLApp extends DemoBaseApplLayer
{
@class(flexe::MLApp);
- string modelName = default("NONE");
- string address = default("127.0.0.1:5000");
+ //General Parameters
int epochs = default(1);
- int batchSize = default(32);
- double sendTrainInterval = default(10.0);
- bool trainFlag = default(true);
-}
+ int batch = default(1024);
+
+ //GRPC Address
+ string address = default("127.0.0.1:5000");
+
+ //Local Training Latency Parameters
+ double computationCapability @unit(GHz) = default(5GHz); //in GHz
+ bool speedZero = default(false);
+
+
+ @signal[compCapability](type="double");
+ @statistic[compCapability](title="compCapability count"; source="compCapability"; record=vector,stats; interpolationmode=none);
+
+ @signal[trainLatency](type="double");
+ @statistic[trainLatencyCount](title="trainLatency count"; source="trainLatency"; record=vector,stats; interpolationmode=none);
+
+ @signal[lossTrain](type="double");
+ @statistic[lossTrainCount](title="lossTrain count"; source="lossTrain"; record=vector,stats; interpolationmode=none);
+
+ @signal[accuracyTrain](type="double");
+ @statistic[accuracyTrainCount](title="accuracyTrain count"; source="accuracyTrain"; record=vector,stats; interpolationmode=none);
+
+ @signal[lossEvaluate](type="double");
+ @statistic[lossEvaluateCount](title="lossEvaluate count"; source="lossEvaluate"; record=vector,stats; interpolationmode=none);
+
+ @signal[accuracyEvaluate](type="double");
+ @statistic[accuracyEvaluateCount](title="accuracyEvaluate count"; source="accuracyEvaluate"; record=vector,stats; interpolationmode=none);
+
+ @signal[lossUpdate](type="double");
+ @statistic[lossUpdateCount](title="lossUpdate count"; source="lossUpdate"; record=vector,stats; interpolationmode=none);
+
+ @signal[accuracyUpdate](type="double");
+ @statistic[accuracyUpdateCount](title="accuracyUpdate count"; source="accuracyUpdate"; record=vector,stats; interpolationmode=none);
+}
\ No newline at end of file
diff --git a/src/flexe/messages/FlexeMessage.msg b/src/flexe/messages/FlexeMessage.msg
index 8e5a244..2c1dd63 100644
--- a/src/flexe/messages/FlexeMessage.msg
+++ b/src/flexe/messages/FlexeMessage.msg
@@ -1,11 +1,22 @@
import veins.modules.messages.DemoSafetyMessage;
packet FlexeMessage extends veins::BaseFrame1609_4 {
- int senderID = -1;
- char tensors[];
- int tensorsSize[];
- int num_examples;
+ int senderID = -1;
+ string model;
+ string dataset;
+ string scenario;
+ int seed;
+ bool nonIID;
+ int idModel;
+ bool trainFlag;
+ int numClients;
+ double percentDataset;
+ int numExamples;
int modelVersion;
+ string clientSelection;
double loss;
double accuracy;
-}
+ double entropy;
+ double computationCapability;
+ double computationRequirement;
+}
\ No newline at end of file
diff --git a/src/flexe/proto/flexe.grpc.pb.cc b/src/flexe/proto/flexe.grpc.pb.cc
index b46ac33..452cb70 100644
--- a/src/flexe/proto/flexe.grpc.pb.cc
+++ b/src/flexe/proto/flexe.grpc.pb.cc
@@ -25,12 +25,20 @@ static const char* Flexe_method_names[] = {
"/flexe.Flexe/fit",
"/flexe.Flexe/evaluate",
"/flexe.Flexe/update_model",
- "/flexe.Flexe/aggregate_evaluate",
- "/flexe.Flexe/aggregate_fit",
- "/flexe.Flexe/aggregate_sync_fit",
- "/flexe.Flexe/server_evaluate",
- "/flexe.Flexe/store_model",
+ "/flexe.Flexe/get_information",
+ "/flexe.Flexe/set_information",
+ "/flexe.Flexe/aggregate_client",
+ "/flexe.Flexe/fit_all",
+ "/flexe.Flexe/evaluate_all",
+ "/flexe.Flexe/update_all",
"/flexe.Flexe/initialize_parameters",
+ "/flexe.Flexe/aggregate_async_fit",
+ "/flexe.Flexe/aggregate_sync_fit",
+ "/flexe.Flexe/aggregate_evaluate",
+ "/flexe.Flexe/set_strategy",
+ "/flexe.Flexe/get_strategy",
+ "/flexe.Flexe/center_fit",
+ "/flexe.Flexe/center_evaluate",
"/flexe.Flexe/end",
};
@@ -44,13 +52,21 @@ Flexe::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, con
: channel_(channel), rpcmethod_fit_(Flexe_method_names[0], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
, rpcmethod_evaluate_(Flexe_method_names[1], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
, rpcmethod_update_model_(Flexe_method_names[2], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
- , rpcmethod_aggregate_evaluate_(Flexe_method_names[3], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
- , rpcmethod_aggregate_fit_(Flexe_method_names[4], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
- , rpcmethod_aggregate_sync_fit_(Flexe_method_names[5], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
- , rpcmethod_server_evaluate_(Flexe_method_names[6], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
- , rpcmethod_store_model_(Flexe_method_names[7], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
- , rpcmethod_initialize_parameters_(Flexe_method_names[8], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
- , rpcmethod_end_(Flexe_method_names[9], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_get_information_(Flexe_method_names[3], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_set_information_(Flexe_method_names[4], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_aggregate_client_(Flexe_method_names[5], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_fit_all_(Flexe_method_names[6], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_evaluate_all_(Flexe_method_names[7], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_update_all_(Flexe_method_names[8], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_initialize_parameters_(Flexe_method_names[9], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_aggregate_async_fit_(Flexe_method_names[10], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_aggregate_sync_fit_(Flexe_method_names[11], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_aggregate_evaluate_(Flexe_method_names[12], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_set_strategy_(Flexe_method_names[13], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_get_strategy_(Flexe_method_names[14], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_center_fit_(Flexe_method_names[15], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_center_evaluate_(Flexe_method_names[16], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_end_(Flexe_method_names[17], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
{}
::grpc::Status Flexe::Stub::fit(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) {
@@ -76,163 +92,186 @@ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::AsyncfitRa
return result;
}
-::grpc::Status Flexe::Stub::evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::EvaluateReply* response) {
- return ::grpc::internal::BlockingUnaryCall< ::flexe::TTRequest, ::flexe::EvaluateReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_evaluate_, context, request, response);
+::grpc::Status Flexe::Stub::evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_evaluate_, context, request, response);
}
-void Flexe::Stub::experimental_async::evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, std::function f) {
- ::grpc::internal::CallbackUnaryCall< ::flexe::TTRequest, ::flexe::EvaluateReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_evaluate_, context, request, response, std::move(f));
+void Flexe::Stub::experimental_async::evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_evaluate_, context, request, response, std::move(f));
}
-void Flexe::Stub::experimental_async::evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+void Flexe::Stub::experimental_async::evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_evaluate_, context, request, response, reactor);
}
-::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>* Flexe::Stub::PrepareAsyncevaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::EvaluateReply, ::flexe::TTRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_evaluate_, context, request);
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsyncevaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::TTRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_evaluate_, context, request);
}
-::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>* Flexe::Stub::AsyncevaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::AsyncevaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
auto* result =
this->PrepareAsyncevaluateRaw(context, request, cq);
result->StartCall();
return result;
}
-::grpc::Status Flexe::Stub::update_model(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::GenericResponse* response) {
- return ::grpc::internal::BlockingUnaryCall< ::flexe::TTRequest, ::flexe::GenericResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_update_model_, context, request, response);
+::grpc::Status Flexe::Stub::update_model(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_update_model_, context, request, response);
}
-void Flexe::Stub::experimental_async::update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::GenericResponse* response, std::function f) {
- ::grpc::internal::CallbackUnaryCall< ::flexe::TTRequest, ::flexe::GenericResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_update_model_, context, request, response, std::move(f));
+void Flexe::Stub::experimental_async::update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_update_model_, context, request, response, std::move(f));
}
-void Flexe::Stub::experimental_async::update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::GenericResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+void Flexe::Stub::experimental_async::update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_update_model_, context, request, response, reactor);
}
-::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>* Flexe::Stub::PrepareAsyncupdate_modelRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::GenericResponse, ::flexe::TTRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_update_model_, context, request);
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsyncupdate_modelRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::TTRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_update_model_, context, request);
}
-::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>* Flexe::Stub::Asyncupdate_modelRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asyncupdate_modelRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
auto* result =
this->PrepareAsyncupdate_modelRaw(context, request, cq);
result->StartCall();
return result;
}
-::grpc::Status Flexe::Stub::aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::EvaluateReply* response) {
- return ::grpc::internal::BlockingUnaryCall< ::flexe::TTRequest, ::flexe::EvaluateReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_aggregate_evaluate_, context, request, response);
+::grpc::Status Flexe::Stub::get_information(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_get_information_, context, request, response);
}
-void Flexe::Stub::experimental_async::aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, std::function f) {
- ::grpc::internal::CallbackUnaryCall< ::flexe::TTRequest, ::flexe::EvaluateReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_aggregate_evaluate_, context, request, response, std::move(f));
+void Flexe::Stub::experimental_async::get_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_get_information_, context, request, response, std::move(f));
}
-void Flexe::Stub::experimental_async::aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
- ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_aggregate_evaluate_, context, request, response, reactor);
+void Flexe::Stub::experimental_async::get_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+ ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_get_information_, context, request, response, reactor);
}
-::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>* Flexe::Stub::PrepareAsyncaggregate_evaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::EvaluateReply, ::flexe::TTRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_aggregate_evaluate_, context, request);
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsyncget_informationRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::GenericRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_get_information_, context, request);
}
-::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>* Flexe::Stub::Asyncaggregate_evaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asyncget_informationRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
auto* result =
- this->PrepareAsyncaggregate_evaluateRaw(context, request, cq);
+ this->PrepareAsyncget_informationRaw(context, request, cq);
result->StartCall();
return result;
}
-::grpc::Status Flexe::Stub::aggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::flexe::ModelReply* response) {
- return ::grpc::internal::BlockingUnaryCall< ::flexe::ModelRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_aggregate_fit_, context, request, response);
+::grpc::Status Flexe::Stub::set_information(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_set_information_, context, request, response);
}
-void Flexe::Stub::experimental_async::aggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::ModelReply* response, std::function f) {
- ::grpc::internal::CallbackUnaryCall< ::flexe::ModelRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_aggregate_fit_, context, request, response, std::move(f));
+void Flexe::Stub::experimental_async::set_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_set_information_, context, request, response, std::move(f));
}
-void Flexe::Stub::experimental_async::aggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
- ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_aggregate_fit_, context, request, response, reactor);
+void Flexe::Stub::experimental_async::set_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+ ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_set_information_, context, request, response, reactor);
}
-::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsyncaggregate_fitRaw(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) {
- return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::ModelRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_aggregate_fit_, context, request);
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsyncset_informationRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::GenericRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_set_information_, context, request);
}
-::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asyncaggregate_fitRaw(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) {
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asyncset_informationRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
auto* result =
- this->PrepareAsyncaggregate_fitRaw(context, request, cq);
+ this->PrepareAsyncset_informationRaw(context, request, cq);
result->StartCall();
return result;
}
-::grpc::Status Flexe::Stub::aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) {
- return ::grpc::internal::BlockingUnaryCall< ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_aggregate_sync_fit_, context, request, response);
+::grpc::Status Flexe::Stub::aggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_aggregate_client_, context, request, response);
}
-void Flexe::Stub::experimental_async::aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function f) {
- ::grpc::internal::CallbackUnaryCall< ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_aggregate_sync_fit_, context, request, response, std::move(f));
+void Flexe::Stub::experimental_async::aggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_aggregate_client_, context, request, response, std::move(f));
}
-void Flexe::Stub::experimental_async::aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
- ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_aggregate_sync_fit_, context, request, response, reactor);
+void Flexe::Stub::experimental_async::aggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+ ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_aggregate_client_, context, request, response, reactor);
}
-::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsyncaggregate_sync_fitRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
- return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::GenericRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_aggregate_sync_fit_, context, request);
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsyncaggregate_clientRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::TTRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_aggregate_client_, context, request);
}
-::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asyncaggregate_sync_fitRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asyncaggregate_clientRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
auto* result =
- this->PrepareAsyncaggregate_sync_fitRaw(context, request, cq);
+ this->PrepareAsyncaggregate_clientRaw(context, request, cq);
result->StartCall();
return result;
}
-::grpc::Status Flexe::Stub::server_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::EvaluateReply* response) {
- return ::grpc::internal::BlockingUnaryCall< ::flexe::TTRequest, ::flexe::EvaluateReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_server_evaluate_, context, request, response);
+::grpc::Status Flexe::Stub::fit_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_fit_all_, context, request, response);
}
-void Flexe::Stub::experimental_async::server_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, std::function f) {
- ::grpc::internal::CallbackUnaryCall< ::flexe::TTRequest, ::flexe::EvaluateReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_server_evaluate_, context, request, response, std::move(f));
+void Flexe::Stub::experimental_async::fit_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_fit_all_, context, request, response, std::move(f));
}
-void Flexe::Stub::experimental_async::server_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
- ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_server_evaluate_, context, request, response, reactor);
+void Flexe::Stub::experimental_async::fit_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+ ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_fit_all_, context, request, response, reactor);
}
-::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>* Flexe::Stub::PrepareAsyncserver_evaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::EvaluateReply, ::flexe::TTRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_server_evaluate_, context, request);
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsyncfit_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::TTRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_fit_all_, context, request);
}
-::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>* Flexe::Stub::Asyncserver_evaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asyncfit_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
auto* result =
- this->PrepareAsyncserver_evaluateRaw(context, request, cq);
+ this->PrepareAsyncfit_allRaw(context, request, cq);
result->StartCall();
return result;
}
-::grpc::Status Flexe::Stub::store_model(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::flexe::GenericResponse* response) {
- return ::grpc::internal::BlockingUnaryCall< ::flexe::ModelRequest, ::flexe::GenericResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_store_model_, context, request, response);
+::grpc::Status Flexe::Stub::evaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_evaluate_all_, context, request, response);
}
-void Flexe::Stub::experimental_async::store_model(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::GenericResponse* response, std::function f) {
- ::grpc::internal::CallbackUnaryCall< ::flexe::ModelRequest, ::flexe::GenericResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_store_model_, context, request, response, std::move(f));
+void Flexe::Stub::experimental_async::evaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_evaluate_all_, context, request, response, std::move(f));
}
-void Flexe::Stub::experimental_async::store_model(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::GenericResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
- ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_store_model_, context, request, response, reactor);
+void Flexe::Stub::experimental_async::evaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+ ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_evaluate_all_, context, request, response, reactor);
}
-::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>* Flexe::Stub::PrepareAsyncstore_modelRaw(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) {
- return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::GenericResponse, ::flexe::ModelRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_store_model_, context, request);
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsyncevaluate_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::TTRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_evaluate_all_, context, request);
}
-::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>* Flexe::Stub::Asyncstore_modelRaw(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) {
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asyncevaluate_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
auto* result =
- this->PrepareAsyncstore_modelRaw(context, request, cq);
+ this->PrepareAsyncevaluate_allRaw(context, request, cq);
+ result->StartCall();
+ return result;
+}
+
+::grpc::Status Flexe::Stub::update_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_update_all_, context, request, response);
+}
+
+void Flexe::Stub::experimental_async::update_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_update_all_, context, request, response, std::move(f));
+}
+
+void Flexe::Stub::experimental_async::update_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+ ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_update_all_, context, request, response, reactor);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsyncupdate_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::TTRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_update_all_, context, request);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asyncupdate_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ auto* result =
+ this->PrepareAsyncupdate_allRaw(context, request, cq);
result->StartCall();
return result;
}
@@ -260,23 +299,184 @@ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asynciniti
return result;
}
-::grpc::Status Flexe::Stub::end(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::GenericResponse* response) {
- return ::grpc::internal::BlockingUnaryCall< ::flexe::GenericRequest, ::flexe::GenericResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_end_, context, request, response);
+::grpc::Status Flexe::Stub::aggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::flexe::ModelReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::AggregationRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_aggregate_async_fit_, context, request, response);
+}
+
+void Flexe::Stub::experimental_async::aggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::AggregationRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_aggregate_async_fit_, context, request, response, std::move(f));
+}
+
+void Flexe::Stub::experimental_async::aggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+ ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_aggregate_async_fit_, context, request, response, reactor);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsyncaggregate_async_fitRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::AggregationRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_aggregate_async_fit_, context, request);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asyncaggregate_async_fitRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ auto* result =
+ this->PrepareAsyncaggregate_async_fitRaw(context, request, cq);
+ result->StartCall();
+ return result;
+}
+
+::grpc::Status Flexe::Stub::aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::flexe::ModelReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::AggregationRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_aggregate_sync_fit_, context, request, response);
+}
+
+void Flexe::Stub::experimental_async::aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::AggregationRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_aggregate_sync_fit_, context, request, response, std::move(f));
+}
+
+void Flexe::Stub::experimental_async::aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+ ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_aggregate_sync_fit_, context, request, response, reactor);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsyncaggregate_sync_fitRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::AggregationRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_aggregate_sync_fit_, context, request);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asyncaggregate_sync_fitRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ auto* result =
+ this->PrepareAsyncaggregate_sync_fitRaw(context, request, cq);
+ result->StartCall();
+ return result;
+}
+
+::grpc::Status Flexe::Stub::aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::flexe::ModelReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::AggregationRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_aggregate_evaluate_, context, request, response);
+}
+
+void Flexe::Stub::experimental_async::aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::AggregationRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_aggregate_evaluate_, context, request, response, std::move(f));
+}
+
+void Flexe::Stub::experimental_async::aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+ ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_aggregate_evaluate_, context, request, response, reactor);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsyncaggregate_evaluateRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::AggregationRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_aggregate_evaluate_, context, request);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asyncaggregate_evaluateRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ auto* result =
+ this->PrepareAsyncaggregate_evaluateRaw(context, request, cq);
+ result->StartCall();
+ return result;
+}
+
+::grpc::Status Flexe::Stub::set_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::GenericReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::GenericRequest, ::flexe::GenericReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_set_strategy_, context, request, response);
+}
+
+void Flexe::Stub::experimental_async::set_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::GenericRequest, ::flexe::GenericReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_set_strategy_, context, request, response, std::move(f));
+}
+
+void Flexe::Stub::experimental_async::set_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+ ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_set_strategy_, context, request, response, reactor);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>* Flexe::Stub::PrepareAsyncset_strategyRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::GenericReply, ::flexe::GenericRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_set_strategy_, context, request);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>* Flexe::Stub::Asyncset_strategyRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ auto* result =
+ this->PrepareAsyncset_strategyRaw(context, request, cq);
+ result->StartCall();
+ return result;
+}
+
+::grpc::Status Flexe::Stub::get_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::GenericReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::GenericRequest, ::flexe::GenericReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_get_strategy_, context, request, response);
+}
+
+void Flexe::Stub::experimental_async::get_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::GenericRequest, ::flexe::GenericReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_get_strategy_, context, request, response, std::move(f));
+}
+
+void Flexe::Stub::experimental_async::get_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+ ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_get_strategy_, context, request, response, reactor);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>* Flexe::Stub::PrepareAsyncget_strategyRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::GenericReply, ::flexe::GenericRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_get_strategy_, context, request);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>* Flexe::Stub::Asyncget_strategyRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ auto* result =
+ this->PrepareAsyncget_strategyRaw(context, request, cq);
+ result->StartCall();
+ return result;
+}
+
+::grpc::Status Flexe::Stub::center_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_center_fit_, context, request, response);
+}
+
+void Flexe::Stub::experimental_async::center_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_center_fit_, context, request, response, std::move(f));
}
-void Flexe::Stub::experimental_async::end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericResponse* response, std::function f) {
- ::grpc::internal::CallbackUnaryCall< ::flexe::GenericRequest, ::flexe::GenericResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_end_, context, request, response, std::move(f));
+void Flexe::Stub::experimental_async::center_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+ ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_center_fit_, context, request, response, reactor);
}
-void Flexe::Stub::experimental_async::end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsynccenter_fitRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::GenericRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_center_fit_, context, request);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asynccenter_fitRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ auto* result =
+ this->PrepareAsynccenter_fitRaw(context, request, cq);
+ result->StartCall();
+ return result;
+}
+
+::grpc::Status Flexe::Stub::center_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_center_evaluate_, context, request, response);
+}
+
+void Flexe::Stub::experimental_async::center_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_center_evaluate_, context, request, response, std::move(f));
+}
+
+void Flexe::Stub::experimental_async::center_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+ ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_center_evaluate_, context, request, response, reactor);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::PrepareAsynccenter_evaluateRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::ModelReply, ::flexe::GenericRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_center_evaluate_, context, request);
+}
+
+::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Flexe::Stub::Asynccenter_evaluateRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ auto* result =
+ this->PrepareAsynccenter_evaluateRaw(context, request, cq);
+ result->StartCall();
+ return result;
+}
+
+::grpc::Status Flexe::Stub::end(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::GenericReply* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flexe::GenericRequest, ::flexe::GenericReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_end_, context, request, response);
+}
+
+void Flexe::Stub::experimental_async::end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flexe::GenericRequest, ::flexe::GenericReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_end_, context, request, response, std::move(f));
+}
+
+void Flexe::Stub::experimental_async::end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_end_, context, request, response, reactor);
}
-::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>* Flexe::Stub::PrepareAsyncendRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
- return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::GenericResponse, ::flexe::GenericRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_end_, context, request);
+::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>* Flexe::Stub::PrepareAsyncendRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flexe::GenericReply, ::flexe::GenericRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_end_, context, request);
}
-::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>* Flexe::Stub::AsyncendRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>* Flexe::Stub::AsyncendRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
auto* result =
this->PrepareAsyncendRaw(context, request, cq);
result->StartCall();
@@ -297,72 +497,72 @@ Flexe::Service::Service() {
AddMethod(new ::grpc::internal::RpcServiceMethod(
Flexe_method_names[1],
::grpc::internal::RpcMethod::NORMAL_RPC,
- new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::TTRequest, ::flexe::EvaluateReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
[](Flexe::Service* service,
::grpc::ServerContext* ctx,
const ::flexe::TTRequest* req,
- ::flexe::EvaluateReply* resp) {
+ ::flexe::ModelReply* resp) {
return service->evaluate(ctx, req, resp);
}, this)));
AddMethod(new ::grpc::internal::RpcServiceMethod(
Flexe_method_names[2],
::grpc::internal::RpcMethod::NORMAL_RPC,
- new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::TTRequest, ::flexe::GenericResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
[](Flexe::Service* service,
::grpc::ServerContext* ctx,
const ::flexe::TTRequest* req,
- ::flexe::GenericResponse* resp) {
+ ::flexe::ModelReply* resp) {
return service->update_model(ctx, req, resp);
}, this)));
AddMethod(new ::grpc::internal::RpcServiceMethod(
Flexe_method_names[3],
::grpc::internal::RpcMethod::NORMAL_RPC,
- new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::TTRequest, ::flexe::EvaluateReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
[](Flexe::Service* service,
::grpc::ServerContext* ctx,
- const ::flexe::TTRequest* req,
- ::flexe::EvaluateReply* resp) {
- return service->aggregate_evaluate(ctx, req, resp);
+ const ::flexe::GenericRequest* req,
+ ::flexe::ModelReply* resp) {
+ return service->get_information(ctx, req, resp);
}, this)));
AddMethod(new ::grpc::internal::RpcServiceMethod(
Flexe_method_names[4],
::grpc::internal::RpcMethod::NORMAL_RPC,
- new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::ModelRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
[](Flexe::Service* service,
::grpc::ServerContext* ctx,
- const ::flexe::ModelRequest* req,
+ const ::flexe::GenericRequest* req,
::flexe::ModelReply* resp) {
- return service->aggregate_fit(ctx, req, resp);
+ return service->set_information(ctx, req, resp);
}, this)));
AddMethod(new ::grpc::internal::RpcServiceMethod(
Flexe_method_names[5],
::grpc::internal::RpcMethod::NORMAL_RPC,
- new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
[](Flexe::Service* service,
::grpc::ServerContext* ctx,
- const ::flexe::GenericRequest* req,
+ const ::flexe::TTRequest* req,
::flexe::ModelReply* resp) {
- return service->aggregate_sync_fit(ctx, req, resp);
+ return service->aggregate_client(ctx, req, resp);
}, this)));
AddMethod(new ::grpc::internal::RpcServiceMethod(
Flexe_method_names[6],
::grpc::internal::RpcMethod::NORMAL_RPC,
- new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::TTRequest, ::flexe::EvaluateReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
[](Flexe::Service* service,
::grpc::ServerContext* ctx,
const ::flexe::TTRequest* req,
- ::flexe::EvaluateReply* resp) {
- return service->server_evaluate(ctx, req, resp);
+ ::flexe::ModelReply* resp) {
+ return service->fit_all(ctx, req, resp);
}, this)));
AddMethod(new ::grpc::internal::RpcServiceMethod(
Flexe_method_names[7],
::grpc::internal::RpcMethod::NORMAL_RPC,
- new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::ModelRequest, ::flexe::GenericResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
[](Flexe::Service* service,
::grpc::ServerContext* ctx,
- const ::flexe::ModelRequest* req,
- ::flexe::GenericResponse* resp) {
- return service->store_model(ctx, req, resp);
+ const ::flexe::TTRequest* req,
+ ::flexe::ModelReply* resp) {
+ return service->evaluate_all(ctx, req, resp);
}, this)));
AddMethod(new ::grpc::internal::RpcServiceMethod(
Flexe_method_names[8],
@@ -372,16 +572,96 @@ Flexe::Service::Service() {
::grpc::ServerContext* ctx,
const ::flexe::TTRequest* req,
::flexe::ModelReply* resp) {
- return service->initialize_parameters(ctx, req, resp);
+ return service->update_all(ctx, req, resp);
}, this)));
AddMethod(new ::grpc::internal::RpcServiceMethod(
Flexe_method_names[9],
::grpc::internal::RpcMethod::NORMAL_RPC,
- new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::GenericRequest, ::flexe::GenericResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::TTRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ [](Flexe::Service* service,
+ ::grpc::ServerContext* ctx,
+ const ::flexe::TTRequest* req,
+ ::flexe::ModelReply* resp) {
+ return service->initialize_parameters(ctx, req, resp);
+ }, this)));
+ AddMethod(new ::grpc::internal::RpcServiceMethod(
+ Flexe_method_names[10],
+ ::grpc::internal::RpcMethod::NORMAL_RPC,
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::AggregationRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ [](Flexe::Service* service,
+ ::grpc::ServerContext* ctx,
+ const ::flexe::AggregationRequest* req,
+ ::flexe::ModelReply* resp) {
+ return service->aggregate_async_fit(ctx, req, resp);
+ }, this)));
+ AddMethod(new ::grpc::internal::RpcServiceMethod(
+ Flexe_method_names[11],
+ ::grpc::internal::RpcMethod::NORMAL_RPC,
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::AggregationRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ [](Flexe::Service* service,
+ ::grpc::ServerContext* ctx,
+ const ::flexe::AggregationRequest* req,
+ ::flexe::ModelReply* resp) {
+ return service->aggregate_sync_fit(ctx, req, resp);
+ }, this)));
+ AddMethod(new ::grpc::internal::RpcServiceMethod(
+ Flexe_method_names[12],
+ ::grpc::internal::RpcMethod::NORMAL_RPC,
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::AggregationRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ [](Flexe::Service* service,
+ ::grpc::ServerContext* ctx,
+ const ::flexe::AggregationRequest* req,
+ ::flexe::ModelReply* resp) {
+ return service->aggregate_evaluate(ctx, req, resp);
+ }, this)));
+ AddMethod(new ::grpc::internal::RpcServiceMethod(
+ Flexe_method_names[13],
+ ::grpc::internal::RpcMethod::NORMAL_RPC,
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::GenericRequest, ::flexe::GenericReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ [](Flexe::Service* service,
+ ::grpc::ServerContext* ctx,
+ const ::flexe::GenericRequest* req,
+ ::flexe::GenericReply* resp) {
+ return service->set_strategy(ctx, req, resp);
+ }, this)));
+ AddMethod(new ::grpc::internal::RpcServiceMethod(
+ Flexe_method_names[14],
+ ::grpc::internal::RpcMethod::NORMAL_RPC,
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::GenericRequest, ::flexe::GenericReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ [](Flexe::Service* service,
+ ::grpc::ServerContext* ctx,
+ const ::flexe::GenericRequest* req,
+ ::flexe::GenericReply* resp) {
+ return service->get_strategy(ctx, req, resp);
+ }, this)));
+ AddMethod(new ::grpc::internal::RpcServiceMethod(
+ Flexe_method_names[15],
+ ::grpc::internal::RpcMethod::NORMAL_RPC,
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ [](Flexe::Service* service,
+ ::grpc::ServerContext* ctx,
+ const ::flexe::GenericRequest* req,
+ ::flexe::ModelReply* resp) {
+ return service->center_fit(ctx, req, resp);
+ }, this)));
+ AddMethod(new ::grpc::internal::RpcServiceMethod(
+ Flexe_method_names[16],
+ ::grpc::internal::RpcMethod::NORMAL_RPC,
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::GenericRequest, ::flexe::ModelReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ [](Flexe::Service* service,
+ ::grpc::ServerContext* ctx,
+ const ::flexe::GenericRequest* req,
+ ::flexe::ModelReply* resp) {
+ return service->center_evaluate(ctx, req, resp);
+ }, this)));
+ AddMethod(new ::grpc::internal::RpcServiceMethod(
+ Flexe_method_names[17],
+ ::grpc::internal::RpcMethod::NORMAL_RPC,
+ new ::grpc::internal::RpcMethodHandler< Flexe::Service, ::flexe::GenericRequest, ::flexe::GenericReply, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
[](Flexe::Service* service,
::grpc::ServerContext* ctx,
const ::flexe::GenericRequest* req,
- ::flexe::GenericResponse* resp) {
+ ::flexe::GenericReply* resp) {
return service->end(ctx, req, resp);
}, this)));
}
@@ -396,49 +676,56 @@ ::grpc::Status Flexe::Service::fit(::grpc::ServerContext* context, const ::flexe
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
-::grpc::Status Flexe::Service::evaluate(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response) {
+::grpc::Status Flexe::Service::evaluate(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response) {
(void) context;
(void) request;
(void) response;
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
-::grpc::Status Flexe::Service::update_model(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::GenericResponse* response) {
+::grpc::Status Flexe::Service::update_model(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response) {
(void) context;
(void) request;
(void) response;
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
-::grpc::Status Flexe::Service::aggregate_evaluate(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response) {
+::grpc::Status Flexe::Service::get_information(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response) {
(void) context;
(void) request;
(void) response;
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
-::grpc::Status Flexe::Service::aggregate_fit(::grpc::ServerContext* context, const ::flexe::ModelRequest* request, ::flexe::ModelReply* response) {
+::grpc::Status Flexe::Service::set_information(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response) {
(void) context;
(void) request;
(void) response;
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
-::grpc::Status Flexe::Service::aggregate_sync_fit(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response) {
+::grpc::Status Flexe::Service::aggregate_client(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response) {
(void) context;
(void) request;
(void) response;
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
-::grpc::Status Flexe::Service::server_evaluate(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response) {
+::grpc::Status Flexe::Service::fit_all(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response) {
(void) context;
(void) request;
(void) response;
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
-::grpc::Status Flexe::Service::store_model(::grpc::ServerContext* context, const ::flexe::ModelRequest* request, ::flexe::GenericResponse* response) {
+::grpc::Status Flexe::Service::evaluate_all(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response) {
+ (void) context;
+ (void) request;
+ (void) response;
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+}
+
+::grpc::Status Flexe::Service::update_all(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response) {
(void) context;
(void) request;
(void) response;
@@ -452,7 +739,56 @@ ::grpc::Status Flexe::Service::initialize_parameters(::grpc::ServerContext* cont
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
-::grpc::Status Flexe::Service::end(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericResponse* response) {
+::grpc::Status Flexe::Service::aggregate_async_fit(::grpc::ServerContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response) {
+ (void) context;
+ (void) request;
+ (void) response;
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+}
+
+::grpc::Status Flexe::Service::aggregate_sync_fit(::grpc::ServerContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response) {
+ (void) context;
+ (void) request;
+ (void) response;
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+}
+
+::grpc::Status Flexe::Service::aggregate_evaluate(::grpc::ServerContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response) {
+ (void) context;
+ (void) request;
+ (void) response;
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+}
+
+::grpc::Status Flexe::Service::set_strategy(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response) {
+ (void) context;
+ (void) request;
+ (void) response;
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+}
+
+::grpc::Status Flexe::Service::get_strategy(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response) {
+ (void) context;
+ (void) request;
+ (void) response;
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+}
+
+::grpc::Status Flexe::Service::center_fit(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response) {
+ (void) context;
+ (void) request;
+ (void) response;
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+}
+
+::grpc::Status Flexe::Service::center_evaluate(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response) {
+ (void) context;
+ (void) request;
+ (void) response;
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+}
+
+::grpc::Status Flexe::Service::end(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response) {
(void) context;
(void) request;
(void) response;
@@ -461,3 +797,4 @@ ::grpc::Status Flexe::Service::end(::grpc::ServerContext* context, const ::flexe
} // namespace flexe
+
diff --git a/src/flexe/proto/flexe.grpc.pb.h b/src/flexe/proto/flexe.grpc.pb.h
index 03e3564..26d4b02 100644
--- a/src/flexe/proto/flexe.grpc.pb.h
+++ b/src/flexe/proto/flexe.grpc.pb.h
@@ -28,7 +28,6 @@
namespace flexe {
-// Defines the service
class Flexe final {
public:
static constexpr char const* service_full_name() {
@@ -45,56 +44,63 @@ class Flexe final {
std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncfit(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncfitRaw(context, request, cq));
}
- virtual ::grpc::Status evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::EvaluateReply* response) = 0;
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>> Asyncevaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>>(AsyncevaluateRaw(context, request, cq));
+ virtual ::grpc::Status evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asyncevaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(AsyncevaluateRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>> PrepareAsyncevaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>>(PrepareAsyncevaluateRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncevaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncevaluateRaw(context, request, cq));
}
- virtual ::grpc::Status update_model(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::GenericResponse* response) = 0;
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>> Asyncupdate_model(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>>(Asyncupdate_modelRaw(context, request, cq));
+ virtual ::grpc::Status update_model(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asyncupdate_model(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asyncupdate_modelRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>> PrepareAsyncupdate_model(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>>(PrepareAsyncupdate_modelRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncupdate_model(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncupdate_modelRaw(context, request, cq));
}
- // Server Functions
- virtual ::grpc::Status aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::EvaluateReply* response) = 0;
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>> Asyncaggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>>(Asyncaggregate_evaluateRaw(context, request, cq));
+ virtual ::grpc::Status get_information(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asyncget_information(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asyncget_informationRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>> PrepareAsyncaggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>>(PrepareAsyncaggregate_evaluateRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncget_information(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncget_informationRaw(context, request, cq));
}
- virtual ::grpc::Status aggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::flexe::ModelReply* response) = 0;
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asyncaggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asyncaggregate_fitRaw(context, request, cq));
+ virtual ::grpc::Status set_information(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asyncset_information(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asyncset_informationRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncaggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncaggregate_fitRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncset_information(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncset_informationRaw(context, request, cq));
}
- virtual ::grpc::Status aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) = 0;
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asyncaggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asyncaggregate_sync_fitRaw(context, request, cq));
+ virtual ::grpc::Status aggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asyncaggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asyncaggregate_clientRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncaggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncaggregate_sync_fitRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncaggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncaggregate_clientRaw(context, request, cq));
+ }
+ virtual ::grpc::Status fit_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asyncfit_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asyncfit_allRaw(context, request, cq));
}
- virtual ::grpc::Status server_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::EvaluateReply* response) = 0;
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>> Asyncserver_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>>(Asyncserver_evaluateRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncfit_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncfit_allRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>> PrepareAsyncserver_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>>(PrepareAsyncserver_evaluateRaw(context, request, cq));
+ virtual ::grpc::Status evaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asyncevaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asyncevaluate_allRaw(context, request, cq));
}
- virtual ::grpc::Status store_model(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::flexe::GenericResponse* response) = 0;
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>> Asyncstore_model(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>>(Asyncstore_modelRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncevaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncevaluate_allRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>> PrepareAsyncstore_model(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>>(PrepareAsyncstore_modelRaw(context, request, cq));
+ virtual ::grpc::Status update_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asyncupdate_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asyncupdate_allRaw(context, request, cq));
}
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncupdate_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncupdate_allRaw(context, request, cq));
+ }
+ // Server Functions
virtual ::grpc::Status initialize_parameters(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) = 0;
std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asyncinitialize_parameters(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asyncinitialize_parametersRaw(context, request, cq));
@@ -102,12 +108,61 @@ class Flexe final {
std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncinitialize_parameters(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncinitialize_parametersRaw(context, request, cq));
}
- virtual ::grpc::Status end(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::GenericResponse* response) = 0;
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>> Asyncend(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>>(AsyncendRaw(context, request, cq));
+ virtual ::grpc::Status aggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::flexe::ModelReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asyncaggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asyncaggregate_async_fitRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncaggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncaggregate_async_fitRaw(context, request, cq));
+ }
+ virtual ::grpc::Status aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::flexe::ModelReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asyncaggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asyncaggregate_sync_fitRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncaggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncaggregate_sync_fitRaw(context, request, cq));
+ }
+ virtual ::grpc::Status aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::flexe::ModelReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asyncaggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asyncaggregate_evaluateRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsyncaggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsyncaggregate_evaluateRaw(context, request, cq));
+ }
+ virtual ::grpc::Status set_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::GenericReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>> Asyncset_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>>(Asyncset_strategyRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>> PrepareAsyncset_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>>(PrepareAsyncset_strategyRaw(context, request, cq));
+ }
+ virtual ::grpc::Status get_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::GenericReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>> Asyncget_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>>(Asyncget_strategyRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>> PrepareAsyncend(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>>(PrepareAsyncendRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>> PrepareAsyncget_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>>(PrepareAsyncget_strategyRaw(context, request, cq));
+ }
+ virtual ::grpc::Status center_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asynccenter_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asynccenter_fitRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsynccenter_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsynccenter_fitRaw(context, request, cq));
+ }
+ virtual ::grpc::Status center_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> Asynccenter_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(Asynccenter_evaluateRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>> PrepareAsynccenter_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>>(PrepareAsynccenter_evaluateRaw(context, request, cq));
+ }
+ virtual ::grpc::Status end(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::GenericReply* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>> Asyncend(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>>(AsyncendRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>> PrepareAsyncend(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>>(PrepareAsyncendRaw(context, request, cq));
}
class experimental_async_interface {
public:
@@ -119,60 +174,108 @@ class Flexe final {
#else
virtual void fit(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
#endif
- virtual void evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, std::function) = 0;
+ virtual void evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function) = 0;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual void evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ virtual void evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
#else
- virtual void evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ virtual void evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
#endif
- virtual void update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::GenericResponse* response, std::function) = 0;
+ virtual void update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function) = 0;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual void update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::GenericResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ virtual void update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
#else
- virtual void update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::GenericResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ virtual void update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
#endif
- // Server Functions
- virtual void aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, std::function) = 0;
+ virtual void get_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function) = 0;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual void get_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ #else
+ virtual void get_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ #endif
+ virtual void set_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function) = 0;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual void aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ virtual void set_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
#else
- virtual void aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ virtual void set_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
#endif
- virtual void aggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::ModelReply* response, std::function) = 0;
+ virtual void aggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function) = 0;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual void aggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ virtual void aggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
#else
- virtual void aggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ virtual void aggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
#endif
- virtual void aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function) = 0;
+ virtual void fit_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function) = 0;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual void aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ virtual void fit_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
#else
- virtual void aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ virtual void fit_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
#endif
- virtual void server_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, std::function) = 0;
+ virtual void evaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function) = 0;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual void server_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ virtual void evaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
#else
- virtual void server_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ virtual void evaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
#endif
- virtual void store_model(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::GenericResponse* response, std::function) = 0;
+ virtual void update_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function) = 0;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual void store_model(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::GenericResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ virtual void update_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
#else
- virtual void store_model(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::GenericResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ virtual void update_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
#endif
+ // Server Functions
virtual void initialize_parameters(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function) = 0;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
virtual void initialize_parameters(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
#else
virtual void initialize_parameters(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
#endif
- virtual void end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericResponse* response, std::function) = 0;
+ virtual void aggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, std::function) = 0;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual void aggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ #else
+ virtual void aggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ #endif
+ virtual void aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, std::function) = 0;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual void aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ #else
+ virtual void aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ #endif
+ virtual void aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, std::function) = 0;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual void aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ #else
+ virtual void aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ #endif
+ virtual void set_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, std::function) = 0;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual void set_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ #else
+ virtual void set_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ #endif
+ virtual void get_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, std::function) = 0;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual void get_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ #else
+ virtual void get_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ #endif
+ virtual void center_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function) = 0;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual void center_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ #else
+ virtual void center_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ #endif
+ virtual void center_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function) = 0;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual void center_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ #else
+ virtual void center_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ #endif
+ virtual void end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, std::function) = 0;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual void end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ virtual void end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::ClientUnaryReactor* reactor) = 0;
#else
- virtual void end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+ virtual void end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
#endif
};
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
@@ -185,24 +288,40 @@ class Flexe final {
private:
virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* AsyncfitRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncfitRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>* AsyncevaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>* PrepareAsyncevaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>* Asyncupdate_modelRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>* PrepareAsyncupdate_modelRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>* Asyncaggregate_evaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>* PrepareAsyncaggregate_evaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asyncaggregate_fitRaw(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncaggregate_fitRaw(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asyncaggregate_sync_fitRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncaggregate_sync_fitRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>* Asyncserver_evaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::EvaluateReply>* PrepareAsyncserver_evaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>* Asyncstore_modelRaw(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>* PrepareAsyncstore_modelRaw(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* AsyncevaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncevaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asyncupdate_modelRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncupdate_modelRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asyncget_informationRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncget_informationRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asyncset_informationRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncset_informationRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asyncaggregate_clientRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncaggregate_clientRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asyncfit_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncfit_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asyncevaluate_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncevaluate_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asyncupdate_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncupdate_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asyncinitialize_parametersRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncinitialize_parametersRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>* AsyncendRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
- virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericResponse>* PrepareAsyncendRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asyncaggregate_async_fitRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncaggregate_async_fitRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asyncaggregate_sync_fitRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncaggregate_sync_fitRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asyncaggregate_evaluateRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsyncaggregate_evaluateRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>* Asyncset_strategyRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>* PrepareAsyncset_strategyRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>* Asyncget_strategyRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>* PrepareAsyncget_strategyRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asynccenter_fitRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsynccenter_fitRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* Asynccenter_evaluateRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::ModelReply>* PrepareAsynccenter_evaluateRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>* AsyncendRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flexe::GenericReply>* PrepareAsyncendRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) = 0;
};
class Stub final : public StubInterface {
public:
@@ -214,54 +333,61 @@ class Flexe final {
std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncfit(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncfitRaw(context, request, cq));
}
- ::grpc::Status evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::EvaluateReply* response) override;
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>> Asyncevaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>>(AsyncevaluateRaw(context, request, cq));
+ ::grpc::Status evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asyncevaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(AsyncevaluateRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>> PrepareAsyncevaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>>(PrepareAsyncevaluateRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncevaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncevaluateRaw(context, request, cq));
}
- ::grpc::Status update_model(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::GenericResponse* response) override;
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>> Asyncupdate_model(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>>(Asyncupdate_modelRaw(context, request, cq));
+ ::grpc::Status update_model(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asyncupdate_model(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(Asyncupdate_modelRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>> PrepareAsyncupdate_model(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>>(PrepareAsyncupdate_modelRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncupdate_model(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncupdate_modelRaw(context, request, cq));
}
- ::grpc::Status aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::EvaluateReply* response) override;
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>> Asyncaggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>>(Asyncaggregate_evaluateRaw(context, request, cq));
+ ::grpc::Status get_information(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asyncget_information(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(Asyncget_informationRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>> PrepareAsyncaggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>>(PrepareAsyncaggregate_evaluateRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncget_information(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncget_informationRaw(context, request, cq));
}
- ::grpc::Status aggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::flexe::ModelReply* response) override;
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asyncaggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(Asyncaggregate_fitRaw(context, request, cq));
+ ::grpc::Status set_information(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asyncset_information(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(Asyncset_informationRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncaggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncaggregate_fitRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncset_information(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncset_informationRaw(context, request, cq));
}
- ::grpc::Status aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) override;
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asyncaggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(Asyncaggregate_sync_fitRaw(context, request, cq));
+ ::grpc::Status aggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asyncaggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(Asyncaggregate_clientRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncaggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncaggregate_sync_fitRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncaggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncaggregate_clientRaw(context, request, cq));
+ }
+ ::grpc::Status fit_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asyncfit_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(Asyncfit_allRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncfit_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncfit_allRaw(context, request, cq));
}
- ::grpc::Status server_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::EvaluateReply* response) override;
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>> Asyncserver_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>>(Asyncserver_evaluateRaw(context, request, cq));
+ ::grpc::Status evaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asyncevaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(Asyncevaluate_allRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>> PrepareAsyncserver_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>>(PrepareAsyncserver_evaluateRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncevaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncevaluate_allRaw(context, request, cq));
}
- ::grpc::Status store_model(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::flexe::GenericResponse* response) override;
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>> Asyncstore_model(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>>(Asyncstore_modelRaw(context, request, cq));
+ ::grpc::Status update_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asyncupdate_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(Asyncupdate_allRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>> PrepareAsyncstore_model(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>>(PrepareAsyncstore_modelRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncupdate_all(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncupdate_allRaw(context, request, cq));
}
::grpc::Status initialize_parameters(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::flexe::ModelReply* response) override;
std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asyncinitialize_parameters(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
@@ -270,12 +396,61 @@ class Flexe final {
std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncinitialize_parameters(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) {
return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncinitialize_parametersRaw(context, request, cq));
}
- ::grpc::Status end(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::GenericResponse* response) override;
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>> Asyncend(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>>(AsyncendRaw(context, request, cq));
+ ::grpc::Status aggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::flexe::ModelReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asyncaggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(Asyncaggregate_async_fitRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncaggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncaggregate_async_fitRaw(context, request, cq));
+ }
+ ::grpc::Status aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::flexe::ModelReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asyncaggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(Asyncaggregate_sync_fitRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncaggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncaggregate_sync_fitRaw(context, request, cq));
+ }
+ ::grpc::Status aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::flexe::ModelReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asyncaggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(Asyncaggregate_evaluateRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsyncaggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsyncaggregate_evaluateRaw(context, request, cq));
+ }
+ ::grpc::Status set_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::GenericReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>> Asyncset_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>>(Asyncset_strategyRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>> PrepareAsyncset_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>>(PrepareAsyncset_strategyRaw(context, request, cq));
+ }
+ ::grpc::Status get_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::GenericReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>> Asyncget_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>>(Asyncget_strategyRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>> PrepareAsyncget_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>>(PrepareAsyncget_strategyRaw(context, request, cq));
+ }
+ ::grpc::Status center_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asynccenter_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(Asynccenter_fitRaw(context, request, cq));
}
- std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>> PrepareAsyncend(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
- return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>>(PrepareAsyncendRaw(context, request, cq));
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsynccenter_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsynccenter_fitRaw(context, request, cq));
+ }
+ ::grpc::Status center_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::ModelReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> Asynccenter_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(Asynccenter_evaluateRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>> PrepareAsynccenter_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>>(PrepareAsynccenter_evaluateRaw(context, request, cq));
+ }
+ ::grpc::Status end(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::flexe::GenericReply* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>> Asyncend(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>>(AsyncendRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>> PrepareAsyncend(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>>(PrepareAsyncendRaw(context, request, cq));
}
class experimental_async final :
public StubInterface::experimental_async_interface {
@@ -286,47 +461,53 @@ class Flexe final {
#else
void fit(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
#endif
- void evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, std::function) override;
+ void evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function) override;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- void evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::ClientUnaryReactor* reactor) override;
+ void evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
#else
- void evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ void evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
#endif
- void update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::GenericResponse* response, std::function) override;
+ void update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function) override;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- void update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::GenericResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
+ void update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
#else
- void update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::GenericResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ void update_model(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
#endif
- void aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, std::function) override;
+ void get_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function) override;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- void aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::ClientUnaryReactor* reactor) override;
+ void get_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
#else
- void aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ void get_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
#endif
- void aggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::ModelReply* response, std::function) override;
+ void set_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function) override;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- void aggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
+ void set_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
#else
- void aggregate_fit(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ void set_information(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
#endif
- void aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function) override;
+ void aggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function) override;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- void aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
+ void aggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
#else
- void aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ void aggregate_client(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
#endif
- void server_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, std::function) override;
+ void fit_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function) override;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- void server_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::ClientUnaryReactor* reactor) override;
+ void fit_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
#else
- void server_evaluate(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ void fit_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
#endif
- void store_model(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::GenericResponse* response, std::function) override;
+ void evaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function) override;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- void store_model(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::GenericResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
+ void evaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
#else
- void store_model(::grpc::ClientContext* context, const ::flexe::ModelRequest* request, ::flexe::GenericResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ void evaluate_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ #endif
+ void update_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function) override;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ void update_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
+ #else
+ void update_all(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
#endif
void initialize_parameters(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, std::function) override;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
@@ -334,11 +515,53 @@ class Flexe final {
#else
void initialize_parameters(::grpc::ClientContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
#endif
- void end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericResponse* response, std::function) override;
+ void aggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, std::function) override;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ void aggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
+ #else
+ void aggregate_async_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ #endif
+ void aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, std::function) override;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ void aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
+ #else
+ void aggregate_sync_fit(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ #endif
+ void aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, std::function) override;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ void aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
+ #else
+ void aggregate_evaluate(::grpc::ClientContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ #endif
+ void set_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, std::function) override;
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- void end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
+ void set_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::ClientUnaryReactor* reactor) override;
#else
- void end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ void set_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ #endif
+ void get_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, std::function) override;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ void get_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::ClientUnaryReactor* reactor) override;
+ #else
+ void get_strategy(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ #endif
+ void center_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function) override;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ void center_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
+ #else
+ void center_fit(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ #endif
+ void center_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, std::function) override;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ void center_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::ClientUnaryReactor* reactor) override;
+ #else
+ void center_evaluate(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+ #endif
+ void end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, std::function) override;
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ void end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::ClientUnaryReactor* reactor) override;
+ #else
+ void end(::grpc::ClientContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
#endif
private:
friend class Stub;
@@ -353,33 +576,57 @@ class Flexe final {
class experimental_async async_stub_{this};
::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* AsyncfitRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncfitRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>* AsyncevaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>* PrepareAsyncevaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>* Asyncupdate_modelRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>* PrepareAsyncupdate_modelRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>* Asyncaggregate_evaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>* PrepareAsyncaggregate_evaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asyncaggregate_fitRaw(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncaggregate_fitRaw(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asyncaggregate_sync_fitRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncaggregate_sync_fitRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>* Asyncserver_evaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::EvaluateReply>* PrepareAsyncserver_evaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>* Asyncstore_modelRaw(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>* PrepareAsyncstore_modelRaw(::grpc::ClientContext* context, const ::flexe::ModelRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* AsyncevaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncevaluateRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asyncupdate_modelRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncupdate_modelRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asyncget_informationRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncget_informationRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asyncset_informationRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncset_informationRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asyncaggregate_clientRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncaggregate_clientRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asyncfit_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncfit_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asyncevaluate_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncevaluate_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asyncupdate_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncupdate_allRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asyncinitialize_parametersRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncinitialize_parametersRaw(::grpc::ClientContext* context, const ::flexe::TTRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>* AsyncendRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
- ::grpc::ClientAsyncResponseReader< ::flexe::GenericResponse>* PrepareAsyncendRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asyncaggregate_async_fitRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncaggregate_async_fitRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asyncaggregate_sync_fitRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncaggregate_sync_fitRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asyncaggregate_evaluateRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsyncaggregate_evaluateRaw(::grpc::ClientContext* context, const ::flexe::AggregationRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>* Asyncset_strategyRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>* PrepareAsyncset_strategyRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>* Asyncget_strategyRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>* PrepareAsyncget_strategyRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asynccenter_fitRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsynccenter_fitRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* Asynccenter_evaluateRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::ModelReply>* PrepareAsynccenter_evaluateRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>* AsyncendRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flexe::GenericReply>* PrepareAsyncendRaw(::grpc::ClientContext* context, const ::flexe::GenericRequest& request, ::grpc::CompletionQueue* cq) override;
const ::grpc::internal::RpcMethod rpcmethod_fit_;
const ::grpc::internal::RpcMethod rpcmethod_evaluate_;
const ::grpc::internal::RpcMethod rpcmethod_update_model_;
- const ::grpc::internal::RpcMethod rpcmethod_aggregate_evaluate_;
- const ::grpc::internal::RpcMethod rpcmethod_aggregate_fit_;
- const ::grpc::internal::RpcMethod rpcmethod_aggregate_sync_fit_;
- const ::grpc::internal::RpcMethod rpcmethod_server_evaluate_;
- const ::grpc::internal::RpcMethod rpcmethod_store_model_;
+ const ::grpc::internal::RpcMethod rpcmethod_get_information_;
+ const ::grpc::internal::RpcMethod rpcmethod_set_information_;
+ const ::grpc::internal::RpcMethod rpcmethod_aggregate_client_;
+ const ::grpc::internal::RpcMethod rpcmethod_fit_all_;
+ const ::grpc::internal::RpcMethod rpcmethod_evaluate_all_;
+ const ::grpc::internal::RpcMethod rpcmethod_update_all_;
const ::grpc::internal::RpcMethod rpcmethod_initialize_parameters_;
+ const ::grpc::internal::RpcMethod rpcmethod_aggregate_async_fit_;
+ const ::grpc::internal::RpcMethod rpcmethod_aggregate_sync_fit_;
+ const ::grpc::internal::RpcMethod rpcmethod_aggregate_evaluate_;
+ const ::grpc::internal::RpcMethod rpcmethod_set_strategy_;
+ const ::grpc::internal::RpcMethod rpcmethod_get_strategy_;
+ const ::grpc::internal::RpcMethod rpcmethod_center_fit_;
+ const ::grpc::internal::RpcMethod rpcmethod_center_evaluate_;
const ::grpc::internal::RpcMethod rpcmethod_end_;
};
static std::unique_ptr NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());
@@ -390,16 +637,24 @@ class Flexe final {
virtual ~Service();
// Client Functions
virtual ::grpc::Status fit(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response);
- virtual ::grpc::Status evaluate(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response);
- virtual ::grpc::Status update_model(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::GenericResponse* response);
+ virtual ::grpc::Status evaluate(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response);
+ virtual ::grpc::Status update_model(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response);
+ virtual ::grpc::Status get_information(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response);
+ virtual ::grpc::Status set_information(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response);
+ virtual ::grpc::Status aggregate_client(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response);
+ virtual ::grpc::Status fit_all(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response);
+ virtual ::grpc::Status evaluate_all(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response);
+ virtual ::grpc::Status update_all(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response);
// Server Functions
- virtual ::grpc::Status aggregate_evaluate(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response);
- virtual ::grpc::Status aggregate_fit(::grpc::ServerContext* context, const ::flexe::ModelRequest* request, ::flexe::ModelReply* response);
- virtual ::grpc::Status aggregate_sync_fit(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response);
- virtual ::grpc::Status server_evaluate(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response);
- virtual ::grpc::Status store_model(::grpc::ServerContext* context, const ::flexe::ModelRequest* request, ::flexe::GenericResponse* response);
virtual ::grpc::Status initialize_parameters(::grpc::ServerContext* context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response);
- virtual ::grpc::Status end(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericResponse* response);
+ virtual ::grpc::Status aggregate_async_fit(::grpc::ServerContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response);
+ virtual ::grpc::Status aggregate_sync_fit(::grpc::ServerContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response);
+ virtual ::grpc::Status aggregate_evaluate(::grpc::ServerContext* context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response);
+ virtual ::grpc::Status set_strategy(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response);
+ virtual ::grpc::Status get_strategy(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response);
+ virtual ::grpc::Status center_fit(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response);
+ virtual ::grpc::Status center_evaluate(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response);
+ virtual ::grpc::Status end(::grpc::ServerContext* context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response);
};
template
class WithAsyncMethod_fit : public BaseClass {
@@ -433,11 +688,11 @@ class Flexe final {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
- void Requestevaluate(::grpc::ServerContext* context, ::flexe::TTRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::EvaluateReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ void Requestevaluate(::grpc::ServerContext* context, ::flexe::TTRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag);
}
};
@@ -453,121 +708,141 @@ class Flexe final {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status update_model(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status update_model(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
- void Requestupdate_model(::grpc::ServerContext* context, ::flexe::TTRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::GenericResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ void Requestupdate_model(::grpc::ServerContext* context, ::flexe::TTRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
::grpc::Service::RequestAsyncUnary(2, context, request, response, new_call_cq, notification_cq, tag);
}
};
template
- class WithAsyncMethod_aggregate_evaluate : public BaseClass {
+ class WithAsyncMethod_get_information : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithAsyncMethod_aggregate_evaluate() {
+ WithAsyncMethod_get_information() {
::grpc::Service::MarkMethodAsync(3);
}
- ~WithAsyncMethod_aggregate_evaluate() override {
+ ~WithAsyncMethod_get_information() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status get_information(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
- void Requestaggregate_evaluate(::grpc::ServerContext* context, ::flexe::TTRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::EvaluateReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ void Requestget_information(::grpc::ServerContext* context, ::flexe::GenericRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag);
}
};
template
- class WithAsyncMethod_aggregate_fit : public BaseClass {
+ class WithAsyncMethod_set_information : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithAsyncMethod_aggregate_fit() {
+ WithAsyncMethod_set_information() {
::grpc::Service::MarkMethodAsync(4);
}
- ~WithAsyncMethod_aggregate_fit() override {
+ ~WithAsyncMethod_set_information() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_fit(::grpc::ServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status set_information(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
- void Requestaggregate_fit(::grpc::ServerContext* context, ::flexe::ModelRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ void Requestset_information(::grpc::ServerContext* context, ::flexe::GenericRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
::grpc::Service::RequestAsyncUnary(4, context, request, response, new_call_cq, notification_cq, tag);
}
};
template
- class WithAsyncMethod_aggregate_sync_fit : public BaseClass {
+ class WithAsyncMethod_aggregate_client : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithAsyncMethod_aggregate_sync_fit() {
+ WithAsyncMethod_aggregate_client() {
::grpc::Service::MarkMethodAsync(5);
}
- ~WithAsyncMethod_aggregate_sync_fit() override {
+ ~WithAsyncMethod_aggregate_client() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_sync_fit(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status aggregate_client(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
- void Requestaggregate_sync_fit(::grpc::ServerContext* context, ::flexe::GenericRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ void Requestaggregate_client(::grpc::ServerContext* context, ::flexe::TTRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
::grpc::Service::RequestAsyncUnary(5, context, request, response, new_call_cq, notification_cq, tag);
}
};
template
- class WithAsyncMethod_server_evaluate : public BaseClass {
+ class WithAsyncMethod_fit_all : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithAsyncMethod_server_evaluate() {
+ WithAsyncMethod_fit_all() {
::grpc::Service::MarkMethodAsync(6);
}
- ~WithAsyncMethod_server_evaluate() override {
+ ~WithAsyncMethod_fit_all() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status server_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status fit_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
- void Requestserver_evaluate(::grpc::ServerContext* context, ::flexe::TTRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::EvaluateReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ void Requestfit_all(::grpc::ServerContext* context, ::flexe::TTRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
::grpc::Service::RequestAsyncUnary(6, context, request, response, new_call_cq, notification_cq, tag);
}
};
template
- class WithAsyncMethod_store_model : public BaseClass {
+ class WithAsyncMethod_evaluate_all : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithAsyncMethod_store_model() {
+ WithAsyncMethod_evaluate_all() {
::grpc::Service::MarkMethodAsync(7);
}
- ~WithAsyncMethod_store_model() override {
+ ~WithAsyncMethod_evaluate_all() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status store_model(::grpc::ServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status evaluate_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
- void Requeststore_model(::grpc::ServerContext* context, ::flexe::ModelRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::GenericResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ void Requestevaluate_all(::grpc::ServerContext* context, ::flexe::TTRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
::grpc::Service::RequestAsyncUnary(7, context, request, response, new_call_cq, notification_cq, tag);
}
};
template
+ class WithAsyncMethod_update_all : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithAsyncMethod_update_all() {
+ ::grpc::Service::MarkMethodAsync(8);
+ }
+ ~WithAsyncMethod_update_all() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status update_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestupdate_all(::grpc::ServerContext* context, ::flexe::TTRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(8, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
class WithAsyncMethod_initialize_parameters : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
WithAsyncMethod_initialize_parameters() {
- ::grpc::Service::MarkMethodAsync(8);
+ ::grpc::Service::MarkMethodAsync(9);
}
~WithAsyncMethod_initialize_parameters() override {
BaseClassMustBeDerivedFromService(this);
@@ -578,7 +853,147 @@ class Flexe final {
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
void Requestinitialize_parameters(::grpc::ServerContext* context, ::flexe::TTRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
- ::grpc::Service::RequestAsyncUnary(8, context, request, response, new_call_cq, notification_cq, tag);
+ ::grpc::Service::RequestAsyncUnary(9, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
+ class WithAsyncMethod_aggregate_async_fit : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithAsyncMethod_aggregate_async_fit() {
+ ::grpc::Service::MarkMethodAsync(10);
+ }
+ ~WithAsyncMethod_aggregate_async_fit() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status aggregate_async_fit(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestaggregate_async_fit(::grpc::ServerContext* context, ::flexe::AggregationRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(10, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
+ class WithAsyncMethod_aggregate_sync_fit : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithAsyncMethod_aggregate_sync_fit() {
+ ::grpc::Service::MarkMethodAsync(11);
+ }
+ ~WithAsyncMethod_aggregate_sync_fit() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status aggregate_sync_fit(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestaggregate_sync_fit(::grpc::ServerContext* context, ::flexe::AggregationRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(11, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
+ class WithAsyncMethod_aggregate_evaluate : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithAsyncMethod_aggregate_evaluate() {
+ ::grpc::Service::MarkMethodAsync(12);
+ }
+ ~WithAsyncMethod_aggregate_evaluate() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status aggregate_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestaggregate_evaluate(::grpc::ServerContext* context, ::flexe::AggregationRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(12, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
+ class WithAsyncMethod_set_strategy : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithAsyncMethod_set_strategy() {
+ ::grpc::Service::MarkMethodAsync(13);
+ }
+ ~WithAsyncMethod_set_strategy() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status set_strategy(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestset_strategy(::grpc::ServerContext* context, ::flexe::GenericRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::GenericReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(13, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
+ class WithAsyncMethod_get_strategy : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithAsyncMethod_get_strategy() {
+ ::grpc::Service::MarkMethodAsync(14);
+ }
+ ~WithAsyncMethod_get_strategy() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status get_strategy(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestget_strategy(::grpc::ServerContext* context, ::flexe::GenericRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::GenericReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(14, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
+ class WithAsyncMethod_center_fit : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithAsyncMethod_center_fit() {
+ ::grpc::Service::MarkMethodAsync(15);
+ }
+ ~WithAsyncMethod_center_fit() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status center_fit(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestcenter_fit(::grpc::ServerContext* context, ::flexe::GenericRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(15, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
+ class WithAsyncMethod_center_evaluate : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithAsyncMethod_center_evaluate() {
+ ::grpc::Service::MarkMethodAsync(16);
+ }
+ ~WithAsyncMethod_center_evaluate() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status center_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestcenter_evaluate(::grpc::ServerContext* context, ::flexe::GenericRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::ModelReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(16, context, request, response, new_call_cq, notification_cq, tag);
}
};
template
@@ -587,21 +1002,21 @@ class Flexe final {
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
WithAsyncMethod_end() {
- ::grpc::Service::MarkMethodAsync(9);
+ ::grpc::Service::MarkMethodAsync(17);
}
~WithAsyncMethod_end() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status end(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status end(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
- void Requestend(::grpc::ServerContext* context, ::flexe::GenericRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::GenericResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
- ::grpc::Service::RequestAsyncUnary(9, context, request, response, new_call_cq, notification_cq, tag);
+ void Requestend(::grpc::ServerContext* context, ::flexe::GenericRequest* request, ::grpc::ServerAsyncResponseWriter< ::flexe::GenericReply>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(17, context, request, response, new_call_cq, notification_cq, tag);
}
};
- typedef WithAsyncMethod_fit > > > > > > > > > AsyncService;
+ typedef WithAsyncMethod_fit > > > > > > > > > > > > > > > > > AsyncService;
template
class ExperimentalWithCallbackMethod_fit : public BaseClass {
private:
@@ -661,38 +1076,38 @@ class Flexe final {
::grpc::Service::experimental().
#endif
MarkMethodCallback(1,
- new ::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::EvaluateReply>(
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::ModelReply>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::CallbackServerContext*
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response) { return this->evaluate(context, request, response); }));}
+ context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response) { return this->evaluate(context, request, response); }));}
void SetMessageAllocatorFor_evaluate(
- ::grpc::experimental::MessageAllocator< ::flexe::TTRequest, ::flexe::EvaluateReply>* allocator) {
+ ::grpc::experimental::MessageAllocator< ::flexe::TTRequest, ::flexe::ModelReply>* allocator) {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(1);
#else
::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(1);
#endif
- static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::EvaluateReply>*>(handler)
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::ModelReply>*>(handler)
->SetMessageAllocator(allocator);
}
~ExperimentalWithCallbackMethod_evaluate() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
virtual ::grpc::ServerUnaryReactor* evaluate(
- ::grpc::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/)
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#else
virtual ::grpc::experimental::ServerUnaryReactor* evaluate(
- ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/)
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#endif
{ return nullptr; }
};
@@ -708,282 +1123,282 @@ class Flexe final {
::grpc::Service::experimental().
#endif
MarkMethodCallback(2,
- new ::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::GenericResponse>(
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::ModelReply>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::CallbackServerContext*
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::flexe::TTRequest* request, ::flexe::GenericResponse* response) { return this->update_model(context, request, response); }));}
+ context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response) { return this->update_model(context, request, response); }));}
void SetMessageAllocatorFor_update_model(
- ::grpc::experimental::MessageAllocator< ::flexe::TTRequest, ::flexe::GenericResponse>* allocator) {
+ ::grpc::experimental::MessageAllocator< ::flexe::TTRequest, ::flexe::ModelReply>* allocator) {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(2);
#else
::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(2);
#endif
- static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::GenericResponse>*>(handler)
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::ModelReply>*>(handler)
->SetMessageAllocator(allocator);
}
~ExperimentalWithCallbackMethod_update_model() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status update_model(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status update_model(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
virtual ::grpc::ServerUnaryReactor* update_model(
- ::grpc::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::GenericResponse* /*response*/)
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#else
virtual ::grpc::experimental::ServerUnaryReactor* update_model(
- ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::GenericResponse* /*response*/)
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithCallbackMethod_aggregate_evaluate : public BaseClass {
+ class ExperimentalWithCallbackMethod_get_information : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithCallbackMethod_aggregate_evaluate() {
+ ExperimentalWithCallbackMethod_get_information() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
MarkMethodCallback(3,
- new ::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::EvaluateReply>(
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::ModelReply>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::CallbackServerContext*
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response) { return this->aggregate_evaluate(context, request, response); }));}
- void SetMessageAllocatorFor_aggregate_evaluate(
- ::grpc::experimental::MessageAllocator< ::flexe::TTRequest, ::flexe::EvaluateReply>* allocator) {
+ context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response) { return this->get_information(context, request, response); }));}
+ void SetMessageAllocatorFor_get_information(
+ ::grpc::experimental::MessageAllocator< ::flexe::GenericRequest, ::flexe::ModelReply>* allocator) {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(3);
#else
::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(3);
#endif
- static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::EvaluateReply>*>(handler)
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::ModelReply>*>(handler)
->SetMessageAllocator(allocator);
}
- ~ExperimentalWithCallbackMethod_aggregate_evaluate() override {
+ ~ExperimentalWithCallbackMethod_get_information() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status get_information(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* aggregate_evaluate(
- ::grpc::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/)
+ virtual ::grpc::ServerUnaryReactor* get_information(
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* aggregate_evaluate(
- ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/)
+ virtual ::grpc::experimental::ServerUnaryReactor* get_information(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithCallbackMethod_aggregate_fit : public BaseClass {
+ class ExperimentalWithCallbackMethod_set_information : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithCallbackMethod_aggregate_fit() {
+ ExperimentalWithCallbackMethod_set_information() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
MarkMethodCallback(4,
- new ::grpc::internal::CallbackUnaryHandler< ::flexe::ModelRequest, ::flexe::ModelReply>(
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::ModelReply>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::CallbackServerContext*
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::flexe::ModelRequest* request, ::flexe::ModelReply* response) { return this->aggregate_fit(context, request, response); }));}
- void SetMessageAllocatorFor_aggregate_fit(
- ::grpc::experimental::MessageAllocator< ::flexe::ModelRequest, ::flexe::ModelReply>* allocator) {
+ context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response) { return this->set_information(context, request, response); }));}
+ void SetMessageAllocatorFor_set_information(
+ ::grpc::experimental::MessageAllocator< ::flexe::GenericRequest, ::flexe::ModelReply>* allocator) {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(4);
#else
::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(4);
#endif
- static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::ModelRequest, ::flexe::ModelReply>*>(handler)
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::ModelReply>*>(handler)
->SetMessageAllocator(allocator);
}
- ~ExperimentalWithCallbackMethod_aggregate_fit() override {
+ ~ExperimentalWithCallbackMethod_set_information() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_fit(::grpc::ServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status set_information(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* aggregate_fit(
- ::grpc::CallbackServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::ModelReply* /*response*/)
+ virtual ::grpc::ServerUnaryReactor* set_information(
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* aggregate_fit(
- ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::ModelReply* /*response*/)
+ virtual ::grpc::experimental::ServerUnaryReactor* set_information(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithCallbackMethod_aggregate_sync_fit : public BaseClass {
+ class ExperimentalWithCallbackMethod_aggregate_client : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithCallbackMethod_aggregate_sync_fit() {
+ ExperimentalWithCallbackMethod_aggregate_client() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
MarkMethodCallback(5,
- new ::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::ModelReply>(
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::ModelReply>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::CallbackServerContext*
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response) { return this->aggregate_sync_fit(context, request, response); }));}
- void SetMessageAllocatorFor_aggregate_sync_fit(
- ::grpc::experimental::MessageAllocator< ::flexe::GenericRequest, ::flexe::ModelReply>* allocator) {
+ context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response) { return this->aggregate_client(context, request, response); }));}
+ void SetMessageAllocatorFor_aggregate_client(
+ ::grpc::experimental::MessageAllocator< ::flexe::TTRequest, ::flexe::ModelReply>* allocator) {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(5);
#else
::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(5);
#endif
- static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::ModelReply>*>(handler)
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::ModelReply>*>(handler)
->SetMessageAllocator(allocator);
}
- ~ExperimentalWithCallbackMethod_aggregate_sync_fit() override {
+ ~ExperimentalWithCallbackMethod_aggregate_client() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_sync_fit(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status aggregate_client(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* aggregate_sync_fit(
- ::grpc::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/)
+ virtual ::grpc::ServerUnaryReactor* aggregate_client(
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* aggregate_sync_fit(
- ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/)
+ virtual ::grpc::experimental::ServerUnaryReactor* aggregate_client(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithCallbackMethod_server_evaluate : public BaseClass {
+ class ExperimentalWithCallbackMethod_fit_all : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithCallbackMethod_server_evaluate() {
+ ExperimentalWithCallbackMethod_fit_all() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
MarkMethodCallback(6,
- new ::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::EvaluateReply>(
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::ModelReply>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::CallbackServerContext*
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::flexe::TTRequest* request, ::flexe::EvaluateReply* response) { return this->server_evaluate(context, request, response); }));}
- void SetMessageAllocatorFor_server_evaluate(
- ::grpc::experimental::MessageAllocator< ::flexe::TTRequest, ::flexe::EvaluateReply>* allocator) {
+ context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response) { return this->fit_all(context, request, response); }));}
+ void SetMessageAllocatorFor_fit_all(
+ ::grpc::experimental::MessageAllocator< ::flexe::TTRequest, ::flexe::ModelReply>* allocator) {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(6);
#else
::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(6);
#endif
- static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::EvaluateReply>*>(handler)
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::ModelReply>*>(handler)
->SetMessageAllocator(allocator);
}
- ~ExperimentalWithCallbackMethod_server_evaluate() override {
+ ~ExperimentalWithCallbackMethod_fit_all() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status server_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status fit_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* server_evaluate(
- ::grpc::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/)
+ virtual ::grpc::ServerUnaryReactor* fit_all(
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* server_evaluate(
- ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/)
+ virtual ::grpc::experimental::ServerUnaryReactor* fit_all(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithCallbackMethod_store_model : public BaseClass {
+ class ExperimentalWithCallbackMethod_evaluate_all : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithCallbackMethod_store_model() {
+ ExperimentalWithCallbackMethod_evaluate_all() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
MarkMethodCallback(7,
- new ::grpc::internal::CallbackUnaryHandler< ::flexe::ModelRequest, ::flexe::GenericResponse>(
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::ModelReply>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::CallbackServerContext*
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::flexe::ModelRequest* request, ::flexe::GenericResponse* response) { return this->store_model(context, request, response); }));}
- void SetMessageAllocatorFor_store_model(
- ::grpc::experimental::MessageAllocator< ::flexe::ModelRequest, ::flexe::GenericResponse>* allocator) {
+ context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response) { return this->evaluate_all(context, request, response); }));}
+ void SetMessageAllocatorFor_evaluate_all(
+ ::grpc::experimental::MessageAllocator< ::flexe::TTRequest, ::flexe::ModelReply>* allocator) {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(7);
#else
::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(7);
#endif
- static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::ModelRequest, ::flexe::GenericResponse>*>(handler)
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::ModelReply>*>(handler)
->SetMessageAllocator(allocator);
}
- ~ExperimentalWithCallbackMethod_store_model() override {
+ ~ExperimentalWithCallbackMethod_evaluate_all() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status store_model(::grpc::ServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status evaluate_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* store_model(
- ::grpc::CallbackServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::GenericResponse* /*response*/)
+ virtual ::grpc::ServerUnaryReactor* evaluate_all(
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* store_model(
- ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::GenericResponse* /*response*/)
+ virtual ::grpc::experimental::ServerUnaryReactor* evaluate_all(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithCallbackMethod_initialize_parameters : public BaseClass {
+ class ExperimentalWithCallbackMethod_update_all : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithCallbackMethod_initialize_parameters() {
+ ExperimentalWithCallbackMethod_update_all() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
@@ -997,8 +1412,8 @@ class Flexe final {
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response) { return this->initialize_parameters(context, request, response); }));}
- void SetMessageAllocatorFor_initialize_parameters(
+ context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response) { return this->update_all(context, request, response); }));}
+ void SetMessageAllocatorFor_update_all(
::grpc::experimental::MessageAllocator< ::flexe::TTRequest, ::flexe::ModelReply>* allocator) {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(8);
@@ -1008,219 +1423,612 @@ class Flexe final {
static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::ModelReply>*>(handler)
->SetMessageAllocator(allocator);
}
- ~ExperimentalWithCallbackMethod_initialize_parameters() override {
+ ~ExperimentalWithCallbackMethod_update_all() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status initialize_parameters(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status update_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* initialize_parameters(
+ virtual ::grpc::ServerUnaryReactor* update_all(
::grpc::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* initialize_parameters(
+ virtual ::grpc::experimental::ServerUnaryReactor* update_all(
::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithCallbackMethod_end : public BaseClass {
+ class ExperimentalWithCallbackMethod_initialize_parameters : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithCallbackMethod_end() {
+ ExperimentalWithCallbackMethod_initialize_parameters() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
MarkMethodCallback(9,
- new ::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::GenericResponse>(
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::ModelReply>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::CallbackServerContext*
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::flexe::GenericRequest* request, ::flexe::GenericResponse* response) { return this->end(context, request, response); }));}
- void SetMessageAllocatorFor_end(
- ::grpc::experimental::MessageAllocator< ::flexe::GenericRequest, ::flexe::GenericResponse>* allocator) {
+ context, const ::flexe::TTRequest* request, ::flexe::ModelReply* response) { return this->initialize_parameters(context, request, response); }));}
+ void SetMessageAllocatorFor_initialize_parameters(
+ ::grpc::experimental::MessageAllocator< ::flexe::TTRequest, ::flexe::ModelReply>* allocator) {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(9);
#else
::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(9);
#endif
- static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::GenericResponse>*>(handler)
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::TTRequest, ::flexe::ModelReply>*>(handler)
->SetMessageAllocator(allocator);
}
- ~ExperimentalWithCallbackMethod_end() override {
+ ~ExperimentalWithCallbackMethod_initialize_parameters() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status end(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status initialize_parameters(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* end(
- ::grpc::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericResponse* /*response*/)
+ virtual ::grpc::ServerUnaryReactor* initialize_parameters(
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* end(
- ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericResponse* /*response*/)
+ virtual ::grpc::experimental::ServerUnaryReactor* initialize_parameters(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/)
#endif
{ return nullptr; }
};
- #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- typedef ExperimentalWithCallbackMethod_fit > > > > > > > > > CallbackService;
- #endif
-
- typedef ExperimentalWithCallbackMethod_fit > > > > > > > > > ExperimentalCallbackService;
template
- class WithGenericMethod_fit : public BaseClass {
+ class ExperimentalWithCallbackMethod_aggregate_async_fit : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithGenericMethod_fit() {
- ::grpc::Service::MarkMethodGeneric(0);
+ ExperimentalWithCallbackMethod_aggregate_async_fit() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodCallback(10,
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::AggregationRequest, ::flexe::ModelReply>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response) { return this->aggregate_async_fit(context, request, response); }));}
+ void SetMessageAllocatorFor_aggregate_async_fit(
+ ::grpc::experimental::MessageAllocator< ::flexe::AggregationRequest, ::flexe::ModelReply>* allocator) {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(10);
+ #else
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(10);
+ #endif
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::AggregationRequest, ::flexe::ModelReply>*>(handler)
+ ->SetMessageAllocator(allocator);
}
- ~WithGenericMethod_fit() override {
+ ~ExperimentalWithCallbackMethod_aggregate_async_fit() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status fit(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status aggregate_async_fit(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* aggregate_async_fit(
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* aggregate_async_fit(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/)
+ #endif
+ { return nullptr; }
};
template
- class WithGenericMethod_evaluate : public BaseClass {
+ class ExperimentalWithCallbackMethod_aggregate_sync_fit : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithGenericMethod_evaluate() {
- ::grpc::Service::MarkMethodGeneric(1);
+ ExperimentalWithCallbackMethod_aggregate_sync_fit() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodCallback(11,
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::AggregationRequest, ::flexe::ModelReply>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response) { return this->aggregate_sync_fit(context, request, response); }));}
+ void SetMessageAllocatorFor_aggregate_sync_fit(
+ ::grpc::experimental::MessageAllocator< ::flexe::AggregationRequest, ::flexe::ModelReply>* allocator) {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(11);
+ #else
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(11);
+ #endif
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::AggregationRequest, ::flexe::ModelReply>*>(handler)
+ ->SetMessageAllocator(allocator);
}
- ~WithGenericMethod_evaluate() override {
+ ~ExperimentalWithCallbackMethod_aggregate_sync_fit() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status aggregate_sync_fit(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* aggregate_sync_fit(
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* aggregate_sync_fit(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/)
+ #endif
+ { return nullptr; }
};
template
- class WithGenericMethod_update_model : public BaseClass {
+ class ExperimentalWithCallbackMethod_aggregate_evaluate : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithGenericMethod_update_model() {
- ::grpc::Service::MarkMethodGeneric(2);
+ ExperimentalWithCallbackMethod_aggregate_evaluate() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodCallback(12,
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::AggregationRequest, ::flexe::ModelReply>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::flexe::AggregationRequest* request, ::flexe::ModelReply* response) { return this->aggregate_evaluate(context, request, response); }));}
+ void SetMessageAllocatorFor_aggregate_evaluate(
+ ::grpc::experimental::MessageAllocator< ::flexe::AggregationRequest, ::flexe::ModelReply>* allocator) {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(12);
+ #else
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(12);
+ #endif
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::AggregationRequest, ::flexe::ModelReply>*>(handler)
+ ->SetMessageAllocator(allocator);
}
- ~WithGenericMethod_update_model() override {
+ ~ExperimentalWithCallbackMethod_aggregate_evaluate() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status update_model(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status aggregate_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* aggregate_evaluate(
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* aggregate_evaluate(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/)
+ #endif
+ { return nullptr; }
};
template
- class WithGenericMethod_aggregate_evaluate : public BaseClass {
+ class ExperimentalWithCallbackMethod_set_strategy : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithGenericMethod_aggregate_evaluate() {
- ::grpc::Service::MarkMethodGeneric(3);
+ ExperimentalWithCallbackMethod_set_strategy() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodCallback(13,
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::GenericReply>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response) { return this->set_strategy(context, request, response); }));}
+ void SetMessageAllocatorFor_set_strategy(
+ ::grpc::experimental::MessageAllocator< ::flexe::GenericRequest, ::flexe::GenericReply>* allocator) {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(13);
+ #else
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(13);
+ #endif
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::GenericReply>*>(handler)
+ ->SetMessageAllocator(allocator);
}
- ~WithGenericMethod_aggregate_evaluate() override {
+ ~ExperimentalWithCallbackMethod_set_strategy() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status set_strategy(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* set_strategy(
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* set_strategy(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/)
+ #endif
+ { return nullptr; }
};
template
- class WithGenericMethod_aggregate_fit : public BaseClass {
+ class ExperimentalWithCallbackMethod_get_strategy : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithGenericMethod_aggregate_fit() {
- ::grpc::Service::MarkMethodGeneric(4);
+ ExperimentalWithCallbackMethod_get_strategy() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodCallback(14,
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::GenericReply>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response) { return this->get_strategy(context, request, response); }));}
+ void SetMessageAllocatorFor_get_strategy(
+ ::grpc::experimental::MessageAllocator< ::flexe::GenericRequest, ::flexe::GenericReply>* allocator) {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(14);
+ #else
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(14);
+ #endif
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::GenericReply>*>(handler)
+ ->SetMessageAllocator(allocator);
}
- ~WithGenericMethod_aggregate_fit() override {
+ ~ExperimentalWithCallbackMethod_get_strategy() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_fit(::grpc::ServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status get_strategy(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* get_strategy(
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* get_strategy(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/)
+ #endif
+ { return nullptr; }
};
template
- class WithGenericMethod_aggregate_sync_fit : public BaseClass {
+ class ExperimentalWithCallbackMethod_center_fit : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithGenericMethod_aggregate_sync_fit() {
- ::grpc::Service::MarkMethodGeneric(5);
+ ExperimentalWithCallbackMethod_center_fit() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodCallback(15,
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::ModelReply>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response) { return this->center_fit(context, request, response); }));}
+ void SetMessageAllocatorFor_center_fit(
+ ::grpc::experimental::MessageAllocator< ::flexe::GenericRequest, ::flexe::ModelReply>* allocator) {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(15);
+ #else
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(15);
+ #endif
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::ModelReply>*>(handler)
+ ->SetMessageAllocator(allocator);
}
- ~WithGenericMethod_aggregate_sync_fit() override {
+ ~ExperimentalWithCallbackMethod_center_fit() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_sync_fit(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status center_fit(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* center_fit(
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* center_fit(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/)
+ #endif
+ { return nullptr; }
};
template
- class WithGenericMethod_server_evaluate : public BaseClass {
+ class ExperimentalWithCallbackMethod_center_evaluate : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithGenericMethod_server_evaluate() {
- ::grpc::Service::MarkMethodGeneric(6);
+ ExperimentalWithCallbackMethod_center_evaluate() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodCallback(16,
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::ModelReply>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::flexe::GenericRequest* request, ::flexe::ModelReply* response) { return this->center_evaluate(context, request, response); }));}
+ void SetMessageAllocatorFor_center_evaluate(
+ ::grpc::experimental::MessageAllocator< ::flexe::GenericRequest, ::flexe::ModelReply>* allocator) {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(16);
+ #else
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(16);
+ #endif
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::ModelReply>*>(handler)
+ ->SetMessageAllocator(allocator);
}
- ~WithGenericMethod_server_evaluate() override {
+ ~ExperimentalWithCallbackMethod_center_evaluate() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status server_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status center_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* center_evaluate(
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* center_evaluate(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/)
+ #endif
+ { return nullptr; }
};
template
- class WithGenericMethod_store_model : public BaseClass {
+ class ExperimentalWithCallbackMethod_end : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithGenericMethod_store_model() {
- ::grpc::Service::MarkMethodGeneric(7);
+ ExperimentalWithCallbackMethod_end() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodCallback(17,
+ new ::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::GenericReply>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::flexe::GenericRequest* request, ::flexe::GenericReply* response) { return this->end(context, request, response); }));}
+ void SetMessageAllocatorFor_end(
+ ::grpc::experimental::MessageAllocator< ::flexe::GenericRequest, ::flexe::GenericReply>* allocator) {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(17);
+ #else
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(17);
+ #endif
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flexe::GenericRequest, ::flexe::GenericReply>*>(handler)
+ ->SetMessageAllocator(allocator);
}
- ~WithGenericMethod_store_model() override {
+ ~ExperimentalWithCallbackMethod_end() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status store_model(::grpc::ServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status end(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* end(
+ ::grpc::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* end(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/)
+ #endif
+ { return nullptr; }
};
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ typedef ExperimentalWithCallbackMethod_fit > > > > > > > > > > > > > > > > > CallbackService;
+ #endif
+
+ typedef ExperimentalWithCallbackMethod_fit > > > > > > > > > > > > > > > > > ExperimentalCallbackService;
template
- class WithGenericMethod_initialize_parameters : public BaseClass {
+ class WithGenericMethod_fit : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithGenericMethod_initialize_parameters() {
+ WithGenericMethod_fit() {
+ ::grpc::Service::MarkMethodGeneric(0);
+ }
+ ~WithGenericMethod_fit() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status fit(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_evaluate : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_evaluate() {
+ ::grpc::Service::MarkMethodGeneric(1);
+ }
+ ~WithGenericMethod_evaluate() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_update_model : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_update_model() {
+ ::grpc::Service::MarkMethodGeneric(2);
+ }
+ ~WithGenericMethod_update_model() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status update_model(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_get_information : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_get_information() {
+ ::grpc::Service::MarkMethodGeneric(3);
+ }
+ ~WithGenericMethod_get_information() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status get_information(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_set_information : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_set_information() {
+ ::grpc::Service::MarkMethodGeneric(4);
+ }
+ ~WithGenericMethod_set_information() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status set_information(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_aggregate_client : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_aggregate_client() {
+ ::grpc::Service::MarkMethodGeneric(5);
+ }
+ ~WithGenericMethod_aggregate_client() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status aggregate_client(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_fit_all : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_fit_all() {
+ ::grpc::Service::MarkMethodGeneric(6);
+ }
+ ~WithGenericMethod_fit_all() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status fit_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_evaluate_all : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_evaluate_all() {
+ ::grpc::Service::MarkMethodGeneric(7);
+ }
+ ~WithGenericMethod_evaluate_all() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status evaluate_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_update_all : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_update_all() {
::grpc::Service::MarkMethodGeneric(8);
}
+ ~WithGenericMethod_update_all() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status update_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_initialize_parameters : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_initialize_parameters() {
+ ::grpc::Service::MarkMethodGeneric(9);
+ }
~WithGenericMethod_initialize_parameters() override {
BaseClassMustBeDerivedFromService(this);
}
@@ -1231,18 +2039,137 @@ class Flexe final {
}
};
template
+ class WithGenericMethod_aggregate_async_fit : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_aggregate_async_fit() {
+ ::grpc::Service::MarkMethodGeneric(10);
+ }
+ ~WithGenericMethod_aggregate_async_fit() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status aggregate_async_fit(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_aggregate_sync_fit : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_aggregate_sync_fit() {
+ ::grpc::Service::MarkMethodGeneric(11);
+ }
+ ~WithGenericMethod_aggregate_sync_fit() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status aggregate_sync_fit(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_aggregate_evaluate : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_aggregate_evaluate() {
+ ::grpc::Service::MarkMethodGeneric(12);
+ }
+ ~WithGenericMethod_aggregate_evaluate() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status aggregate_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_set_strategy : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_set_strategy() {
+ ::grpc::Service::MarkMethodGeneric(13);
+ }
+ ~WithGenericMethod_set_strategy() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status set_strategy(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_get_strategy : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_get_strategy() {
+ ::grpc::Service::MarkMethodGeneric(14);
+ }
+ ~WithGenericMethod_get_strategy() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status get_strategy(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_center_fit : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_center_fit() {
+ ::grpc::Service::MarkMethodGeneric(15);
+ }
+ ~WithGenericMethod_center_fit() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status center_fit(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
+ class WithGenericMethod_center_evaluate : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_center_evaluate() {
+ ::grpc::Service::MarkMethodGeneric(16);
+ }
+ ~WithGenericMethod_center_evaluate() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status center_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
class WithGenericMethod_end : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
WithGenericMethod_end() {
- ::grpc::Service::MarkMethodGeneric(9);
+ ::grpc::Service::MarkMethodGeneric(17);
}
~WithGenericMethod_end() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status end(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status end(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
@@ -1279,7 +2206,7 @@ class Flexe final {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
@@ -1299,7 +2226,7 @@ class Flexe final {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status update_model(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status update_model(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
@@ -1308,112 +2235,132 @@ class Flexe final {
}
};
template
- class WithRawMethod_aggregate_evaluate : public BaseClass {
+ class WithRawMethod_get_information : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithRawMethod_aggregate_evaluate() {
+ WithRawMethod_get_information() {
::grpc::Service::MarkMethodRaw(3);
}
- ~WithRawMethod_aggregate_evaluate() override {
+ ~WithRawMethod_get_information() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status get_information(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
- void Requestaggregate_evaluate(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ void Requestget_information(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag);
}
};
template
- class WithRawMethod_aggregate_fit : public BaseClass {
+ class WithRawMethod_set_information : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithRawMethod_aggregate_fit() {
+ WithRawMethod_set_information() {
::grpc::Service::MarkMethodRaw(4);
}
- ~WithRawMethod_aggregate_fit() override {
+ ~WithRawMethod_set_information() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_fit(::grpc::ServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status set_information(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
- void Requestaggregate_fit(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ void Requestset_information(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
::grpc::Service::RequestAsyncUnary(4, context, request, response, new_call_cq, notification_cq, tag);
}
};
template
- class WithRawMethod_aggregate_sync_fit : public BaseClass {
+ class WithRawMethod_aggregate_client : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithRawMethod_aggregate_sync_fit() {
+ WithRawMethod_aggregate_client() {
::grpc::Service::MarkMethodRaw(5);
}
- ~WithRawMethod_aggregate_sync_fit() override {
+ ~WithRawMethod_aggregate_client() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_sync_fit(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status aggregate_client(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
- void Requestaggregate_sync_fit(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ void Requestaggregate_client(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
::grpc::Service::RequestAsyncUnary(5, context, request, response, new_call_cq, notification_cq, tag);
}
};
template
- class WithRawMethod_server_evaluate : public BaseClass {
+ class WithRawMethod_fit_all : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithRawMethod_server_evaluate() {
+ WithRawMethod_fit_all() {
::grpc::Service::MarkMethodRaw(6);
}
- ~WithRawMethod_server_evaluate() override {
+ ~WithRawMethod_fit_all() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status server_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status fit_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
- void Requestserver_evaluate(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ void Requestfit_all(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
::grpc::Service::RequestAsyncUnary(6, context, request, response, new_call_cq, notification_cq, tag);
}
};
template
- class WithRawMethod_store_model : public BaseClass {
+ class WithRawMethod_evaluate_all : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithRawMethod_store_model() {
+ WithRawMethod_evaluate_all() {
::grpc::Service::MarkMethodRaw(7);
}
- ~WithRawMethod_store_model() override {
+ ~WithRawMethod_evaluate_all() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status store_model(::grpc::ServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status evaluate_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
- void Requeststore_model(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ void Requestevaluate_all(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
::grpc::Service::RequestAsyncUnary(7, context, request, response, new_call_cq, notification_cq, tag);
}
};
template
+ class WithRawMethod_update_all : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithRawMethod_update_all() {
+ ::grpc::Service::MarkMethodRaw(8);
+ }
+ ~WithRawMethod_update_all() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status update_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestupdate_all(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(8, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
class WithRawMethod_initialize_parameters : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
WithRawMethod_initialize_parameters() {
- ::grpc::Service::MarkMethodRaw(8);
+ ::grpc::Service::MarkMethodRaw(9);
}
~WithRawMethod_initialize_parameters() override {
BaseClassMustBeDerivedFromService(this);
@@ -1424,41 +2371,485 @@ class Flexe final {
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
void Requestinitialize_parameters(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
- ::grpc::Service::RequestAsyncUnary(8, context, request, response, new_call_cq, notification_cq, tag);
+ ::grpc::Service::RequestAsyncUnary(9, context, request, response, new_call_cq, notification_cq, tag);
}
};
template
- class WithRawMethod_end : public BaseClass {
+ class WithRawMethod_aggregate_async_fit : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithRawMethod_end() {
- ::grpc::Service::MarkMethodRaw(9);
+ WithRawMethod_aggregate_async_fit() {
+ ::grpc::Service::MarkMethodRaw(10);
}
- ~WithRawMethod_end() override {
+ ~WithRawMethod_aggregate_async_fit() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status end(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status aggregate_async_fit(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
- void Requestend(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
- ::grpc::Service::RequestAsyncUnary(9, context, request, response, new_call_cq, notification_cq, tag);
+ void Requestaggregate_async_fit(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(10, context, request, response, new_call_cq, notification_cq, tag);
}
};
template
- class ExperimentalWithRawCallbackMethod_fit : public BaseClass {
+ class WithRawMethod_aggregate_sync_fit : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithRawMethod_aggregate_sync_fit() {
+ ::grpc::Service::MarkMethodRaw(11);
+ }
+ ~WithRawMethod_aggregate_sync_fit() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status aggregate_sync_fit(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestaggregate_sync_fit(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(11, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
+ class WithRawMethod_aggregate_evaluate : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithRawMethod_aggregate_evaluate() {
+ ::grpc::Service::MarkMethodRaw(12);
+ }
+ ~WithRawMethod_aggregate_evaluate() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status aggregate_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestaggregate_evaluate(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(12, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
+ class WithRawMethod_set_strategy : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithRawMethod_set_strategy() {
+ ::grpc::Service::MarkMethodRaw(13);
+ }
+ ~WithRawMethod_set_strategy() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status set_strategy(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestset_strategy(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(13, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
+ class WithRawMethod_get_strategy : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithRawMethod_get_strategy() {
+ ::grpc::Service::MarkMethodRaw(14);
+ }
+ ~WithRawMethod_get_strategy() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status get_strategy(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestget_strategy(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(14, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
+ class WithRawMethod_center_fit : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithRawMethod_center_fit() {
+ ::grpc::Service::MarkMethodRaw(15);
+ }
+ ~WithRawMethod_center_fit() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status center_fit(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestcenter_fit(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(15, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
+ class WithRawMethod_center_evaluate : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithRawMethod_center_evaluate() {
+ ::grpc::Service::MarkMethodRaw(16);
+ }
+ ~WithRawMethod_center_evaluate() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status center_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestcenter_evaluate(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(16, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
+ class WithRawMethod_end : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithRawMethod_end() {
+ ::grpc::Service::MarkMethodRaw(17);
+ }
+ ~WithRawMethod_end() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status end(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void Requestend(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(17, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
+ class ExperimentalWithRawCallbackMethod_fit : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ ExperimentalWithRawCallbackMethod_fit() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodRawCallback(0,
+ new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->fit(context, request, response); }));
+ }
+ ~ExperimentalWithRawCallbackMethod_fit() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status fit(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* fit(
+ ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* fit(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #endif
+ { return nullptr; }
+ };
+ template
+ class ExperimentalWithRawCallbackMethod_evaluate : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ ExperimentalWithRawCallbackMethod_evaluate() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodRawCallback(1,
+ new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->evaluate(context, request, response); }));
+ }
+ ~ExperimentalWithRawCallbackMethod_evaluate() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* evaluate(
+ ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* evaluate(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #endif
+ { return nullptr; }
+ };
+ template
+ class ExperimentalWithRawCallbackMethod_update_model : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ ExperimentalWithRawCallbackMethod_update_model() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodRawCallback(2,
+ new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->update_model(context, request, response); }));
+ }
+ ~ExperimentalWithRawCallbackMethod_update_model() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status update_model(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* update_model(
+ ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* update_model(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #endif
+ { return nullptr; }
+ };
+ template
+ class ExperimentalWithRawCallbackMethod_get_information : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ ExperimentalWithRawCallbackMethod_get_information() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodRawCallback(3,
+ new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->get_information(context, request, response); }));
+ }
+ ~ExperimentalWithRawCallbackMethod_get_information() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status get_information(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* get_information(
+ ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* get_information(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #endif
+ { return nullptr; }
+ };
+ template
+ class ExperimentalWithRawCallbackMethod_set_information : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ ExperimentalWithRawCallbackMethod_set_information() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodRawCallback(4,
+ new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->set_information(context, request, response); }));
+ }
+ ~ExperimentalWithRawCallbackMethod_set_information() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status set_information(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* set_information(
+ ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* set_information(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #endif
+ { return nullptr; }
+ };
+ template
+ class ExperimentalWithRawCallbackMethod_aggregate_client : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ ExperimentalWithRawCallbackMethod_aggregate_client() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodRawCallback(5,
+ new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->aggregate_client(context, request, response); }));
+ }
+ ~ExperimentalWithRawCallbackMethod_aggregate_client() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status aggregate_client(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* aggregate_client(
+ ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* aggregate_client(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #endif
+ { return nullptr; }
+ };
+ template
+ class ExperimentalWithRawCallbackMethod_fit_all : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ ExperimentalWithRawCallbackMethod_fit_all() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodRawCallback(6,
+ new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->fit_all(context, request, response); }));
+ }
+ ~ExperimentalWithRawCallbackMethod_fit_all() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status fit_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* fit_all(
+ ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* fit_all(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #endif
+ { return nullptr; }
+ };
+ template
+ class ExperimentalWithRawCallbackMethod_evaluate_all : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ ExperimentalWithRawCallbackMethod_evaluate_all() {
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::Service::
+ #else
+ ::grpc::Service::experimental().
+ #endif
+ MarkMethodRawCallback(7,
+ new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
+ [this](
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ ::grpc::CallbackServerContext*
+ #else
+ ::grpc::experimental::CallbackServerContext*
+ #endif
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->evaluate_all(context, request, response); }));
+ }
+ ~ExperimentalWithRawCallbackMethod_evaluate_all() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status evaluate_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+ virtual ::grpc::ServerUnaryReactor* evaluate_all(
+ ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #else
+ virtual ::grpc::experimental::ServerUnaryReactor* evaluate_all(
+ ::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+ #endif
+ { return nullptr; }
+ };
+ template
+ class ExperimentalWithRawCallbackMethod_update_all : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithRawCallbackMethod_fit() {
+ ExperimentalWithRawCallbackMethod_update_all() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
- MarkMethodRawCallback(0,
+ MarkMethodRawCallback(8,
new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
@@ -1466,37 +2857,37 @@ class Flexe final {
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->fit(context, request, response); }));
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->update_all(context, request, response); }));
}
- ~ExperimentalWithRawCallbackMethod_fit() override {
+ ~ExperimentalWithRawCallbackMethod_update_all() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status fit(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status update_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* fit(
+ virtual ::grpc::ServerUnaryReactor* update_all(
::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* fit(
+ virtual ::grpc::experimental::ServerUnaryReactor* update_all(
::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithRawCallbackMethod_evaluate : public BaseClass {
+ class ExperimentalWithRawCallbackMethod_initialize_parameters : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithRawCallbackMethod_evaluate() {
+ ExperimentalWithRawCallbackMethod_initialize_parameters() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
- MarkMethodRawCallback(1,
+ MarkMethodRawCallback(9,
new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
@@ -1504,37 +2895,37 @@ class Flexe final {
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->evaluate(context, request, response); }));
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->initialize_parameters(context, request, response); }));
}
- ~ExperimentalWithRawCallbackMethod_evaluate() override {
+ ~ExperimentalWithRawCallbackMethod_initialize_parameters() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status initialize_parameters(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* evaluate(
+ virtual ::grpc::ServerUnaryReactor* initialize_parameters(
::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* evaluate(
+ virtual ::grpc::experimental::ServerUnaryReactor* initialize_parameters(
::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithRawCallbackMethod_update_model : public BaseClass {
+ class ExperimentalWithRawCallbackMethod_aggregate_async_fit : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithRawCallbackMethod_update_model() {
+ ExperimentalWithRawCallbackMethod_aggregate_async_fit() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
- MarkMethodRawCallback(2,
+ MarkMethodRawCallback(10,
new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
@@ -1542,37 +2933,37 @@ class Flexe final {
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->update_model(context, request, response); }));
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->aggregate_async_fit(context, request, response); }));
}
- ~ExperimentalWithRawCallbackMethod_update_model() override {
+ ~ExperimentalWithRawCallbackMethod_aggregate_async_fit() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status update_model(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status aggregate_async_fit(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* update_model(
+ virtual ::grpc::ServerUnaryReactor* aggregate_async_fit(
::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* update_model(
+ virtual ::grpc::experimental::ServerUnaryReactor* aggregate_async_fit(
::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithRawCallbackMethod_aggregate_evaluate : public BaseClass {
+ class ExperimentalWithRawCallbackMethod_aggregate_sync_fit : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithRawCallbackMethod_aggregate_evaluate() {
+ ExperimentalWithRawCallbackMethod_aggregate_sync_fit() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
- MarkMethodRawCallback(3,
+ MarkMethodRawCallback(11,
new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
@@ -1580,37 +2971,37 @@ class Flexe final {
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->aggregate_evaluate(context, request, response); }));
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->aggregate_sync_fit(context, request, response); }));
}
- ~ExperimentalWithRawCallbackMethod_aggregate_evaluate() override {
+ ~ExperimentalWithRawCallbackMethod_aggregate_sync_fit() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status aggregate_sync_fit(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* aggregate_evaluate(
+ virtual ::grpc::ServerUnaryReactor* aggregate_sync_fit(
::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* aggregate_evaluate(
+ virtual ::grpc::experimental::ServerUnaryReactor* aggregate_sync_fit(
::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithRawCallbackMethod_aggregate_fit : public BaseClass {
+ class ExperimentalWithRawCallbackMethod_aggregate_evaluate : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithRawCallbackMethod_aggregate_fit() {
+ ExperimentalWithRawCallbackMethod_aggregate_evaluate() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
- MarkMethodRawCallback(4,
+ MarkMethodRawCallback(12,
new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
@@ -1618,37 +3009,37 @@ class Flexe final {
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->aggregate_fit(context, request, response); }));
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->aggregate_evaluate(context, request, response); }));
}
- ~ExperimentalWithRawCallbackMethod_aggregate_fit() override {
+ ~ExperimentalWithRawCallbackMethod_aggregate_evaluate() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_fit(::grpc::ServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status aggregate_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::AggregationRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* aggregate_fit(
+ virtual ::grpc::ServerUnaryReactor* aggregate_evaluate(
::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* aggregate_fit(
+ virtual ::grpc::experimental::ServerUnaryReactor* aggregate_evaluate(
::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithRawCallbackMethod_aggregate_sync_fit : public BaseClass {
+ class ExperimentalWithRawCallbackMethod_set_strategy : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithRawCallbackMethod_aggregate_sync_fit() {
+ ExperimentalWithRawCallbackMethod_set_strategy() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
- MarkMethodRawCallback(5,
+ MarkMethodRawCallback(13,
new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
@@ -1656,37 +3047,37 @@ class Flexe final {
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->aggregate_sync_fit(context, request, response); }));
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->set_strategy(context, request, response); }));
}
- ~ExperimentalWithRawCallbackMethod_aggregate_sync_fit() override {
+ ~ExperimentalWithRawCallbackMethod_set_strategy() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status aggregate_sync_fit(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status set_strategy(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* aggregate_sync_fit(
+ virtual ::grpc::ServerUnaryReactor* set_strategy(
::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* aggregate_sync_fit(
+ virtual ::grpc::experimental::ServerUnaryReactor* set_strategy(
::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithRawCallbackMethod_server_evaluate : public BaseClass {
+ class ExperimentalWithRawCallbackMethod_get_strategy : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithRawCallbackMethod_server_evaluate() {
+ ExperimentalWithRawCallbackMethod_get_strategy() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
- MarkMethodRawCallback(6,
+ MarkMethodRawCallback(14,
new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
@@ -1694,37 +3085,37 @@ class Flexe final {
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->server_evaluate(context, request, response); }));
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->get_strategy(context, request, response); }));
}
- ~ExperimentalWithRawCallbackMethod_server_evaluate() override {
+ ~ExperimentalWithRawCallbackMethod_get_strategy() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status server_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status get_strategy(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* server_evaluate(
+ virtual ::grpc::ServerUnaryReactor* get_strategy(
::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* server_evaluate(
+ virtual ::grpc::experimental::ServerUnaryReactor* get_strategy(
::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithRawCallbackMethod_store_model : public BaseClass {
+ class ExperimentalWithRawCallbackMethod_center_fit : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithRawCallbackMethod_store_model() {
+ ExperimentalWithRawCallbackMethod_center_fit() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
- MarkMethodRawCallback(7,
+ MarkMethodRawCallback(15,
new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
@@ -1732,37 +3123,37 @@ class Flexe final {
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->store_model(context, request, response); }));
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->center_fit(context, request, response); }));
}
- ~ExperimentalWithRawCallbackMethod_store_model() override {
+ ~ExperimentalWithRawCallbackMethod_center_fit() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status store_model(::grpc::ServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status center_fit(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* store_model(
+ virtual ::grpc::ServerUnaryReactor* center_fit(
::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* store_model(
+ virtual ::grpc::experimental::ServerUnaryReactor* center_fit(
::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#endif
{ return nullptr; }
};
template
- class ExperimentalWithRawCallbackMethod_initialize_parameters : public BaseClass {
+ class ExperimentalWithRawCallbackMethod_center_evaluate : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- ExperimentalWithRawCallbackMethod_initialize_parameters() {
+ ExperimentalWithRawCallbackMethod_center_evaluate() {
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
::grpc::Service::
#else
::grpc::Service::experimental().
#endif
- MarkMethodRawCallback(8,
+ MarkMethodRawCallback(16,
new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
@@ -1770,21 +3161,21 @@ class Flexe final {
#else
::grpc::experimental::CallbackServerContext*
#endif
- context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->initialize_parameters(context, request, response); }));
+ context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->center_evaluate(context, request, response); }));
}
- ~ExperimentalWithRawCallbackMethod_initialize_parameters() override {
+ ~ExperimentalWithRawCallbackMethod_center_evaluate() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status initialize_parameters(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status center_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
- virtual ::grpc::ServerUnaryReactor* initialize_parameters(
+ virtual ::grpc::ServerUnaryReactor* center_evaluate(
::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#else
- virtual ::grpc::experimental::ServerUnaryReactor* initialize_parameters(
+ virtual ::grpc::experimental::ServerUnaryReactor* center_evaluate(
::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
#endif
{ return nullptr; }
@@ -1800,7 +3191,7 @@ class Flexe final {
#else
::grpc::Service::experimental().
#endif
- MarkMethodRawCallback(9,
+ MarkMethodRawCallback(17,
new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
[this](
#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
@@ -1814,7 +3205,7 @@ class Flexe final {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
- ::grpc::Status end(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status end(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::GenericReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
@@ -1862,10 +3253,10 @@ class Flexe final {
WithStreamedUnaryMethod_evaluate() {
::grpc::Service::MarkMethodStreamed(1,
new ::grpc::internal::StreamedUnaryHandler<
- ::flexe::TTRequest, ::flexe::EvaluateReply>(
+ ::flexe::TTRequest, ::flexe::ModelReply>(
[this](::grpc::ServerContext* context,
::grpc::ServerUnaryStreamer<
- ::flexe::TTRequest, ::flexe::EvaluateReply>* streamer) {
+ ::flexe::TTRequest, ::flexe::ModelReply>* streamer) {
return this->Streamedevaluate(context,
streamer);
}));
@@ -1874,12 +3265,12 @@ class Flexe final {
BaseClassMustBeDerivedFromService(this);
}
// disable regular version of this method
- ::grpc::Status evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
// replace default version of method with streamed unary
- virtual ::grpc::Status Streamedevaluate(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::TTRequest,::flexe::EvaluateReply>* server_unary_streamer) = 0;
+ virtual ::grpc::Status Streamedevaluate(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::TTRequest,::flexe::ModelReply>* server_unary_streamer) = 0;
};
template
class WithStreamedUnaryMethod_update_model : public BaseClass {
@@ -1889,10 +3280,10 @@ class Flexe final {
WithStreamedUnaryMethod_update_model() {
::grpc::Service::MarkMethodStreamed(2,
new ::grpc::internal::StreamedUnaryHandler<
- ::flexe::TTRequest, ::flexe::GenericResponse>(
+ ::flexe::TTRequest, ::flexe::ModelReply>(
[this](::grpc::ServerContext* context,
::grpc::ServerUnaryStreamer<
- ::flexe::TTRequest, ::flexe::GenericResponse>* streamer) {
+ ::flexe::TTRequest, ::flexe::ModelReply>* streamer) {
return this->Streamedupdate_model(context,
streamer);
}));
@@ -1901,147 +3292,174 @@ class Flexe final {
BaseClassMustBeDerivedFromService(this);
}
// disable regular version of this method
- ::grpc::Status update_model(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status update_model(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
// replace default version of method with streamed unary
- virtual ::grpc::Status Streamedupdate_model(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::TTRequest,::flexe::GenericResponse>* server_unary_streamer) = 0;
+ virtual ::grpc::Status Streamedupdate_model(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::TTRequest,::flexe::ModelReply>* server_unary_streamer) = 0;
};
template
- class WithStreamedUnaryMethod_aggregate_evaluate : public BaseClass {
+ class WithStreamedUnaryMethod_get_information : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithStreamedUnaryMethod_aggregate_evaluate() {
+ WithStreamedUnaryMethod_get_information() {
::grpc::Service::MarkMethodStreamed(3,
new ::grpc::internal::StreamedUnaryHandler<
- ::flexe::TTRequest, ::flexe::EvaluateReply>(
+ ::flexe::GenericRequest, ::flexe::ModelReply>(
[this](::grpc::ServerContext* context,
::grpc::ServerUnaryStreamer<
- ::flexe::TTRequest, ::flexe::EvaluateReply>* streamer) {
- return this->Streamedaggregate_evaluate(context,
+ ::flexe::GenericRequest, ::flexe::ModelReply>* streamer) {
+ return this->Streamedget_information(context,
streamer);
}));
}
- ~WithStreamedUnaryMethod_aggregate_evaluate() override {
+ ~WithStreamedUnaryMethod_get_information() override {
BaseClassMustBeDerivedFromService(this);
}
// disable regular version of this method
- ::grpc::Status aggregate_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status get_information(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
// replace default version of method with streamed unary
- virtual ::grpc::Status Streamedaggregate_evaluate(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::TTRequest,::flexe::EvaluateReply>* server_unary_streamer) = 0;
+ virtual ::grpc::Status Streamedget_information(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::GenericRequest,::flexe::ModelReply>* server_unary_streamer) = 0;
};
template
- class WithStreamedUnaryMethod_aggregate_fit : public BaseClass {
+ class WithStreamedUnaryMethod_set_information : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithStreamedUnaryMethod_aggregate_fit() {
+ WithStreamedUnaryMethod_set_information() {
::grpc::Service::MarkMethodStreamed(4,
new ::grpc::internal::StreamedUnaryHandler<
- ::flexe::ModelRequest, ::flexe::ModelReply>(
+ ::flexe::GenericRequest, ::flexe::ModelReply>(
[this](::grpc::ServerContext* context,
::grpc::ServerUnaryStreamer<
- ::flexe::ModelRequest, ::flexe::ModelReply>* streamer) {
- return this->Streamedaggregate_fit(context,
+ ::flexe::GenericRequest, ::flexe::ModelReply>* streamer) {
+ return this->Streamedset_information(context,
streamer);
}));
}
- ~WithStreamedUnaryMethod_aggregate_fit() override {
+ ~WithStreamedUnaryMethod_set_information() override {
BaseClassMustBeDerivedFromService(this);
}
// disable regular version of this method
- ::grpc::Status aggregate_fit(::grpc::ServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status set_information(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
// replace default version of method with streamed unary
- virtual ::grpc::Status Streamedaggregate_fit(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::ModelRequest,::flexe::ModelReply>* server_unary_streamer) = 0;
+ virtual ::grpc::Status Streamedset_information(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::GenericRequest,::flexe::ModelReply>* server_unary_streamer) = 0;
};
template
- class WithStreamedUnaryMethod_aggregate_sync_fit : public BaseClass {
+ class WithStreamedUnaryMethod_aggregate_client : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithStreamedUnaryMethod_aggregate_sync_fit() {
+ WithStreamedUnaryMethod_aggregate_client() {
::grpc::Service::MarkMethodStreamed(5,
new ::grpc::internal::StreamedUnaryHandler<
- ::flexe::GenericRequest, ::flexe::ModelReply>(
+ ::flexe::TTRequest, ::flexe::ModelReply>(
[this](::grpc::ServerContext* context,
::grpc::ServerUnaryStreamer<
- ::flexe::GenericRequest, ::flexe::ModelReply>* streamer) {
- return this->Streamedaggregate_sync_fit(context,
+ ::flexe::TTRequest, ::flexe::ModelReply>* streamer) {
+ return this->Streamedaggregate_client(context,
streamer);
}));
}
- ~WithStreamedUnaryMethod_aggregate_sync_fit() override {
+ ~WithStreamedUnaryMethod_aggregate_client() override {
BaseClassMustBeDerivedFromService(this);
}
// disable regular version of this method
- ::grpc::Status aggregate_sync_fit(::grpc::ServerContext* /*context*/, const ::flexe::GenericRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ ::grpc::Status aggregate_client(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
// replace default version of method with streamed unary
- virtual ::grpc::Status Streamedaggregate_sync_fit(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::GenericRequest,::flexe::ModelReply>* server_unary_streamer) = 0;
+ virtual ::grpc::Status Streamedaggregate_client(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::TTRequest,::flexe::ModelReply>* server_unary_streamer) = 0;
};
template
- class WithStreamedUnaryMethod_server_evaluate : public BaseClass {
+ class WithStreamedUnaryMethod_fit_all : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithStreamedUnaryMethod_server_evaluate() {
+ WithStreamedUnaryMethod_fit_all() {
::grpc::Service::MarkMethodStreamed(6,
new ::grpc::internal::StreamedUnaryHandler<
- ::flexe::TTRequest, ::flexe::EvaluateReply>(
+ ::flexe::TTRequest, ::flexe::ModelReply>(
[this](::grpc::ServerContext* context,
::grpc::ServerUnaryStreamer<
- ::flexe::TTRequest, ::flexe::EvaluateReply>* streamer) {
- return this->Streamedserver_evaluate(context,
+ ::flexe::TTRequest, ::flexe::ModelReply>* streamer) {
+ return this->Streamedfit_all(context,
streamer);
}));
}
- ~WithStreamedUnaryMethod_server_evaluate() override {
+ ~WithStreamedUnaryMethod_fit_all() override {
BaseClassMustBeDerivedFromService(this);
}
// disable regular version of this method
- ::grpc::Status server_evaluate(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::EvaluateReply* /*response*/) override {
+ ::grpc::Status fit_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
// replace default version of method with streamed unary
- virtual ::grpc::Status Streamedserver_evaluate(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::TTRequest,::flexe::EvaluateReply>* server_unary_streamer) = 0;
+ virtual ::grpc::Status Streamedfit_all(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::TTRequest,::flexe::ModelReply>* server_unary_streamer) = 0;
};
template
- class WithStreamedUnaryMethod_store_model : public BaseClass {
+ class WithStreamedUnaryMethod_evaluate_all : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
- WithStreamedUnaryMethod_store_model() {
+ WithStreamedUnaryMethod_evaluate_all() {
::grpc::Service::MarkMethodStreamed(7,
new ::grpc::internal::StreamedUnaryHandler<
- ::flexe::ModelRequest, ::flexe::GenericResponse>(
+ ::flexe::TTRequest, ::flexe::ModelReply>(
+ [this](::grpc::ServerContext* context,
+ ::grpc::ServerUnaryStreamer<
+ ::flexe::TTRequest, ::flexe::ModelReply>* streamer) {
+ return this->Streamedevaluate_all(context,
+ streamer);
+ }));
+ }
+ ~WithStreamedUnaryMethod_evaluate_all() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable regular version of this method
+ ::grpc::Status evaluate_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ // replace default version of method with streamed unary
+ virtual ::grpc::Status Streamedevaluate_all(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::TTRequest,::flexe::ModelReply>* server_unary_streamer) = 0;
+ };
+ template
+ class WithStreamedUnaryMethod_update_all : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithStreamedUnaryMethod_update_all() {
+ ::grpc::Service::MarkMethodStreamed(8,
+ new ::grpc::internal::StreamedUnaryHandler<
+ ::flexe::TTRequest, ::flexe::ModelReply>(
[this](::grpc::ServerContext* context,
::grpc::ServerUnaryStreamer<
- ::flexe::ModelRequest, ::flexe::GenericResponse>* streamer) {
- return this->Streamedstore_model(context,
+ ::flexe::TTRequest, ::flexe::ModelReply>* streamer) {
+ return this->Streamedupdate_all(context,
streamer);
}));
}
- ~WithStreamedUnaryMethod_store_model() override {
+ ~WithStreamedUnaryMethod_update_all() override {
BaseClassMustBeDerivedFromService(this);
}
// disable regular version of this method
- ::grpc::Status store_model(::grpc::ServerContext* /*context*/, const ::flexe::ModelRequest* /*request*/, ::flexe::GenericResponse* /*response*/) override {
+ ::grpc::Status update_all(::grpc::ServerContext* /*context*/, const ::flexe::TTRequest* /*request*/, ::flexe::ModelReply* /*response*/) override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
// replace default version of method with streamed unary
- virtual ::grpc::Status Streamedstore_model(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::ModelRequest,::flexe::GenericResponse>* server_unary_streamer) = 0;
+ virtual ::grpc::Status Streamedupdate_all(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::TTRequest,::flexe::ModelReply>* server_unary_streamer) = 0;
};
template
class WithStreamedUnaryMethod_initialize_parameters : public BaseClass {
@@ -2049,7 +3467,7 @@ class Flexe final {
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
public:
WithStreamedUnaryMethod_initialize_parameters() {
- ::grpc::Service::MarkMethodStreamed(8,
+ ::grpc::Service::MarkMethodStreamed(9,
new ::grpc::internal::StreamedUnaryHandler<
::flexe::TTRequest, ::flexe::ModelReply>(
[this](::grpc::ServerContext* context,
@@ -2071,17 +3489,206 @@ class Flexe final {
virtual ::grpc::Status Streamedinitialize_parameters(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flexe::TTRequest,::flexe::ModelReply>* server_unary_streamer) = 0;
};
template