From 4d26fd7bfebb832c226147c60bfdd9ee37de7280 Mon Sep 17 00:00:00 2001 From: Sermet Pekin Date: Mon, 9 Dec 2024 02:06:11 +0300 Subject: [PATCH] trigger tests --- easy.cpp | 23 +++++++++++++++++++++++ easy_adam.cpp | 21 +++++++++++++++++++++ easy_df.cpp | 22 ++++++++++++++++++++++ easy_df_adam.cpp | 23 +++++++++++++++++++++++ include/adam.hpp | 23 ++++++++++++++++++++++- include/console_utils.hpp | 21 +++++++++++++++++++++ include/data_utils.hpp | 23 ++++++++++++++++++++++- include/dataprocessor.hpp | 23 ++++++++++++++++++++++- include/datasetType.hpp | 23 ++++++++++++++++++++++- include/easy.hpp | 23 ++++++++++++++++++++++- include/range.hpp | 22 ++++++++++++++++++++++ include/schema.hpp | 21 +++++++++++++++++++++ include/sp_functional.hpp | 21 +++++++++++++++++++++ include/sp_testing_utils.hpp | 23 ++++++++++++++++++++++- include/tensor_basic.hpp | 21 +++++++++++++++++++++ include/train_eval.hpp | 23 ++++++++++++++++++++++- main.cpp | 22 ++++++++++++++++++++++ tests/main_no_cache.cpp | 21 +++++++++++++++++++++ tests/test_df_slice.cpp | 23 +++++++++++++++++++++++ tests/test_encoding | Bin 217280 -> 0 bytes tests/test_range.cpp | 23 +++++++++++++++++++++++ 21 files changed, 438 insertions(+), 7 deletions(-) delete mode 100755 tests/test_encoding diff --git a/easy.cpp b/easy.cpp index 611d566..e0cdfca 100644 --- a/easy.cpp +++ b/easy.cpp @@ -1,3 +1,26 @@ +// MIT License + +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ + #include "micrograd.hpp" using namespace microgradCpp; diff --git a/easy_adam.cpp b/easy_adam.cpp index 9324cbd..699d625 100644 --- a/easy_adam.cpp +++ b/easy_adam.cpp @@ -1,6 +1,27 @@ #include "micrograd.hpp" using namespace microgradCpp; +// MIT License +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ /* g++ -std=c++17 -Iinclude -O2 -o main easy_adam.cpp diff --git a/easy_df.cpp b/easy_df.cpp index e83601e..77ff02d 100644 --- a/easy_df.cpp +++ b/easy_df.cpp @@ -1,3 +1,25 @@ +// MIT License + +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ #include "micrograd.hpp" #include "value.hpp" diff --git a/easy_df_adam.cpp b/easy_df_adam.cpp index f00f804..c137d2d 100644 --- a/easy_df_adam.cpp +++ b/easy_df_adam.cpp @@ -1,3 +1,26 @@ +// MIT License + +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ + #include "micrograd.hpp" #include "value.hpp" diff --git a/include/adam.hpp b/include/adam.hpp index 4ba0e9b..048c157 100644 --- a/include/adam.hpp +++ b/include/adam.hpp @@ -5,7 +5,28 @@ #include #include #include - +// MIT License + +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ class AdamOptimizer { /* diff --git a/include/console_utils.hpp b/include/console_utils.hpp index 926011a..8d1cb9f 100644 --- a/include/console_utils.hpp +++ b/include/console_utils.hpp @@ -1,6 +1,27 @@ #ifndef epic_failure_exit_HPP #define epic_failure_exit_HPP +// MIT License +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ #include #include namespace microgradCpp diff --git a/include/data_utils.hpp b/include/data_utils.hpp index 21defcf..e38d446 100644 --- a/include/data_utils.hpp +++ b/include/data_utils.hpp @@ -2,7 +2,28 @@ #ifndef DataUtils_HPP #define DataUtils_HPP - +// MIT License + +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ #include #include #include diff --git a/include/dataprocessor.hpp b/include/dataprocessor.hpp index 3eb44b3..cd1729c 100644 --- a/include/dataprocessor.hpp +++ b/include/dataprocessor.hpp @@ -25,7 +25,28 @@ #include #include #include "types.hpp" - +// MIT License + +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ using namespace microgradCpp; // Simple hash function for strings diff --git a/include/datasetType.hpp b/include/datasetType.hpp index 8d2e6a7..6d44d76 100644 --- a/include/datasetType.hpp +++ b/include/datasetType.hpp @@ -8,7 +8,28 @@ #include "types.hpp" #include "dataframe.hpp" using namespace microgradCpp; - +// MIT License + +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ inline DatasetType convert_to_dataset(const vv_double &data, int target_column = -1) { DatasetType dataset; diff --git a/include/easy.hpp b/include/easy.hpp index 535dcb6..93f4835 100644 --- a/include/easy.hpp +++ b/include/easy.hpp @@ -47,7 +47,28 @@ THE SOFTWARE. #include "types.hpp" using namespace microgradCpp; - +// MIT License + +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ inline DatasetType get_iris2() // ok { DataProcessor processor; diff --git a/include/range.hpp b/include/range.hpp index f17658c..3f1d71f 100644 --- a/include/range.hpp +++ b/include/range.hpp @@ -1,5 +1,27 @@ #pragma once +// MIT License + +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ #include #include #include diff --git a/include/schema.hpp b/include/schema.hpp index 95c8b02..e30fe8c 100644 --- a/include/schema.hpp +++ b/include/schema.hpp @@ -1,6 +1,27 @@ #ifndef SCHEMA_HPP #define SCHEMA_HPP +// MIT License +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ #include #include diff --git a/include/sp_functional.hpp b/include/sp_functional.hpp index d9e6de4..37ac89d 100644 --- a/include/sp_functional.hpp +++ b/include/sp_functional.hpp @@ -1,5 +1,26 @@ #pragma once +// MIT License +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ #include #include #include diff --git a/include/sp_testing_utils.hpp b/include/sp_testing_utils.hpp index 42ec7a9..3d0fa49 100644 --- a/include/sp_testing_utils.hpp +++ b/include/sp_testing_utils.hpp @@ -4,7 +4,28 @@ #include #include #include - +// MIT License + +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ namespace sptest { diff --git a/include/tensor_basic.hpp b/include/tensor_basic.hpp index 6c84059..3cade40 100644 --- a/include/tensor_basic.hpp +++ b/include/tensor_basic.hpp @@ -1,6 +1,27 @@ #include #include +// MIT License +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ class Tensor { public: std::vector> data; diff --git a/include/train_eval.hpp b/include/train_eval.hpp index a77df5a..c782fb8 100644 --- a/include/train_eval.hpp +++ b/include/train_eval.hpp @@ -14,7 +14,28 @@ #include "mlp.hpp" #include "adam.hpp" #include "easy.hpp" - +// MIT License + +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ using namespace microgradCpp; // Function to split the DataFrame into train and test sets diff --git a/main.cpp b/main.cpp index bac1336..f45a5fb 100644 --- a/main.cpp +++ b/main.cpp @@ -1,3 +1,25 @@ +// MIT License + +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ #include #include diff --git a/tests/main_no_cache.cpp b/tests/main_no_cache.cpp index 2313acb..fbaf20f 100644 --- a/tests/main_no_cache.cpp +++ b/tests/main_no_cache.cpp @@ -1,6 +1,27 @@ #include "micrograd.hpp" using namespace microgradCpp; +// MIT License +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ int main() { diff --git a/tests/test_df_slice.cpp b/tests/test_df_slice.cpp index a1f5c9a..9082201 100644 --- a/tests/test_df_slice.cpp +++ b/tests/test_df_slice.cpp @@ -1,3 +1,26 @@ + +// MIT License + +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ #include #include #include "micrograd.hpp" diff --git a/tests/test_encoding b/tests/test_encoding deleted file mode 100755 index 5a68b738c4bbfafcb84e209d80febe2ad3dd6bfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217280 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 LE1v4iqt^cepJ#?i diff --git a/tests/test_range.cpp b/tests/test_range.cpp index 8182219..0bc17c0 100644 --- a/tests/test_range.cpp +++ b/tests/test_range.cpp @@ -1,3 +1,26 @@ + +// MIT License + +// Copyright (c) [2024] Sermet Pekin + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// */ #include "micrograd.hpp" #include #include