From 054fa0dfa398a5760f0b8fb1fa8974850958d2c0 Mon Sep 17 00:00:00 2001 From: Vincent Q Thai <70456187+vthai321@users.noreply.github.com> Date: Mon, 22 Apr 2024 16:53:57 -0700 Subject: [PATCH 01/44] Grant Dummy Operators Access to Dummy Property Field (#2572) This is a minor change that allows dummy operators, from the workflow parser, the ability to access the dummy properties field. In the future, the workflow parser will take advantage of the dummy property feature to describe properties of equivalent operators from other workflows that aren't currently present in Texera. Below is an image of what this functionality looks like. ![Capture](https://github.com/Texera/texera/assets/70456187/0c8a0b13-4e2c-48d2-b4d7-f3de52af4f0e) Co-authored-by: Xiaozhen Liu --- .../operator-property-edit-frame.component.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/gui/src/app/workspace/component/property-editor/operator-property-edit-frame/operator-property-edit-frame.component.ts b/core/gui/src/app/workspace/component/property-editor/operator-property-edit-frame/operator-property-edit-frame.component.ts index 4e939f697b0..30d23d8b3d6 100644 --- a/core/gui/src/app/workspace/component/property-editor/operator-property-edit-frame/operator-property-edit-frame.component.ts +++ b/core/gui/src/app/workspace/component/property-editor/operator-property-edit-frame/operator-property-edit-frame.component.ts @@ -396,9 +396,12 @@ export class OperatorPropertyEditFrameComponent implements OnInit, OnChanges, On }; } - // Disable dummy property list for all operators + // Disable dummy property list for all operators, except for dummy operator. if (mappedField.key === "dummyPropertyList") { mappedField.hide = true; + if (this.currentOperatorSchema?.operatorType === "Dummy") { + mappedField.hide = false; + } mappedField.expressionProperties = { "templateOptions.disabled": () => true, "templateOptions.readonly": () => true, From 325ea479625a6cf95ba13c9f5fba99f99d5ae452 Mon Sep 17 00:00:00 2001 From: Bob Bai <43344272+bobbai00@users.noreply.github.com> Date: Wed, 24 Apr 2024 08:22:35 -0700 Subject: [PATCH 02/44] Generate dataset version name based on number of versions and user-provided description (#2610) This PR introduces the generation of dataset version name. When creating a new version of a dataset, the dataset version name is **no longer required** The generation rule and format are as follows: Assume there are `n` existing versions: - If user provides the version description, the version name would be `v{n+1} - {user-provided description}` - if user doesn't provide anything, the version name would simply be `v{n+1}` The generation happens on the backend. --- .../user/dataset/DatasetResource.scala | 24 ++++++++++++++++++- .../user-dataset-version-creator.component.ts | 21 ++++++++-------- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/DatasetResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/DatasetResource.scala index 3797ac53d41..5da0a2925c2 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/DatasetResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/DatasetResource.scala @@ -142,6 +142,27 @@ object DatasetResource { ) } + // the format of dataset version name is: v{#n} - {user provided dataset version name}. e.g. v10 - new version + private def generateDatasetVersionName( + ctx: DSLContext, + did: UInteger, + userProvidedVersionName: String + ): String = { + val numberOfExistingVersions = ctx + .selectFrom(DATASET_VERSION) + .where(DATASET_VERSION.DID.eq(did)) + .fetch() + .size() + + val res = if (userProvidedVersionName == "") { + "v" + (numberOfExistingVersions + 1).toString + } else { + "v" + (numberOfExistingVersions + 1).toString + " - " + userProvidedVersionName + } + + res + } + // this function retrieve the latest DatasetVersion from DB // the latest here means the one with latest creation time // read access will be checked @@ -174,7 +195,7 @@ object DatasetResource { ctx: DSLContext, did: UInteger, uid: UInteger, - versionName: String, + userProvidedVersionName: String, multiPart: FormDataMultiPart ): Option[DashboardDatasetVersion] = { @@ -196,6 +217,7 @@ object DatasetResource { // for file:remove, the value would be filepath1,filepath2 val fields = multiPart.getFields().keySet().iterator() + val versionName = generateDatasetVersionName(ctx, did, userProvidedVersionName) val commitHash = GitVersionControlLocalFileStorage.withCreateVersion( datasetPath, versionName, diff --git a/core/gui/src/app/dashboard/user/component/user-dataset/user-dataset-explorer/user-dataset-version-creator/user-dataset-version-creator.component.ts b/core/gui/src/app/dashboard/user/component/user-dataset/user-dataset-explorer/user-dataset-version-creator/user-dataset-version-creator.component.ts index de676e736d5..bc52a2bf65d 100644 --- a/core/gui/src/app/dashboard/user/component/user-dataset/user-dataset-explorer/user-dataset-version-creator/user-dataset-version-creator.component.ts +++ b/core/gui/src/app/dashboard/user/component/user-dataset/user-dataset-explorer/user-dataset-version-creator/user-dataset-version-creator.component.ts @@ -58,11 +58,12 @@ export class UserDatasetVersionCreatorComponent implements OnInit { ? [ // Fields when isCreatingVersion is true { - key: "name", + key: "versionDescription", type: "input", + defaultValue: "", templateOptions: { - label: "Name", - required: true, + label: "Describe the new version", + required: false, }, }, ] @@ -85,12 +86,12 @@ export class UserDatasetVersionCreatorComponent implements OnInit { }, }, { - key: "versionName", + key: "versionDescription", type: "input", - defaultValue: "v1", + defaultValue: "", templateOptions: { - label: "Initial Version Name", - required: true, + label: "Version Description", + required: false, }, }, ]; @@ -135,13 +136,13 @@ export class UserDatasetVersionCreatorComponent implements OnInit { this.isUploading = true; if (this.isCreatingVersion && this.baseVersion) { - const versionName = this.form.get("name")?.value; + const versionName = this.form.get("versionDescription")?.value; this.datasetService .createDatasetVersion(this.baseVersion?.did, versionName, this.removedFilePaths, this.newUploadFiles) .pipe(untilDestroyed(this)) .subscribe({ next: res => { - this.notificationService.success(`Version '${versionName}' Created`); + this.notificationService.success("Version Created"); this.datasetOrVersionCreationID.emit(res.dvid); this.isUploading = false; }, @@ -160,7 +161,7 @@ export class UserDatasetVersionCreatorComponent implements OnInit { creationTime: undefined, versionHierarchy: undefined, }; - const initialVersionName = this.form.get("versionName")?.value; + const initialVersionName = this.form.get("versionDescription")?.value; // do the name sanitization From 5def81f9068342bf21c29b0c7f9fdf4b37e579c5 Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Wed, 24 Apr 2024 14:11:56 -0700 Subject: [PATCH 03/44] Enable Fine-grained Property Panel Shared Editing (#2617) #2014 disabled `UpdateYTypeFromObject` when updating the content of the properties of an operator. This caused the issues described in #2608 / #2613. This PR enables this function again because we cannot see the incompatibility problem with formly and `UpdateYTypeFromObject` anymore, and enabling this update logic will solve the issue of UDF code not being saved. --- .../service/workflow-graph/model/workflow-graph.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/core/gui/src/app/workspace/service/workflow-graph/model/workflow-graph.ts b/core/gui/src/app/workspace/service/workflow-graph/model/workflow-graph.ts index eff1c8d9cf1..0a073c82049 100644 --- a/core/gui/src/app/workspace/service/workflow-graph/model/workflow-graph.ts +++ b/core/gui/src/app/workspace/service/workflow-graph/model/workflow-graph.ts @@ -811,14 +811,12 @@ export class WorkflowGraph { if (!this.hasOperator(operatorID)) { throw new Error(`operator with ID ${operatorID} doesn't exist`); } - // - // const previousProperty = this.getSharedOperatorType(operatorID).get( - // "operatorProperties" - // ) as YType; + + const previousProperty = this.getSharedOperatorType(operatorID).get( + "operatorProperties" + ) as YType; // set the new copy back to the operator ID map - // TODO: we temporarily disable this due to Yjs update causing issues in Formly. - this.getSharedOperatorType(operatorID).set("operatorProperties", createYTypeFromObject(newProperty)); - // updateYTypeFromObject(previousProperty, newProperty); + updateYTypeFromObject(previousProperty, newProperty); } public setPortProperty(operatorPortID: LogicalPort, newProperty: object) { From 1e600081f0cd0ce5875fb8ae3dc7c81f07ed40a2 Mon Sep 17 00:00:00 2001 From: Yicong Huang <17627829+Yicong-Huang@users.noreply.github.com> Date: Fri, 26 Apr 2024 09:40:56 -0700 Subject: [PATCH 04/44] Add ICDE 2024 workshop paper and SIGMOD 2024 demo paper (#2619) - Add publication "Data Science Tasks Implemented with Scripts versus GUI-Based Workflows: The Good, the Bad, and the Ugly" - Add publication "Demonstration of Udon: Line-by-line Debugging of User-Defined Functions in Data Workflows" --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 50afbd5ff76..a0accbb3297 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,8 @@ The following is a workflow formulated using the Texera GUI in a Web browser, wh ![Sample Texera Workflow](https://user-images.githubusercontent.com/12926365/171459157-1792971d-a31f-49e7-ab98-6f3b9ead9f5b.png) ## Publications (Computer Science): +* (3/2024) Demonstration of Udon: Line-by-line Debugging of User-Defined Functions in Data Workflows, Yicong Huang, Zuozhi Wang, and Chen Li, to appear in SIGMOD 2024 Demo. +* (2/2024) Data Science Tasks Implemented with Scripts versus GUI-Based Workflows: The Good, the Bad, and the Ugly, Alexander K Taylor, Yicong Huang, Junheng Hao, Xinyuan Lin, Xiusi Chen, Wei Wang, and Chen Li, to appear in ICDE 2024 DataPlat Workshop. * (8/2023) Building a Collaborative Data Analytics System: Opportunities and Challenges, Zuozhi Wang, Chen Li, in Tutorial at VLDB 2023 [PDF](https://www.vldb.org/pvldb/vol16/p3898-wang.pdf), [Slides](https://chenli.ics.uci.edu/files/vldb2023-texera-tutorial.pdf). * (8/2023) Udon: Efficient Debugging of User-Defined Functions in Big Data Systems with Line-by-Line Control, Yicong Huang, Zuozhi Wang, and Chen Li, in SIGMOD 2024 [PDF](https://dl.acm.org/doi/10.1145/3626712). * (8/2023) Improving Iterative Analytics in GUI-Based Data-Processing Systems with Visualization, From 9ffa898814e159da7552bc325de9e7b911839f79 Mon Sep 17 00:00:00 2001 From: Yicong Huang <17627829+Yicong-Huang@users.noreply.github.com> Date: Fri, 26 Apr 2024 10:38:02 -0700 Subject: [PATCH 05/44] Update system statistics on README (#2621) --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a0accbb3297..d43a9a54edb 100644 --- a/README.md +++ b/README.md @@ -20,12 +20,12 @@

- Static Badge + Static Badge Static Badge - Static Badge - Static Badge - Static Badge - Static Badge + Static Badge + Static Badge + Static Badge + Static Badge Static Badge

From 1f519856b4c73c81acf4199f7e08aa2a1e54956a Mon Sep 17 00:00:00 2001 From: Yicong Huang <17627829+Yicong-Huang@users.noreply.github.com> Date: Fri, 26 Apr 2024 12:34:40 -0700 Subject: [PATCH 06/44] Fix macOS CI timeout on frontend unit tests (#1704) This PR intends to fix the macOS CI timeout issue as an urgent fix. It includes a few changes: 1. upgrade karma version to 6.4.3 2. enlarge the timeouts 3. adding waitwebpack wrapper according to https://github.com/karma-runner/karma-chrome-launcher/issues/154#issuecomment-986661937. --- core/gui/angular.json | 6 +- core/gui/karma.conf.js | 25 +++-- core/gui/karma.waitwebpack.js | 27 +++++ core/gui/package.json | 22 ++-- .../component/workspace.component.spec.ts | 1 - core/gui/yarn.lock | 100 ++++++++++++++---- 6 files changed, 137 insertions(+), 44 deletions(-) create mode 100644 core/gui/karma.waitwebpack.js diff --git a/core/gui/angular.json b/core/gui/angular.json index 6a11d768436..a76ee354362 100644 --- a/core/gui/angular.json +++ b/core/gui/angular.json @@ -2,7 +2,7 @@ "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, "projects": { - "texera-gui": { + "gui": { "root": "", "sourceRoot": "src", "projectType": "application", @@ -73,12 +73,12 @@ "serve": { "builder": "@angular-builders/custom-webpack:dev-server", "options": { - "browserTarget": "texera-gui:build", + "browserTarget": "gui:build", "proxyConfig": "proxy.config.json" }, "configurations": { "production": { - "browserTarget": "texera-gui:build:production" + "browserTarget": "gui:build:production" } } }, diff --git a/core/gui/karma.conf.js b/core/gui/karma.conf.js index dd82140de31..76d1e89bd83 100644 --- a/core/gui/karma.conf.js +++ b/core/gui/karma.conf.js @@ -4,12 +4,13 @@ module.exports = function(config) { config.set({ basePath: "", - frameworks: ["jasmine", "@angular-devkit/build-angular"], + frameworks: ['waitwebpack', "jasmine", "@angular-devkit/build-angular"], plugins: [ require("karma-jasmine"), require("karma-chrome-launcher"), require("karma-coverage"), require("karma-jasmine-html-reporter"), + require('./karma.waitwebpack'), require("@angular-devkit/build-angular/plugins/karma") ], client: { @@ -18,16 +19,28 @@ module.exports = function(config) { random: false // disable the random running order } }, + customLaunchers: { + ChromeHeadlessCustom: { + base: 'ChromeHeadless', + flags: [ + '--no-sandbox', + '--headless', + '--disable-gpu', + '--disable-translate', + '--disable-extensions' + ], + }, + }, reporters: ["progress", "kjhtml"], port: 9876, colors: true, logLevel: config.LOG_INFO, autoWatch: true, - browsers: ["Chrome"], + browsers: ["ChromeHeadlessCustom"], singleRun: false, - captureTimeout: 60000, - browserDisconnectTimeout: 10000, - browserDisconnectTolerance: 3, - browserNoActivityTimeout: 60000 + captureTimeout: 240000, + browserDisconnectTimeout: 60000, + browserDisconnectTolerance: 1, + browserNoActivityTimeout: 240000 }); }; diff --git a/core/gui/karma.waitwebpack.js b/core/gui/karma.waitwebpack.js new file mode 100644 index 00000000000..9901177f20d --- /dev/null +++ b/core/gui/karma.waitwebpack.js @@ -0,0 +1,27 @@ +function WebpackCompilerEventsPlugin(options) { + this.options = options; +} + +WebpackCompilerEventsPlugin.prototype.apply = function(compiler) { + compiler.hooks.afterDone.tap('webpack-compiler-events-plugin', this.options.afterDone) +}; + +function waitWebpackFactory(config) { + return new Promise(resolve => { + let isFirstBuild = true; + config.buildWebpack.webpackConfig.plugins.push(new WebpackCompilerEventsPlugin({ + afterDone: () => { + if (isFirstBuild) { + console.log('First webpack build done'); + isFirstBuild = false; + resolve(); + } + } + })); + }); +} +waitWebpackFactory.$inject = ['config']; + +module.exports = { + 'framework:waitwebpack': ['factory', waitWebpackFactory] +}; diff --git a/core/gui/package.json b/core/gui/package.json index 388c3d1864f..9f1a59b1fb2 100644 --- a/core/gui/package.json +++ b/core/gui/package.json @@ -11,7 +11,7 @@ "build:ci": "nx build --configuration=production --progress=false --source-map=false", "analyze": "ng build --configuration=production --stats-json && webpack-bundle-analyzer dist/stats.json", "test": "ng test", - "test:ci": "node --max_old_space_size=4096 ./node_modules/nx/bin/nx test --watch=false --progress=false --browsers=ChromeHeadless", + "test:ci": "node --max_old_space_size=6144 ./node_modules/nx/bin/nx test --watch=false --progress=false --browsers=ChromeHeadless", "prettier:fix": "prettier --write ./src", "lint": "ng lint", "eslint:fix": "yarn eslint --fix ./src", @@ -21,6 +21,7 @@ }, "private": true, "dependencies": { + "@ali-hm/angular-tree-component": "12.0.5", "@angular/animations": "16.2.12", "@angular/cdk": "16.2.12", "@angular/common": "16.2.12", @@ -40,7 +41,6 @@ "@stoplight/json-ref-resolver": "3.1.5", "@types/lodash-es": "4.17.4", "@types/plotly.js-basic-dist-min": "^2.12.4", - "@ali-hm/angular-tree-component": "12.0.5", "ajv": "8.10.0", "backbone": "1.4.1", "dagre": "0.8.5", @@ -58,22 +58,22 @@ "monaco-editor": "0.36.1", "monaco-languageclient": "5.0.1", "ng-zorro-antd": "16.2.2", + "ng2-pdf-viewer": "9.1.5", "ngx-color-picker": "12.0.1", + "ngx-file-drop": "16.0.0", + "ngx-image-viewer": "1.0.13", "ngx-json-viewer": "3.2.1", "ngx-markdown": "16.0.0", "papaparse": "5.4.1", - "ng2-pdf-viewer": "9.1.5", - "ngx-file-drop": "16.0.0", - "ngx-image-viewer": "1.0.13", - "read-excel-file": "5.7.1", - "sanitize-filename": "1.6.3", "path-browserify": "^1.0.1", "plotly.js-basic-dist-min": "^2.29.0", "popper.js": "1.16.1", "quill": "1.3.7", "quill-cursors": "3.1.2", + "read-excel-file": "5.7.1", "ring-buffer-ts": "1.0.3", "rxjs": "7.5.5", + "sanitize-filename": "1.6.3", "tinyqueue": "2.0.3", "tslib": "2.3.1", "uuid": "8.3.2", @@ -105,9 +105,9 @@ "@types/json-schema": "7.0.9", "@types/lodash": "4.14.179", "@types/node": "~18.15.5", + "@types/papaparse": "5.3.5", "@types/quill": "2.0.9", "@types/uuid": "8.3.4", - "@types/papaparse": "5.3.5", "@typescript-eslint/eslint-plugin": "7.0.2", "@typescript-eslint/parser": "7.0.2", "babel-plugin-dynamic-import-node": "^2.3.3", @@ -123,7 +123,7 @@ "git-describe": "4.1.0", "jasmine-core": "3.8.0", "jasmine-spec-reporter": "5.0.2", - "karma": "6.3.17", + "karma": "6.4.3", "karma-chrome-launcher": "3.1.0", "karma-coverage": "~2.2.1", "karma-jasmine": "4.0.1", @@ -135,10 +135,10 @@ "prettier-eslint-cli": "8.0.1", "rxjs-marbles": "7.0.1", "sass": "1.71.1", + "style-loader": "3.3.4", "ts-node": "4.1.0", "typescript": "5.1.6", - "webpack-bundle-analyzer": "4.5.0", - "style-loader": "~3.3.3" + "webpack-bundle-analyzer": "4.5.0" }, "browserslist": [ "defaults", diff --git a/core/gui/src/app/workspace/component/workspace.component.spec.ts b/core/gui/src/app/workspace/component/workspace.component.spec.ts index ab3806ec656..e69de29bb2d 100644 --- a/core/gui/src/app/workspace/component/workspace.component.spec.ts +++ b/core/gui/src/app/workspace/component/workspace.component.spec.ts @@ -1 +0,0 @@ -describe("WorkspaceComponent", () => {}); diff --git a/core/gui/yarn.lock b/core/gui/yarn.lock index bf67ffa68d6..2b9e4fc2aa5 100644 --- a/core/gui/yarn.lock +++ b/core/gui/yarn.lock @@ -457,11 +457,16 @@ "@babel/highlight" "^7.24.2" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.5", "@babel/compat-data@^7.24.1": +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.1.tgz#31c1f66435f2a9c329bb5716a6d6186c516c3742" integrity sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA== +"@babel/compat-data@^7.23.5": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" + integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== + "@babel/core@7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.9.tgz#bd96492c68822198f33e8a256061da3cf391f58f" @@ -504,7 +509,28 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/core@^7.12.3", "@babel/core@^7.23.2": +"@babel/core@^7.12.3": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" + integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.4" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.24.4" + "@babel/parser" "^7.24.4" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/core@^7.23.2": version "7.24.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.3.tgz#568864247ea10fbd4eff04dda1e05f9e2ea985c3" integrity sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ== @@ -535,7 +561,7 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/generator@^7.22.9", "@babel/generator@^7.23.0", "@babel/generator@^7.24.1": +"@babel/generator@^7.22.9", "@babel/generator@^7.23.0": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.1.tgz#e67e06f68568a4ebf194d1c6014235344f0476d0" integrity sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A== @@ -545,6 +571,16 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" +"@babel/generator@^7.24.1", "@babel/generator@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" + integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== + dependencies: + "@babel/types" "^7.24.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@7.22.5", "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -747,7 +783,7 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.22.6", "@babel/helpers@^7.23.2", "@babel/helpers@^7.24.1": +"@babel/helpers@^7.22.6", "@babel/helpers@^7.23.2": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.1.tgz#183e44714b9eba36c3038e442516587b1e0a1a94" integrity sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg== @@ -756,6 +792,15 @@ "@babel/traverse" "^7.24.1" "@babel/types" "^7.24.0" +"@babel/helpers@^7.24.1", "@babel/helpers@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" + integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== + dependencies: + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" + "@babel/highlight@^7.24.2": version "7.24.2" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" @@ -766,11 +811,16 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.10.3", "@babel/parser@^7.14.7", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1": +"@babel/parser@^7.10.3", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.1.tgz#1e416d3627393fab1cb5b0f2f1796a100ae9133a" integrity sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg== +"@babel/parser@^7.14.7", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" + integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz#b645d9ba8c2bc5b7af50f0fe949f9edbeb07c8cf" @@ -2784,9 +2834,9 @@ integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@socket.io/component-emitter@~3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" - integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" + integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== "@stoplight/json-ref-resolver@3.1.5": version "3.1.5" @@ -3081,9 +3131,9 @@ "@types/node" "*" "@types/node@*", "@types/node@>=10.0.0": - version "20.11.30" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.30.tgz#9c33467fc23167a347e73834f788f4b9f399d66f" - integrity sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw== + version "20.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== dependencies: undici-types "~5.26.4" @@ -4453,11 +4503,16 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001599: version "1.0.30001600" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz#93a3ee17a35aa6a9f0c6ef1b2ab49507d1ab9079" integrity sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ== +caniuse-lite@^1.0.30001587: + version "1.0.30001612" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz#d34248b4ec1f117b70b24ad9ee04c90e0b8a14ae" + integrity sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -5782,9 +5837,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.715" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz#bb16bcf2a3537962fccfa746b5c98c5f7404ff46" - integrity sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg== + version "1.4.749" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.749.tgz#9869e2e258141da26a2272b58264584c3461279d" + integrity sha512-LRMMrM9ITOvue0PoBrvNIraVmuDbJV5QC9ierz/z5VilMdPOVMjOtpICNld3PuXuTZ3CHH/UPxX9gHhAPwi+0Q== elkjs@^0.8.2: version "0.8.2" @@ -8126,10 +8181,10 @@ karma-source-map-support@1.4.0: dependencies: source-map-support "^0.5.5" -karma@6.3.17: - version "6.3.17" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.3.17.tgz#5d963fb52463b73e1b5892ecb54c8f21bb04ba1d" - integrity sha512-2TfjHwrRExC8yHoWlPBULyaLwAFmXmxQrcuFImt/JsAsSZu1uOWTZ1ZsWjqQtWpHLiatJOHL5jFjXSJIgCd01g== +karma@6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.3.tgz#763e500f99597218bbb536de1a14acc4ceea7ce8" + integrity sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q== dependencies: "@colors/colors" "1.5.0" body-parser "^1.19.0" @@ -8150,7 +8205,7 @@ karma@6.3.17: qjobs "^1.2.0" range-parser "^1.2.1" rimraf "^3.0.2" - socket.io "^4.2.0" + socket.io "^4.7.2" source-map "^0.6.1" tmp "^0.2.1" ua-parser-js "^0.7.30" @@ -8953,7 +9008,6 @@ ng-zorro-antd@16.2.2: date-fns "^2.16.1" tslib "^2.3.0" - ng2-pdf-viewer@9.1.5: version "9.1.5" resolved "https://registry.yarnpkg.com/ng2-pdf-viewer/-/ng2-pdf-viewer-9.1.5.tgz#bcc9223eea96d2974f8c8377a333d45ff64a3caf" @@ -10968,7 +11022,7 @@ socket.io-parser@~4.2.4: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" -socket.io@^4.2.0: +socket.io@^4.7.2: version "4.7.5" resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.5.tgz#56eb2d976aef9d1445f373a62d781a41c7add8f8" integrity sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA== @@ -11271,7 +11325,7 @@ strong-log-transformer@^2.1.0: minimist "^1.2.0" through "^2.3.4" -style-loader@^3.3.0, style-loader@~3.3.3: +style-loader@3.3.4, style-loader@^3.3.0: version "3.3.4" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.4.tgz#f30f786c36db03a45cbd55b6a70d930c479090e7" integrity sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w== From 31676bdee7d28ae11f4ab1e614144b48f2f7fbfb Mon Sep 17 00:00:00 2001 From: yunyad <114192306+yunyad@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:25:21 -0700 Subject: [PATCH 07/44] Hugging face Sentiment Analysis (#2600) Issue #2587 This PR utilized a model from HuggingFace: cardiffnlp/twitter-roberta-base-sentiment-latest and introduced a new machine learning operator called "Hugging Face Sentiment Analysis". The inputs of this operator will be a selected columns of text. User needs to select the column for sentiment analysis. The outputs of this operator will add three columns: "huggingface_sentiment_positive", huggingface_sentiment_neutral" and huggingface_sentiment_negative" as default. They are in 'DOUBLE' format, rounded to four decimal places. Users are able to change the name based on their needs. This operator doesn't handle any text preprocessing. During testing, one HuggingFace operator utilized ~800MB RAM. Here is a demo and output schemas: ![Screen Recording 2024-04-21 at 9 50 57 PM](https://github.com/Texera/texera/assets/114192306/765c8f09-d016-4571-82f7-0217ebbee4cb) image --- core/amber/requirements.txt | 3 +- .../workflow/common/operators/LogicalOp.scala | 7 +- .../HuggingFaceSentimentAnalysisOpDesc.scala | 96 ++++++++++++++++++ .../HuggingFaceSentimentAnalysis.png | Bin 0 -> 13831 bytes 4 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSentimentAnalysisOpDesc.scala create mode 100644 core/gui/src/assets/operator_images/HuggingFaceSentimentAnalysis.png diff --git a/core/amber/requirements.txt b/core/amber/requirements.txt index a3b201b6794..05094ee5be2 100644 --- a/core/amber/requirements.txt +++ b/core/amber/requirements.txt @@ -24,4 +24,5 @@ python-lsp-server[all]==1.5.0 python-lsp-server[websockets] bidict==0.22.0 cached_property -psutil \ No newline at end of file +psutil +transformers \ No newline at end of file diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala index 016cb9a23f6..15be56f76db 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala @@ -34,6 +34,7 @@ import edu.uci.ics.texera.workflow.operators.intersect.IntersectOpDesc import edu.uci.ics.texera.workflow.operators.intervalJoin.IntervalJoinOpDesc import edu.uci.ics.texera.workflow.operators.keywordSearch.KeywordSearchOpDesc import edu.uci.ics.texera.workflow.operators.limit.LimitOpDesc +import edu.uci.ics.texera.workflow.operators.huggingFace.HuggingFaceSentimentAnalysisOpDesc import edu.uci.ics.texera.workflow.operators.projection.ProjectionOpDesc import edu.uci.ics.texera.workflow.operators.randomksampling.RandomKSamplingOpDesc import edu.uci.ics.texera.workflow.operators.regex.RegexOpDesc @@ -180,7 +181,11 @@ trait StateTransferFunc new Type(value = classOf[FunnelPlotOpDesc], name = "FunnelPlot"), new Type(value = classOf[TablesPlotOpDesc], name = "TablesPlot"), new Type(value = classOf[JavaUDFOpDesc], name = "JavaUDF"), - new Type(value = classOf[SortOpDesc], name = "Sort") + new Type(value = classOf[SortOpDesc], name = "Sort"), + new Type( + value = classOf[HuggingFaceSentimentAnalysisOpDesc], + name = "HuggingFaceSentimentAnalysis" + ) ) ) abstract class LogicalOp extends PortDescriptor with Serializable { diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSentimentAnalysisOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSentimentAnalysisOpDesc.scala new file mode 100644 index 00000000000..ac9a109df9d --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSentimentAnalysisOpDesc.scala @@ -0,0 +1,96 @@ +package edu.uci.ics.texera.workflow.operators.huggingFace + +import com.fasterxml.jackson.annotation.{JsonProperty, JsonPropertyDescription} +import edu.uci.ics.amber.engine.common.workflow.{InputPort, OutputPort} +import edu.uci.ics.texera.workflow.common.metadata.annotations.AutofillAttributeName +import edu.uci.ics.texera.workflow.common.metadata.{OperatorGroupConstants, OperatorInfo} +import edu.uci.ics.texera.workflow.common.operators.PythonOperatorDescriptor +import edu.uci.ics.texera.workflow.common.tuple.schema.{AttributeType, Schema} + +class HuggingFaceSentimentAnalysisOpDesc extends PythonOperatorDescriptor { + @JsonProperty(value = "attribute", required = true) + @JsonPropertyDescription("column to perform sentiment analysis on") + @AutofillAttributeName + var attribute: String = _ + + @JsonProperty( + value = "Positive result attribute", + required = true, + defaultValue = "huggingface_sentiment_positive" + ) + @JsonPropertyDescription("column name of the sentiment analysis result (positive)") + var resultAttributePositive: String = _ + + @JsonProperty( + value = "Neutral result attribute", + required = true, + defaultValue = "huggingface_sentiment_neutral" + ) + @JsonPropertyDescription("column name of the sentiment analysis result (neutral)") + var resultAttributeNeutral: String = _ + + @JsonProperty( + value = "Negative result attribute", + required = true, + defaultValue = "huggingface_sentiment_negative" + ) + @JsonPropertyDescription("column name of the sentiment analysis result (negative)") + var resultAttributeNegative: String = _ + + override def generatePythonCode(): String = { + s"""from pytexera import * + |from transformers import pipeline + |from transformers import AutoModelForSequenceClassification + |from transformers import TFAutoModelForSequenceClassification + |from transformers import AutoTokenizer, AutoConfig + |import numpy as np + |from scipy.special import softmax + | + |class ProcessTupleOperator(UDFOperatorV2): + | + | def open(self): + | model_name = "cardiffnlp/twitter-roberta-base-sentiment-latest" + | self.tokenizer = AutoTokenizer.from_pretrained(model_name) + | self.config = AutoConfig.from_pretrained(model_name) + | self.model = AutoModelForSequenceClassification.from_pretrained(model_name) + | + | @overrides + | def process_tuple(self, tuple_: Tuple, port: int) -> Iterator[Optional[TupleLike]]: + | encoded_input = self.tokenizer(tuple_["$attribute"], return_tensors='pt') + | output = self.model(**encoded_input) + | scores = softmax(output[0][0].detach().numpy()) + | ranking = np.argsort(scores)[::-1] + | labels = {"positive": "$resultAttributePositive", "neutral": "$resultAttributeNeutral", "negative": "$resultAttributeNegative"} + | for i in range(scores.shape[0]): + | label = labels[self.config.id2label[ranking[i]]] + | score = scores[ranking[i]] + | tuple_[label] = np.round(float(score), 4) + | yield tuple_""".stripMargin + } + + override def operatorInfo: OperatorInfo = + OperatorInfo( + "Hugging Face Sentiment Analysis", + "Analyzing Sentiments with a Twitter-Based Model from Hugging Face", + OperatorGroupConstants.MACHINE_LEARNING_GROUP, + inputPorts = List(InputPort()), + outputPorts = List(OutputPort()), + supportReconfiguration = true + ) + + override def getOutputSchema(schemas: Array[Schema]): Schema = { + if ( + resultAttributePositive == null || resultAttributePositive.trim.isEmpty || + resultAttributeNeutral == null || resultAttributeNeutral.trim.isEmpty || + resultAttributeNegative == null || resultAttributeNegative.trim.isEmpty + ) + return null + Schema + .builder() + .add(schemas(0)) + .add(resultAttributePositive, AttributeType.DOUBLE) + .add(resultAttributeNeutral, AttributeType.DOUBLE) + .add(resultAttributeNegative, AttributeType.DOUBLE) + .build() + } +} diff --git a/core/gui/src/assets/operator_images/HuggingFaceSentimentAnalysis.png b/core/gui/src/assets/operator_images/HuggingFaceSentimentAnalysis.png new file mode 100644 index 0000000000000000000000000000000000000000..673b8ea9077dacce2aa4ec76979d849cf7bb6775 GIT binary patch literal 13831 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 Date: Fri, 26 Apr 2024 14:35:23 -0700 Subject: [PATCH 08/44] Fix Result Panel Not Showing Results Occasionally (#2623) This PR fixes an issue of result panel that could cause results not being shown from time to time (#2612 ). The issue is caused by #2604. The `currentPageIndex` should start from 1 but #2604 introduced a logic that could change the index to 0. Adding a check in the condition could solve this issue. I tested and did not see problems anymore. --- .../result-table-frame/result-table-frame.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.ts b/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.ts index 09d9155faae..04d2d75d307 100644 --- a/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.ts +++ b/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.ts @@ -97,7 +97,7 @@ export class ResultTableFrameComponent implements OnInit, OnChanges { this.resizeService.currentSize.pipe(untilDestroyed(this)).subscribe(size => { this.adjustPageSizeBasedOnPanelSize(size.height); let currentPageNum: number = Math.ceil(this.totalNumTuples / this.pageSize); - while (this.currentPageIndex > currentPageNum) { + while (this.currentPageIndex > currentPageNum && this.currentPageIndex > 1) { this.currentPageIndex -= 1; } }); From b0f08d43d15f9ccbbdf941a2db2cecb74808f3e3 Mon Sep 17 00:00:00 2001 From: Bob Bai <43344272+bobbai00@users.noreply.github.com> Date: Fri, 26 Apr 2024 14:57:10 -0700 Subject: [PATCH 09/44] Save result file to existing dataset (#2616) This PR change the logic of exporting result. ### Logic Comparison - old logic: the result file will be saved to the `Result` dashboard - new logic: the result file will be saved to one of the existing datasets, user can choose which dataset to store. ### Demo ![2024-04-24 09 17 18](https://github.com/Texera/texera/assets/43344272/9e1f5084-80e9-4101-9159-24489ccd4443) --------- Co-authored-by: Xiaozhen Liu --- .../request/ResultExportRequest.scala | 3 +- .../user/dataset/DatasetResource.scala | 150 ++++++++++++------ .../web/service/ResultExportService.scala | 18 ++- core/gui/src/app/app.module.ts | 2 + .../component/menu/menu.component.ts | 16 +- .../result-exportation.component.html | 29 ++++ .../result-exportation.component.scss | 42 +++++ .../result-exportation.component.ts | 59 +++++++ .../workflow-result-export.service.ts | 7 +- .../types/workflow-websocket.interface.ts | 1 + 10 files changed, 274 insertions(+), 53 deletions(-) create mode 100644 core/gui/src/app/workspace/component/result-exportation/result-exportation.component.html create mode 100644 core/gui/src/app/workspace/component/result-exportation/result-exportation.component.scss create mode 100644 core/gui/src/app/workspace/component/result-exportation/result-exportation.component.ts diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/websocket/request/ResultExportRequest.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/websocket/request/ResultExportRequest.scala index 3b88383589c..3143ad2dc62 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/websocket/request/ResultExportRequest.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/websocket/request/ResultExportRequest.scala @@ -5,5 +5,6 @@ case class ResultExportRequest( workflowId: Int, workflowName: String, operatorId: String, - operatorName: String + operatorName: String, + datasetIds: Array[Int] ) extends TexeraWebSocketRequest diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/DatasetResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/DatasetResource.scala index 5da0a2925c2..279188f936c 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/DatasetResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/DatasetResource.scala @@ -37,7 +37,7 @@ import edu.uci.ics.texera.web.resource.dashboard.user.dataset.DatasetResource.{ ERR_DATASET_CREATION_FAILED_MESSAGE, ERR_USER_HAS_NO_ACCESS_TO_DATASET_MESSAGE, context, - createNewDatasetVersion, + createNewDatasetVersionFromFormData, getDashboardDataset, getDatasetByID, getDatasetLatestVersion, @@ -55,7 +55,6 @@ import org.jooq.types.UInteger import java.io.{InputStream, OutputStream} import java.net.URLDecoder import java.nio.charset.StandardCharsets -import java.nio.file.Paths import java.util import java.util.concurrent.locks.ReentrantLock import javax.annotation.security.RolesAllowed @@ -72,6 +71,7 @@ import javax.ws.rs.{ QueryParam } import javax.ws.rs.core.{MediaType, Response, StreamingOutput} +import scala.collection.mutable import scala.jdk.CollectionConverters._ object DatasetResource { @@ -187,18 +187,97 @@ object DatasetResource { latestVersion } - // this function create a new dataset version - // the dataset is identified by did, the file changes/removals are contained in multiPart form - // it returns the created dataset version if creation succeed, else return None - // concurrency control is performed here: the thread has to have the lock in order to create the new version - private def createNewDatasetVersion( + // DatasetOperation defines the operations that will be applied when creating a new dataset version + private case class DatasetOperation( + filesToAdd: Map[java.nio.file.Path, InputStream], + filesToRemove: List[java.nio.file.Path] + ) + + private def parseUserUploadedFormToDatasetOperations( + did: UInteger, + multiPart: FormDataMultiPart + ): DatasetOperation = { + val datasetPath = PathUtils.getDatasetPath(did) // Obtain dataset base path + + // Mutable collections for constructing DatasetOperation + val filesToAdd = mutable.Map[java.nio.file.Path, InputStream]() + val filesToRemove = mutable.ListBuffer[java.nio.file.Path]() + + val fields = multiPart.getFields.keySet.iterator() // Get all field names + + // for multipart, each file-related operation's key starts with file: + // the operation is either upload or remove + // for file:upload, the file path will be suffixed to it, e.g. file:upload:a/b/c.csv The value will be the file content + // for file:remove, the value would be filepath1,filepath2 + while (fields.hasNext) { + val fieldName = fields.next() + val bodyPart = multiPart.getField(fieldName) // Get the body part for the field + + if (fieldName.startsWith(FILE_OPERATION_UPLOAD_PREFIX)) { + // Determine the relative file path and resolve it with the dataset base path + val filePath = datasetPath.resolve(fieldName.substring(FILE_OPERATION_UPLOAD_PREFIX.length)) + val inputStream = + bodyPart.getValueAs(classOf[InputStream]) // Get input stream from multipart + filesToAdd.put(filePath, inputStream) // Add to the map for uploads + } else if (fieldName.startsWith(FILE_OPERATION_REMOVE_PREFIX)) { + val filePathsValue = + bodyPart.getValueAs(classOf[String]) // Get the file paths as a comma-separated string + val filePaths = filePathsValue.split(",") // Split into individual file paths + filePaths.foreach { filePath => + val normalizedFilePath = filePath.stripPrefix("/") // Normalize path + val physicalFilePath = datasetPath.resolve(normalizedFilePath) // Convert to full path + filesToRemove += physicalFilePath // Add to the list for removals + } + } + } + + // Return a new DatasetOperation with the map and list + DatasetOperation(filesToAdd.toMap, filesToRemove.toList) + } + + // add file(s) to a dataset, a new version will be created + def createNewDatasetVersionByAddingFiles( + did: UInteger, + uid: UInteger, + filesToAdd: Map[java.nio.file.Path, InputStream] + ): Option[DashboardDatasetVersion] = { + applyDatasetOperationToCreateNewVersion( + context, + did, + uid, + "", + DatasetOperation(filesToAdd, List()) + ) + } + + // create a new dataset version using the form data from frontend + def createNewDatasetVersionFromFormData( ctx: DSLContext, did: UInteger, uid: UInteger, userProvidedVersionName: String, multiPart: FormDataMultiPart ): Option[DashboardDatasetVersion] = { + val datasetOperation = parseUserUploadedFormToDatasetOperations(did, multiPart) + applyDatasetOperationToCreateNewVersion( + ctx, + did, + uid, + userProvidedVersionName, + datasetOperation + ) + } + // apply the dataset operation to create a new dataset version + // it returns the created dataset version if creation succeed, else return None + // concurrency control is performed here: the thread has to have the lock in order to create the new version + private def applyDatasetOperationToCreateNewVersion( + ctx: DSLContext, + did: UInteger, + uid: UInteger, + userProvidedVersionName: String, + datasetOperation: DatasetOperation + ): Option[DashboardDatasetVersion] = { // Acquire or Create the lock for dataset of {did} val lock = DatasetResource.datasetLocks.getOrElseUpdate(did, new ReentrantLock()) @@ -207,54 +286,31 @@ object DatasetResource { } lock.lock() try { - val datasetPath = Paths.get(PathUtils.getDatasetPath(did).toString) + val datasetPath = PathUtils.getDatasetPath(did) - // this is used to check if file operation happens - var fileOperationHappens = false - // for multipart, each file-related operation's key starts with file: - // the operation is either upload or remove - // for file:upload, the file path will be suffixed to it, e.g. file:upload:a/b/c.csv The value will be the file content - // for file:remove, the value would be filepath1,filepath2 - val fields = multiPart.getFields().keySet().iterator() + if (datasetOperation.filesToAdd.isEmpty && datasetOperation.filesToRemove.isEmpty) { + return None + } val versionName = generateDatasetVersionName(ctx, did, userProvidedVersionName) val commitHash = GitVersionControlLocalFileStorage.withCreateVersion( datasetPath, versionName, () => { - while (fields.hasNext) { - val fieldName = fields.next() - val bodyPart = multiPart.getField(fieldName) - - if (fieldName.startsWith(FILE_OPERATION_UPLOAD_PREFIX)) { - // val contentDisposition = bodyPart.getContentDisposition - // val contentType = bodyPart.getMediaType.toString - val filePath = - datasetPath.resolve(fieldName.substring(FILE_OPERATION_UPLOAD_PREFIX.length)) - // TODO: be careful with the string operation here - val value: InputStream = bodyPart.getValueAs(classOf[InputStream]) - GitVersionControlLocalFileStorage.writeFileToRepo(datasetPath, filePath, value) - fileOperationHappens = true - } else if (fieldName.startsWith(FILE_OPERATION_REMOVE_PREFIX)) { - val filePathsValue = bodyPart.getValueAs(classOf[String]) - val filePaths = filePathsValue.split(",") - filePaths.foreach { filePath => - val normalizedFilePath = filePath.stripPrefix("/") - GitVersionControlLocalFileStorage.removeFileFromRepo( - datasetPath, - datasetPath.resolve(normalizedFilePath) - ) - } - fileOperationHappens = true - } + datasetOperation.filesToAdd.foreach { + case (filePath, fileStream) => + GitVersionControlLocalFileStorage.writeFileToRepo(datasetPath, filePath, fileStream) + } + + datasetOperation.filesToRemove.foreach { filePath => + GitVersionControlLocalFileStorage.removeFileFromRepo( + datasetPath, + filePath + ) } } ) - if (!fileOperationHappens) { - return None - } - // create the DatasetVersion that persists in the DB val datasetVersion = new DatasetVersion() @@ -370,7 +426,8 @@ class DatasetResource { GitVersionControlLocalFileStorage.initRepo(datasetPath) // create the initial version of the dataset - val createdVersion = createNewDatasetVersion(ctx, did, uid, initialVersionName, files) + val createdVersion = + createNewDatasetVersionFromFormData(ctx, did, uid, initialVersionName, files) createdVersion match { case Some(_) => @@ -507,7 +564,8 @@ class DatasetResource { throw new ForbiddenException(ERR_USER_HAS_NO_ACCESS_TO_DATASET_MESSAGE) } // create the version - val createdVersion = createNewDatasetVersion(ctx, did, uid, versionName, multiPart) + val createdVersion = + createNewDatasetVersionFromFormData(ctx, did, uid, versionName, multiPart) createdVersion match { case None => diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ResultExportService.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ResultExportService.scala index 8b15f611cd2..403cc6f035b 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ResultExportService.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ResultExportService.scala @@ -15,8 +15,10 @@ import edu.uci.ics.texera.Utils.retry import edu.uci.ics.texera.web.model.websocket.request.ResultExportRequest import edu.uci.ics.texera.web.model.websocket.response.ResultExportResponse import edu.uci.ics.texera.web.resource.GoogleResource +import edu.uci.ics.texera.web.resource.dashboard.user.dataset.DatasetResource.createNewDatasetVersionByAddingFiles + +import edu.uci.ics.texera.web.resource.dashboard.user.dataset.utils.PathUtils import edu.uci.ics.texera.web.resource.dashboard.user.file.UserFileResource -import edu.uci.ics.texera.web.resource.dashboard.user.project.ProjectResource import edu.uci.ics.texera.web.resource.dashboard.user.workflow.WorkflowVersionResource import edu.uci.ics.texera.workflow.common.storage.OpResultStorage import edu.uci.ics.texera.workflow.common.tuple.Tuple @@ -98,17 +100,27 @@ class ResultExportService(opResultStorage: OpResultStorage, wId: UInteger) { .truncatedTo(ChronoUnit.SECONDS) .format(DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss")) val fileName = s"${request.workflowName}-v$latestVersion-${request.operatorName}-$timestamp.csv" + + // add files to datasets + request.datasetIds.foreach(did => { + val datasetPath = PathUtils.getDatasetPath(UInteger.valueOf(did)) + val filePath = datasetPath.resolve(fileName) + createNewDatasetVersionByAddingFiles( + UInteger.valueOf(did), + uid, + Map(filePath -> new ByteArrayInputStream(stream.toByteArray)) + ) + }) UserFileResource.saveFile( uid, fileName, new ByteArrayInputStream(stream.toByteArray), "generated by workflow" ) - val addToProjectStatus = ProjectResource.addExportedFileToProject(uid, wId, fileName) ResultExportResponse( "success", - s"File saved to User Dashboard as $fileName $addToProjectStatus" + s"File saved to User Dashboard as $fileName to Datasets ${request.datasetIds.mkString(",")}" ) } diff --git a/core/gui/src/app/app.module.ts b/core/gui/src/app/app.module.ts index e8095897b60..cd69a68d564 100644 --- a/core/gui/src/app/app.module.ts +++ b/core/gui/src/app/app.module.ts @@ -133,6 +133,7 @@ import { NzNoAnimationModule } from "ng-zorro-antd/core/no-animation"; import { TreeModule } from "@ali-hm/angular-tree-component"; import { EnvironmentComponent } from "./workspace/component/left-panel/environment/environment.component"; import { FileSelectionComponent } from "./workspace/component/file-selection/file-selection.component"; +import { ResultExportationComponent } from "./workspace/component/result-exportation/result-exportation.component"; registerLocaleData(en); @@ -149,6 +150,7 @@ registerLocaleData(en); TimeTravelComponent, WorkflowEditorComponent, ResultPanelComponent, + ResultExportationComponent, OperatorLabelComponent, DashboardComponent, AdminUserComponent, diff --git a/core/gui/src/app/workspace/component/menu/menu.component.ts b/core/gui/src/app/workspace/component/menu/menu.component.ts index bb25e164dfc..7a8198690c8 100644 --- a/core/gui/src/app/workspace/component/menu/menu.component.ts +++ b/core/gui/src/app/workspace/component/menu/menu.component.ts @@ -27,6 +27,9 @@ import { OperatorMenuService } from "../../service/operator-menu/operator-menu.s import { CoeditorPresenceService } from "../../service/workflow-graph/model/coeditor-presence.service"; import { Subscription, timer } from "rxjs"; import { isDefined } from "../../../common/util/predicate"; +import { FileSelectionComponent } from "../file-selection/file-selection.component"; +import { NzModalService } from "ng-zorro-antd/modal"; +import { ResultExportationComponent } from "../result-exportation/result-exportation.component"; /** * MenuComponent is the top level menu bar that shows @@ -95,7 +98,8 @@ export class MenuComponent implements OnInit { private userProjectService: UserProjectService, private notificationService: NotificationService, public operatorMenu: OperatorMenuService, - public coeditorPresenceService: CoeditorPresenceService + public coeditorPresenceService: CoeditorPresenceService, + private modalService: NzModalService ) { workflowWebsocketService .subscribeToEvent("ExecutionDurationUpdateEvent") @@ -326,7 +330,15 @@ export class MenuComponent implements OnInit { * */ public onClickExportExecutionResult(exportType: string): void { - this.workflowResultExportService.exportWorkflowExecutionResult(exportType, this.currentWorkflowName); + const modal = this.modalService.create({ + nzTitle: "Export Result and Save to a Dataset", + nzContent: ResultExportationComponent, + nzData: { + exportType: exportType, + workflowName: this.currentWorkflowName, + }, + nzFooter: null, + }); } /** diff --git a/core/gui/src/app/workspace/component/result-exportation/result-exportation.component.html b/core/gui/src/app/workspace/component/result-exportation/result-exportation.component.html new file mode 100644 index 00000000000..b3498651ed4 --- /dev/null +++ b/core/gui/src/app/workspace/component/result-exportation/result-exportation.component.html @@ -0,0 +1,29 @@ +
+ + + +
+
{{dataset.dataset.did?.toString()}}
+ + {{ dataset.dataset.name }} + + +
+
+
+
diff --git a/core/gui/src/app/workspace/component/result-exportation/result-exportation.component.scss b/core/gui/src/app/workspace/component/result-exportation/result-exportation.component.scss new file mode 100644 index 00000000000..00ecc8b605d --- /dev/null +++ b/core/gui/src/app/workspace/component/result-exportation/result-exportation.component.scss @@ -0,0 +1,42 @@ +.centered-container { + display: flex; + flex-direction: column; /* Arrange children vertically */ + align-items: center; /* Center horizontally */ + justify-content: center; /* Center vertically */ + text-align: center; +} + +.datasets-container { + background-color: white; +} + +.dataset-id-container { + background-color: grey; + color: white; + width: 35px; + height: 35px; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; /* Center vertically */ + font-size: 14px; + margin-left: 5px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + overflow: hidden; +} + +.auto-option-content { + width: 100%; + height: 50%; + display: flex; + justify-content: space-between; +} + +.dataset-name { + margin-left: 10px; + flex-grow: 1; /* This will make the name take up the remaining space */ +} + +.dataset-option-link-btn { + margin-right: 5px; +} diff --git a/core/gui/src/app/workspace/component/result-exportation/result-exportation.component.ts b/core/gui/src/app/workspace/component/result-exportation/result-exportation.component.ts new file mode 100644 index 00000000000..4a50816b902 --- /dev/null +++ b/core/gui/src/app/workspace/component/result-exportation/result-exportation.component.ts @@ -0,0 +1,59 @@ +import { UntilDestroy, untilDestroyed } from "@ngneat/until-destroy"; +import { Component, inject, Input, OnInit } from "@angular/core"; +import { environment } from "../../../../environments/environment"; +import { WorkflowResultExportService } from "../../service/workflow-result-export/workflow-result-export.service"; +import { DashboardDataset } from "../../../dashboard/user/type/dashboard-dataset.interface"; +import { DatasetService } from "../../../dashboard/user/service/user-dataset/dataset.service"; +import { NZ_MODAL_DATA, NzModalRef } from "ng-zorro-antd/modal"; + +@UntilDestroy() +@Component({ + selector: "texera-result-exportation-modal", + templateUrl: "./result-exportation.component.html", + styleUrls: ["./result-exportation.component.scss"], +}) +export class ResultExportationComponent implements OnInit { + exportType: string = inject(NZ_MODAL_DATA).exportType; + + workflowName: string = inject(NZ_MODAL_DATA).workflowName; + + inputDatasetName = ""; + + userAccessibleDatasets: DashboardDataset[] = []; + filteredUserAccessibleDatasets: DashboardDataset[] = []; + + constructor( + private modalRef: NzModalRef, + private workflowResultExportService: WorkflowResultExportService, + private datasetService: DatasetService + ) {} + + ngOnInit(): void { + this.datasetService + .retrieveAccessibleDatasets() + .pipe(untilDestroyed(this)) + .subscribe(datasets => { + this.userAccessibleDatasets = datasets.filter(dataset => dataset.accessPrivilege === "WRITE"); + this.filteredUserAccessibleDatasets = [...this.userAccessibleDatasets]; + }); + } + + onUserInputDatasetName(event: Event): void { + const value = this.inputDatasetName; + + if (value) { + this.filteredUserAccessibleDatasets = this.userAccessibleDatasets.filter( + dataset => dataset.dataset.did && dataset.dataset.name.toLowerCase().includes(value) + ); + } + } + + onClickSaveResultFileToDatasets(dataset: DashboardDataset) { + if (dataset.dataset.did) { + this.workflowResultExportService.exportWorkflowExecutionResult(this.exportType, this.workflowName, [ + dataset.dataset.did, + ]); + this.modalRef.close(); + } + } +} diff --git a/core/gui/src/app/workspace/service/workflow-result-export/workflow-result-export.service.ts b/core/gui/src/app/workspace/service/workflow-result-export/workflow-result-export.service.ts index 428a4f3beff..eab238fcf65 100644 --- a/core/gui/src/app/workspace/service/workflow-result-export/workflow-result-export.service.ts +++ b/core/gui/src/app/workspace/service/workflow-result-export/workflow-result-export.service.ts @@ -60,7 +60,11 @@ export class WorkflowResultExportService { /** * export the workflow execution result according the export type */ - exportWorkflowExecutionResult(exportType: string, workflowName: string): void { + exportWorkflowExecutionResult( + exportType: string, + workflowName: string, + datasetIds: ReadonlyArray = [] + ): void { if (!environment.exportExecutionResultEnabled || !this.hasResultToExport) { return; } @@ -86,6 +90,7 @@ export class WorkflowResultExportService { workflowName, operatorId, operatorName, + datasetIds, }); }); } diff --git a/core/gui/src/app/workspace/types/workflow-websocket.interface.ts b/core/gui/src/app/workspace/types/workflow-websocket.interface.ts index d70ae9aa106..655f2716071 100644 --- a/core/gui/src/app/workspace/types/workflow-websocket.interface.ts +++ b/core/gui/src/app/workspace/types/workflow-websocket.interface.ts @@ -99,6 +99,7 @@ export type ResultExportRequest = Readonly<{ workflowName: string; operatorId: string; operatorName: string; + datasetIds: ReadonlyArray; }>; export type ResultExportResponse = Readonly<{ From c488ef8e196ad9bc7b2ca08837ed1f8b9724a5ae Mon Sep 17 00:00:00 2001 From: Yicong Huang <17627829+Yicong-Huang@users.noreply.github.com> Date: Fri, 26 Apr 2024 20:42:16 -0700 Subject: [PATCH 10/44] Include acknowledgement for NIDDK (#2626) --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index d43a9a54edb..89043f61fda 100644 --- a/README.md +++ b/README.md @@ -112,4 +112,7 @@ To try our collaborative data analytics in _Demonstration of Collaborative and I This project is supported by the National Science Foundation under the awards [III 1745673](https://www.nsf.gov/awardsearch/showAward?AWD_ID=1745673), [III 2107150](https://www.nsf.gov/awardsearch/showAward?AWD_ID=2107150), AWS Research Credits, and Google Cloud Platform Education Programs. +* NIH NIDDK This project is supported by NIH NIDDK. + + * Yourkit [Yourkit](https://www.yourkit.com/) has given an open source license to use their profiler in this project. From e573a177370c64c37655775406bb3d50c7705c82 Mon Sep 17 00:00:00 2001 From: yunyad <114192306+yunyad@users.noreply.github.com> Date: Sun, 28 Apr 2024 12:29:58 -0700 Subject: [PATCH 11/44] Image Visualization Operator shows multiple images (#2627) This PR fixed Issue #2625. Image visualization operator can show multiple images. ![Screen Recording 2024-04-28 at 10 24 31 AM](https://github.com/Texera/texera/assets/114192306/508c595e-ae02-456e-bb93-7ee18627e821) --- .../ImageViz/ImageVisualizerOpDesc.scala | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/ImageViz/ImageVisualizerOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/ImageViz/ImageVisualizerOpDesc.scala index c9ade4a4d3d..acc39333365 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/ImageViz/ImageVisualizerOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/ImageViz/ImageVisualizerOpDesc.scala @@ -8,7 +8,6 @@ import edu.uci.ics.texera.workflow.common.operators.PythonOperatorDescriptor import edu.uci.ics.texera.workflow.common.tuple.schema.{Attribute, AttributeType, Schema} import edu.uci.ics.amber.engine.common.workflow.{InputPort, OutputPort} import edu.uci.ics.texera.workflow.operators.visualization.{ - ImageUtility, VisualizationConstants, VisualizationOperator } @@ -44,21 +43,34 @@ class ImageVisualizerOpDesc extends VisualizationOperator with PythonOperatorDes override def generatePythonCode(): String = { val finalCode = s""" |from pytexera import * - |from PIL import Image - |import numpy as np + |import base64 + |from io import BytesIO | |class ProcessTupleOperator(UDFOperatorV2): + | images_html = [] | | def render_error(self, error_msg): - | return '''

Image is not available.

- |

Reason is: {}

- | '''.format(error_msg) + | return f'

Image is not available.

Reason: {error_msg}

' + | + | def encode_image_to_html(self, binary_image_data): + | try: + | encoded_image_data = base64.b64encode(binary_image_data) + | encoded_image_str = encoded_image_data.decode("utf-8") + | html = f'Image' + | return html + | except Exception as e: + | return self.render_error("Binary input is not valid") | | @overrides | def process_tuple(self, tuple_: Tuple, port: int) -> Iterator[Optional[TupleLike]]: | ${createBinaryData()} - | ${ImageUtility.encodeImageToHTML()} - | yield {"html-content": html} + | self.images_html.append(self.encode_image_to_html(binary_image_data)) + | yield + | + | @overrides + | def on_finish(self, port: int) -> Iterator[Optional[TupleLike]]: + | all_images_html = "
" + "".join(self.images_html) + "
" + | yield {"html-content": all_images_html} |""".stripMargin finalCode } From 1ea2e20b48abb53dfdf64ee121668e4e5c3d2a0d Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Sun, 28 Apr 2024 22:48:53 -0700 Subject: [PATCH 12/44] Fix Comment Box Positions Not Persisted (#2620) On workflow editor, the positions of comment boxes are not persisted because of a wrong filter in #1674. This PR fixes it. Co-authored-by: Xinyuan Lin --- .../model/workflow-action.service.ts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/core/gui/src/app/workspace/service/workflow-graph/model/workflow-action.service.ts b/core/gui/src/app/workspace/service/workflow-graph/model/workflow-action.service.ts index 1f1b5a814fa..fecfd7237ef 100644 --- a/core/gui/src/app/workspace/service/workflow-graph/model/workflow-action.service.ts +++ b/core/gui/src/app/workspace/service/workflow-graph/model/workflow-action.service.ts @@ -841,6 +841,17 @@ export class WorkflowActionService { const offsetY = movedElement.newPosition.y - movedElement.oldPosition.y; this.jointGraphWrapper.setListenPositionChange(false); this.undoRedoService.setListenJointCommand(false); + // Persistence and shared-editing syncing for comment boxes have different interfaces. + // Setting positions inside commentBoxes here only for persistence. + // Syncing uses elementPositionMap. + selectedElements + .filter(elementID => elementID.includes("commentBox")) + .forEach(elementID => { + this.texeraGraph.sharedModel.commentBoxMap + .get(elementID) + ?.set("commentBoxPosition", this.jointGraphWrapper.getElementPosition(elementID)); + }); + // Move other highlighted operators. selectedElements .filter(elementID => elementID !== movedElement.elementID) .forEach(elementID => { @@ -849,12 +860,6 @@ export class WorkflowActionService { elementID, this.jointGraphWrapper.getElementPosition(elementID) ); - // The position of comment box is included in its object, so we only set it here for persistence. - if (elementID.includes("commentBox")) { - this.texeraGraph.sharedModel.commentBoxMap - .get(elementID) - ?.set("commentBoxPosition", this.jointGraphWrapper.getElementPosition(elementID)); - } }); this.jointGraphWrapper.setListenPositionChange(true); this.undoRedoService.setListenJointCommand(true); From c55a76ca479119f52751b9b781fd2fd0375583cc Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Mon, 29 Apr 2024 10:02:06 -0700 Subject: [PATCH 13/44] Fix Incorrect Size for Revert Version Button (#2624) See title. Before: image After: image --- core/gui/src/app/workspace/component/menu/menu.component.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/gui/src/app/workspace/component/menu/menu.component.html b/core/gui/src/app/workspace/component/menu/menu.component.html index e63b94afb0e..32dacb63a1a 100644 --- a/core/gui/src/app/workspace/component/menu/menu.component.html +++ b/core/gui/src/app/workspace/component/menu/menu.component.html @@ -40,7 +40,8 @@ nz-button nzType="primary" [disabled]="!workflowVersionService.modificationEnabledBeforeTempWorkflow" - (click)="revertToVersion()"> + (click)="revertToVersion()" + style="width: 160px"> Restore this version {{autoSaveState}} From 1de6a04e44393f23dfe75d0c27dc0135978dc58e Mon Sep 17 00:00:00 2001 From: Bob Bai <43344272+bobbai00@users.noreply.github.com> Date: Sat, 4 May 2024 14:00:11 -0700 Subject: [PATCH 14/44] Add Hugging Face Text Summarization Operator (#2645) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR adds a new operator, called `HuggingFaceTextSummary`. The operator utilizes a pre-trained model on [hugging face](https://huggingface.co/mrm8488/bert-mini2bert-mini-finetuned-cnn_daily_mail-summarization). It takes the input text and output the summary of the input text. ### Runtime resource occupation: around 236MB ### Required packages - transformers - torch ### Properties This operator has the following properties: Screenshot 2024-05-03 at 11 40 56 PM - `attribute`: required. The column to perform the text summary - `resultAttribute`: optional. The result summary's column name. Default value is `summary` ### Demo ![2024-05-03 23 44 49](https://github.com/Texera/texera/assets/43344272/9566499e-81f2-4155-a14e-7496c593e3cf) --- core/amber/operator-requirements.txt | 3 +- .../workflow/common/operators/LogicalOp.scala | 13 +++- .../HuggingFaceTextSummarizationOpDesc.scala | 70 ++++++++++++++++++ .../HuggingFaceTextSummarization.png | Bin 0 -> 13831 bytes 4 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceTextSummarizationOpDesc.scala create mode 100644 core/gui/src/assets/operator_images/HuggingFaceTextSummarization.png diff --git a/core/amber/operator-requirements.txt b/core/amber/operator-requirements.txt index 89ec61c5bb9..3e5acb42367 100644 --- a/core/amber/operator-requirements.txt +++ b/core/amber/operator-requirements.txt @@ -2,4 +2,5 @@ wordcloud plotly praw pillow -pybase64 \ No newline at end of file +pybase64 +torch \ No newline at end of file diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala index 15be56f76db..db7543ad23c 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala @@ -4,9 +4,9 @@ import com.fasterxml.jackson.annotation.JsonSubTypes.Type import com.fasterxml.jackson.annotation.{ JsonIgnore, JsonProperty, + JsonPropertyDescription, JsonSubTypes, - JsonTypeInfo, - JsonPropertyDescription + JsonTypeInfo } import com.kjetland.jackson.jsonSchema.annotations.JsonSchemaTitle import edu.uci.ics.amber.engine.architecture.deploysemantics.PhysicalOp @@ -34,7 +34,10 @@ import edu.uci.ics.texera.workflow.operators.intersect.IntersectOpDesc import edu.uci.ics.texera.workflow.operators.intervalJoin.IntervalJoinOpDesc import edu.uci.ics.texera.workflow.operators.keywordSearch.KeywordSearchOpDesc import edu.uci.ics.texera.workflow.operators.limit.LimitOpDesc -import edu.uci.ics.texera.workflow.operators.huggingFace.HuggingFaceSentimentAnalysisOpDesc +import edu.uci.ics.texera.workflow.operators.huggingFace.{ + HuggingFaceSentimentAnalysisOpDesc, + HuggingFaceTextSummarizationOpDesc +} import edu.uci.ics.texera.workflow.operators.projection.ProjectionOpDesc import edu.uci.ics.texera.workflow.operators.randomksampling.RandomKSamplingOpDesc import edu.uci.ics.texera.workflow.operators.regex.RegexOpDesc @@ -185,6 +188,10 @@ trait StateTransferFunc new Type( value = classOf[HuggingFaceSentimentAnalysisOpDesc], name = "HuggingFaceSentimentAnalysis" + ), + new Type( + value = classOf[HuggingFaceTextSummarizationOpDesc], + name = "HuggingFaceTextSummarization" ) ) ) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceTextSummarizationOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceTextSummarizationOpDesc.scala new file mode 100644 index 00000000000..cf697127f9f --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceTextSummarizationOpDesc.scala @@ -0,0 +1,70 @@ +package edu.uci.ics.texera.workflow.operators.huggingFace + +import com.fasterxml.jackson.annotation.{JsonProperty, JsonPropertyDescription} +import edu.uci.ics.amber.engine.common.workflow.{InputPort, OutputPort} +import edu.uci.ics.texera.workflow.common.metadata.{OperatorGroupConstants, OperatorInfo} +import edu.uci.ics.texera.workflow.common.metadata.annotations.AutofillAttributeName +import edu.uci.ics.texera.workflow.common.operators.PythonOperatorDescriptor +import edu.uci.ics.texera.workflow.common.tuple.schema.{AttributeType, Schema} + +class HuggingFaceTextSummarizationOpDesc extends PythonOperatorDescriptor { + @JsonProperty(value = "attribute", required = true) + @JsonPropertyDescription("attribute to perform text summarization on") + @AutofillAttributeName + var attribute: String = _ + + @JsonProperty( + value = "Result attribute name", + required = false, + defaultValue = "summary" + ) + @JsonPropertyDescription("attribute name of the text summary result") + var resultAttribute: String = _ + + override def generatePythonCode(): String = { + s""" + |from transformers import BertTokenizerFast, EncoderDecoderModel + |import torch + |from pytexera import * + | + |class ProcessTupleOperator(UDFOperatorV2): + | + | def open(self): + | model_name = "mrm8488/bert-mini2bert-mini-finetuned-cnn_daily_mail-summarization" + | self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + | self.tokenizer = BertTokenizerFast.from_pretrained(model_name) + | self.model = EncoderDecoderModel.from_pretrained(model_name).to(self.device) + | + | @overrides + | def process_tuple(self, tuple_: Tuple, port: int) -> Iterator[Optional[TupleLike]]: + | text = tuple_["$attribute"] + | + | inputs = self.tokenizer([text], padding="max_length", truncation=True, max_length=512, return_tensors="pt") + | input_ids = inputs.input_ids.to(self.device) + | attention_mask = inputs.attention_mask.to(self.device) + | + | output = self.model.generate(input_ids, attention_mask=attention_mask) + | summary = self.tokenizer.decode(output[0], skip_special_tokens=True) + | tuple_["$resultAttribute"] = summary + | yield tuple_""".stripMargin + } + + override def operatorInfo: OperatorInfo = + OperatorInfo( + "Hugging Face Text Summarization", + "Summarize the given text content with a mini2bert pre-trained model from Hugging Face", + OperatorGroupConstants.MACHINE_LEARNING_GROUP, + inputPorts = List(InputPort()), + outputPorts = List(OutputPort()) + ) + + override def getOutputSchema(schemas: Array[Schema]): Schema = { + if (resultAttribute == null || resultAttribute.trim.isEmpty) + throw new RuntimeException("Result attribute name should be given") + Schema + .builder() + .add(schemas(0)) + .add(resultAttribute, AttributeType.STRING) + .build() + } +} diff --git a/core/gui/src/assets/operator_images/HuggingFaceTextSummarization.png b/core/gui/src/assets/operator_images/HuggingFaceTextSummarization.png new file mode 100644 index 0000000000000000000000000000000000000000..673b8ea9077dacce2aa4ec76979d849cf7bb6775 GIT binary patch literal 13831 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 Date: Sat, 4 May 2024 15:58:42 -0700 Subject: [PATCH 15/44] Add Default Value for UDF Worker Count (#2643) As title, this PR sets the default values of worker count to be 1 for all UDF operators. --- .../ics/texera/workflow/operators/udf/java/JavaUDFOpDesc.scala | 2 +- .../operators/udf/python/DualInputPortsPythonUDFOpDescV2.scala | 2 +- .../workflow/operators/udf/python/PythonUDFOpDescV2.scala | 2 +- .../operators/udf/python/source/PythonUDFSourceOpDescV2.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/java/JavaUDFOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/java/JavaUDFOpDesc.scala index da36074c622..06f5b759288 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/java/JavaUDFOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/java/JavaUDFOpDesc.scala @@ -38,7 +38,7 @@ class JavaUDFOpDesc extends LogicalOp { @JsonPropertyDescription("Input your code here") var code: String = "" - @JsonProperty(required = true) + @JsonProperty(required = true, defaultValue = "1") @JsonSchemaTitle("Worker count") @JsonPropertyDescription("Specify how many parallel workers to lunch") var workers: Int = Int.box(1) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/DualInputPortsPythonUDFOpDescV2.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/DualInputPortsPythonUDFOpDescV2.scala index 7a9e84c831b..9a5928e9756 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/DualInputPortsPythonUDFOpDescV2.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/DualInputPortsPythonUDFOpDescV2.scala @@ -45,7 +45,7 @@ class DualInputPortsPythonUDFOpDescV2 extends LogicalOp { @JsonPropertyDescription("Input your code here") var code: String = "" - @JsonProperty(required = true) + @JsonProperty(required = true, defaultValue = "1") @JsonSchemaTitle("Worker count") @JsonPropertyDescription("Specify how many parallel workers to lunch") var workers: Int = Int.box(1) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonUDFOpDescV2.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonUDFOpDescV2.scala index f9cda84c63e..143992e6a47 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonUDFOpDescV2.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonUDFOpDescV2.scala @@ -45,7 +45,7 @@ class PythonUDFOpDescV2 extends LogicalOp { @JsonPropertyDescription("Input your code here") var code: String = "" - @JsonProperty(required = true) + @JsonProperty(required = true, defaultValue = "1") @JsonSchemaTitle("Worker count") @JsonPropertyDescription("Specify how many parallel workers to lunch") var workers: Int = Int.box(1) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/source/PythonUDFSourceOpDescV2.java b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/source/PythonUDFSourceOpDescV2.java index 137d2d27391..76dcccf48a1 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/source/PythonUDFSourceOpDescV2.java +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/source/PythonUDFSourceOpDescV2.java @@ -46,7 +46,7 @@ public class PythonUDFSourceOpDescV2 extends SourceOperatorDescriptor { @JsonPropertyDescription("Input your code here") public String code; - @JsonProperty(required = true) + @JsonProperty(required = true, defaultValue = "1") @JsonSchemaTitle("Worker count") @JsonPropertyDescription("Specify how many parallel workers to lunch") public Integer workers = 1; From 7d30341cb9806908559557ecfb8a0107fd3b0dd7 Mon Sep 17 00:00:00 2001 From: Xinyuan Lin Date: Sun, 5 May 2024 01:31:58 -0700 Subject: [PATCH 16/44] Introduce Sklearn ML models (#2641) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR introduces the Sklearn base operator class and the following ML operators from the Sklearn library : 1. [Logistic Regression](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html) 2. [Logistic Regression Cross Validation](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegressionCV.html) 3. [Ridge Regression](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html) 4. [Ridge Regression Cross Validation](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.RidgeCV.html) 5. [Stochastic Gradient Descent](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html) 6. [Passive Aggressive](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.PassiveAggressiveClassifier.html) 7. [Linear Perceptron](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Perceptron.html) 8. [K-nearest Neighbors](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html) 9. [Nearest Centroid](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.NearestCentroid.html) 10. [Support Vector Machine](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html) 11. [Linear Support Vector Machine](https://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html) 12. [Decision Tree](https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html) 13. [Extra Tree](https://scikit-learn.org/stable/modules/generated/sklearn.tree.ExtraTreeClassifier.html) 14. [Multi-layer Perceptron](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html) 15. [Probability Calibration](https://scikit-learn.org/stable/modules/generated/sklearn.calibration.CalibratedClassifierCV.html) 16. [Gradient Boosting](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html) 17. [Adaptive Boosting](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) 18. [Random Forest](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html) 19. [Bagging](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingClassifier.html) 20. [ExtraTrees](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesClassifier.html) 21. [Gaussian Naive Bayes](https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html) 22. [Multinomial Naive Bayes](https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html) 23. [Complement Naive Bayes](https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.ComplementNB.html) 24. [Bernoulli Naive Bayes](https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.BernoulliNB.html) 25. [Dummy Classifier](https://scikit-learn.org/stable/modules/generated/sklearn.dummy.DummyClassifier.html) Each ML model operator will take the training and testing datasets as inputs and produce the ML model name, accuracy, and model itself as the output. The ML operators offer a user-friendly interface, allowing you to select the target Y value and view the accuracy on the console. This control enhances your experience and understanding of the ML process. Screenshot 2024-05-02 at 12 42 13 AM ### Usage: 1. The ML models produced by the ML operators can be used in downstream Python UDF by calling the `predict` method: Screenshot 2024-05-02 at 7 04 33 PM 2. The ML models can also be used with the Prediction Operator: Screenshot 2024-05-03 at 12 27 01 AM --- core/amber/operator-requirements.txt | 3 +- .../workflow/common/operators/LogicalOp.scala | 72 ++++++++++++++++++ .../SklearnAdaptiveBoostingOpDesc.scala | 6 ++ .../sklearn/SklearnBaggingOpDesc.scala | 6 ++ .../SklearnBernoulliNaiveBayesOpDesc.scala | 6 ++ .../SklearnComplementNaiveBayesOpDesc.scala | 6 ++ .../sklearn/SklearnDecisionTreeOpDesc.scala | 6 ++ .../SklearnDummyClassifierOpDesc.scala | 6 ++ .../sklearn/SklearnExtraTreeOpDesc.scala | 6 ++ .../sklearn/SklearnExtraTreesOpDesc.scala | 6 ++ .../SklearnGaussianNaiveBayesOpDesc.scala | 6 ++ .../SklearnGradientBoostingOpDesc.scala | 6 ++ .../operators/sklearn/SklearnKNNOpDesc.scala | 6 ++ .../sklearn/SklearnLinearSVMOpDesc.scala | 6 ++ .../SklearnLogisticRegressionCVOpDesc.scala | 6 ++ .../SklearnLogisticRegressionOpDesc.scala | 6 ++ .../operators/sklearn/SklearnMLOpDesc.scala | 69 +++++++++++++++++ .../SklearnMultiLayerPerceptronOpDesc.scala | 6 ++ .../SklearnMultinomialNaiveBayesOpDesc.scala | 6 ++ .../SklearnNearestCentroidOpDesc.scala | 6 ++ .../SklearnPassiveAggressiveOpDesc.scala | 6 ++ .../sklearn/SklearnPerceptronOpDesc.scala | 6 ++ .../sklearn/SklearnPredictionOpDesc.scala | 49 ++++++++++++ .../SklearnProbabilityCalibrationOpDesc.scala | 6 ++ .../sklearn/SklearnRandomForestOpDesc.scala | 6 ++ .../sklearn/SklearnRidgeCVOpDesc.scala | 6 ++ .../sklearn/SklearnRidgeOpDesc.scala | 6 ++ .../operators/sklearn/SklearnSDGOpDesc.scala | 6 ++ .../operators/sklearn/SklearnSVMOpDesc.scala | 6 ++ .../SklearnAdaptiveBoosting.png | Bin 0 -> 117082 bytes .../assets/operator_images/SklearnBagging.png | Bin 0 -> 60221 bytes .../SklearnBernoulliNaiveBayes.png | Bin 0 -> 433434 bytes .../SklearnComplementNaiveBayes.png | Bin 0 -> 74896 bytes .../operator_images/SklearnDecisionTree.png | Bin 0 -> 7095 bytes .../assets/operator_images/SklearnDummy.png | Bin 0 -> 39008 bytes .../operator_images/SklearnExtraTree.png | Bin 0 -> 20903 bytes .../operator_images/SklearnExtraTrees.png | Bin 0 -> 75482 bytes .../SklearnGaussianNaiveBayes.png | Bin 0 -> 69880 bytes .../SklearnGradientBoosting.png | Bin 0 -> 100542 bytes .../src/assets/operator_images/SklearnKNN.png | Bin 0 -> 96537 bytes .../operator_images/SklearnLinearSVM.png | Bin 0 -> 17599 bytes .../SklearnLogisticRegression.png | Bin 0 -> 18324 bytes .../SklearnLogisticRegressionCV.png | Bin 0 -> 10842 bytes .../SklearnMultiLayerPerceptron.png | Bin 0 -> 128735 bytes .../SklearnMultinomialNaiveBayes.png | Bin 0 -> 34729 bytes .../SklearnNearestCentroid.png | Bin 0 -> 214245 bytes .../SklearnPassiveAggressive.png | Bin 0 -> 9322 bytes .../operator_images/SklearnPerceptron.png | Bin 0 -> 13079 bytes .../operator_images/SklearnPrediction.png | Bin 0 -> 98115 bytes .../SklearnProbabilityCalibration.png | Bin 0 -> 83338 bytes .../operator_images/SklearnRandomForest.png | Bin 0 -> 81937 bytes .../assets/operator_images/SklearnRidge.png | Bin 0 -> 24635 bytes .../assets/operator_images/SklearnRidgeCV.png | Bin 0 -> 16258 bytes .../src/assets/operator_images/SklearnSDG.png | Bin 0 -> 22220 bytes .../src/assets/operator_images/SklearnSVM.png | Bin 0 -> 17776 bytes 55 files changed, 342 insertions(+), 1 deletion(-) create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnAdaptiveBoostingOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBaggingOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBernoulliNaiveBayesOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnComplementNaiveBayesOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDecisionTreeOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDummyClassifierOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreeOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreesOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGaussianNaiveBayesOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGradientBoostingOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnKNNOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearSVMOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionCVOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultiLayerPerceptronOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultinomialNaiveBayesOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnNearestCentroidOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPassiveAggressiveOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPerceptronOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPredictionOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnProbabilityCalibrationOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRandomForestOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeCVOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSDGOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSVMOpDesc.scala create mode 100644 core/gui/src/assets/operator_images/SklearnAdaptiveBoosting.png create mode 100644 core/gui/src/assets/operator_images/SklearnBagging.png create mode 100644 core/gui/src/assets/operator_images/SklearnBernoulliNaiveBayes.png create mode 100644 core/gui/src/assets/operator_images/SklearnComplementNaiveBayes.png create mode 100644 core/gui/src/assets/operator_images/SklearnDecisionTree.png create mode 100644 core/gui/src/assets/operator_images/SklearnDummy.png create mode 100644 core/gui/src/assets/operator_images/SklearnExtraTree.png create mode 100644 core/gui/src/assets/operator_images/SklearnExtraTrees.png create mode 100644 core/gui/src/assets/operator_images/SklearnGaussianNaiveBayes.png create mode 100644 core/gui/src/assets/operator_images/SklearnGradientBoosting.png create mode 100644 core/gui/src/assets/operator_images/SklearnKNN.png create mode 100644 core/gui/src/assets/operator_images/SklearnLinearSVM.png create mode 100644 core/gui/src/assets/operator_images/SklearnLogisticRegression.png create mode 100644 core/gui/src/assets/operator_images/SklearnLogisticRegressionCV.png create mode 100644 core/gui/src/assets/operator_images/SklearnMultiLayerPerceptron.png create mode 100644 core/gui/src/assets/operator_images/SklearnMultinomialNaiveBayes.png create mode 100644 core/gui/src/assets/operator_images/SklearnNearestCentroid.png create mode 100644 core/gui/src/assets/operator_images/SklearnPassiveAggressive.png create mode 100644 core/gui/src/assets/operator_images/SklearnPerceptron.png create mode 100644 core/gui/src/assets/operator_images/SklearnPrediction.png create mode 100644 core/gui/src/assets/operator_images/SklearnProbabilityCalibration.png create mode 100644 core/gui/src/assets/operator_images/SklearnRandomForest.png create mode 100644 core/gui/src/assets/operator_images/SklearnRidge.png create mode 100644 core/gui/src/assets/operator_images/SklearnRidgeCV.png create mode 100644 core/gui/src/assets/operator_images/SklearnSDG.png create mode 100644 core/gui/src/assets/operator_images/SklearnSVM.png diff --git a/core/amber/operator-requirements.txt b/core/amber/operator-requirements.txt index 3e5acb42367..d75fc19dd52 100644 --- a/core/amber/operator-requirements.txt +++ b/core/amber/operator-requirements.txt @@ -3,4 +3,5 @@ plotly praw pillow pybase64 -torch \ No newline at end of file +torch +scikit-learn \ No newline at end of file diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala index db7543ad23c..cd603a28759 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala @@ -44,6 +44,34 @@ import edu.uci.ics.texera.workflow.operators.regex.RegexOpDesc import edu.uci.ics.texera.workflow.operators.reservoirsampling.ReservoirSamplingOpDesc import edu.uci.ics.texera.workflow.operators.sentiment.SentimentAnalysisOpDesc import edu.uci.ics.texera.workflow.operators.sink.managed.ProgressiveSinkOpDesc +import edu.uci.ics.texera.workflow.operators.sklearn.{ + SklearnAdaptiveBoostingOpDesc, + SklearnBaggingOpDesc, + SklearnBernoulliNaiveBayesOpDesc, + SklearnComplementNaiveBayesOpDesc, + SklearnDecisionTreeOpDesc, + SklearnDummyClassifierOpDesc, + SklearnExtraTreeOpDesc, + SklearnExtraTreesOpDesc, + SklearnGaussianNaiveBayesOpDesc, + SklearnGradientBoostingOpDesc, + SklearnKNNOpDesc, + SklearnLinearSVMOpDesc, + SklearnLogisticRegressionCVOpDesc, + SklearnLogisticRegressionOpDesc, + SklearnMultiLayerPerceptronOpDesc, + SklearnMultinomialNaiveBayesOpDesc, + SklearnNearestCentroidOpDesc, + SklearnPassiveAggressiveOpDesc, + SklearnPerceptronOpDesc, + SklearnPredictionOpDesc, + SklearnProbabilityCalibrationOpDesc, + SklearnRandomForestOpDesc, + SklearnRidgeCVOpDesc, + SklearnRidgeOpDesc, + SklearnSDGOpDesc, + SklearnSVMOpDesc +} import edu.uci.ics.texera.workflow.operators.sort.SortOpDesc import edu.uci.ics.texera.workflow.operators.sortPartitions.SortPartitionsOpDesc import edu.uci.ics.texera.workflow.operators.source.apis.reddit.RedditSearchSourceOpDesc @@ -185,6 +213,50 @@ trait StateTransferFunc new Type(value = classOf[TablesPlotOpDesc], name = "TablesPlot"), new Type(value = classOf[JavaUDFOpDesc], name = "JavaUDF"), new Type(value = classOf[SortOpDesc], name = "Sort"), + new Type(value = classOf[SklearnLogisticRegressionOpDesc], name = "SklearnLogisticRegression"), + new Type( + value = classOf[SklearnLogisticRegressionCVOpDesc], + name = "SklearnLogisticRegressionCV" + ), + new Type(value = classOf[SklearnRidgeOpDesc], name = "SklearnRidge"), + new Type(value = classOf[SklearnRidgeCVOpDesc], name = "SklearnRidgeCV"), + new Type(value = classOf[SklearnSDGOpDesc], name = "SklearnSDG"), + new Type(value = classOf[SklearnPassiveAggressiveOpDesc], name = "SklearnPassiveAggressive"), + new Type(value = classOf[SklearnPerceptronOpDesc], name = "SklearnPerceptron"), + new Type(value = classOf[SklearnKNNOpDesc], name = "SklearnKNN"), + new Type(value = classOf[SklearnNearestCentroidOpDesc], name = "SklearnNearestCentroid"), + new Type(value = classOf[SklearnSVMOpDesc], name = "SklearnSVM"), + new Type(value = classOf[SklearnLinearSVMOpDesc], name = "SklearnLinearSVM"), + new Type(value = classOf[SklearnDecisionTreeOpDesc], name = "SklearnDecisionTree"), + new Type(value = classOf[SklearnExtraTreeOpDesc], name = "SklearnExtraTree"), + new Type( + value = classOf[SklearnMultiLayerPerceptronOpDesc], + name = "SklearnMultiLayerPerceptron" + ), + new Type( + value = classOf[SklearnProbabilityCalibrationOpDesc], + name = "SklearnProbabilityCalibration" + ), + new Type(value = classOf[SklearnRandomForestOpDesc], name = "SklearnRandomForest"), + new Type(value = classOf[SklearnBaggingOpDesc], name = "SklearnBagging"), + new Type(value = classOf[SklearnGradientBoostingOpDesc], name = "SklearnGradientBoosting"), + new Type(value = classOf[SklearnAdaptiveBoostingOpDesc], name = "SklearnAdaptiveBoosting"), + new Type(value = classOf[SklearnExtraTreesOpDesc], name = "SklearnExtraTrees"), + new Type(value = classOf[SklearnGaussianNaiveBayesOpDesc], name = "SklearnGaussianNaiveBayes"), + new Type( + value = classOf[SklearnMultinomialNaiveBayesOpDesc], + name = "SklearnMultinomialNaiveBayes" + ), + new Type( + value = classOf[SklearnComplementNaiveBayesOpDesc], + name = "SklearnComplementNaiveBayes" + ), + new Type( + value = classOf[SklearnBernoulliNaiveBayesOpDesc], + name = "SklearnBernoulliNaiveBayes" + ), + new Type(value = classOf[SklearnDummyClassifierOpDesc], name = "SklearnDummyClassifier"), + new Type(value = classOf[SklearnPredictionOpDesc], name = "SklearnPrediction"), new Type( value = classOf[HuggingFaceSentimentAnalysisOpDesc], name = "HuggingFaceSentimentAnalysis" diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnAdaptiveBoostingOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnAdaptiveBoostingOpDesc.scala new file mode 100644 index 00000000000..70893c7c693 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnAdaptiveBoostingOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnAdaptiveBoostingOpDesc extends SklearnMLOpDesc { + model = "from sklearn.ensemble import AdaBoostClassifier" + name = "Adaptive Boosting" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBaggingOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBaggingOpDesc.scala new file mode 100644 index 00000000000..98cbee10950 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBaggingOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnBaggingOpDesc extends SklearnMLOpDesc { + model = "from sklearn.ensemble import BaggingClassifier" + name = "Bagging" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBernoulliNaiveBayesOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBernoulliNaiveBayesOpDesc.scala new file mode 100644 index 00000000000..4f8aabeb950 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBernoulliNaiveBayesOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnBernoulliNaiveBayesOpDesc extends SklearnMLOpDesc { + model = "from sklearn.naive_bayes import BernoulliNB" + name = "Bernoulli Naive Bayes" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnComplementNaiveBayesOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnComplementNaiveBayesOpDesc.scala new file mode 100644 index 00000000000..cac35f5daf9 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnComplementNaiveBayesOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnComplementNaiveBayesOpDesc extends SklearnMLOpDesc { + model = "from sklearn.naive_bayes import ComplementNB" + name = "Complement Naive Bayes" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDecisionTreeOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDecisionTreeOpDesc.scala new file mode 100644 index 00000000000..815e4047664 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDecisionTreeOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnDecisionTreeOpDesc extends SklearnMLOpDesc { + model = "from sklearn.tree import DecisionTreeClassifier" + name = "Decision Tree" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDummyClassifierOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDummyClassifierOpDesc.scala new file mode 100644 index 00000000000..286540836a1 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDummyClassifierOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnDummyClassifierOpDesc extends SklearnMLOpDesc { + model = "from sklearn.dummy import dummy" + name = "Dummy Classifier" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreeOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreeOpDesc.scala new file mode 100644 index 00000000000..b7b05a7bcc3 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreeOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnExtraTreeOpDesc extends SklearnMLOpDesc { + model = "from sklearn.tree import ExtraTreeClassifier" + name = "Extra Tree" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreesOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreesOpDesc.scala new file mode 100644 index 00000000000..8dee19029cb --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreesOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnExtraTreesOpDesc extends SklearnMLOpDesc { + model = "from sklearn.ensemble import ExtraTreesClassifier" + name = "Extra Trees" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGaussianNaiveBayesOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGaussianNaiveBayesOpDesc.scala new file mode 100644 index 00000000000..b8d378e83e7 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGaussianNaiveBayesOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnGaussianNaiveBayesOpDesc extends SklearnMLOpDesc { + model = "from sklearn.naive_bayes import GaussianNB" + name = "Gaussian Naive Bayes" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGradientBoostingOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGradientBoostingOpDesc.scala new file mode 100644 index 00000000000..f89ba74c0f2 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGradientBoostingOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnGradientBoostingOpDesc extends SklearnMLOpDesc { + model = "from sklearn.ensemble import GradientBoostingClassifier" + name = "Gradient Boosting" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnKNNOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnKNNOpDesc.scala new file mode 100644 index 00000000000..1d60f25dced --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnKNNOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnKNNOpDesc extends SklearnMLOpDesc { + model = "from sklearn.neighbors import KNeighborsClassifier" + name = "K-nearest Neighbors" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearSVMOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearSVMOpDesc.scala new file mode 100644 index 00000000000..1f3a78852a6 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearSVMOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnLinearSVMOpDesc extends SklearnMLOpDesc { + model = "from sklearn.svm import LinearSVC" + name = "Linear Support Vector Machine" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionCVOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionCVOpDesc.scala new file mode 100644 index 00000000000..7fddd2f9ebd --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionCVOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnLogisticRegressionCVOpDesc extends SklearnMLOpDesc { + model = "from sklearn.linear_model import LogisticRegressionCV" + name = "Logistic Regression Cross Validation" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionOpDesc.scala new file mode 100644 index 00000000000..8be99e62e50 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnLogisticRegressionOpDesc extends SklearnMLOpDesc { + model = "from sklearn.linear_model import LogisticRegression" + name = "Logistic Regression" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala new file mode 100644 index 00000000000..3d25195b52f --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala @@ -0,0 +1,69 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +import com.fasterxml.jackson.annotation.{JsonIgnore, JsonProperty, JsonPropertyDescription} +import edu.uci.ics.amber.engine.common.workflow.{InputPort, OutputPort, PortIdentity} +import edu.uci.ics.texera.workflow.common.metadata.annotations.AutofillAttributeName +import edu.uci.ics.texera.workflow.common.metadata.{OperatorGroupConstants, OperatorInfo} +import edu.uci.ics.texera.workflow.common.operators.PythonOperatorDescriptor +import edu.uci.ics.texera.workflow.common.tuple.schema.{AttributeType, Schema} + +abstract class SklearnMLOpDesc extends PythonOperatorDescriptor { + @JsonIgnore + var model = "" + + @JsonIgnore + var name = "" + + @JsonProperty(value = "Target Attribute", required = true) + @JsonPropertyDescription("attribute in your dataset corresponding to target") + @AutofillAttributeName + var target: String = _ + + override def generatePythonCode(): String = + s"""$model + |from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score + |from pytexera import * + |class ProcessTableOperator(UDFTableOperator): + | @overrides + | def process_table(self, table: Table, port: int) -> Iterator[Optional[TableLike]]: + | if port == 0: + | self.model = ${model + .split(" ") + .last}().fit(table.drop("$target", axis=1), table["$target"]) + | else: + | predictions = self.model.predict(table.drop("$target", axis=1)) + | auc = accuracy_score(table["$target"], predictions) + | f1 = f1_score(table["$target"], predictions, average='micro') + | precision = precision_score(table["$target"], predictions, average='micro') + | recall = recall_score(table["$target"], predictions, average='micro') + | print("Accuracy:", auc, ", F1:", f1, ", Precision:", precision, ", Recall:", recall) + | yield {"name" : "$name", + | "accuracy" : auc, + | "f1" : f1, + | "precision" : precision, + | "recall" : recall, + | "model" : self.model}""".stripMargin + + override def operatorInfo: OperatorInfo = + OperatorInfo( + name, + "Sklearn " + name + " Operator", + OperatorGroupConstants.MACHINE_LEARNING_GROUP, + inputPorts = List( + InputPort(PortIdentity(), "training"), + InputPort(PortIdentity(1), "testing", dependencies = List(PortIdentity())) + ), + outputPorts = List(OutputPort()) + ) + + override def getOutputSchema(schemas: Array[Schema]): Schema = + Schema + .builder() + .add("name", AttributeType.STRING) + .add("accuracy", AttributeType.DOUBLE) + .add("f1", AttributeType.DOUBLE) + .add("precision", AttributeType.DOUBLE) + .add("recall", AttributeType.DOUBLE) + .add("model", AttributeType.BINARY) + .build() +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultiLayerPerceptronOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultiLayerPerceptronOpDesc.scala new file mode 100644 index 00000000000..c368ad9257c --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultiLayerPerceptronOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnMultiLayerPerceptronOpDesc extends SklearnMLOpDesc { + model = "from sklearn.neural_network import MLPClassifier" + name = "Multi-layer Perceptron" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultinomialNaiveBayesOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultinomialNaiveBayesOpDesc.scala new file mode 100644 index 00000000000..c2f0caccac6 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultinomialNaiveBayesOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnMultinomialNaiveBayesOpDesc extends SklearnMLOpDesc { + model = "from sklearn.naive_bayes import MultinomialNB" + name = "Multinomial Naive Bayes" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnNearestCentroidOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnNearestCentroidOpDesc.scala new file mode 100644 index 00000000000..88293093a1f --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnNearestCentroidOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnNearestCentroidOpDesc extends SklearnMLOpDesc { + model = "from sklearn.neighbors import NearestCentroid" + name = "Nearest Centroid" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPassiveAggressiveOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPassiveAggressiveOpDesc.scala new file mode 100644 index 00000000000..978d9ebc4e2 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPassiveAggressiveOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnPassiveAggressiveOpDesc extends SklearnMLOpDesc { + model = "from sklearn.linear_model import PassiveAggressiveClassifier" + name = "Passive Aggressive" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPerceptronOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPerceptronOpDesc.scala new file mode 100644 index 00000000000..2f5e120f811 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPerceptronOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnPerceptronOpDesc extends SklearnMLOpDesc { + model = "from sklearn.linear_model import Perceptron" + name = "Linear Perceptron" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPredictionOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPredictionOpDesc.scala new file mode 100644 index 00000000000..faa177aa20d --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPredictionOpDesc.scala @@ -0,0 +1,49 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +import com.fasterxml.jackson.annotation.{JsonProperty, JsonPropertyDescription} +import edu.uci.ics.amber.engine.common.workflow.{InputPort, OutputPort, PortIdentity} +import edu.uci.ics.texera.workflow.common.metadata.annotations.AutofillAttributeName +import edu.uci.ics.texera.workflow.common.metadata.{OperatorGroupConstants, OperatorInfo} +import edu.uci.ics.texera.workflow.common.operators.PythonOperatorDescriptor +import edu.uci.ics.texera.workflow.common.tuple.schema.{AttributeType, Schema} + +class SklearnPredictionOpDesc extends PythonOperatorDescriptor { + @JsonProperty(value = "Model Attribute", required = true, defaultValue = "model") + @JsonPropertyDescription("attribute corresponding to ML model") + @AutofillAttributeName + var model: String = _ + + @JsonProperty(value = "Output Attribute Name", required = true, defaultValue = "prediction") + @JsonPropertyDescription("attribute name of the prediction result") + var resultAttribute: String = _ + + override def generatePythonCode(): String = + s"""from pytexera import * + |class ProcessTupleOperator(UDFOperatorV2): + | @overrides + | def process_tuple(self, tuple_: Tuple, port: int) -> Iterator[Optional[TupleLike]]: + | if port == 0: + | self.model = tuple_["$model"] + | else: + | tuple_["$resultAttribute"] = str(self.model.predict([tuple_])[0]) + | yield tuple_""".stripMargin + + override def operatorInfo: OperatorInfo = + OperatorInfo( + "Sklearn Prediction", + "Skleanr Prediction Operator", + OperatorGroupConstants.MACHINE_LEARNING_GROUP, + inputPorts = List( + InputPort(PortIdentity(), "model"), + InputPort(PortIdentity(1), "testing", dependencies = List(PortIdentity())) + ), + outputPorts = List(OutputPort()) + ) + + override def getOutputSchema(schemas: Array[Schema]): Schema = + Schema + .builder() + .add(schemas(1)) + .add(resultAttribute, AttributeType.STRING) + .build() +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnProbabilityCalibrationOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnProbabilityCalibrationOpDesc.scala new file mode 100644 index 00000000000..19d3f22a535 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnProbabilityCalibrationOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnProbabilityCalibrationOpDesc extends SklearnMLOpDesc { + model = "from sklearn.calibration import CalibratedClassifierCV" + name = "Probability Calibration" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRandomForestOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRandomForestOpDesc.scala new file mode 100644 index 00000000000..159ef40a26e --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRandomForestOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnRandomForestOpDesc extends SklearnMLOpDesc { + model = "from sklearn.ensemble import RandomForestClassifier" + name = "Random Forest" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeCVOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeCVOpDesc.scala new file mode 100644 index 00000000000..f12e9723016 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeCVOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnRidgeCVOpDesc extends SklearnMLOpDesc { + model = "from sklearn.linear_model import RidgeClassifierCV" + name = "Ridge Regression Cross Validation" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeOpDesc.scala new file mode 100644 index 00000000000..1dce1033eb2 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnRidgeOpDesc extends SklearnMLOpDesc { + model = "from sklearn.linear_model import RidgeClassifier" + name = "Ridge Regression" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSDGOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSDGOpDesc.scala new file mode 100644 index 00000000000..2c366976459 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSDGOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnSDGOpDesc extends SklearnMLOpDesc { + model = "from sklearn.linear_model import SGDClassifier" + name = "Stochastic Gradient Descent" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSVMOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSVMOpDesc.scala new file mode 100644 index 00000000000..a1f3507f10e --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSVMOpDesc.scala @@ -0,0 +1,6 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnSVMOpDesc extends SklearnMLOpDesc { + model = "from sklearn.svm import SVC" + name = "Support Vector Machine" +} diff --git a/core/gui/src/assets/operator_images/SklearnAdaptiveBoosting.png b/core/gui/src/assets/operator_images/SklearnAdaptiveBoosting.png new file mode 100644 index 0000000000000000000000000000000000000000..2daaf54222aaf34473f2c329db51e505d2059a3c GIT binary patch literal 117082 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 literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnBagging.png b/core/gui/src/assets/operator_images/SklearnBagging.png new file mode 100644 index 0000000000000000000000000000000000000000..debd6fec78f39bc601005e705b8f953a75e3bd6e GIT binary patch literal 60221 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 Xfum15#sA?0e=LumK9*zZ^5FjgND??w literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnBernoulliNaiveBayes.png b/core/gui/src/assets/operator_images/SklearnBernoulliNaiveBayes.png new file mode 100644 index 0000000000000000000000000000000000000000..736f56218085733bee0a5bdf8fd006006881777b GIT binary patch literal 433434 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

~R*b~^ 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%0D6d6P?(} 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 ZyW-1xt^93IF$w-}YpCg})+^ga{~ut3nuY)X literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnComplementNaiveBayes.png b/core/gui/src/assets/operator_images/SklearnComplementNaiveBayes.png new file mode 100644 index 0000000000000000000000000000000000000000..8c048f0b000d7a12aba73e6e6dab630367367375 GIT binary patch literal 74896 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

RnR=0+Vk{0Yxp2w> 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 literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnExtraTree.png b/core/gui/src/assets/operator_images/SklearnExtraTree.png new file mode 100644 index 0000000000000000000000000000000000000000..273c719535a045ff13d7b04d513c56441c5460ce GIT binary patch literal 20903 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 Juu|VS>R-_$XafKM literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnExtraTrees.png b/core/gui/src/assets/operator_images/SklearnExtraTrees.png new file mode 100644 index 0000000000000000000000000000000000000000..42c77aa5e52f5feb848f2fcfcbe2fc4fef7d54a8 GIT binary patch literal 75482 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 z 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%0D#2lz6WVo+gmJn% z#&oY9OW_MZF~%m6_-~*n|Gmap_LKk1*+c2`u+8VznhNCuKBp$eOdJw-DnpWp6XpFN^f^E8Wkl+U(y5 zjeN3@oZE_tC*6Ehk0;qb*4XBy0S!OWnYHiX+H+ED>r4tTB(Sfi^1TgV?X`ziVHV953L=4uX<&(1gKcNaKe&z&n zY9VyN861L!6pzeHusADvbydmg+7uJk-%3o*6t~*xJ((X(*&jaV(jQ3e!;Ys{PnIU& z56=nbq6{tm)>f^;##{eKSk&Gi#XxEp&~vZ5J5puDu|9l^%2fJ!pP8ElzH_ zFR=f3P9PJGTmYdTBsEPr2Z)(Y_uSoLPL`07rvw6HU@*iO$}WtxDa_sP=VUPU~x zz?@D6KQ<#GC5uN>N52^{)xl(HCZU{%euJ+NUQrgh{0x5O_Tm3;1q93a#FC~A0o-LJxL^q$z9+pna)Mie%5lNp9s+90rdNuxt%U!91KN*# zy_M$^Wruq|ekpFFd*b-elx{Tw_73_ILDkWrebPv;Q+GFykQzz-v*FmH zXKCXfy66;0YEAm<(B_*f4nO_<`U>g){C;u8pLVCKXa4ED`Toi&Psdzexg>bpnfqK{ z$sHNh%ZB)3oKn4{8UOsb^|uz^J5yYmIyJ>$NhbOfY#_nBP#~0yz0F=g*(tu=@k7;Mg0(B#m+_W9Xi?qBI{{7>;bbTes2 zWg{-w1HM}cC;reb;LlPPh-9ZZ)yVJ9+UBDdgZf6AVl)xlg1#?(dx#%x%r}CSASMBS zx@6H)xc1~J;WakP=+PQ}2&}s2_rbhP>G{*&R;zf~7}JX!;tbI^nP%X-=}!C<$l1g= zdQ32upnaXnX&b1S@FL`sfD_8nB96hCyJUMspJz7=+@`TXi^-fL*#>DV%khRPu^}ZK zRMwHc8Do$(C;JJ0wfSL^*Gt=~M~?y5c}8I3RAiP1J%?Dq5qFmEzAX9(zUJ7`Z0tym zLE2Kf>i|L5W^~uT`rq|dA|6nYb4fiM7M;h2H66A{eS!M~G!cTeTu0EtT?0oYw5FKH z>qn^0Q-VIMHWxm;4t*tF@%Put^Jw1~%?N_E=oF6{OHaJu?9J=UbAcNh4lBW%J54v< zCBR7(KfFxn^@V~AbCjb8I{U4G7gjfeK2u8G78f4D_rbJ;W2&nrkSnG(AdQ7UuArHL zK{V||rdMW3a=H*2)1sxTPkE_f@Z2Y4s(tT5z)MVXHq8==sW406h(~dmRubXw(Z-(c zE1P#HjHuiou$`|e-0FpIYG|?S$Dzoh{8emY9lTPRnFUK9?Qa@D@3KLt7O!@z$+SvMt-+;esxi>hB% zA7Szdt-YfNi87|-^&%-*(MdFB8D;G33Nj{4LYqdDj2_QttzIiLqF#zvSwFZ$wZI5S zXZ=A3D!h5p5*mh`PhqGLUZwD;E15eb6yQ!+X{pI1!3tMw1-jS&X~nbGmG zf*G-1Y`_2m8W8qG_M1fs?sT%SI#leGg z2ElNTA>pCYm%)j8eJ@*H=PkSa6|MH>>^lC2IqV0-K>6${i(YHK8_{xAD$?YnN0oWh z5|7!7Ed^mK5?A4iXqH=8fnttP9TrT37RqeC`aiqbE?>3fE>E-6PohBS=x=COhNwo} zkHb6CerrI>J2W-xJ!RZIxgi%GuVpDOdaIW7pxxjTHFk4@c6!vqEcy=32_chIIa2ud ztM%+apV`Xg0XrEF6c&Bj4bRZg4-f?;_=2fgq<`sFl>9?cdEuB9GEF9st z?NeGXYv4z8O9$sZ>&U+1y@tg{qAdHzQ29ubq}}@?caE=RFEket0F3jBMxNq<>>~5Y ze*1m8r=JdgV?Hoty5{Wo(ZE~KEyGt}CB%q$;^}Zx!N30(YJ&(Vk39d2(<|7NT_J~| z1bwd~(_yJv5FK_Uex8pYP|b3j(JB_u77HHE;gtyjeQz1O+(&+-ylH8Q{@=|?^9`vu zI~hBmo%b(Pr^LEi1s|&%poOdesEJG*SO|&3)pJ84eL_;xGvUB@CLImS{zJ?p2p5ec zCLWbt7+IjF257&K=A0FPfTO6r*bLfzVz{ExAHXhjhUn7qMBXD>ew!G9mEA4hu&m zmaQZV!SOL^U!~>;AUK-h%V*LK<=9`ZA;@z!c1{zijt6XvIKWNJaU7>nsKk>Klvf}a8bV3rgJDdDJgbQv!#W%H zGfoTKMp;ZX-L4}UotZ1fd&i6!PgS_$#+83haIN5r?tCnrOh_^d!HmQ*9Nq=f8F#J;EsavK2XH;hZzA;a zN>z%Z48v-bQ+S0=zO$KlpVp%LBA$PeYkL~;g2y%?t}WhY0@xy+!9nst&EovE?L}L) zig~%T@_?nw|9!G;ra=DW??u8b*ns@gE8luSPE#oKS$Om7r`(}eL)x4j#CFZeo_*$d z^*R><^=e{#YP@zygd#37t`c15IkHZepZfl4 z{y2{465rJ(wT1=#pB#B-FPhnzzMxpz(oY*C8iH#;PItG;CjL0a%2hpOL`_tW6;j&%5Ze)O&W##De`0Ie_d8;<~qLbqJT}n8yTBKPUSKR z*m%vT&6Cc09^bg6OLcKjk9&d)*nA z?)R{_+*wE3^Okz-EfE|3ve?)IgPG+uWTL^ipm8MkXI7RI@|xq)taZ`VqJFs0uyJ61 z@aqB0?)99V^|48I6DtL4-*Xt(SXqu^33UrjJ%r4B?M@6!TF>lPJN<>tm!HfjWn-Bn z9|#uo-u7YAo{P0MgPr`i|5nv;!|wS%(w_8IEE<2hbvKvN*h6B~p{n9u&&?+BTV!`_EUhv-%8UT{OFozy}WCv z8%{H+4bnlARha6kW1>E}rqBZEVJK!~Kcxu}cZOY>!kKLJC4gO&I-}ntphAS%n|QyP z>V9p`yxej_W4z|$5keOs!qR=;c9lfB;>s;u*Qk~;Yf18Suo_^viQ=zD*-j)$|-xXY4n z)^P*X3UlV*bDI#52KSdMd%hB}OzVpR`;nSnX`3T&@a@+8qNb=%r`87RjkEc#RdhY- zlexeTLE~B@=x(}YW~G&J0K(Ibr7b^N_}crM=1}s&xI%R!_tn7$<7{r2J4)2+)oTmD zlz9O@qFKm1vzfZ>QeEu{ZF214p$w0|o|NqO+5JH@@^;e;A2`Ov9ua6OxGbFzw3lq2l#xX^v-TkKk<@jZR$YKp>YW_9)Cu~ zIY?T3jEZidPqV(8gr~ng&!;;>(%W&Nbu(y!w}LI&M?wfCxi6lRO+>zwAue^AuNJb| zMd`RBXujCZ@wFxZeM^?~PJNQqz!cZWKXj>|+GZFSdbMAmx#djtoP2iOzM?D2EM4iH z-g0RJS#xi9#5I2Bz*|tFvFtHPo_zD~A~^1ij)Il$C|w1nzD*zfnEAAenzSEZb_MaO z((@K;eYi79;f%wC!u4Int0NGCy=Bi>*3>;HtDKqF`z=eW@A*P&p3mHNx2q9{5E4iL z-WnKMGrB-GplhtYncmSk4GCE(=_OxOw_{{13zI_n~e!uc%&E!qUfiQpIZau$}t%??~b*W5Dw< zrjt{0_rV8^D5BuvS?E5S3OOu2vANOu!{JvnN!ab% z!e_cKFF%kna-dBlTu>zMXtEC@Vgkdn&^|R(RqAZN`OwGdzH2Tj-?xhBXO|s&(@9`k zG5M9Dw!Qk~86P_21T1l)r~cWT4HYBroez zQI&5~i)}?U4Uu1f9dEC6G@SF&$^Qf~5^!{JcMDI#QF1?5&g63}q7Nb;(pfOJgsHzV z<4&k7%;{&#uDYnKdO7qJE_c1x&yL|N5;y8YwwF1E&l%>Uh%ifiwsc+SCvU1^)!^Lk zs%$@_CaEOZE?vo$T|OH&I^f?8Hk;S86Fjfb44Eopju6fkfv)ng48S>U$K z+Rj%0gXbeYuIa(x(1JL-g>v4FI_`$Ab63K@*SuGv?l#}`>Bxu)UmL1))gG%}d*tOF zmEVwAIrFg@EY#I)-_+RG=eK4Y;eO04^y&|g-P{-{ABrRDOJg; z?`FEURn9=AW$Z?!>Cs90T5?5I$aj=~z|$4^F`zaWBbok5 z;P5*%lEQ~odN_G#PU`AMTb#SSHa&T`<`<5n`1`!!r=6{XW&|7{;#tYyA0;W3`bkxP zl;AL3R$6jke-A_jog)iba3e@RFt0DQX5#|pbmf$PY(bF(snQF8)~1>L-VuET@HD7= z`^PsnXCEjaAhwWKdfRShBU`p+C=p7zg`&5N<1fea8W*@p^ns2NS*K534 z*`{E)q-$|y`=irI0a?Sy2b+bx+SW`Nt(Cb~;h$At?@?_f_4ss-IWkxihce%hY*?II z`%))~-7oD_`V!|FF+uay?p$jL7e86wjj0Ij`T8;Ap>9`vyl;9(@u4vT=`syrE&A|l z468rw9aY~n=;t5m;;+s<8Phm0WF24~v8VcsZ9h{WDNP;NF4b?-Sni({l)Y=LY^QhM zH|?&RP{xl8!?8VWFCE>&;|*Ij?CKgY%3lC!j8hToJ}y!Yw*l4ZxCoaXNgi_1^b|)} z<*Bdc_456nmNp*Aez0HrJ>tqZMai^okn;UVEAOSUnL7iOy$)V=k3H-B`qxeGpN6XkrLnTSfGoOXZx)fw8Cwml5~DN`DnNAKKIK*TF0fkD zL5gU{Id`!ZVc?tir)mKyMvzeWa2o!ZmPxPRx8p(_Ihvrb6KUeh)F9t z7I1=>-eJ4Y`rvb*qx(ZH(R=bws(GXIj{`GjSKThiCcbmYJR;+tGa8^mq`1EjLkq2h zXH0;;^QfHlVe9GrVJ+^VBu=gP(HbqZVzsVDh$U;?+uC&=aXMN7E>LNH9J$TBuHlcv z4G#&GKeq>cP6jF(?Lz+n`o{tuC45X(IH*7=e&RT6PMv6S0zwX%WiD+cq3&tZrWBjd zp0}549f|a`Gp(kz3ONQAwl{f`DR5-PqaXzo^1g4f2GK}3&uulsOV*j$Y73lbnlX}bO0U{{-Wzwxu-Yx& z&Vb=w!DPA>CDA(HNDoNmNT^wU-;DtXrfz>4!PGC=&yKBz`d9C*S zAD(??gwU(O^1m>_k2X7mGG08l3W$CZfr}W$d7x2%4=I@nH{AIsn>m^5xNGuTI6CK1n){bXv>duLG2d5GiPS?pW-FT zCvNdWd(ZL2l7mbX^k`#c-Yb2PCinq{rPW)F@rJd&N|n&Sm-SCAN&N6_*tt~>-X_i} zl+-HnW-42&(z5x!0@kK|k*_j3T_WhT&9VenMymKw)S`yPvV=mc6>~OL_QKmjOyzTz=14NK0Y;wHYD7l&V zg#A?UFy2z0(d782y-^Gboq0Z%v#*_^?-Tf@P_T_Zc}3U}gBi=L)_$x<;Cme{!~cMb zjpYgB@|lgu$b^O2;-wzFVb|qZ{o`?~hf|N*7cMbuaqPY|q!L*W%*n95Dc9_nlurKj zm;1D0r=ZhQ8~sN>nduP-YJGIL{OV1dPrAg8B}iM4)|S_ZOBo)n7a_kaI&VS5XhMR? z+g>roQZ_SF1hZ##Q&>c`JlWK#L64esOmWe^?39v`|CQIlei1iOiLEzH+P6=5c zhCJ1ymABjO)ye%DD729fZ{Y%{Xh!UVHg8Qv(k;yWE5rmb-h7$zZ~|5L z+JqUvre67yitwAu3FtnTTT+Ow>D9@N(TZdlBCo?>hpRcoU&Hh7Zuv+u?D?l6R3dCJ zR*)R!mm2y0Ly=wL@TWH)__HNIJXB7{{fqJp-V-Oc-J)ezSi^v25)x%_4|Mu>FCt(nUIUvvPA5b;k}XRT zShOu{8wqeXn3JXy;Tl!68Zq3o?7 zZ<}czfj5=A7Spq`%rYS^HB__`Y1$X^GWGS49rEa%CYDm~BjGKy9~F|0d}{zUO#o!pY8nmMu;wgZf*=HUt+88KJ@TP6igxG{7^dbVfhHhlW?Jh9m)% z?`&F==MU_Ds!{MVo7cQl0eLijtesgq7KLnHt;tcXMk7kb5d2p1_c2s-LgInlbuD^n zPa@tfoGNUf;i zVOp3&_@98maCEcV;F`Wgv#KS?TbC{(U4Njomh7 zKqcrWY|M-hMfy1OyxlO+-eKi9hO*JZ+PKWLHzF6+^jf!EM5$3o{Fy%YOdf7b=#!(F zdk$2<%Bi;Z$d9^EBh^nzhJ*yJ#F_27HkwDq<<@jg9uFDgyH%O<{3l80Y4G#~C~EZr zFQQGyIMcs2n5s%+2e;X;n_}m#lP^EpT`rX@FkjvS>quMPA$=eMC9Ia9UGw>8m5v+c1e0R?ehLwZWj+ZFAM8|!IrL6sqv7~rL*?sZDvQ1HAGsgHD5b^IFZJZU;*V~^#ctj-vFg45rsM8q~W$g8!+YL?efY7UzEPI&}(Mx;6XK#N=h2*YC9wvq6F#h z_{QVUAXjmXLeBcf)2xr*(8+JHK9nCm_a7wHIviyg=wca7<0bzY>G5Xmha%oI!%S=* zP#|#=ka^Z_q=hsr*v2ah9nF*zvEI?=!j--(Rox+3;m|hN5qF>q)h|POO1eVjR_usa0RM|$H{rP zBXIKfZxD<=i>xm5@1ovuI{C_^&yL5~)g%0>I=(5brX4a~#m%DL8RxyNuOqJ;e??ZI z7g;2_n#eqIY#HKvIQcYQBd_Im(o$7fEZHH7dzuF%bn9{^ZSeyb;mK zm!scIS&U;EytSPFS7g;=_&FH{@K1E-Eo@x0jwMRTlVol{mo`*R)SpF`&EZSBHl7yMpcs!(oNGOeEl${LdPhhR z@pe%yvpfO~Z$9bWTIk16CYj`-Lr|&|jMhSd`Hg4hh zkaTa{HBKbq8Xiga)Uqs+x{$$W&)(&&rjze*9N048z_~$SUgB%uY-3Ho7c#BUYDw2; z0+fm^lJqsyjtrz*=;%1&)lto6XYZ<;i&Td>9#jG0T=&$o@;n5yCOnRmDSEyrhcck3~ zWPF<_s8)FAPn2Cj4o4`sp?0ez?$*ACV_I692FW=^$wY!$Y<`6gy=#Q$J|u>OOQ2ov zn&-p?gyr(^dFQ9A&Vnp`q!eLVo!%d6rOyP_=W6VsH5*Cm`6pZfqv{jtoyn+9=@x%8 z!3%FK>6&N88&ZPm`61FpG9Fdd%*!=}dKM3hNe*glMLHLwK{eL0Fz4)|-&&RNmU7oqJ09po!26@v}?v}39hMb%0W#vis4yH(nMFi z*-Q^1H`nSJb2c_0rwK^|PDbp*ZMFK|uJ1ZY$RH}=5YzIQ(McLo3aH@}(Gmge0{wGD zQ{CnTNVh8OzSAOO5`<1SWGSQle87ZpyNv?o?jM~+RTmg0o>YIcd3Vd)$%*bFtc|ty z(tdDA8_7Hydt{$m??OULt+mC=>R;|@nS1rX`354x z@!$$mo<)d8kF%b=)SKkFBG2|0%z_YoYl>5tl+NCji;Sxt=zTv#-g=QivM4GCap+t7 zpP;!hW1-XcF|dBcu#1lDZi!+Y(Ch)PKS+kFQ78>+il+NSW%j6iLWiuWHAUM}b&=N= zW&W1k26Nm{^It@bbU7oq~3J!2z(X)L|v4$tichFEHO=`vq`tyrSxK=L>UqFKVWwr z1#^&cI3Ow2Z{N}|eJ#B#8?&ExmR=Qjy+JKOHt1k<3qjsJu`HrZoY`sQzBPbckv<}5Y7M0_uC}A{ z#M_Qt5q5m1Eshrc;y9P1L5oF&*;kjDud9PW2V0~{nhk0x{ z%|mH9G7d*_@*nwzg_{ZTY|1lTBX&sj8(8stYMFj>N$a!D?%LMSCN|JaPj4r0s4`QT z(l`gS9EXdH?vLFc*(v&>RCw0&ye%GZXPZkC4%f?RU<@m-rq~iWgrAfY%%13j%-m-i zi;);y)^={dF*3HzZPLhrG-^a6Q}}bj<5Ak&w*%1L(VT<5tVL%D`?REO22;~(jx zV+Ve9F@|g1GUqU)J{XQ;Z-ql{=ym{C)hp4|PSUaK;ry!CmQ>#99MnyEM}!jp?I%zw z@kSM4*_yv^usrBGQ(?!&P{p|tO$9{@WT4a|E|Nb;0&_gv65NKNfbLN9t+&r2b?82- zbxx}}gT#2{9Qg5O)4m-bbqevdDqPMsqVDTA=8 z?W(~~^Up2yp@N?+D{Ty~`__4z9{g>NOrvZbj84xWOk@EiQwo&M7D0`Hn;Gs`EB@A^ssoS-A5~akVW1Q? zT@0N{JV&`Lqz-`oCw4Ht=_s*uf1d{#=udb+O`TJG$a?EtNmhK$F4Q>i08=D24t9=? zlHJ-+nc5xsT8#6q4(6Ffs0wkXe)+edwUxXve79P0v15kMAbx^s>DqZ5^}49n9#a9w zkHb+F@AEEq$=YI}ZiyRKc`y4$5OM9b0$a4#MdfW5I$ z>YMdSG{+U&i>kPIz`Ag(?AvX%iImFrQH*PbJ-4P59WGZaKLMO_k4W`LUSPiZUjFWv zxvX{jP*$PmmN>;gSdpN*hi3SK1yp)^2zx8ys6x%YH~$jVy{~YR%D8s%fX^LD%d##X zz`gqB=saR!l}sP-;~4e^Qo*&SJO>{9ed=!N;%3sYGCTetY~gOk^U3z6 zq=TTGV^_W8br$$7>5Dn!5s>}ln9YtGEn;QQ6o!2xpi;b-l`?TGi3T$~$rGz+dlp*1 zAyT=^Ya=gSk1ABQUC|ah*+QQsp1NA_nY7-fNF5+6G?-_EKZ}E;?(;-O#QPcZpl_5x0*sNM{iF z<{=acH#%qh2uqa|&#@-08uR8|nAovUDSe z__r+G2qOOF!Xt?Ix4!KtBL4q!VL?O^-P?TRg9=*_pxrR+6E?W6v}Tsyp>^J}oKUCm zqykS;L9cG0`&3`9ycq&~L_+A40`zwhNkk-^>T=Oiga_}IJ6XZM$};xB&p5PyQgTL1 z<0MwQ{BT6Y9|iF1Ob>9{gcuLOW24-8`5TIi+5h-U+n`c366GvrQ56M)+}%AE4yGLg zE8~LvcKY%WGcxi4e?qSbH@3C=X>E6cCiVDAVQOn{ouJQ;l!GY6%Oqv*i6EAM{2vRp}VZvaYUwHY;4u z!m+kPp=W4yDO{M>pIWx0l9Ur5Ks?Q;)GC@IUwq_^AYU(TrVS7B3haA_&yqYV-UnhV zb9h-DR&q5asH(S`1W=I&CEWDt*iTxU8{pVP`P!_@&D)8T!|Tucl+gtQ=|<^q%-QDx znbe7UWmQ2w!}rcdtP{crcSg6IS*XXRv<$bs-I$m$(z9HD9Z~-vU*C9%=Q15y%Z`3X zT|T`oYgIQ%?%tJY%U!JHhySYVrSE5MdlWpSel~R2cXc3+lz2mzD(lguzN2$^i&AOh zQ8f^5QLIf7(Uy7dhx!z3-mbz(xX@#I&t^mvc)>NXR~E)CuRljLHV&crol+!2ZwU8*8Mf6DO|J-^xevpGFHu7v#16J5b|@ zu**w`!!UP@K)!oj--?v|t|oIPvW#4>!1W5P<^1Ee2ff`9Jx2)UQ@W0vy6zA4QvI+) z&I>7nIxlzaP+vHrA~Q*btHw`YW!|Xx@ZQWyJRxGEH?wBQ`+K$dz~P;80d%Y)ft9nz zTh)i>lT<#=X3iDWze7cZh32`}{FiQ%v;8hhy~=#jy3|Jw5dM8ckaUK8N%f>;xL2Ap zYt085J8ny_3|b_@(TY*bfm?;vV6KH!>w#t=g;qyh=b&7AFR~R!S&gMmxLv8QU>iDm zR2+S$f~y$a9ZZ52h#-PegFOb-`eZ1LOdWUaVXYb8uV7di;p}5OtWNW`xI2y);l8$1 z=*NU!AfN{&>gaf1(iQ)3at3ir+`|=RxvVqn+I&4UKuBHOf8aWKEG(L+XO?P&{wk;a zv(mlfQoaZ$J!bp$P?w+WqY$El%0#3ypLJ+&{qvP1@xrt-)c`KqHBn+B0_1Q4Be4rAE)G) zs%=fu!bLF9bNrk{bVjKt(*X@_BlZq-NRIdwwcdmk)fo$szu?{2M3O3~$mw?hotn?uN!BCLL}}zEv?Q z{GJy|l%XF!t}5kWm6~Nb=xjXXEvF3Bi~K!~Cub4WY@r!F3phT`aA=w>oP|9q8fL5i z;bInrnw>Yg<>f3Kkr$c2RY*mvK@JruoZj0|z3#TV*y7{(+1Ak+_4T$3@g5134#>-a z2)2t*Z7XfpH_~ZO2oRJWR9`jb1Chj$oU%EIU95%emT-n|D;!}uq9aI9FuauEd{>Uo z1=)1y&k+UZ6#1z4He!!eehKQh-97Zy+(OEsX|8YvsLAL)+o+F%GHFK_6C|%T-kMI& zLB3ZxK0*`v?&NkId+=h*7RS#%Fd)Q`fL8Kw&e3YBCUz3+2xU(aE8muo6#rA)g(E<5 z(X$N6dCdrb{#SIhGAotNpO`Ybg;+0Vn|%85SJB%IsJAgw*Ei#679A2S=v*8bljL*m zpzr7@iS9u{ItQAc1U!c1WoqQ>(q9M$oI+n+{sL@yb6H;Me|QYC@b?@nB;C*I&PiknAIm1~1N5<~tnCkv zB7qfUKRpWOAHvxa<$Dk9Mr4b4ZcbEK!o{-&-$@pq%eCOIK@2_h&jQ z0eQ<2nY=h(Qn#Fp-SK=?X-QLbp{$S_$$%nOv30$J-pa#7?Qx~vE}wuVqQ<$ za0}wHX2No)6m&xG=W0N~*03Gn_8OCegR|x6k-gdYg%hL`PGBx^+pN-wl-4)Vz zbvU|2%nEhw$v~54(IVj*YNF^G@`J7236>l2)H}2{o;b78k5Q$d$deh0JlU*KvT*!F z$_-qd2hRNVSVd ztt(9g@QEGDcM&d(=X}y!(Zb#%qiW(}JJ0aN$N)lYVZMlsBl2Zj|< z8xhVw>4+9Y)K<0n=u4X(2pqarw9}q87674y9pR%BS3%+DL-r4UpNxWlgu(6&sGcSK zFw_58eH8M`W50FOAhP7mf*v|e2Z1y)y;qmcG^TM5@wh7#l$Vd5v+1wR*>vO~j-FEx zPwz;4**{7=oDP!mP5&J{aDO0uzr&jav2=2;{-x-o%Em`6VN)(chus}|vgv9=tB}nB~jDyn4?OeQ&C)lIB=asBSI*UAIk1-ZWHnKD3(C?D46OYIV;Z-=5TIeEh?-(y>_@#w|-6Dmd8VF_D>=jHv zkaLT482PX?*#IMPXI_1=ZqF#gjZ8Z5HzJc@343?4!JKJ4uX%xRR=R1(iN+H1T>Zxk zws45O`u4_9Pam3jm6P+c7a8Ji=y~>KYPInwjVU}PiPmCmUN3i_F~VF}cV`bBMe4?F z4mhvf&biQOItXkEw)+Az=@L?FEP=0tE#5-fSNWxI*&4d{5F%%+FNzStch@tnekZ!~ zOwifZ$Dp$Wknx$&#pj`eD699>&F9gmJ_Fb+w+K5}mq*ybG?mV-gD|>E%JeExA9t!oJfi)gfiT z2&+LtH{sD2{Duz7HTboEua=OCPvQh6Vk&mcnrQH!Ww2$AEHz0qDK8j0{I~U&h3rQ< z%2anIfwph>bA7#QZB#$8#iVs!fIL~&D_ zTVviO&##`L$rHI2c}3^E93?k+y8W-Fb8&p1BAegks@5xas}^Tj4!bTGkv|w~ilw_X z;C;=K9j=a%80t7XO46!R!F698y7Kwciwc8L6w3UeS`0Dq1Hg*Ta&eE}s=Zv;(~A6d zSs?6)#$xl)<`3rD?w8N`Xo;!nhN)NhEQ|Yd%Kc(h;`7H49|-jRK(=eUO_k^`qic0$wryG1ezgh+R9mWR<&q|hzS#0mZbM%Wf>etK?@BHl#lFO267djyMp2t5!~;{k zIC6206SgE((bRQUQn*wSO{+?iym0hs2J}n6>stEXZ+P|iojZHur~cGY0<2C{EyfNe z<9Zs9#j*7hE>1`7A%fAvjQ(mlsnG=(=n3t_pf9*DE6xl%#4SeyJgjcD;(hX0)hk#h zvN~j`2T_a7*0``vJdn06OFTOC;=exs+S@6@Xg1MR)Ael_V($z~FjxC55>h8^d!_M4 zevteyd%*LeGheKu>QI=ZUFy_2G8x=Mw36RT>v1J8fe=e==?485EAuIHi6g zzo29|bi8$1O2RD3{?pp?j$-SRhoOafNxjD}w-_7e-AV9RsAaP=;i!?ZDO+2^8<(Xp z{q`jqR$y6!3x4j&o_|mn2?>FD;kkDbve?U)izp-~RI=yySLim_Gyk)M&y0}lw-@41 zlHl)2Qu+l8tG#cs3>rlZ-gI8dpQUTH*i5bBv~AZl?UPeS*VwSx+_EpmEi8-Oej+vD z=&M{YuG!u<$2~r$T$9Y4DVbwsI=Wvp-{|yG8e;&3)_Cvd7S!9i3E!z5NQK2<0y!8`i8_+*2Y^UODEG*gb9btA6A)?om2@ zCW;rU-l!`?QYH40=Xkk;NkIuX?zYh2`=Z#)!Fp`P*g6=;)!}jDgK-`kAJm zaEOdyv?a8`gZ5p5r9suKIQ2=RoTcR9M_EcNO}FbQl5|zXC!~bu?o8{n93$r1|6iR+ zsugEz%j!HNc(~`iP)bTRLZ^EL{Rgtv|R^63$ zI93E%^Nd~C+ff~o-T2(JeuIsnQs?&@!iByAx~X0?RgN=tdbjJ&V(D2~KKep@y(TZG z1hKoc^wTRhF_~{^M%|`w(SO!(tP<_k(i1uLVF%= zM}?QVo^hiyWw>C`ddGX-FwR^sftqe)jO%7t5;KBx^Z7BR)=J?dnn^GJD3m5zP8h=( z``I_3puERpz23{_6LCVSmi$uHDZ<|ob*_&x_|-T$EPG+h-S2Jx-N5zbMx>>vR~kf? zqbU99PZ2&;RGfm=!a!tw9_-=e19FqU0szmTZ|)` zmzdzzJAsl&1l@RJp(MWqw7wDUl>8516Cx>zZ3)b=RK*9MFtp8%?~jiY5@~M+$e{N@ zpyN!D^7AP55*cKuy@~86DuUbe7lB? z)Uo@z$Ln)NSnm|Sf7th2J72iZ^6jwP$G-R&JL9-vd`(HeP|#Fe_CFd_qJit1jZng7 z1?8s#MXmq+{@B{$eJ5R57W+-#JjC?EzxV(n(GUiN;Cn>5NwO>k(;?8k+G9*(h`+9T ztB{N<}xYogO#rc~FMXF<}#gT3sI|5QLC(^!gkjPTL-O!%!_GBoO=}Ex$_E8$6Lh6AlO7T-8zFjoB0#wN{LKfi< zKFLyYqhL}R?!#5|uWkSHR{}T{@PCaKMP?J5VD9e13LTve$Jrjd*`aefH#>2l`k(os*kCa=JtYZyV0VNMB0zYW4R zKp6y$Fs}bo-Ia$mb#42DwzZ>_4#KUdEk$_sp@;*ZO!hfo976BK$VEV?fGCOyDgAXI@cDFGRLzn#N5!SB2G``*7Vf592{ zUVE*z*Iw(l*4{@XwbHz7Hu(}E66yuGdF%2dl6zl!ppi5-%5}S1D?@(Mf>UCWwR7^# zj3n>(hSA0@Z6@6rp1rVAY{!X3LA6bZwSPRn)FkfypYcfP>hX0)vFEP=QJYk_=UZx` zI&RY@BUB_DWT5y9dX9F3mN7J4k>0WWV>mS4hEFyL zdmPCg$go+Yg5x_{<6A%a;I zMPEtF2MQa@+GgNtqQ&?^g>9*I>G!ohS{%S3DrNjL!5sNa|B(eH$wEVr81XhUj!dKt zjdkA&ac5RR^`r7US+KT2*Q}Pkx*=v^$slogD8*@pF#AA$iOJ1)o2>}nATMSZ>POfo zZjMciRKiI{0DE%p*tU5s>c(?}lbPPzw;0(Fjvrz;o|fcU3{XRHf>{LwyS8#-0T-MR z;ze`zYWlRg^m4l$O&AN~Frk5zUA9}-ovd>GzCj^EI$bA(AI300#QS4ng@CDCS{j-i>$8Nbj_s{@D>PZ^C= z-1bSZY11*Fl4U??sIF;aW^55@@U_71?d)4E!0S%y-g?R``-+y)%LHDWAH%*@M8Ec& z>6wzN?*g!jUlk=@IB3@!V^OM=rWDoWVcGSu$K` zGM+PP?6)7@+{8Zd^uJ$C6*FOlb@Xj#>5IKbcg`3UyewM9a1Q@$V;J%uZq#mq4@{{8 zex`>>H&graCgFJ6-{I==@#4jm|869>@qk_|a<9Ub#ffi!g_F;YI~O6}f4GQ;6p=L7 z&3}^cv;cv*zY-6f<^0IjN_e;UF~(x>o=z*02!yQKvCZx^atCBRcBW zdGRh6+Tr2xX*PHdFc$WSU!z-~!vM8imac_*;=NPzX&_5Rq#l zmI?lu4H!{paX+9X=CGm4g1ZUH-^4WXk?_vry1At;Ya$e?FIi;;*XbUgK|gL?>yvVg zAo7Y{fv!&v`uecW)Nug%l9(1Ij-DltZ)=|Y5=ememqU}ukh|%*sMTf@pZ`D{dFLUoed1Dy zWPIVKmx0=RNqxZd{*ZmAp)Q6sQumXX=Jj-MQ_o4NIh$AF>;gggM$QWOHp?7n2K{YA z)toIT2=T{f6@rClaPGx2I$NkPI0{HN;a_viK)(9OcsuJz6B{;?v?JxZN@wAE-Y-Ub zuHSxYG{J|eSb+y01k=|p(8H?OX523;ANVc+TrK4hB7m>z&}GMb$)=#F1*$wDih(=_ zzv1y$lDjta-9?uq>v^)f1ACE2p4t+k!x_Pv*)&5|@m|;}8_ZMNz9MHUB((Dzb%qr9uJ8A zv2!SE3c-gox+clP`f*a5=pa4W*KOd<6@IOXE7)y}WA{Aj(iPf5$tfgEz;8OMJU`Sf z`|;==v6fRUi^CZ@foHq+q!@G6nCth)4G-wJD3M>5AZb&I{iupX-j0zl$kVMAB$X2d@~P)cWM|6dg#di*4hCY6LQcMP zf4fr_C0ZDEw$+z&ic8jqK_^-WDYYwOYNXfWZQ2kd`L3*;LUpPZC@YX3D?@$^(HV{1 z3oeFR{_fq?l;?1Te zdLL=mkOy{Uwi@Zv9HU_a#iM)urInGVGop)>wvX0cd)Q>ru#Lax5(x#{X)jh`9J5<; zKdcf46nsv4&W4cqS8$)659Ai(4e0*XJ3RlNZzycMh%0BmNGBaKu+p7CdqqjMKp~l+ z5m)Vf;ne+uR&(+cb&iSBP`rcm&>vU?1gmw^1UJ>TI=AI8i5*{q^{N{I>j8|$Y2g6U zCnARZ#7og*gX-GRAEAhrPmw;+7s0A>y{aXt08tsP+c zLlgfdnSm&2;cGo59{|P++>>C#tmo+WE^(CYXZXj*X+F^7rv>-mc0KOV0i}0A$OH&A zAO4^n@yG>#8LJ06&Uo0^Rhw^9avlqwWy@=C_|2Jzr{~A`$9sw+k;mB1IMbAKmgE$& z10VYmtk&Ech<2(ZmL5d(I#t=#2SOcF=KtK=hJ`I7Ndf`U4w}J++FdC_;!2Y+Wi=|f!O@CNF zfl$p%>iVE71ai?oKJ-LDlXQ~vj>cJOnt!p)btSN+O^`H zY}2gQULNs9n&!4kxQE3g#jJRnCi9fV6{3a_ZR9mZ{RYMGmkVxNWv_cf9j*dH9jso< zn*e*3D?r}JEzKf1k$Tz77Ka}sp9#qf!q0tvNzbolrJCh*IDJj*S zWk&h9lwkC?5U@wWCrP+%($aBc(0*6e#55M-5>eD3@%Bc;YcB7vluefV#q_h7iD1?% za9S%^f{8lQV40LJE=NAoctkUFl^IGwA{k01@n0VV#a~(7N0M!cRTHvUF(e=0bPrG& z{Nr=ScT}ew!|heP#a;AZa4=AOZ$`nzgr^anx}1w6fVUc>J{u$6;$5+wT+S-)zW!6d1fQBX-LM-feiP2j=Sb4rlJ% zfBN<(mxUFXuNWYaa(sk<%kiPv7H1L1s5jJX<7>HZgnf#cRsg?}4^1~xofp32SXc4d z19-VpNnZZJqPeBmia-48B}owZ(lPm^9k40c-yH0~EuEvxlGMY+QNLw0%W|tbZ@;`N zj?0eOA93WsHY3Y^15-GcmfIq0jM*Y9f08O2*aCVl!uMMc;%ff+<-No)~Isf5`KiWxo%6J$nbKO6C$cEH&XOw`xa*HnI!S z6-1KiWxxeZ{i7R5WkS4-oZIKWB0BBjlhbm2Q9w0M+l_xp($V%5WiymxjJjf}^I7Q4FMd z@qwNlKO%nJh~(^&@}!YwiH~R$pGh8G3mW8Ar_JQ7y>%pUyyFi9Chg?@W0Kkk(}WZS zot)S1A33qYq_+Z^Sw1av=`6($kL|zfCSuIm-`JkIiZ^2)q9^hb{90o2inE}j$>4)( zP7?w%gh0S%Vz*>y-xko@Mbi=+_qR*BinJVN|s?M-DFHt5h3;|c%Fgm zySXh#?$-Cc#8&1`rK?O@){FUhPFFv<-{ZaEdAXg=hu z-r31j5ATcb-65W3)_l<1)7ku)F*DnT)i`!t=6UUF)qao-giE%E8sNv<+zkCrBQ)x{ zwcc=FY-g|!-LzVXHBOs%cc8v;M~!BZJA9XQeOmL=vbE|llQZP*Zqn5F%~C$FFpEXNReHK*W{#ub34M=1b41$ zHjX;?vKU&ToTJ?IcuHs4JcVz-bj@fOzOS~!Fzp{xe6v!`U+p2-4@@+T!RxQp7j`k2Vk2bKFpl^AWU%t0j^4b*m(pnUdvkJF{fusZ2-9x>~|WN;&T~jHTiWmnzXoZ zwl+Gz+^6i6JgZ0?{nnBZ*I@y{e5mw?FWh6<0zuOQ9jJu1w{+V#*1?MEbIbs9&%KD@ zM3cQds^T&oMa+H+(Q+LW(ykuPbk<)y2-IIZk{LyO#9GWgmnQ~kj5JLV9?~(qXnA35 za50;Z5Z&HQzKEQ;)4D>)jsVr0Ej8x-ni&9mf;uGot|U&`&8!H5ZQaBRRTxCy%$acY z8{*peCY6)mRk3;WhQxL_;&XP?Q?5pZ_7~FCpjC1+c`?iMg&;cL=_I^x?yWM(rml`# zdYZj?my@gr;-zr5(*CKJj-tUl^$;mU0e;>yDxdX$98*GmihS6uGXYI9$Z6(w#B&3q z=UD5Lp5zXQ0Oxo+W`r>#>G_#44%pFv&-MXe8;fwWP_kM{mI0O3w0MS{JV>X(z_-+sW5_s@|;fctEE6cQ7qTDWVtiTq%IVXlENa2 z`bX<>>XF)nNp^ITQ4@2x-5#cWqFZsfQZ6=lFCI`d>W;lwDjy3AQ72VPLL!) zH~^sVL(%#-?&&0v_M>)&k#93=uHQax6T4>jL-0qGe+9+}W$0}0rFTg0j+w%<6Kd1< zN`g~bB}5C`f8VDa$v>W@JMI`0?1x1q$(H!&=FdQND9fD$nz`)YswZxZ)Y$!IH^3ML zXISnqK}M!GY)W!CZDg+7FF{#kOT(gW0i$4o=S@2F-CXAI_aoM!%;ot8{_z=NZ!)vh z0ajVhc-kZS+K-1M#uyO?5N_ih{Mp?Eo1MR%FP)+<`ALqKY_b@7K+w?bFLR@uBlmhUMr_?( z5>uQu?{9*2U3X`xvW$2-gH|kulk%c^s|YUXSSSAP;6pdpD+RKsv4~&v zZT?Ghta02%2#Revn@#&CD(}&HnaS`qV!m9vx~{lJvtd+nZsVuhY1EqQQ5yTB#x=Vd zpb`05gb07rSaaHBYaswL09=`Z&-5zd*Gy7~ilBAPYZ~<|Zsnnx?l1xAO%EGN+YcxG z&e~iQUB+_qu!d2~Qc)$?IkWd0RtvcVx+B2zFSP-~(SqIVDxkasPYgAQ$j0>U(&7#~ z;55{MC35EJ;L)8rSNljQ8!KA|0Wa!XD~=?1Z2GNn4o58V=m3gOewINvdNRN*0Koaz zo86X7Sa(pD$P){7N_R;pZI4N6V@GfSlVaWOI-(ykz^>ODzZ_uwyEI)@up4I@;a2Sr zJh6xS&A({B)OQ%7ZPs9rMC6@H3uS}*QN3IRZ%Kkrw)zkoHqhLq8ERBA8AdATdjQ0w z1QMS*Ey|H}XpDw!B`CV0hoQ5}|7<-^1Zx=X!^@GnnjT=Be*6C>>qdsyimV$wR2FtE zqD;Ewb3F@BHpboLC+#Hn1#YS4e7D6D81W~d;`Dh4TaL&Vg3sIIi>ySS4%}|PrW`Pr^ZFB}vF%O|x1M>k3py#-x;bNqe(9#h&PlSrLV=YLy4IFQNu!#=su@+KuGh*gjbuX-ilZO(cEwAc0l3or1drf6nnxmZ z#-=%M-pR^DA-m%ByeTzK$ti?oPJ7!(#m1tP_H*=I`<{_1h`}r<4TqdLY;Gp^VlT~H zMlSuAncP8tX*Id@xtZLWRUyX%$-sX$uZY$%nQbb<9F-1=v$(_}RS}cOrJ$pOGuc3| zXNA=GCsi11sr^TQ;tdy0P&|%_e-Wo|IfN-%#V3`x#gAB%?&lV6y~!a4`@}uW@Tesdk}=)W;<&l>_v@nb>j%W zY57t!xr|*46b8p_P-aqo{SP0USL~6s^GlS%CnTwv)l4+GURE$VM;S&GM0O+L2tP+J zfOUG|ypt_?7NR}k-om~Zlo$1|;XM`kDEg&Qg+e=qU=G3o-# zllfl*VKsL#Pq{u7Cv-M0#omZh_Z$iivJ$h{rrk19W6Fv-&NyWeX8N`+NjCAw!183fkeQj$o%QUyBi)PG*`$7-1ak7VyX(N0 zi1UHhGJ7tk3Uk@|S<%7;1oA0tjO_T3Qh$$FoL3drKXs~tao(w*3zAd37iP-gf?dYc z#pW0>Fo8-v*$Wq!BnKinMb;+8-0Xa(@A!>H2PZS7Cr~kLBy2cGKmaN?|E{gt%eGsc zQozpKa$c20vUzso*?>mJDb)Qs2w1Z3t7ZplmWyg3YMSz#zSsG=_e(64S`N~u7lrT6 zV6ErKEixxily?N_si{wwi?x&F{Y(`ZrQUb|oJ}T4EetJzDXOAG*7a}3r~;vCSmzRdY-xI_&E$M=#ah|;FtTiPJ%UZW`WXJ?cB z5u1{gAR`d6u}=#W@84L(>z``DZqihIjk*-%tALv>y^gO$c+Vb^lZ`O;M$8gLrT+%b zbUlsEZhX`4ST$!XrS)LPo;o|0@QPjWSMKm@H1|mZ#@<0uF&glQo6M}qB3tg$$?DaY z^POV4C6a2HyFI&$0pAND+tRpCQ-!+>)K(#V4Ns%Ws%NLoU>kQ0iVsa`<%hnQM;#WD zoLhEQaHYd{d)O?3`VzJ{wqCzvNDX{@va9MwP4@jKChYK&4kt^PloHMOi} zS(}{ZhOKl3vBshbua!lmZ|GksLbY0K+{?DJUeq>}u&?XO*@^UhyGemHOO<6HhKyoH zlK}%keKjXLX~dgXb9t@$1glPIKR13_WXzG@9hlP;srrl>2*5tPMz6vJr`_2_kU({9 zLvuT&M{*7Q-nB)d&?RWP=JL`~#TP6!_Ffr>V&YIZB(pWrgl=Wq&&`(}6P{3&#^h%^ zQ9)Z$0#3H7LV5Fo*orPnSbMe}EB1J6o&3rnJImD z6}fbHz9HDVkyBmwW>np(s1ErO!DD@AmUfeF4r#h_0J|7F#Zgm(PX^=RK-GUn(AyC9qcZBz&{m2y)Ce+24FK3sqLO4734^4E1cfurZ9>@CEPjgKI&XJ z*y<%OeBx>xdeyoo^~u}}-@vGSP4^P*q*^=P)uoRMc7fnk#z(SIh4hkx?t%$`X2uZgEN?z6%$*}3RHqwF4O*kGgFPiAAU*JnNJN$L?!Ss_rxTslig^vJ;6 z9}mml1=(qduCS>*qLp@|o*DEZRd-F-#BHLNGxm?yG#wN;5t;mF#8stvtxbN%cZ|1D zS+Z(IOi|f-v(5h#jCz!3(jDiSvg^9XK*NP)O%02hweRaLTo0?{{;@ySHP<(~-q)8>;nP$DWSZL;lf#d_Zy%g*A&ZpXxKj!S<% z=SM_(X`d&jRb#O16-U*gG_vmEPsz99>$kr)?essFb7!yDpUDB_cVR872c6@^HTvta z?zQ(0Ow({_PkB`~SS9D$9a!eD=x%ydeOY($y>sJsUu-DiWasAgG)WrR>zO^eEs5ej;@2`4Tn|iY8epf?_loKfi{gpd|OW#z_u!uiXbjsmjt8=1W z{o%}12a74+N~5G)yVlg+zqVd()>(s<^iL-j9W<%ld-R94OV=w6hcfSN4>Ie#J?{KR+)wRBXBGV>WgD7r)!j$_x^$i^|Gu`WsdD z7k`@+^x*Lo`lpXu*>>NnvFR#1bF}>U_k9N4KW$48Pu+H%!daH*B9;QW#$Aae#B6rmWPK;}a+>t}8?{gYMhT`h2wkR~rpZ zub!--^bzYpvl7g#G>;;_ZHJXm{xS7=5FveLDjog8`7qwYd&@EINmUkTs&jF zeA~mTPaXLF*{SI7Z|`S)@;ZK9Kju*HCt<_yuavDneeChi9z}i*%Y7NCuYcg^Jg-nO zhheRuUpTPOObYf|)NeAKA--myWx>zZ)zLq5Jw`#(2CJ$cevlKB1g@sg)` zwn7)L^~%!>qqRsoYUja)L&t5i-i#r?P<}~Nw^@D15tV7R@xdk0@V}>sTgl2gjwaur zWAkiJ$&i1IO;haBWo-{5jGNyKMvZYERN*9M|J7U*!Sg5M<<~bye)i9?{FLpr@XNsW zOns$H___@2GwRQOFn!OD6GJ66pN4>8;G zCzp1OB^O|nW*_B$=hI8QaHpSca!vchm%XPs$$~S^j>SViIyN3YQoBj@NOAG>pPoX& z8e$8}ZPyIGBcFjKWqn_@#BGY&rMuPe-b(a;mepA=TgRk1rk5gG|Hk=-8cR=G9)-sZ ztO&fbvbXLZrIHmZ;3chY$);Jh)FbB`!^ZZVNfD2mgzrJ;Wa`C>twS{daptLCABpC4 zn#A(_f&I_&j)(bEFMo`A*7W9Zfwe);3f>OOZ_aes@$9i<3(bMp>(K|c)|4;bzR){u z(1iM0k>$&8rWOdQ{dF0cY)pUG5>xQbTlHC|ig=-OWtr`^^dJ<`v11ml4%+MISipHx z-<;lSGLv_*r{2A^uqbv#;VX0b-r8u!qm{7nYGj+V&Or~JqrH(rj%%?}?d!~04(}~a zsH3+nQ3|bHl%k|W+s0h;rY3{-_W|*f|6Z%TGO&6^SA%{S$}zgGmFu49-uuytyd97p?EUjHyt`=v|L{QDQNJ zf4XW~+2`d=l#%^%P|U3fU#Vm*p!*DxL66FX_X=Kv>a@UU8Fhv8u+r_qp>SDv(O%gUnW!?f?TsD)y-QhwzMl{P08t=;Ws-vt$UIcJv8zHH#)zE}5_#pt=X)C##@ zflPHcSi5GwTxXdr?L@nuH~#u|6Y9}gTZZ3H*e6N|vi$FnxqM#+GPBQj>l_`fRS(Ii zEK_|O7Wv}Esc_DHS_H1!K6SmP^WX`!ivc={8TkM5X_K4Ha}E*XuXR5sJ9f!VC>eFS z3)!r%-$6yTtE~O13T37*osH)GZaH%~|5yto={pwx&j-bx<5JEw+E*#OObm@ajGQNS zjOja60S|>b(n3S0Qm^xT-I?$LHGQ5hg&e$Vtz7q1S}PQVE7Ud1pu{p>*t0IGp`5*L zd+r=~s8+k7MSan!pu{4YRTUP3DQ3Kmmb`RT?XU9)gv4nBp>z?=_weRK(e!6kG9O!zHxB{5Z1BacIlHo9x6eJ4c>E=7d@ug z!knQCS(*W-+_K?I7Q4vs$_R6|*QQ{v4|O+^v&9)x1%owbFR!z1`{3fqOG^xoqDZTn zd!Ke`hfK}TZZ2%i6YdwhwByMN{iW17=rVa8R9--ah+0`_9M2PV){fut%ZHR7$Tyt4sn_i+3Z9Q`@4z)^7cRPt?HalrN zKszc~LhWem^^Nnkt(SFN^H2Ki&5xeB^k1PxUM{mytyp=j5+>QGr}2zd;S|cVf1JBA zcaK`oSB1ddeS?DZ*Nm*q%nWMBmp|~YH&KA3y5=?YZSo#}UP^lM$yhsNe9?|4)_MJj z<-EGa_>9uVtk_X+P9+X5Kf&99h}Gf456o{o3xKSYHSjqhg|~O9Y6CGfbq(t=r+&Ef zn<%1hLol5CCohP~`wXZBK`PA2x0iTt-s3+gK=ZsqW^gnMrd~M%uU|n$)o(D1wv(k@ z)t+T$m+ptGvKBbC{hsF6x-7pz0h&|I6cZCOpIn0Jy>(J|{aC~?qpkUHsE0(LBy7g6 znNy^|J6`v2SC{%1N5DQ6@f;H+wBjgo!I;j5OY16hr>@UH3&Iz?{st|=!}H1tivNIT zTAR3Dq-E|yPxtot+(ia@anH3YCs0B22F>{^#OG==86Nx2${ox7J2FGz2Gw4-)9wfr=x8yo#DbM2KH z@n}cgLYlF$g?DI+n$p?bX>~eY+XFc{lCyZhn3V0S(VOZW zB*skb|9HSc|0wSeF`aibYw>LWV~ktQ`!@F=;!us+F6PYjpnvl%R7#YvowPk-tpCxz zAJdiRxfI5n^nddG{JX`bedZbT|9u(u|N9vKpBb_LtKQfZPBmx)aZv0&AJxw2FVc3+ z_sgmY1)`#_)mI~6uu0CfH_pU03n82b3EF^$2KqU@u_rXnEQZ_@9^NV)_+~(~sJi-D zGU|$VmIz~*Ry^Qh$aCC39V_Tb+G?L^TFik2-j6>u%OYN(Jt-;mu8B*G{p>#@0JmA~ zf9cXMEEm_%sBO@js#Kj3r|3K=Y3RzHFcqu#3#GcpHOrYei7A!5ZfI_bL|1Q0dp@hHnFd?W$ls14 zeAoFxsv1?8phYxt?ZwBl|MnWiQ1>N7(K(B7AY;UAp-#vo!R(XHV1$y*Vuwm^ zNx{-TmB(TgZ2ED8I6)&2Bj^1~)uAJAeZW!Aczk_^Z~L1PEKZj6dBE4`WB|lhBugSQ z?KR?!f<6e$@Vw@cq0+u0E@+K;YE<-+PZpf|#^}hX$Z2a*Fowc1`mPp!;3Lma*Kt=) zOgi@s0{*cA61Db6DwD;74q&Wrd?$GjPG!)0Oz88K>dH3uIDhoV%IF3U@hhcvRhs9b z&kK!WnjUJH7=Dnf-&%nPy>>S`)>%EMtbAn^m>Ww6p|e`Q2H$s{ON%pwOMG4Qqwfdm5CYPY!OV6~RKR={9HQ4rg;C zwr)C)PXU`Ryi51#Q+0$B*(0}B&B$Dlo_Rc`ud!8BR0-{8voU=?dVXj>!s6<0>;Pex z-VH7ioG{@ZU$bL9yEs-^B~j#Vj`QtCSP5{glWTWV974*j&>q@Vr*9aedll?$*Igjl z-{;)z+S{AG1k>4sJ{Tc6S)WLgy0=j(K~2%;@Xzln9~|}pEFJr4BXiPjndvnyb*`m} zb%sNa?l|Em23)w&QwrC7=?XCS@9&E5i22gmS_EB?`m&~neJd>NI=-BN)H*&8!;(D6 z*v@64JTk-3sWs|Lc(}dv{B4=4?Z#uYpZdQ8)+_v$jQ8dsG47(6%fyE9?eClPjQ70U ztKRluM)z|e@zK~{|NMDr=Z(bn)pL%J$yw?m-Pl4B>dQh=#H!Z@M;(!LXnALn7;~mx zX^k7kkUKv@LXMK5s`C$8R6(ZyiDfCvCVP5b({DO%^F|7pN0+Z;`K6$S zSJN{g_L#MklZ~uTsOMFcA2;WT%}(wQbZmu#ccZfI!2>FZ?E!JPCJ z+J@GOD{`fZ%8H83+(gna#^KIrM5LW{?w^i_YBa{Srspl@buvM(>hR=**>PP*{kq$- zyD$m(fjemv#;k*0lNWS33xEyieze0MEw#4%$J};k*7bjmvAeUaNK9pVd~2HLc#DZ} zLRElsc^|8aB2$T^vgJcHpY#Gvb!g)wx=XFHgae%V>OwCxxmeZbTcD_ZQXK(x&Ez|mUoO`h*2*$&c45dzLg0HTRcwuZRm41Y+-TVnR*EW%bcxi1;)GW-k=^b{&8SE%mv0$bA)Nff%~vORdP-nxc61dm$i+3 zZ&@PBeEJhPC&@YJ2A~m-Q%;1jt1Zyi!E+_IjrpOVG1Qa4H3&wWA^MV&#fe~Pwx#9+ zKPT#5&rLX+1?@e?vWX$;F=KsU>8lr3a3HZk(mIz&4iDKYWGk>zQ)9US!JHi(_3T9Y z&MejT;2Srjb>7iWdB#Eny9dO@Dx~Vkqg$#33JiWMv^QMQwjwb z;_U*=1)gqf&m0 zcA{>g*%RH^h1O#+r(5g(KE1H5+rs_abMho^`3FghC=|K6ly_pLkIj8qjarde%A+x+9m(vJ-$cWcGKYcIxVdO`f`gSBi-n+zWW4+=L`MZb6I~SCS_wo5thI8UOIr;%*ok@Jh>@Q?$Veb&t@QFdH05w*eJc{)y>VN&U^5ULsi6& znkjrLPqh4NyrP4X3vRK05P=H|Lw`C4k7k&r{j{_{{10=B7owXXpqThNUeMQ(_->ar zGqo79;c{!354VyX3)`X)l{T@Mp)vBa(824?LGIW?Hj?FPs6xDS7_C)WTUhuuTM+E! zM!Iveef3=v33t8Dv3Fi0#l}SlS1ENe$^kE22K>{;F3)a&FgP7f9r-(QXJE40I&qbR z*)hK+%I~5bI{h6ok*?*5kk{S4zOqn}w}#+FDz zfwrzo<`CxWZq$RX3pgbpa|J*UYIqWVCZF9mRNU~TSDS=>J zB<2oMO~f#P@5RRA?yog}Yrh$DD-Za9rRcQ8A^x_%n#noe;=xzZlG8tTaE$Kc;dDn*rGwF)P@+PNiMb2L`~_?P*VudbgA`OCx zY-oS!uTpUS8f>PGj021zMV$)mt)E)Igs0=EpqI=SnACN8Bt`I^uri~pEWRH{P`Zj_ z6~`vjq82}X>uV|b+NIi(=);Up%3Mgy*()!25>%XffbU za?Hu0Gof%U<>xk}Bv->I3u9UGR%C=?cbc|4Z$2?C~mm5RjCg>2HsK~4znhA zplxVy(OOL?2KJO4SZj`O!x@f(I>0+PlM9K=ub47F^%2w0DH=nqhrmjiFMy=LXJsg( zMbJK8ZP;x(b$t&#-Uf?dD-#PgctVAQG+|7ZxscU}jRr%O zf2RUsF}0i8v_+vk>(Q56AmS2FwnEf%txF;Um8XM++D+B1d&(>DujReG0x1DyE=Pcc zRz@Q>2e;vU&NzB`%eChm1eA0Mi>-G0$>9$sVQWr0yw#^sd)1H4a8+a2a)-N zid=c}xb3pO`re*{azu={THmkx$Scp2d6?}e;dH9x;-{TW*tFw_AH%IpX3%mqjooowSZ;E!V6-sZ9E+8&wTw|jqS8m02M6>s&5SY3N zcqeIVPiv0+_MA9y;76%rQ}61Zt8AHWIZxcMHaC6ouo%CzK=1Tnbjz+t-CvxjvI*uN@lNR$j zlqcv#pp}?8G=#rEdzPUBpZ6B6G^7;X3&PfoM_ML|B%OGWQiJ#AZ~uI>V*&C>^tV(V z2@{dsHy~U!j+K05%cHNmAa+Akk;dd_bB&0=K9bP7^Jk^>{F8T(z#CZ!C+|_-mXRbw z^zrA)1Cq^~ff7TIb}0`FwUIT&C~YxNmG?O@H7A$%jJ;z(sF*NDFX=P#k8Us4SN<~C znUWx}eml^oj2EA1tzjD(uSRJlNN!x#QF!>k+;iH@y033xE`{QeVNX6wXS%1^_ctHP zMUDFAkm=wSUMlVC;jV)AFQ28>3%jI@hs5Ppph7O^jCpmQx~j zoK*5XLxj@tkPILbTF#-oUn&BKbXSD6wWZEUUyKqaJD2nWqi>WUkYxVHr&mqb&L+I` zLXoRRnKbX_qb<_O+FIZ7GJ|%ypnxmz0jiYj6c{4tXvpK1_rB*g-t9IbYK%$h&S5Hx$iz`BGlyWMK*@C7eD{n73~@fAmc(4=I%@KL-J?HD4g&& z@Qs1RG4;u~b`?v~;$?$h;V=_XF7TA>|Dw-zM%$d6}Oic*@K2b@JuMH zn7jh{HFs>vzW2S*@Pz(VCb$}SZ4=z;)c7~Y6!EiM-bAYD8qP>SMSZ*ht~4M(i2hg? zk*F93?pE;ZB>jk>g9H9+e%u3ublwYBx&2x@=Lo5NH2U`4vi))bBF$sRu%;tvA=!0! zQAOc3K8Z&J-OmUSw)Jrrd(MzI#1M9eEcDppkI9-!>VE(Sru7W&AGCmKlQD&~i;fNA z45xtH5LT3X4~@c5SlxL`&)%Oi?&aM|t!isW?_rT7;6YTVZ`AkEqEzM?;uWEMIiuc< z(1KyiRMO5YGt}Zc#@Whw>WPk?@QA7>^Qmebu`h8b$OPAdi(`=ur2GqG|D={Y9n~jb zjgO*0KZ9QdK?H~VDmu29d5=cOF-UY_)Q84y|3Vi#p?B}Thx=X=920XTFVM{gyP}&t z^+ZO8%*4wg80QVlRq^A*w4R{-qWKY&+|rzZSAj#HF-eSdnRI-4W3=HXCIP)UAlqbK zz6mms2`CmHQL&izz57wW&H9Vzk@AlyZ~GH{8&?hrI!iKzmVc$5{Lhfnhl?*jQincQ zMSboy;=}!LbuhfZn8QZ{e&_LWSj}y-V>2PH-pq%(l(Pu2)_P@bD=BQte)!zrOusF$ zxy&qA?J=0H5}6ugi_n|~3Hvv^90#;Gqli47Q>lvTv8|VYn1k<6OC!mfEvSmu;QRzI zF5vw1u$V-1uv4o^Yyc1fF=UtM%+w5XUX;OOOwW=@Z$=~6ttPO+5F>>?LqUUa{m-NW3Pm7b;GkZU#6|i4%s}3;oSP%y0g=h% z)+R?(S_H%>S>}nd7Dj@$0M$C)K>-f2Ib#md(+PzOQowZb1Y3gWz5y>yAa64;g(F=C z*Jf=1pV-xyw&MN!LhOuvH18NN#Efr-Ggn9d?V$>3J5&E=HE5r}hYTJJ%)X1HH;H z8~9=DgUq74iu{7o93HvK&h7o_9q2R{AqOw&lpHDl4_}5lIvjNJfqFDy%H-Pp&W@sb zPEX$$JTv;ybKAH(H?$HAU`Pgl-{=>bR+lZ9`Vz1#V{KD+qpjeU)J+pj<7_(gM z*nb11-@Q26A!GrpWqAGKNMbw!o*}pwRiC+%ZKIR)ZF;{NyGkN{`w2OdWPC5oSx_vr>Q7UpRF7B-E9(XYuCm(ly<30%3~GFm9y}P%2Dmaj0Wc zbYQ4Htr=l2mJ>OWb`OF`)XOe)nP>S?K&p#2t7KH2rmuQsZ1a}x#>-A2lXWIXoJg?C z+KHk?Mve$c<{eyhgviq-j5UCo2xnYY16hssrrvfzv8WA@H*!Zq;A5ueNwVN7@7fA9 zHt+^4m*Qk*_Ler4q@(jSJ&OvOLK2Z%rRJZEv0rbNI#_8)x<}-8M(;n6 z1rmEREK0;t*wv9hSEq^?y};)F*H8nuI4z)2{R^ZISPn&uUw%Q|&Vg;>0!_SCg@eSX zUYp^K`e8K7SLLo+vaHVzpX0nIkw?f5{3;IV1G0|IYTW}y=uQ*}N3aQG_sE)rJo0Ur zN%Q{zMcxXmDISGUk67cYXi+*9VvjZ5E1Zy!N`q!W+dlDLA=u;0^9-(J34LR8wSJkUM943fq$6SCat zUP2Y&*IkpL6_$4eq?#gB0-SzLMlKdIhfG|%4h{CX1$azBp%qsbo)RTXXiG3}-iDEg z1s7ugK^l=(db;0SK%(f)X-!bPVGFm=g1>z3XC7|VQRGwiFr4t{FBl~y6hYo6(S1Y1 zPVoL!OZFt1*G>fX>Qp$r%}zAVfBsktsRqDYPmF6PvaL6xsc+~w2Cvl!kv|a^8-?zY zffH#hSqm6R)|(vcPdf^V2nYNY*%;;mFSy6qSzI<)RyG)llcGx@j(zxKdF(`7XF}|L z=X?O-zoJv1ixdHUA@dh01Yl130yVxBFP1*GSjFFQkSqT{-#wp-rZoe3qS|I?-xYu3 z5m1ib`^29^_CPwL(3EKwVS+Y9q__?yIw*1#LnWgzhUz@tESz~yi8qpEKRixHN?Sr3>*hX;vDz;LW3k>kI6u9q1*)S$X7ldpY)U8jY7sW7 zw%m!`DE7E?P#Pz5`dmBBPGx{o)q(5_|8fRK3w^!o4e{OI+t1-V7UZ7tL$Dp1MvA%r z6{ul|i5^=strT6!ws2`bfCNGqV*l7Ws$J+DP~GqQam8`B7zCV79a(GdjOQ7Sp^C}~0+aTf0u-d*2M22s zPl0Zt>#kg0+pbXV?fTx1_u<8RUO0T)*$CYUe;|q2qT9Ae1Pav0p+#{`X9XPK{#$nm zr>X`QpJ{HNieI$-o;eh^P0P>EzS`%+!Hydq_hn+k4}TH6Vxjkzdy5*h^vo@!l#DS8 zsUMV<9O$y$Za(E16RUo$=WI8Slq5K#uU`pb$-aucXwe~u*7o?x0R@Jfl(pjnuv}$) zZR8mkTXV%!pIiYdC++S+q*V8gz<-*-ZS7h=&ae;z%5~49JsPioUPmlzfqws!!<@$a z1Br3C40t=Hvw*ICOfyEnS8gz?UunI%-ng`%P;cb$dh_^KKdNzPyy}R4%|NMaAk|d{ zU0SFbu-&T&H!9Fo_eJWhmpJ{Yi!^$Z(T^zT|H__*cZZZdpAkdzjMiI_k|hhHEw)1i z57Kkp0F3`p81V|im-P2$aq2u>TJsP1#9NG=y}oLe=Ub&;10T|57wOr5oMtfuKR^*^ zRgjU`wClq*>r!lgr=2b zbWBYL0D-Qf>!NIOa#Y0=FhXHnPE0;z0EV#@0K2*UDnX$CM1K|4;i0ZCQnE#59yHvO zD{a?BSf59gYX#xzX1Jp*5{FB*3I0q6(2qfQ?A&f3rbyF+V#-d)FXig4}n z4mCq#U`&ewhzsyvk>IxYA_wp+iH{^uVK#E05fRM2cNCs2fa!e=FgO(pP;%QAbZRR= zB$fkSmVE?hWm)U&zb%Sj15=&~yN6V2St=moMJvl#-bcEEasCM$UpO%*-O{!hjCC8r z=VjC=h&_*nEx2~*Z{oDIqsEN?pEdJ{Y zTsqMGMZ=8dgg7}g?$en?+TqPcbVGs_Ke+Md8X=we(6gm%3(SlJypBEfO$Rq6bFtp@ z{sil?m!AY4GkTA3EOQ>8!3~;5qKZ?0pkW_AcvWHcm|7gTZiwIGfE>%HB5NLdJ?#_^ zEh4X%qaq*Tg7Pc%#tZwAoRup!IkX6`<7`9^^_Wu&V(}UtsQ{Wz3ajALwaO;pKQ_R< z5L=k`(y{z3Ew_ zH=xTZ6Ocda%91cy82{A~!k-P%h-)9u3T;H?XS>m?fcr9CeJtfdmpC%pk>Zy!L_fOY za{>?o<}{V8`k+0o`*=%RMq=RDHUoxt>Jl7SeqU^py5z%2PuiM(dr<%9Q$d~i04EI8mHmdypkN^B{rN)j2Twu-#Ux95*8N<&jju!{k=im5 zN7}TbH408yH+@gehRM3s z+GwmbH#gU=p`%Xk1X{iooq~}{$OqXx;Ct59i24Gx4j--^$bRwA6TrQdT!AFR2{FxO z_>Ugpt0%|!B3rmk|4R{>K(p?{C598lVRO0TiKNE8puiQ{BBYCFHN5kIBF$2yH%bc> zMyO7h-INN_dm3y``g2{Q9n z^zgwfMW$rtQ>BsYFoQ1ue?{>HGp{z80~+Hx@_wEp?*JPBJEX4aa;V}WU^f1{7R+Cf ztzSH}*Qvi5nW?7|%h76yT$(g~KRDq2q> zW2m5Lw`^JZmHQxH7YW|{sJrQxsUkpCto-=CuJgzC5Y5sC6Oin+NO=t<>l3YAui$&^@}8c1(HdPk@Hb*a*;%K_T|U2CRCG7#sdTn_ zUB`vG92Cr$%OxU>u;ylL(++%_*jBQfyH+8IV@*ZT7XKhvz?Q4qci;fX&hWpM>*iH$ z@o#1NNGk}pIccKQXY;GBuJ^Cj{iBnlBFQiH`*LG$;Lr8ppsf{o(a{rrxE=pq37!QO zlNNC1w*aeTvE!N*i;08wHy-e4%@UQI3r8rI`B@8(9=kb|1;W7sx)v)OVNI=1!3*X- z(3}DP8^ctE$P6O>AT%@r4#OYcV1|Qp0VDFBo6sn%Z~}naV`RmwodTML<|F$~KspDf ztC!y9RE4l@?S|W=xx-%QCHTx(?+S0&R<+}J@9KbNLDfrKmm5& zdz;@XtAB8}^NJvBGxkh-UuUCZcQa>MxZ;@CsqMvq{WiTrX_HZRqIeIWz(vAMq@F*q z4VINwS0CNz6`*0;>xkxg82eEsH)5p5IdD|BxxBsrAbJy*N=aDcW z6bZI`^4h6A*`s7ko++qKFsZRwZ`Q7W9D*P4`O~Im4Lfc}MnMSN_m+^5NT@~za6d~d z$LIs{S~bV+(o7V=lldZ8Y990@f<&CNljB;39QVv|7;SzlK-Hxp2PJ;2{v$C$2n(8C zU2`#EsQQ}`n9?Bfmr?!q+*}iUteSs?@Jyq%&UU?Ry-Cae2hML1sIDf8V33j8Dk4cJ zes1XKNOgEn1o~R{-438Kb-3 z<$4XSf3&_F5D*~wr`#gOlpW;4FRoNjv{@i`8DzIal z*f$HywuZbUfekF@uc?<_%|OFJ>@~SJ)(d2SlS@in6jAEge9mLXbzwUeH2z8$vy`AOP-yBVOnb&J$o z8Vb2C=V3$?zP+|vJT};e?T+)>dwtZmhdb)x<6`d#qIK6ExvlosY%)|jm4=dgYAy+1 zhO?Vta&$h9h0Ug>AdLg$mDv4v0>z#x-HS(gD}Lqc{{9ZrSSB}r6k26_Y1ImWJN2ho1F+e#Wdn^4} z+7`b`o}^zAc8BfPWcjP0;UgwRZGY!o{{Z!UMBFM{w=k@ZbkrV#REjZm$Y50UPDn_D zV6=f?tk9M9zHL$ZCfpHOAQ~(nMz?@!44(yBT3Qs`5Q0ByLY$i2-{{n`O5>y3@7D^K zj81w&Ke*lWgOj%UG1&cbWyjcWGHUh%Nx`@Yl+O||SsuRRbC#gr-B@LF5h`Cy+lp0&1-S<7zmtDGF^=1`|@Ej-Z%ofEj{ z*wuId-PFdi7dYhS=aaXb^p6bhv{K{M)YLTQ85lEXJ|quW(*`9kgQ*8#F<&+d3kw@g z7KbXCeVnW$o=2X1krB=}wf*y%Ji}LaVZ800J+ICpz!nZC{DnH@d#S0f_J~SOq!*mp zb!5RYeEoaLr94;p2I;wmxg&UPQWCUYRA$z&usl@ZzxaeXjDy!La&G+eEE+NssMSt*|4zQXv{>&UHZn37vx1Y1{49E`E> zX%2mhfR_~C=}U6M))S>%%5Pa>D~Ti`(bnqiY4Bv&xQ#ta?%s`7a9+IL7uq~KWOqAC z%S++P;5wksz>G zU;a0gwNb%Iu&+#RI%}!`p@)Ut?da$jxNi4u)S>J9xprl4ZOSbyd_+2enyRW(2Aa6C zyye=*^zLLPgEFjjA;g%66<6ld=SFyznlqr2$5>un_=b#>?Q~8n>h?LL%pKiKfzQ zS#WZ)Y}LO22K;?Uad;W8rn{^ zu=e2 zzTMbkfn)q*!bI?fO&kGsv}n^xF0*iWxXAcS1TQ1$q(NeWbMw%k;r!crOhtQ_eycLs zGDCaxlM9$IcnFocmiju_{<5t2AOT3f*QzGd?HWXyyFU>I?zt&@)Eyp`9_vCCrL!Wt zshMhb-2I8*mD=I#>+KG0J(sj`q+~XqI5Mffk;fXkTA72;14l|{PMZFDh0-?WOExj?pWJ-p0<~4Y2)x$r z>#ECHj#n*3GO$H1(c<<+NA|lh8Th%cg=Z-G21G_iB4ro+v6XA-+utw4O+no+ebhyrfhWXv0L!7=_;2Zr?a*$^e&Bi_N<73s=S0J zEq&M8czKzG&Q~uT)#$Ztn_v7)9Of>!B0^u^40XEs6^$lji&JS4-@6_M3mKn@xV8=- zrpHqx13LTB(cob1Qp4V+yWHct_SWGzVZON`s zw*2Wub~+LoHfHK5RbZTRLBMI+4f|(`HWxyqd~qEx3p~$sA<1n2zR>O zcPpQ+{)`Wguz{6C^k@Izg>C-c-@~>(ofZJrvD_{%6C8l*@-UZsMBLUINgDRndJ~OK z0fI|Zm)DX*!bS1tye4<0_m)RhzDg$>Bv9d9f?>}!=$Xs^*Ra)wQA1W6@nZlNnv3GP zZ49Ok1|49o+(iRRulam;-HcM#=F7lydVKXt(RP}Re3z+NNi?X+pWhFB&n_s_6N7Y; z^lZ1dnZNJ7zQrg7V4lgO@7@uXGgJ?>J1TrE(7Nw^M;%_WRF#Qpl)V}`Z@ySYDek+7 zrRi=cjz+&K2H#ZhDk=&t2*UG#7YU5=PVa6*2zOM{6TO8?G(NTCx1S1Ua^d1N9$aLt z^+OEJjF0e34UoV-eE3j+wmk@|%BB#iZ={^z0>;LO;C!ap7V)vul&I zbfy8iIs%28Bwx-Vyj-&X?I2Lxc%yq_;Du5mY8c>6FpIz!J~n>@-wg|=`|kM_tCqHI zBinPT$HQWMiEx{6YH@&~Qd92(FN zdEX;e87Qs(2E5k5@9tfE=BKcky=dmSg|^~$2t!t zT?)m4a?(c*ub&_a*SX*z;_Gk-;ceJQMJjXcqosYgc z+MZDm!-Z-lKs`|?q0y4+@cjK&IxfXic4G|@vfqqIVilo;UC)G~lFJ<0ui*9ebs&+F zj-A8H%}#sB*EusDYvVw}=rGYHFwZFd2SPNvN-H-a-XooxAx^69k>-)Ado}qGB6PWt zc&0F0OaiWL$Oc9)Y^1~Qjefm}ZU9?)hgVNfieDgPDN50(k^uS4Ghri9ieczyZt#e$ zXYsNvpWm|3;oc{I3CC_fAEkIg(;yzF6ph+RE>QdU2qD{axJdN=K?3^*B*PD5X}A5W z+MG8g-;kYAUl83~lE_I<+6?I`%fhv(xT=4V9BLL>Ds;Rlt^=EA@v3Ke+{Arv#rjTt#3v#xUlV8oDO#%h zG#?Ef8o096do7Gtu_2OCw9_h1t8%p8-ht#Jx-?9mJxEJg>`J@dN9WopT8iQ&Y8R8s z{)6Hrk`}`L`4~moySR*E5Te41gSE48GMUv*`mLrs_-zCMkk3$rB7&OM0W`18Zl$#d zzxQ_xRR;$LmyK_AMlIdAgiB(x<^BZ~t~@#LS~OLljjcYvC*2g=ce%cF>^ zW`BQWQMMULe=udktZ(1;qk94HSG$sac0f=`{_MSm@`Lfx!v+pJ9%z=Dj zSHr}Oa$c!TH;?eqGgQ@SnMYR2oAX96ftf6gQ!5{ypQtq;_FkCFgNnDe{SFm<>3B;q znhO=3_@H7edA5o#JVTv2HphQy07faP{$o%{nI~0tY{}^L-OV$=zouD*essv;oAV?* z95ESqlj~q-*K-dK;CvF{EBZrM{???qv={|3sMqL092P@6I-~ZOVMYQ;9|#oan>I33 zY$ZSi`!ScE(JqATCphsEZFAw|WcD9c_0 z1a4KBc;OYWPr!f4ZQvX}5ePlNn+TXq8oul#r4rcV%K;K7-kZn|6bIC4fFX%H5J*`< z9|(xZ5qM#p`N*MLLF%mU=Z`oKfPp1#mc_K&x=rh?6&1yXDs8`(xFPQSHHj7PM-I=4 zV;X>|sNVeaZ1GiXn@CdCQ&L3{XR?_Y@5s%gHXldH4!>`n4i=M4xKq4Wd?mM?I9G-) znuZKta}VYl^ZujcV4mqTZYDdPkDEcQ4Gxw?V6q4vfMKy;|AR~{-$aX9 zmWsX|Cw>vk&lNXoOK7wn$K!3|&3Qz7!ziG5RW!&!t-00Coq?cnhTe>N(~NugIAAT1 zGt@W$>k%MIckROe7zbb+7HyEH8ZiP|+$+p&@RE5AUhVAR!?wkZNZ#4gD73hdA1%V1 zk`@9b2f2g1g%Gz_mM<5@sipE10yD5G|JC48aH(f0;ghV&PTmNXj}Z?Gpl4fubH0K@ z%>%Mi$u)l&p~Gc~)8JBe%m&SCPB+Qkwld{f1`g1fh6GE>y!M)8rpEpG+Z+pPgg24E zlbN}KJI31q<(8TUU=kMyETNn^GNs7WBvG*PHeS8qE4WzWPg=pPT|7eMo}`u?F+$D~ zgLFjYEdLSac;%-FgwLA0m>gmyRZRE|EYjZPgpZ&3!6H+d7-KQZX|%*!A%ID9W~s%Z z+npE|u#N_k6k~W;`CoH9_6DwW;_`TkS7hk$nc>HeA18#+SfutS0T(75{SS6Vh~2hxfI1RIz@riXAqD>>=4x45CZO_PIm*T{$X}j6WS}qbtCz%|9g7Qbs4_VW9}uE z%xWAda&u_3A}fCQs)KzatB$!9PdoDW=-;#>EKz#ycIFZkA!A=_I}Ck~;p%T#B?MH? zp3cWAURfKLC`mc+H&BS8N`bvzKjQY&Xxk4P;ww4SH~{m#K-8T4y#J^tsNME(>$0MdGhs#Mh1$7$7qv0cLs0& zI8-JiPgw1IuG^OL+}6(YUxAB9oYYi;pHTItCRi8vCs>SVXaq@uhMj}LR-yIB1mHud z5uV6RBIgDaBB1=@V=?-f>)!|(+M7N%G-w^l6QxtCA|#_6@Chkr`WKa{!S78Iv#Ul@ z^M#$y=OJaL?CTLyZpm|QlQ)Og#!;{cWyL9H=0N1{|2Q|J}fvwC=9k^O%k){D6%V{l+YQr#-JVrFxy=fq=UPq@=!FY0#MM*ZXlJ`VX<|J`P zd9A>!^3Y-}IS%aMAi3gmt^xs+m2|ZtX6;2IX{_Bx0E>l-xdcrqkD$3eZ_~};=K%~Q zf~jLfkdP@-n17g8s6{)y>+`t7ydjJ>%)?^6xxvfadUE78uXZ;97Yl#Vus+`ey3mYv za_pmu!_NcIYz>X!u)?GfoY&|Tt zyI}9sL;wpXjz28*KbS@L3&i|c@h;DC`MW$t6&fENb{9V`Qeewt7WWzwxkmBE2*+RU zN^8x+_PrfetcfLk;s!2z{wZF;tseDy(+lMuCD#KM1KZI6wp@}{xC*Cm1NY4s`b0o# zH&M9$Mp$Wha#3Uv(dDgs$)lD3H4tEH(7Dw^xZH^x22le6>>ErL(V;OO{>MN7A5&6d z&G1-?n4#v+nBo|MnfL=q^>FD7+2T>8C4~B{HRHqXpK1t??>nR<*txe=M+L zAjYZ&r-QLg1f|BB%vWvr#{p~tBhOxcYK5}C4eohE(a zie{6PB;4A|$544?AlcqhV`r=woJD68L0iMEqzpF{xUrFT{qVcJT&ZTy0Sg!WDlpb#PXw-V?l3@+ zEk{fgvd{7hNBD;CSdTFcDff&SfeL3ha)l!bV=3WCt^DvKXv{N{h+F}RR{S-dpHt0t zq2Vs&RBpw2&sT9&C5Y4|K4OCh3LK)~D393SnN6V;oa~A7rRSHX{!8$LSxXZzN!)1o zNgh_Xm$u?Hj`T^E|4OUs%{Zr4o=P-|6KZ)t(HN>NAFYUq(S%csjXRsS>2Gtg9`#LH z&9&)!FFp-r=MXSiI*W*#79c-vm$99%6922h+f)0}d|LOw~K3b7c z1JV*oY1_CAaAM}5cXPl*ew{I6far2wr;acW$&R6~`U8Cm?J!UnPPiN?`U}gX5|`g^ ziOX7%mbmK8xzm6h^l1R5c#QzbXXryb{#z}WSPD^e>O)2sF5iReg|LGJ*0$TM6lz$OV9Obj6WucFH<2|~OP>b@_ARG$8i=FC9!Yx!_N>5_BiXZvkW+n3R$X90ac!}( zl0xS`gp)DWasmq4Y2njn>1^10u$)$)5RyxQvWCdmo(F-L`ANAdKEk7fip)$JQe>SN zfl$Ow*Wwjdc_LMDTio%AOG=)Q32{;% zR8D|F&d0lVFX0)NVL~9qmdXFR)U(XNdMU1U%f1Vp8~Uo2$s;v)QnIuOUU`icOz^y@ z21ne!^Y&UazA3LE9Ij{9NCnrA7PAAlh9A5$Gl{z)<(kyi2S@*2Zd&Q5e>k~pCP%e( z=~zCbSn`fY$dWxhX_}$AT%F!qgE`*@2l4AzNIk)@CG?kUNt(cR|M6D_WeVsPCCE^j zZ{UZ2NZ|~#%$6>9;@u5krVx^t^6rt2-I6)>Ij4;ze|S;}hu@Ntqdsa87N@ ze2P;Gd%~xnp)QhQ0mKzSqn!Q!QFX&s(fU)xP$V7^M_2NAZCbn6AVn(%OYo z#6J2hV(s?RytZi>_g27EzK9)A=jL2S!H9QxFc*M;2v;y)ei=bojXkGd=CO7g{#F2H z{WmvzF!qepCG6FvtvIuL_*((Es0P-9Wq;vGy>`p|F7;wNfDV})16fCLrCyt%x8>am zUASSCA=OT=D;!@C|5?kpt zwyJ+~((b+7^Gs+cqby&{b!zOn%;*tPg2-jc6DqnL-2#T(rkh;{{<2|$P6b0Q?;D6oHTkx_pD>09CT9{yz-At9G~oQD6C|K)c$%7_b1g5BWx|; ze;jWx6SMd-$MYGu@2pD=lD0l?IM~_jVvBkoH=&?c|1p|ic2?k8fcur%qRQ!T`(~)E zY$(oR!&=+yRU<)pW;PEGoCbo?zXttMi7YyzCf4#1Mi)}t`|9o&*J{`5MgA%;8!(S= z)eKUZU@-!*#M(&}ODQ2CwV+pd0KO6J0iUTKUUQ0l`mCV0V0_D$~bNxeb(BBou--hca=5V>*krbBn5U8jifC4KzU9o zd6zuA-Wp5d@{9T(gQSyw^fqQW$2qxHUC0)HUGN|31pHT9h!!x`ZLPL@3hGbM4gOiN z=emZQofyrutx!NFSX<(GUei36#IuS|Xg8U$*bAHjA)*2@>>%?w z9z~M4Y;je8?!DgskFqb1i)sJ=Kh|7Jb%iL^SgufXDMea_T-nmK+{#v6TM@EEX`ADc zvQ;kWD%C{s?G}Zyv<{*yX+%X-BhsdQ-)4UA<;={PGV{5=``>+-X3lxPU(56Ld_7<9 zw-LZXqPbphdR?PudqyYkI7=z{xUWP>3tPAO)OkEWZDW=`E z&Vu=fQxPgcm|5cEpB_DtP*90QtKh&Cgg(gCLgl#nJ)s;yDK?xLI=>B0C3YO39sr~T z;mp>fCm4!=MbpUQ!<99qNDsAZV9GF~o0ZmXRVl9yr=Elj-tzYv;B&ki7^}0_MZwY? zpWUL~_Q9^Fvj$FJSWN7OdchteYMoAih+NPAem|r43o!ZbG{XJmZBy_;jt*+3GqXCK z1+5ty{Ez1d3j+m6JhOUJO4XLdfeOD2|9mj|dG?n?1P2DZw*hl8)Bxh6C$PB4!6$Le z!mky;V~v7z4bc;&=fX7jKX9B)JB{(P|Ee4;5-f&aBIQZ?M_;rgy_R(E~+gi*zho=ETvcnytC3Vv~c&rSr?i`K32Vjfn% z^0K@dZm_znpdw0%dRff2GnKn)N_*>=dF8%tpygQF`|Y>_9~@w-u1|ABYB%TL-K?C8 z)INWirM8s4dbOl-nEE}S4G}cOo3Q3oHEr9Q)mS8SQ!?dw6- z?ajctA4y+5h!@}@wEzzwS%prk0h@^D)E+&7D5V!2`nJV;)kv4wcqc7!$CD`sbzxM) z(~>s)^5_W?X23ITvalN&3f(AIP;Tnl`=@GLFeJ93x)mDpN_)Op`uq6v{-g&$Y5`l3 z_?Pr=b`|ty2<~!6aetzjqU8)UnTiigQ0PW6F{(S@)G_%#z;u)va`iYoAlmRX&#t$c z)y-OLt{AVtZ?P<00ZoG*;1m`@EDIvH=y(BaA_*pFg*fZ>bC@Y&(URp1iX(A@M}_by zo6gE)R^WvdcE()(0g$W*p#}7l;@-FdIhP6mgK#GvzvAUYokb+s_)LNIr$J8xkO( z{duC&pfLPMFi=BrQ>CKFTK#Wa#3ajK8tsoF_*I*h2WyBw-!1$+>p*L@qsYxaIJ3I5 zA{V;7hXYR3WFhqns+5}(uuFZ4r>H}bFDS-F@H-;}u~9FH+ zM`Zlt(mBaie7H(O0yO3evjyElT=cNb?#28JBLNlp#Vp`c(xYn;W#CM)Nq(6T4GXpc zRLl7`Bw+IuKa~9-{My4R4K#Y5$6uIjnyD4Mf@PY~U@b6oky8kzpBIMT!~Qt+CtrUQ zKM}s7FD&O7g^^D2mOFL)1}L4*cvgGLAn=(oa9#kbJygM@!vL-@t!sD*2cl6p5QYB^ zqdIq#OZ@3mF2v1H6} z_0wTH&*^PR`m*gt*J?6~Uu+z9NKfHN{NIP77QQp#EpK}iR+Zk)kD19a;fD!I;|uSe zUf*#3;J@k<({kHgx4O76T88~S?qzw8rgi+@(`(h02IZ_o(JJ9iCLF42ILmJ|<=+)p zR*s5#>$2X@`QANpt(z}S_nm%qTy*72vbLD{z~!s0z=p=4sSVJmF^kYn}q=iV_GG|4vA zIX67FXt>YD%1KkzCa8q?*LW-UmCJ84fL(q2 z1wF{|7*w8YO(ode_*>_(;?k20_=UHfl-jgwhDF&D3rVjzCk zAtUA0lSfAzwVb^=UER>#Wja{ZeWl4spW$*%?~RzlUXGvS@o4lUdhg*{zW!9Kytv-x z-mH0rtgC%+gE_2(IDIWEv9o3y+ucnt26dQlEn*MIF!Xz*)5i@1Y3y{f= z;s**jjuYpxX{#ejG@^|%o%ZfM>Lzt1Lr&n2FLL)d;<-7tu<&Hb?In#R#U8Uys4vRf z`tVAIiSFC6(MHpTh6JMw%RcI73}KXt{q4=KSqEE-uEX6jk4$rSaqHL$c1umb>%E)g z?zK(4T_Jw>M+S72R%MK%R&{~NL1?SjSFQ^)*!TLLZ^?k|)Gs_lzu-9YZFJ0QuBv?u z{77@T&n5Kg$SP4631%k28C zE?v=GE^v#QPup(G`qvM+=u8hcBkX&l!xnbG*(6+OZ;!0Dg?oJ#&uUTp+kfOJizQWJ z&vHD7AMY2#1qZ5^U2Ia+iFj!|)55Oz0NDRg@*`8NW7Ze?fDOHbOolN8g&txh*IL`( zfsuK}wZ7<&;b2WuJj+)&)7R8R5qXo*wWkLcu)KC&*IIGZudt}7sR5i{mAkl}5p&-m zD+}1xUh$@_U5q@W;jBNaf&XD+TKb$8|6fj9p7ocf3|R2BI>`ci2y*_Xs4S{tpp|kP z3XM$Fz~Q4A@LL$dir=Ojn%yG*H!{_qjE_A#wn z&sc^VC24{6eI3?Yd9$-=@k;PyN3bX6{f3|H;4>z?%X=@dn(Qu_Iop>*8^$ZOa*V=6BRBn)Ve0i=uU1)0tT!@Bj_!+cL1F3163&Z_ z+QH4rv$weG!i8Vs7_Y9To<1I!n{#S<^u=Rh;Uq-$Wy=gYcgv^aVC6pAw8 z9OUE3!ipERy=`yz1u^w~c6LdhwYI=(Z9WoMpR3@Jb*?XrWB2OnKHOUzInI69a%CO6 zB4t_}WAtL9WM!6XS-W5Rf&Z?Jxiv!Uze91@gMYNVW&3dq2*x$j6Ro@3GrD&nM^R5+8(U~_QtT*G@H1tY z3l{bkQp-9e%N&`qIKdEiaIy+i!)};0Uz|9!*Q6d^S@<|M)WCEYFtazeZ@-z|J7*3z z72C^%$=K}ABKrd|rRm|PYj&RAcMX7fK|3vBHRLyg{Bs%SpX~8CHk7^vu4_Fr|1f;( z)SD?D(43shTB>>_UKwZHhW5=7m#YByC`-C`&&Y^oyudy6q4Aa#ryL1d8~`)F{ZYKr z{7b^X7%^T=ZJ6<2Q7{I4&WkpuAA zoZ3;V_OX80`OvrLBO^~qEc-O-la*!VE4yK`=-gblW>;5rfLT3b*M56mnxtD#z;WCv z4df9c2%tO)Z>_ET*{B5DDqN4zs7Bi!fikO2KEyb!moMJ}$+%>ts%=l(k0R#NL2?Qp znW0ej40~{FQKLeM=_X``z+t#=u9-!e2fDzt6R|n%-i#GTSB=z*57r0o_U7~FGkEd2 zHfYuC^FwA^94>jV;G?>G*4n+*p5--^H|u%s=~y+jWw44l#-1yX^N@cyx$N1aw}R!T z9AR{Hw>5AaTFN26<5!AP$6x-3it2<99wJvxH})`b(i*cn(l-!Hn!P(uU*1@ZFKmMT z8|JaXu{NQ)g%%_0i_0_Dm=Ao)cjm37Z5-g%@bUT|h& zcwiNTO-{iWTnWZH$m2MI->?Y2Zs`2!%3cNV@!7b{uckhJPGn~O(M163MBZ?%*bIUN zg}ucQ_>UDRyu_(sc!Mme=78 zs+0QyN^GIf#9mY!1UFK3g44_pP8eo}e{pzl{N^f%UHf|X$V~7@r|%zj%{{3OAtG}= z+DS&U1h(XHB9(xNCECoc(Ak{avXhpN2=tW9>&5AZot{tyOxfWvMX|lzrM-IKy@tvu zY&o@--#IWO1R)Co?MvWZ5!^ZdWs2NlT$mhnsH+R2h0kLt@CiU=$D@GFmqVsxM z<`%tn3#j)4H=yc?2*-8)vS>QONp)=xA3?cme4hfFw+n~$cN+j|q_TwsYRocq6YRNZ zTM7`Q=toZDXA1jIVUe(0iDFI^G~7e!soc@-S)-qBy6-Zp1txR=a1?T{OgN3{1a(|d z0%sy9=pFR}CE_1AE)}ZwRc&-T-26>0(ii?!;B0L5^M=X|Es0(KZw;vBuexn=ZQlb^ zZ)VloZVW|mo@$809=LmR`oU-eVWHCV_3LL)%2#WR%W`V%D&j6AUr`@_g+D%1=&)}4 zdE8ULqG*s?Y|<+yA;1t)QoHHC{wJ7We*hjw(>-=2LUyDBH!rWr+05C-;$*<6h*NnQ zWlyC8NX}a1jgBgUI#!2k%&AU54E30v0e?M1*4zU0c%y z35TZ@-roB>D&chrL{uo;SMvIrn^pqtmZ2fJ&rhv0{}IrU44H2civa^5qZqHxTex&u z!n~B`WIY2GE=@sNX>_D%gSU!3LyWx5QVR+$`GVe|_c&nQX~qjpZb?u(oI5y9SyXk% z)koaSuTcdh-&L7mvm7Vokk`Vn35%9>6gkN~w z1b}lwk16Vu+;_-zpek;ldNmv!4f-Jz>q73ph%n>@HbWFG-gG{H{sh!c??l*K2;13{ zsKu-l+2N(>>hs+ikR@ZBC@u>0uunP;7gG@mjkZM%W%tc}eRW{2Q;m0?v4bIgnv>L0 z{<*(_8#KK<(qYVR63`Jb7O4D#yy92{Rk_o#cRip7NRcZ8Z2o!M6Nky*1d#cSmhuzF zQ!w>APQj1P`JX$t6xSM$N}BXMh$PYBI0b3Tk114%L0DRDLF|$G3 ziG}oTsi5u#RXrKv$UW9Tl+FS8FPODuMEt&z9tNO%P*Q3U7a9py(GPJ>FPy8V_cI7a zFU8<+84an6vg%l>gjsKQd%i8AgQ$9(JH;&(CnPbU#2AbL_EpT`_Rmx|ZS7RWN#rk# zm9)N{E4+Vku438Kc z(cieOz}3O713kyva|^0l&moq>rKR$B04?dTT+~-!-bI_i)$?voDeYZeIZ8VMI{3NJ zyS3nN^RK_QPOqc-3J9f(qov*`wCNUK_{ZbJ71EBC>l*6otNagA&2bufQ2P(i`E!`5 zs`Vf5R@|jH9!<^FY9Qr_pKTqEQ!n>nrot>0GQhMHjq{8!MRQ%Sjo%Sx?;l1@2%}D; zK7^w_^)z(62{|62-(pS!me6kXb;in=@({vt?a=?oo-yy@DEM+KXt+>yjdnhCSL3vW z6@VA5dZO!a62(poC;_!8_^2WvWLL!N&i^3+cQh)xh4Ymjs0+{tNImO{4 zZrW@~_1tAgFVsT9@DJR1X??2&#^t`ya_Cl3N5at^FVb>pWnf=i$ry$AL3dLhT-io> ztja_qmuQJ{n~1@DZuo}(#GElVqWH&~(W}Yoy1^RjZl?R+Ikc#g=-tEfOuNhlRf6&G zk7+!3*V76E4@m0(QmDRH&dyjv9Jtn^Sj1ds16~Z2DPKi|EXUVT zUrPBGmc0*B!3_sNH;obteE0G0moGwk4HpLEI z=HXChbRKqHCJbvVgXJ>Dev_)Qx!fhRE)KC4V}7IaRECBd!zS6A>PSmZ#%*zc5+Z(C`%G1@|wlv!eSfX*l&a zkcfz(AY}j25D}Ib_6H6@#?NannX_Y}sM)pcR9RX|`(`0|+qX{NfV(Gre=)P`>jn}|HD(qAUBpR8 z2xJ+Dkd^8AlzKLXvc|a&VqFu2@txMZFw32Ox-4Si{9jf2ARWvzFvsD_W;m<2kQFu} z?O4W7jkvSgKW<*7!JNS5c)LnzFsI$Wx23li;B3^+9szK3;#O)QF#!zjQ@<* zR-ZWEWin{G(0bhB^jClu!9FNOL|Oov0cLms-_;a0L2>?}IdwBy?t~YJtbnQ5+&^F< z+)puR7q)51d?o@UvG2uX1uy{U+0E78auh&wdKad9#bs^mU&wf@ZqwTjbjZ`EBWp7c zKhKIEacQodFM>)imxcpg9L5GVJ~WTEb#i+71juhdckFnSnAi~7m;E0IA#mQFGE=aT z7xNV${b?>WM^vJ?%`L8&;&9$~TY>Vgv(0H5o;5jPn&|8)V(?QZ+t8F%yd|MLO8Z*hyE z?1H9cEpAW}Rv~bK$?FZF89mlIz_nF2`iOBGku}=j*GJh4` zaSqf4V4Q81O6v^-wmhrZv_i5!Ym<++aQJ^!RM^y_KL|Vk>z9RxT>8|^;u9Ohf?^AUJqKBJe2Xi311A965tcS5`o$VIT&#F7@_Z~S?D(4hKa z-15SGt$Wn+V)}w&!G#e3Iv~>#tyFe`G~^>ms&zylA7osU06#MH6$F0}g2mgpV3Dcb zwOJ}CGg_&%WXONi?Etu?XJT%NQ;Nx-kyI&z2+OY>*~b9AByQ1&vT;WWUg0@#g>fGh z=p2gkk{YD>ZI3Z}X}94zd)*p8a#i{Npkn3)2GlYn6}&m>@6<78)@F)rgX!yK7dw?6IjVWj(mu1u%C)W(#Ux2xCj{|EJAj*Lra86)(6d=;zuvt~HpWG|woNL- zz_5|xT07H6{n3{#n5YzoVieKtd-3eZRg1bE0B4FUW&tS-}&T`9`4q-Zag zv1$}?dg-Eh)cc*VT3@Frbo{t zmLMepQkif)LGYld)9f!J_hK(^&3Mb2wc=>ygx}T}9rXMPyJ@gfTmP!qYm&I@pWun! zoO?ooB9|FHwee=^Mbcr94Alj>1L+0GY5z%eVc&_O82kDEhw6fiL%4^jbQBgjBY}$Y z)SEXjT}XB#;%SsRw3Y4W@aksvZA(b263L+$U#)YCZVnP8uVJ^M+} zdt?PiE)$#6KuX|)h)Eg2aVSO$_OSm2+NN&px3)w>N)o4YF(pYpLmyQ9vwFG$Pj@p0768H`PtR+zTvVMWD-`m7dmhP)R)5UkEUgK(O6I; zRlN3YDUe*}goDVE6*&?eMOi8}axChIkc6;cge)+wsj=o!LNi6g{fdHETmrp9Ja$|T z=mYv_ORWJ+H^WgZP8n{lwtd0slolnmfd=C3X^jFU9E1rd80d8bMoz5gIfW=b~TP{zFPTwK)fJl`o4cI;#o zh~zY!35OyO4ut{qZUaW^LQM;yCx=$}QSUb$LH^4~1HH!*l_FG0+ZLyGE&{4>gxzTh zQ*s(k{X-Z0PiC$0hb|1mI9!ZfluT;7qvK>c=+T>j_Cx!^kBBu9Dj$>`=T;hS9Dy4H>;;%ZnDAo- zM!c9%hc-)Qp^(Q>g4ATk16I0NZHo{sILYCI5k9iz4x&*&}-5s9$hyd0iN4)T;eRkjBK#GTsE(a!BjbN^E$q zS^ZN@UlBgT7^5TD5<#-Uaa4iRPctQ{`wN_mjODMDUk<+#lNF#cm7&5QU8ocbQ}=&V zVNhygqv-#p!iWk$3l{!Z#OwkTCTiVERblX|ddwqXEMuPTX$A$Oz^KJ9nkFhkeZx?s zDyH`yp&{|AP%P*D1PIT?mNxQ8$t&s{-f|x}YBFM>$(AN`F=gCjnd*BY3Ts=e0{W>g z4uUaDMVxuChJmm;1)F+wyeQTs6H!;tQds%A(d%n$bVA`bB`ps0Lf&{33rqs_V0Y_b z^-p@MDWV*z9tdrWsOHY@qoAiW%mcPt^|bldy5iv(_y?RkTnv7sG_<_N*>(@}RN)u< zVNKi}tkauNAX_-kFhe#PxP=b=kp0k>WcwNTx+ELUzD#O48CMN@TXd{P>p4+U;YD8U z#rIh%r%F^N3CD!0K79x%385PGg|H(y4u|V|_*Fd0ygb@G3upr^=Q$G`uXKEUzAgoK z%!o_DXxZmZ1Ir{`4IhXlRoR!^c)Ul5SAeaO$=1flhEfUQ2xeo<`l%c8k)m5vLXX5K z@d#CoF3J-DUbxW9Kt(?j+aJ~^FqiHD^a+Pg@&TC!4S5vgu)StQQo)fCdob7{DOaSU%z=CnzdLdprjCGBW;9- zDz}ie#$n79WlgV-gi6+1Vz-g_@Vb7A^z7zZ;c%IK5H3W9)97&|?4Saza4?IAMZ-BH zyY6*y@0!X{Gb9IdzW%GpWnikoCJevzT-gyJZY>J6%YtP^gg895uBsCzW7Z>7NeI$AD0o^ zJdMAh0H9tx<;o0+NPwrkh>nkF>9|+=M*(ow0X2h2X5gS^FqZ2k>j!CTXjX^|gXzy{H^PQqwFFE5zQ$Wj&GWpv&b zv;o;Jce{{A5lL<6E1!XrW=OV-K0U7;wJn(!vMUY>NoLe$aussc*rs_3*h>!i$%qOZ z4NNypFw#aNCO9aoAL_zp^^$ zycnD_&PwPq>FZ8OMhCzR7tWrD$#;-YDPMt}$V^7xW?$Z~+k>Jl3a?lG>DYi0QMIN>^uOuLvl8_z$*~QH!Z0-Q zoC9?AC2n3TV{jk+hJqn)6Q9o(i7shdIRFD?T`wPM0% z{Gs{%y4PqY#La8r2N`|CJ4HRjLBoi{k&04@I-aG(H@FJ`XOlL!4pv!$W>W}l102qn z(h?vpgeV0jS*|Sj$~pGt$DI}S&v^G=-2=+vN=o*GW(ALeqeJirFu_$sD{He<3KE#B zh2ar#4tI6Rm00&Us#P|o2 zPs7swoFGA|!p0u@1>7qmv8Gb-m20V2_l-462f}8Q1Uz1|)Wm_gjnIsHY6V#Ds&gu--@QVWIKR zCM}3Kd9?m+OQ8i>u3pun4LpDzA@I~HVS~}6o4zc7oREihykR69&ZVZG-bpro37Z4x z2md-+_pn0nFKF_g0on!brtq~tRLsDcfsNQS;}YkUvcNzaIN^+lI|$Xe!T0y2wd&OM zoS7x4))90I;E?gTkoLLT(1<-^;y^jpTC+(RNZVclvFGKnIQ{!2uG$}>Xom#CZ)eo55IY|T9J6_;r{#gKyHt48;Ylx>jpf2e$ zvPnh?R2U@1TDQ;kzTNR8+Nd)ePzc5RaveL!y^Q+j`RFTfmb$*Dv@Kw1dfZ@@?ZD72 zX|q(}Kt(ebK^ji=95@oY(6!xMP#e!L2gl?CIiw&$(5TVS~7`SU#I`?)J zJY5mpbr6u4`Y0-qiAutyut^L5`n(p{O?;pqyg2e&D%DC_$_R zgFyHl$mv~amg(l#vH~n8q9I=mRw3w_uv(J}>yYsCKJj5H`kOmI=W+RGfqA4d+;d$= z@P>PR9_R9d1xDb>dvcUBIvp10enaY=;h@wy-CkF6Xi^Kj?wBA2KIl|Z=D(1@E-mR~ zJyh(RXUJs$22AiRBUDFVjTOn-K`+4uH40|7py|XLb6~aHd2qDj6{^sN-$wBDQLGMB zp&f?+bYS--=QxO-z4+|;wO{Dw269MR{q7_UFuDZ3Dq%A?TkbNx_miOp1Eo;vMGurl z{`m3VLMdXcnp%c`&p+QD52;N#qP1@X>X;@1BQ6dVw+{AwzAf+eotA2|oXF~{4%br;|* z$ZzvRicQ#jKvbwZ5(?$K#?Q0MI5?NJff_SjC-!LgR4Pw*SZ0q5hLhIhHwgtHZ9tcB z8$BCMczpDZD@1YG!^gJfB0$_MZsBpGZm#hi=(##M{R{D&~8cJCRCe z6}+<^^fu2?+vherLU4ytj9&Mg?OLC*u~rU0cifm@5P&x0d7CG2(m{m&skwRhO{BwT zbl;2OC&&b(wq4Wc{q3vrH|B9rItW4q`_g;tz<~$gg9(3cZaeX6KROY7m^19oWGnki zQURm`){XrIWqS*S=ckAd4S`=nG{m8^4~fA^-d;6Zqt|*Z04>N+Xu}^fddjs>b9Eei zupn^%XEwP11+Lv^iG_dyULQz05X_>7sCO~=HXvl}ylRtDPz!VxQy1+{F^J9pBuqr{o^u-MM1{N;ZAKIR99fQ%F=6!yPVaxMVt|e_p3H>* zN>H%O{x=$-3O1NFi-{~aVRM0}ptn8J0RByE_My(6V5)Je4^K@g&EIW0EDgRjdqUiX zyWj4gx4y&}u@zhMSlBrg>E|d&0KbQG@DSP>o1Z~CO;5Y_rSQDn`9Y)dK*{vfpmco^ z5JiLk9LLQDarFUOv$(T}Bu!sGSVfa|)CO}3%0T2vxDY}P2aQ=^*ayFcIR&3>?D#-N zM&_=fS@Lc1=owfMR23|SCxH-*m)Js8s-=fC?pd+vIbIR-#{dM-EqN(k0Y@|t;Z|#I z+I1#7{@JmiN5PzAMlv8CBk)KnH;(poXVG+y-QYhIm=mkK&_5 z|M*k*N`-{)GQt{DmloE_^JybZW1+-fH&PRRRYC~f6zx#Z9TZeM#TTPNF6RMvVj!+^ zPLD~%ZWuUJyo1^ia6a1#DDi%$h;;Z>M4TQutEZGsk&~&fG=gGI20nnMYp? zSPP8BAwKppif$aFlgG(v?!>;yiKzly|1u6<4d2lKwda~)daJ3UE6`g+;;`&67a|dS zI0yM1QoYns6_Otk@z@jzi2gMPi$RT&B+k`AvZe}rTo3YT?nwGtG;cN$?4agDEnqd| znpC8KJ#bmdJg0&l{ielA+ZTODk+)$z9i!8$cp@hg1F24p<0Jd}tPY3vwq`D2Hc@8Xf&k%OOI};nb^nhqjY< z%X~UJHSi!V{H8nL#^t~X7=`d3h{eG|(K;93<00n?!?BDQAo>A!KKXOso=mXyJ9c_mkY8e_%D01INfDA1;i2Wu44$Df@><>6iyT#Fh+lPyEARKug{^Ir^aK(=<&Sny4d7(ZyPEds9GrWcM za5N%5y{)JiRSDx5p@4)*@AwwFViP7|HdNfv+54DA#@|%4VRlb5&I={N4SB|BQwIZxw5%y*l;DZL{Du4n6A6kIk z?+(^(Ptd2CGg3sONqQ6^0m#5!I^iBIwEX~c5`T*!OZLAK$^l5e;o!!`!HpaV`_i&J zy2o3bsyB$MNX$+nZ?sRs9g}CUh?LfDO4x{*;cakqbxLj%aZZWSroi{-?4~5raN3$W zRR)$;;=_^0^P-s#$BqK)}<|GraC6DotUOhGJ5&Lr9zhdDLsKc=A7`Y&c;&tE(q%$fC z@NQ8)Z?}EWs3yQcvkn73&lH@51D=_55C`|brD$9qV# zikw^#X4ypU0eYX#vQX!ldvQ(89WQq2oZUe7I2O$HGaK>IKlmB5P;O%XB%!dSop6Xg z#lmWf5H6}Ccd1F%k-X=~(1mv@ z&e*3Xi+tK5N}5T7%S(|{hh&P@&03!UN$^`EI+MVfp3JD^)X;WD0*zz4#bEA?*WVmtx?R$L)O3`#WN8Ac+*bL zLDrxRE~o~-%phrz?MHx95!@In1e{top;8~6W`qVf-m}#gdTDE#Qb*Ct~A*uX1$#}I7X}w zsm0xlX#VUo>jH<|M!}bh6wg9|2&Jb&U+Op!tpxiRoB;4J&x)Utab>7Vlw>{4Y!)*^ zj%aRhvR#xU+$7H7*5c61VjUjyNFQp5P{Gr^qvrmwjMT#ewkr1UOgzb>VyK})WP0pI z`Z`ENW=V$Aai3E`T<6}eLuO|G^&V9iHapX3N5g1QrzoI>u)<_-!ddY`T>Qa8(ClF~ zE+Y>Nl_(<#D?EOG={dcO>}$<&+K98`%#{T=qmGMB`DLVpDZ|rZFgHZzKgX{&R7Pye z6LY=xG4y_KT!$dHq&MrCS4Df6VD*|xomO(fgpXw#_uEX(`7k)+U8<=C9v;YmHo6SHZtg(*_kG#Bvj$it^&F%5MzU^82@_IjObUpg)@J%-$i?w0T-xYPNiD0HCw=!m( z@?vwe8H)bso!o|5>)4f~I^~A9E7>g_WN~Ll^EM5gVq0$`bgu?cnuI@~ z-qQz#Xoii~h#01ZY=vp#4+(DGfHd#VNjEB-Mr;8WRJqlb-go`ev4guAU2Ot1Iao(% z#ICDr+IlJfzE2%dwtnWg;9Is2?_9gT_PH4Z~OZfz-SUV2T_WrX65gAZ%Iy;xD8iZ1LV+rZ_BSMeR8 zb%mGX)7&3{B)O#O_7wBdk<_Etpu_)(_CJq&E93ZTY^femJRmbRBhOkR;)0hHOjUg?&wqcP=lKURv`$OYBc~T(GdE0qgDi_f@VF-3MA+ z^gkDFqDn2md~`zr`^&4>n8-PoqX{05pVdc@%;HiN3Y$UgyL8B z=O?;U$nXn5@yqb>)|*zr`VSzGfTT5^ts~-%jqNs74hMm| z=F~B@2zlDuJK#+6rb=qqBJ2R&q&NzNH^pFyg!Ay4x#@l?Y`LRg%hVg^l$7^+OUkW^ zb4x8N$1zryA1urX3W_tpHt=bL=$5?9FRu!1(|7>MUTt}Q{+jbif4GVSyBS$6WB6TN zWjT|c%C&YNve^Qs?dtgYbyFld29~HaLK(&HvBB$zh-F5<4brph%6ooc9c4Y0tI$6? zdc4iAzTH{0*cyICcYE!Y@wABbdc7#!C`6~Er2ey`b+6E9W36v}ue`awiHpk9{iefx z9*1Sd+6XV2-do#|o&8W~1jgWuPH;&gdiqJ&b@xKoP3QAfPsRUzY}$bSocmmua~-vwn8}r9tDYN$VwbtRM)*%^$eRe$97G)N-6qPpK7Dg8;RJ3~ zr0#95{eqLubdYr1kL=#9N5viLj;}7UG4~!<9CH)% zKog`kEog;01{DRT0eDqGO%QhLxpV&MSA+pKSIxNV7`h{#AT|b}XtS|Is_P~ch;Rb8 zDBS&E>8cXPJ;PuKP%}PUy_gC&9g~soI&Po=Mz#J)S5JKB`o=<>a~6Y~v-)g+B^3ln z9d!K~d8wt#r!YL6id?Ok9Dhq+anb>wLP>YyT36Sjb6!?|6rv^T_{|^Qz`VN&dDI3m z?zmYY&2noWqm7%j18iLFr=%Kp7{c}qC|f_DZ%3D=D|*EkfSQ_`jzc zZ@w!mWld?^F^4-Z^80m|zy|Rbzzd1C8?pu-rU4FWCJ6F);?`J}}e6`Dy&NYu9v2MJd=p!Q@a56?En# zpv6)QT@k(M=(RUWAcL)ovDus)S^;mv0{=0WiEdrCVM%per>DpQYIciUcX>b8jTCLa zy;qnUKQrZ&#wDD>B^z3$f|GS)u%`;(j{>ON#KR9f!a> zdy#yBY&{?iFZ!KFzFY8As_$}Fh<(@7()gkCG-o}16cGKx4G&MEB90!uZa$>Cy8LCR zD>&85yX@tk?B)0Ncz^#A{qbdhF9Ld`)ixpaCcojl>pN94?{cZ+6H>Li^}XlbNKhjw z#zVw3Qk-^)9Q^tr*JUOi?rE{-=18o7`uK^dUvZOzT#YUYC+FR_i48hZS9I7I)=l?8 z-6WBA*g@j0s|^!*E)6dd1!qv!D0uh%)zf1NrpfOBxc9SWMaO%WJykBD@DfpjZ} zrRSX^xYqk3%sVzpS>{V$mkUwTpyS7bscMHg3`JfyM^Nv^#AgVWmets^mrDX>M@^9z zxVdfHcB6E8kIi7ov~!{i&6@enU3lmKujo^&Iq;vx>iCv?der?LIV8tS24t#zCW1^2 zyk|?z?Oxvjhvh)%O!wO`e7~;39;ua{qqX>vf0gREH#x|0+iS(9>jd7uujw8U75ikj zLFbFFotXhgVJ2@u zwNv!asjxNmP32F;12bbb*Cju^^LHz*dr2FS2lMVi;0W$<24oElH?r06{wd3>_#EYs zi*^iI_xA0&Qx01sQ!g_GWoAw;Ouf=ezQi-)b;y<;dVfO5d8MroIkR@TRq|9tdq}JJ z*u^#|I|EEAW-K}eTCA1CA2-DI5I`j$&prw02sVc85IqayFMoxd7maFjG)It-A;X2k z#8r<=vNW=WP(Uus^!+Fmei(xMgs;OUSGT>p(7jWHJZMZKGX?N4poEOPWt*OQv@qPb zUNgONNXYh=-?B_>lhbJu+A3k`V>$ABhYRiX z{f?n7hT-or4VZla;Onc1*CAIQl4iRFh$ID9Sjx;k1VBwcqb5Mu*B_RBs^y@;vUt=yNX==e>vZ(H>dXbhO&2QP&2ZDkeP!mV05#oR zw+>uFj^2&^7VW=ZCd3}n?6y)5xvk$4@xJv1jl2?&oG7CmkC@>f6@0^LWpEEReX zb%21P-1bPjRJYZ{Zu^YpwlDg-Esrk>+>Q*R}pSztMxNmiew}U5Nc%Sz-^OG zGV(r)$O=aThxE4UA->^ErRXgGiC(%CaBe6?rt3IGmgka!*RVstRJ|M$9=^ipKJeU) z#_NnHP&U-D0eNmwrUYM62OA_6b;U0+e@u`Oe+VfXj`4e`5!YrRO1w{hr4lcDl(Y^3 z;i->e(yV==lIQ4%J{8-3!iI>z z4fI)YV$AOtJ)*h!qlZ?I5oS^o+C+e#84DeG!OLn@fI;7^h%oMWHIHiUaJvw-pZI?k z(Rnu!R2YyMvtE04aZdA1%#D!WKobGOChlpep8LQ6!LN<4M4>Bhoa5iKLN&VGs@j^q z2)_ytd(>C$UTwrGE6!BVk%Wz;M+Jn0B z<NA8lTBXf`BMtHCh58 z(MU_XL_s*j%;ez&fIGUnx}B${hXcef0ho!6zM>%By1%SbseYRGssSOI#tY}oQ=uY{ zqdan53w=;I*i+3NSn`_CFh6%9N;{5s#EsdjL9<`wI@d#r7;#ZdCm`gaS_Ck2c>j_9(IRoHau4`K6oy zuT&S0&PLpBVAhB|cO*7kH(Vc)P>^UQIC` zqI}PTO*g5YET`)bGNPgB2lzcp$|j5fkRy0?_!X)@Oq@VO9d8nBOMjEnlxLh3);Z)o z*}Xk>8t!gA7eYo~i5@4t-ZKnEwkww?vR%J^wp(;TWV><{(KuBSGZK%{>opKEiAKe6 zIpnm2qMRu4wpZge z0Rz}Cy-mP%M`rNpxQsRdS%6q_(nCg@z|U7iS9HvUM61IFa6BgzDI78n@CH39XuU*- z5pv)3OsVxQ(^Et>dY+fom?j+eqVF-uqP6(q`?vTqp9}L2r{Xeh@hM7Djm#Qs0TXO9 z8j9WuDU0y&?;ESQ4UrEiH(=Hvc|FI0CQU$bw>n5`p*zGLBjDR9>WFf0L$kEZL$tqu zp@(A$YxIS#waMYI)w>C_dS7lau(rBWLWQ0l(K_@b>e_j<{$*y#K9#r4+&^6i`5bjn z=<(hvOIO0RMf=-B6?{AT=G`{bCSff9o0fQQx(L$KMwmVE{kGT_z868%igFL*fpp09 zdM#>l%{z{TB|tX-OI~4{2R8X;2#q%#8L!%25o*jI-WN5xs0)pk>7a^qCFb&A^Juyf zqBaLYV(x93?#nGfY@6ogmIiV5n59ZN;;f3Txr6~*x~)S>;7{;=f7sdsC?@Fk*YTrMf) zMz|R?UK%%-VO-fr(>#)TTZ+RQ5G-L$4u+^K9KnVDw?j&+j3JqlxpwwE%(R=sND0j5?8xF zpcx61Gosj4<|2)yu~9%F6V;ITTC};Y;kl7+|L7G|F$Nq{|pCtwR8O1a2L- z4G0w0+OY)ZGJ|877cNSKEutOp0=P5HT1xE@1WrZUukRwRbbgu1 zow`Ziw5>6(wmb{B2??W-BJc0U8OQf0$&5p=9-*LRB{SoIPeH9XbCV2ywIM-N>T*pa z(ha@T*scE^IqWS;;fH{l2q%Xs32@^|^;Z{_ORW(1zxSWkzV}`qqj=!;JdV#7smKj50J4F#uupP7*!1XB@Etho z(#0kF<3-(hex6jsMASt7KK;}3)ayg%ESm+-c$oDCDil)RyjO(PgZtNp&zD8Ni-IqA zw8(=Cqx*Sq4QOIh9;|}dihxld^g7(QzLe4y5Jtmb$;aFemp};np_~&z2GlPnz-Lh6 zc|>E{Zo2&G?d{iSx146Rkv!8`_wxC#M!Dl}Ub@*&t#RVTCn6{)H++hw^ zU>_=Hhlx=~O^q~NiJ}s;Tu!oVz(~LzCf>IM@7JES`6J|wk4;+x$ z7xrOm#JUo8KCbr)sno-ck%(fn<}{%PYB>;Ac8LsE`C322y_qds0Im^kPLpu&=)SuX zp?$rleNzv;M?g60BkNwb%EHp}7c1jq61o~9P7eMnCqz|tlORD|=(}XLbhd_Djk|k$ zs3t+eb*WUNz3~Rv-zX4Mjf=43O_SU6lbE zQ-JId(>0tY3+X{OVxfD>AYZUX;6LUKq-iutlv*?pMdyT7I`6Yl>(}(l!oX$dUj5ET z7`U)1Q2jlv-iz#C?{WP_MU%q5rl9A|r!cCLB1==V6i8FiigQ;W_iX>JT9IoxHN1s>?!IB(*;LI zMOv{(9zpXV9TP;#8ZFCy+7iMqOyma+xGitm1ws$qb`zD50ob|sK6bLq#hSiG_pSC> zH|U8sQ3)9@D@JU*eVZgqO|kO^Nc6Yp+7hxG^c=wq^50XJOYibk0$e;v1!3c<(vxoy zl809Ar>Qy*546a$tLpBp&nfhtf~6tM8zQ3s--c)}cEhYRIi zdV@=G1l&9BpE9WmrZ)6WrY~;s6%LSW@iC@B?94vCO4bYz!I&oO&T|Z<6OE(>0?s<= z6maHFlG-M~^1w<$WW6sf`s%_6{z9Q2aDT#>QKP93X3Rv8cga3FSo>N{n~p(ho{g57)vo`{46ht8QJR~W+by^cJ~NFAE+r|%#{(hI<|@s^VWlO zrh-2ILll6y7NCTX5EV&ifQbFh!bHi`me67wANg7tDum32=OGgG;|Q6G;EuWA_4~94 zh_Gx}%PircgahopkHg+TI^@0kWI3#hND{`Ilj#BwBPEaJ+9jA+~-F&fS8 zfkVtC^qhqEE4V<3mnGVJUU2S(HoHdvj}(po)jg43>lme?q`Pq%nszTdkZ@Gfh$fnQ04${=f1Wy_AHKhKpGWvT&MmD4?xI?9n01*jCM07=> zq#TSk1VeC>k?Wq3E(ar%L{gZIAEeTZ9AyxZK`l%ZBRj3^pLN*_M2--P#mE89efS#B z1t@a=C7ZADT!3=U2-$oEkpns@7e9HEbO*Nt(CNB6A|Ne1@fb2%> z{zfDTqRWv@Ocr!nQR8bsr~}>H@#oU{EbqyUXCcc>r)+q9wEyFNl~wQ&b#_9|#wArc z*tfAm{jD7fsQ%VKR5^&+TR@UMhAJ~jIRriiLb?XeUas$}WF!*!qRm@|5#zB@k_8{3 z?hoH>7*aAyn*$;m_M;BLu@*2Q<_qYU&Lku>mYjnje-)YUiC+O^Y!Y?qkt+-FLME8Z zA&9{VQgva(pF(DvY}Ge%X*egWcO;0KI5h}668y#W?!|uf?g^0}6uia7-f!buh3v~b*)zG2UULb3Dwd@c}8 zHN1t$Mz2ZGmEE2p$O;m)JrT5-_V6tEUxP19UGCj*+_V#_RzFwpYwg;6cXhoLm_7W| z`XqxN6#o?{Rx`TV`TQI(;HWleA-~prqK`T?+nLiN7~qoFLXQ!Ons9NzF_^JI>FwsF z9%bF7f-f&v9bW_wY6ZP_O|^R8&H3ui+Van|<$uGezX(BVyk~i?;I)n*%+eJoIqy4l zj%lJ|Y+Sy;n2fLjQ{v(=Ln3h;z%%FG!MI&h1~uUK-`-11JE=yL8rf=BI z9^V}yQ%!9L^?Dc^NAQoc8cgjTvs+Z-rG)&UHx_iE4v?&O9kX~%x zAs8XT&==YSx$=qs*GFwcI2!u{L=K^%%|d|Ls*0Ui-S1n$G1FbGKowYM$uGANxUB+v zg1VgXrj0ckUL{vcOe^DiQaXzso7$G@v5!ZUCU?X~s6s|wI9m=v$yG>wlD?4o>3%Kf z{Cq58qT7)&jWevH9Sb@v!}*1*+Z_vFm~bl(dK0B9SU8~I5g7B$Xbr3P)|*JpITrwN zG5#VsT_`sHc=zrUs6VLJ6#Q*Enx#E!>>1OdG^dIT!4p-3E+o=Z#PiFNB0Um)5oLaf z!7#gS%IIF0y8|?y%M_mEHfbHbcHXn*V}08R`2kli(bWTNT^q3Qyp^yVyPmY`>T7dAC+(D( zCHQ1tMIT{f2feovak2alnVHV8@m`j##NHt}J51Dq)0FTKs>{Cs6X`(}EmSO7^c<7p zR_D>#HpP_lj6tky2! zbTdYG%uFa7eFzHOO0E)nR&=hq=eLbwewkpz33-eVdw@UNJ_?%b(*HsIcH#j`QaHuz zo(WqC*M0?59K1GfV`_LHtj=+0PZ7A-bxv z`)Lbc42vFsGGeE1II(6Ky{P9J!sMfP4D!+ROliYyv!V zX0(Ltk?=Ezvwj^Fr>JGvn;ogibjhQQR})ZSHJEVJ1&>hnwoeI991xc9+|}UQm&~A# zhkzp&`0`{%9z%{-5&3@rPy^slFt08?B_ik=_XouNI#!R?nK`egt z8ESwP2ti<=E8?J!pqY8XW?dDWNEA=75qTba@J1ZH)#!Jf+LfFFDPC^$_siAh}kV<(s?)N_=Jc{ zlQ_}=wC)j^etrUmR%{;#FI_1?5_e1$?O+Rn>kY$Dq91JK<*Iktm9FyKAg35Dc{l+1 z8qij#mCgR6=kBRfrK@`)hbYF<4+kKME&zN%j{6nj7(C3)Jk-*s5yTCLq{d(<59Dns z^=?0v`L8B3F0W9KUz1A>>w?1{V9Xo#s=1a}vl3~iL}z{g61f|ekcwQWi3@j@^Rtez z>3Q?&`+b%!HBp3hAWR0#b|_q0!~w&eNuMhwiiG%-Y2GCaEbU+-k-ebLkQX={12x1O zsfA>aaFq(b-7*E!u;g_KLQWC&0tVntiLwjvrXLxHKT$)YtC)u_f-@cBS-tn=@jxVK zN~uG0DfocW7w9+)*ct@0)jQF-AD{^Lg$sRH4bA$)R9?`^ZDde4NSGBm0G z*WQ=^L%IGB-+k&FI-TOQkrtdpJK9tl=4e3+EvK|79h5c^NsMJqDRr_%g$ixbN>bSw zWj%!!S+bTiVJwlco9F$$mzmM$`#i7b5BOd`c)iSh-`Dcqx9hqZa{<0ZgDQo%U1(@* z)qt))6~o~T{-!2ra0Uq(FlL@r_Xq|06yOH&Y-S!ajTwG1qHVNi}twct&{!(@_Vo^Lo{FXJUpB{0*SXB(+ToP zu+Tw=$Plu)NtLJ6+w7d)yY^G#V(vbmTV?n5rucMvTR0S>)`2wK?c4tiOnzs;#-qK1 z6-C@QTGgzG#1u6MofUumupx^$E=S_)dvto>g|aBe7B;gVKmK2OLd6(`(1W|m=#i{~&4*LAyY9Ac-6*9P zxoTM8@Mtf(TvW{#?**JY@dN#JjUWl#=yFwevTl%yCyACYNtNI)x_}F?vd#D8No`LEq>hW42PeP zopcR!iV|=!y_eDkVs?2lb*zNj1e99D(Hr0K45vnMK{yyFdvN~5>mzUskpJGj>HSw2 z1xuAzY#r*^6D8`lJ9U_-36GR!Fsi_Ur_`nCDYUT|UP{O?>JN7=8394Bv4D zX@g)Z_Z+}N5V32d4qPILDHq7GZ~Q2wnFp4aq|a3%jw_PX$kPf-c$KPE$X zFG%kAdEi5Kx=@6mvO&kdY@qwTCbcUTs>;2QkqNFMd5BVn`1}Ca2}PZ|cE;qtlnrk? z)$cL%r-6RD)(n!wyC0&;Ayj7KxiiwoHV_ZSA-)gRn0eHB_IL!U?FSYLls++ucrcB8 zg9M}w5pWCBv!#igP6xWWfY`c*VnUo0kbc;M|I#%N7Lr|jj`6IURm>Xl+*s;VGlIxR zD{i-MUz=wCTR8(A;^;jveY~sPdYfXzAlXYUZ`HsTQI}2}3^IA9v_C^!ro?0Sd)xFL zL*u|(K$%O|{jlqSSin@^u@_*TAHpEhj>@oQj0d06KCk6s-{{j=jpk+3|q+|>?*=vVoAsr|78&y|vr9!}*k z0~<)Nb4zV8IwEZi5XC1+sjz@7Asxz=8RV<*TuBj`jUF3-M4N-TN54iY^ZZqfL`rGQ zKx#UeW<%MTZz(Is56B!Ew*z+-gSH6D$Pi664urZXw%31ijO$EBH5N#s;AiMF=Xyou z$;mZIFJDx37PbjKe#-o-V7r!}pltG-mgnQYP7Ac%pVt-n)Y9tUgh~6XHuhc0D;TDG zp=Pf}`0KIRPcnwue$cLbI3rnc>5NSims^d>IQz#D%V$q@&Yle3!;3xDuWS%7_t>WF z*Yg0}RcbV?Hx5s?&k_Dia9{l^UZb_q+qV@*`&!Tcofzv)zQ_L1&6#Gs z>XS7nk|Ra%aGCIDuFw8u^IE^WHyihhesyJe`6SM-RG({ykt;Z0cTjgM%76@&3BwP8@)BC25fG}JWJlB1ZS3qXfkbsr%KYlE}cwb-C1p%RG-&AsoCP8Fx zir#V`fJp@GPc(1dDtld9IEwr0nklZW8S6T2OCL=WQng4%V?6JBy)wEAN?EI5{Lw;v zgiZFsDiLpJV^}NX2%xdI;L)|&+j3s{xyR}dMME-BHbaA3!(cWxI&-!^nNQAUz09x( z>XCIIlJnI$bAx4m>F&z|Bs6%{P}>~1ukiAMwOkj+y~_Wj4!Pzht4FOacPzqSSjfW0 z>@>h^!`j+@xn++$obBu!8PMA&B7VkPi!!hJ&A`aAg}5`{ch;6@w=MKkdDg-A-yeWU z5=E!>zx${E7&kAd3v=stJNK)G_dc`u4fOy5kM@`J@g_ICM4$)~B9ZQ5M&k zQ$?)z|5?WS_OoXTL~6oO)M^s`g!A>e!{<2{q_B`Iv=>a7aJ;>t{8H89IW!=Ngt6p1 z4xLGyW0}xPj*@e;Yi#>R--#vJQ^*tC2tol*hSmCe`{gTsI8cs~PXBw0hvg(8P)FSn z=6L@wZ`frWo90;v?6`(j`^J(I&wiw8vej53yQshJYwp%OB_D{OEj$0WPE49@{hV?D z3E8+K5H}(0Sz8`f?a1YuW>*ba&!=V-o9|yWg~JRdOAdF1=1i~bk)Cb5h)jkv6%25~ z8B6yb6P!yO!j-@G;)U7lzN4KZfUC*I%OR2Z=*svxA106(QCX0d65sN3Nh0Mz1sqG< z{%|}8Dh?_`7dvS{+~M0R0bi76=2%zVR3saOBJAR<^66wp*9MKs-Hd8W$>Yh*N&^4 z2zPKXlvO>OI+W|bV4yR7pt0A=p9awzgyZihH0I>5%K9a+@;5l#(X!%9((16~fO`9+hSt_`CY|KgHiEj% z=CoQ|4;Y_oBdt!1bKVbphS=_`!0MIZ)Hc+90DmbYf4qZ5nK9Y0wwa92UdG? zkX02o*Ir8ZYH^tkPf0)dO^bWjrNPe5)-9P7ypJ)P- zjCV&VqAbmQoq)O_gebyGOWD6XiGMc57fA0-Q$>fRjc4RWhJ(31Na03*Z;LxD7!mCt zV{|{;Ccf zUPs9y_OD2gV-xqkxe=!7g%WC&4)D~|^o=tBh~&3yce2ymPYy1i1tUPjaUBo12}5m) zvuVDj-+0BKx1vW*Sm+0^!p7~vdnAlPPmLJg4Dy-l$m#c8o<0tyO}37efVhBpVqHw! zygy3LA~rcbehEYK4c>_VJxf82l_t+r}yPc9@7$qxG6C)wC>&7a(|~Xhhmni{^?5$_NtlS zI__Tja=RAU>2P_xZIfh?NWeySB?xur^j>1*9@`yn_>cxw5+A(iYr-L$ScVngQa*C7=_da`A$vh8mCxNrWe6HNsw(cOD+P&;j8aH?3@Zp6kIyOSI zjT9>n%2*_817VTvG2Dzv1UN84^Ckzbo@*c6?}f%0!OmW!QlY-#E+*GmvSH@tb6Kay zz;O1@O5kkmyo@@ z1*F+YDDT^UcUZBCC}BJhe$dN0zfVtbfpy?OScNpAeG z492;x+1PzWl{OcBw!dbHkWz!TZrt^xD~Fj2TQ(X}-?4-WGQKRy~$Wdtm!&%?M$#c&J+DO&f@}or?aKzE3uu7RT zl&2PO$j!diY_Kyh?=WM@7iert?DGp&KtiS5d4jjk9CFd?Wy}k~miW=1%)XpH25!ND zTYaxhp;^u7?&qqG>aMubsT8Z!xFK;k?OxUU{Ui|jt@V$uaR%N{WJWpT#A3WcnLRnA znk9;)0v(r8$#VwyRT9t6A2r3Dp;De*!0&n4cC4<4;*ku{{AkFe%{!yB)^%;VyN_noP z44P+OxzJ`ng>mI5*LvyOO>BwE~8v=wEFbO9rWtBA$>dL=S{`%7ke_psI@ETU6<@HB%apOW{1yE z`T!y#6upf*%bjOiq)j8mp4MqEpdD=1c=5`$QBIO|`uryT45LGLHt7ThyXk`_eYrW8 zFDGiMK9pv`40x%I7B4GaTihMHG&xC#TF-7s!dS$wFe)O=>PX@;c@BAE1958uI!=8o z`Nt~c3c?z|S00hXR|X+aGg=M2W_|jeR${#-N!*7%o;a0Ec|Z!P^)sDDP1c*IWyXx2 zYVWH{u)~t?t?zPiI-al)LQ*3FDqLUY%k1jPh~7*y8qc~$39frCfn5qk$qt2|(Cq74 zjPqMAr8qoZuUhnlp{ z9A?s73&$i4t&Bh*=?J~l4(0UO-zmo8I+7np!N*!d0)dPj`b*NDb*GJ-_$+e@B}cc_ zS;N)m7)h~T3KOWEj#4`v)JQc4y#5RHZUADg4@SQhuQ|A;-PG^blqDL%Q7ZGX$2P~8 zmr}c&O_zN$jLjie&rY?+OW?@&%lkVkojvW7H0--gbn`aRSRsP5^8kuI2R=q6TO4<> zt9}Tq7qoHX>_u0nYi{qe`WqGuEwdJ;=CcA!2i~2YSr-j#%u3Q~KFTH7BkzBGR#?$f zNyUGu=xC8{EDQ^D&vi^bn19($f8cXa`ov|#fB2VBJl2J0#klo1Hny|?dB)06VntaV z@Q&=YI9)0bxN#Z)L4%(k>V5}9yp$*M2RSERSteZW4%QA)V22LZEHlr6Z#Am&4PiVg zZmB+jnT3D+fvh&sx9{@{=gLkQc0F88)$27F=P9WVn_i>KxHI-ZM^)|>vRm#s6}T)N z#g6@7=KN7ksxu(mf#T4~m4d}u4@*E3$bCW~+o?Ig*chz8C8?=RO{lm@yB1<3zN}x! z-V`T_UoLQJ)~cTdBX4e)gf@8%n%)OU?j1|MtEI;*Xs(GAa%)aZ!*EwQM6~k5=G*z- zFCzhV&EpK*5sxfjesy4VCKzzRH@9 z^6J}18^}&Ii__eh^u3Ih6-(UjTE_4N?hh|jM2 zPtaDF8zv z(8@M8H~)A!bfqkDvKouGzT(~isl80yP7}-2BuGJ;u1q5>SGvo{r(kHv$JPivrQ*N)rZN2b)W_!msY7AXH|`E$59$t zyh!nA%295`zW&jBBQOJke$o?+v7OhUm<`ncDRJ0Km(%i( z^Yc3}#HREWM;spSzA6YU=?^=0_!mHcp_+^((B#66W0tda*NwvAL8$jI2GAT*7F$Tm z79t43EOf6W*sF{6yXC3+6)X_sZYx`Pu8Dd{m)-wI&gZQhO_N9NB@)~EtoT|-4BDTR zDLHo@r}d>EJk=B3qh@J|kg$v)$g=OHUkvR;ALT51QsrWf%VjJVgyMMrlX%F65Ez9; zVI`(tEd=iM^U1(oQOk=%w6G;(->5tIQglpYLpXu@v>)lKP_O;fho!^ygX9e`Hdj?u zd~9F++sMM`txsL;KCh#s%vu$OCVPqiE*_=joZj%@&Wg64iQXRf5jY`za!LPpnmz+T zj!<+8AeB%GBEGK{?x`*wIN2Ykv7xVfLxoF!hfZIgU){@ibU#XOQllEl(4!Ko<~y|U zU%!6+GzKoWe?`WE-4wZ}wZ6$^f(RlV;M#>Hf7(1T)h{hB-WBRp`yeG^c#vM!E@=5=9D+Ck@(^RrhDKKpYIx9>w(nbS_ zZtQa^fRZdH+_cLHv`!h??o*Q%e||nhxMeAf&2@! zDu!;^_s+6%a~w*0&h5w2pHY<_ZjX9klXtVMd3T{4`;T5!x^Vb>-=YCMhW; z37_ihis;sCN!y_~Y0~AMkMXCjN?s2c%?Zyztv&SOzbR%G{bhX?eQm+-z~yl1@U9;1 zL}ygtgE0mImwzf#Q}gu)-uNGG(l6ET?a&$3zs2cz*FP!(3DNw1ueX%Uuc!4i6n;r> zd*^QZ$wWM$ifzMOp@0z)$gCDs<<2j>HAgHH6BqZ-dspZ#TKmHy$}N_>md~Ua4?5zh zov$x-M6N45RGqdL^|`*A@n^~|#evq&4E15P>`WiHBKlt8S2z;2%YP)iuzU2&wSqE6 zzI)U~^?twv`mpm7S`Qc!q$iwocA0+4y`43Zj;;T_<;z+r;TAS4BzIroK{;=w4pjtPl5OuOkKdJE?Uq4eTj(6x#uRNG+-8`ixka zt1n5FdC%Y@-$1gQYvGY?)}~P|5=^|F-G8tC zS%LMe`%QUzn|I@sUsM;Ec5Vdnnp-J2=r-L*!*x#zWx#@2D*BrmoD1DZps#Ulq6_ki3RFI*AzWv{FQ9i zrueK8xRhL8SnUCx^+;8(>~CFe%tM0fs{JLFPvVXAsZ^xUk#Go7ri=C}7XvMh@BIFK zGZYu)2$qZafM_tAcRQBl-tnhiwQGnL5H~LJJ=gVS&1X496f#>wf zNU<{t*nP79LP?ibn{Sv3kKU7TH_t0EA&3>$AYp8+*ts)>P^{8qA*;H;?;Uw-C)GiL zeMT%FWv@R<#N&QaLmpL_#L?^i40m{$bV!lmdWEqZq1nt+!JWcNttu z@G-A`l`l(F%@6N2us=mPhWIo4=*{eK(i%I<)Mnw!Wl$;8Bv5cnw93FR7Sm#<*@RKj zRCYP@8$l>$ZHu+3u1cFW2*`Ksw+OmFOpGb?(Uzc!8y7Z?lh#qJ=`l5%4)tR{1;@6N z>H(EPrqWPx*Sva@b1cx1_eVheh;Pp|Pi>UVR3y zQe_7}zI&e>PPzlVe^_L34kV1k?Pk|>p<7eUL7mg`N>ix=*~n)#zba>ix1@_a^u9IwsE&2cu#6NBwB&&N^lepMJ!&4Nmr(E$6f&!04)o@6bVqc z8?L%Oj*_OsjeA$is-_%keLB&K&Lvj!iZd_tWI}~Yi}X)}{k_r)@&;ca?~^6Xd-b=IATi1` zmDGWkPNKRygFM6AUh>bKN_O>b8ASKCz~F8U4I0({Og<4h;l9gsU!pc^{xsX=QfDt4l^ISt z<+X#Jkwq)`j4TbXqe8#rU{OX&6JzwpKA#cG_tsQMq#ji0Y{Ud*>h3S$K9m&sUehI4ptkdPM75JS+;pBtgBMz`q-Rb77M1RbBlKFCl^PyNTKLmdqVSbHw$Oo}KqmUQlu zAk-J}olW{XL4RV+%kUi%Y02BaH$N%1rO4CY;jzujgJX0g)X3eW78dz-R#aL5WdEa5 zZ-VGNdd#V51X$;v=ZU-Lx|%`KF5T>*M?+Cb0hp2y;U5p-EA_)tww9`w7G_xHTj6F*|VqHjAow*5YB$OooygSBT?xU4up}au? zPF&T?`qg;Jb1kYQhR=E75_3fKbsZEv*D%$tFmbN7xR|9qm2YK=@c*f@-QO=?8a5Xc z<_vtxN#%pVx+fyFU-={ySBpWHz47thrVnWltAKH%=>**heZ*AkqIFcXlYW zRgKWYp7i1mm7U9wX8ho(+Y;TfHYxOcIY*8~Ri4ylMN9SL1<~pn-IiaEnSbroY_LWE zVr`MRpisOvU>;f3ZM~7Y%IP7>315R)y-a%asFWB!=MWp^dfI-t2Im+A95t(5_?-r_ zd07Lq#r?1+Cx6|*74R^wf!aOEojGMhwjOmcI5-Fl+BxEe76bemqMnWZd^Gr30QsG7VPfZ zdj?n|>DvxDk68%?64tq6mxnbn^S3B3+6x?~T9MiuJ~_V1q5W@_E{Ozf*wp3=o4<6i zXfC#ghu-y{;$VQbXg4z|!Tr9PEK|_z+g)-mw(s?kvq%olKZS><;jWMn&&A?b*}ptx zh}5b-(aM#YVGkCrC_vg-{9X~3=}|>7wcpBWM}uN}jwwLB?=>f{oS=8;;M=*6q-$ex zYTI+>Agf|pzO7ETrEizKn*_OK7aoW{lq}MO-9Fik3Q)rK;kdid@bC`Tm(RkIcL{z4 zSGQMFBIH99^RSeo9;+36_?i<+04*u4CwJZ_SDP`M-a`blU@uy0^mW4XVOim-%q}7L zmHR5>(d+qM!+luGrDqXT<#jq-b*;T%g7iW{o~SST{;R5iV8U~m41RD+N;~Hddbbd+ zbM2@N2Ed5u(w-d%Q+7FCoBgy?zm?YmHuw{ID+0d9-vDaG&aRy6XyMr!~0w zDv9seoH|Ds03kR?%Ryd>yX(&~T!wKrk>xuJsJ5tiU8K?@0m|H+Z^4xL&{dNiGZ#q9 z(!YCgkh*Zv5e$J1G&>en0@TxfKcgpE?}%VrZ?Q*xK~78gqrcV&v=t7#%?h8|yglwq zxxaq*=a!!{G;pb8v-iMai|)idFL(7NYlL^*EVY_j41w3>ve&`5Sl0DWzcR(Kk$eNta&<)3ICdX{Bafe9{Aed6SZ zi6A+ZR!E3@y=fqnBfYkbNbE?a_T+`c1}2s|W?~d5!mTYYCKYQP8~9f0wa3Vrx8^y0 zF#=Rrf$|25OEThMgWd+szxj6?773TVBZHD;9I0xtTi0pym;dOJ#KgwT0Vi6zSb|R_ z%4aT$5_Gyer5AFY1F)0qm zvtLcnKM1+B^_X8?V*hwF$1mu-`~ole9-$Cdd|u_~XI9kJQLgIe>8c6nQhS#uZj}fD} zt$NgbCuZ|$yHltwH6^w~@{8k-zUg7Bzi(~#9?6j?z-rVFvG>c`;L(2|joRv(wnJc=ts`DJ7`7%i`bC6Kga<-os@7o`20yN6 z#2qCmneO5K9Z%fq%*`U#bt=0TMfJau*L8&tbxU>yznOs$Ulc>)w-MpGdV6$z?9H%4 z2YTv85}TiuhUw=XAM(n6*Q}wp5Frs;k4wEMI_!|V%X#{6|F+K6+dGnVjXWm}oT{(x zX~>CBP8x%VV+$3i?GmaLQZM{U|GSDZUZ=9F{PIBmyUP{pI?LS>Z)+nYyUZ-jKWbUf zdE>;3vh5w2(+#{P4H(V}pBCxwtgeU%Hxp*I!) z274x6aOgdgM5uB9mu-VVZ^lRL3g~Z1;HtqCrmOfA;g9r960&tdv_cooN-WW_Di7o2 zzKLNWVkwtdVtj=(aM1LNQ>5WEaqNIu%w64=w3DNL&y#RNv9<_Hk@NZgf9f;}=7Mg#D2(dA}H-4>UL2uyXWZ}^{^<~|w-HNJU z+Waw$NWEv7XlCn#4tSz17r^Exd-N?-4T7U|urlj`x`!J}r#(;rg+m->xpJ zUZsGzvl!~_e(}zHnb%w=$r;P})4wz8=unZQYuj27@|w{%%G~-t#n#6bpFKaH{JZmI z-imq`UsZ%G4l_GU_3j^=RBxnq7a@)ov*xOD`S|>kE}Ww*#8qG>ius?nk={%5-j*yc zpYhza4fPs#hk3lj+V4PF6q#{KKbmOvG{}8xo+`+X`P&TssJlCTS3@GGC^L!LdhhM4 zOJ8`5Jl7*n`eR};myAV3!6>^X8V5`ph;{`%-C@TPN`N7nA$8ALh?Fu=dt`vYbZE## z7xse;uSZ8=LQJpBLP+{6vm?#+g4O(0rtF@LHqS$hKpFvzYRGiew-gU+vFn=Qg|MKW zhJaIjc%Pu&~}gKp7!D&oS62B65Rq02?+o5)%d7Bgb^=z62;= z^~aJ(bz|O%*G>)%oi>o}8eKJoI93=v#Ob_U0E%>Ybd3$_4wl0vy0y1vp`7gFQ92fr zRS}soy18_Cy8Yhp`?_m6WBFx4c>9A}c|{mZ5v8;S5LSW0_dVvl3B^-@dxKSgm?Qp) z%Rusok>GHN+u$ejUPUg7=&d8PhiQmHq^T+75R4o5`Sg5=RMCP%fo8esrM`rxHm-g&%xlR18|T9%>2@m zJ({Fnr@NKXz+;XY;unsNEbSl9&kb@@Q$k!v21zFT!Lj5WqnJAg8I;qz~!a)+^#-rdD(TxZrWAp6G?lb)_Db>MwU!(3m@m?uuQ z)OmGjL)6wA5nzvi?u+!Mg+%dwkTCqnh2nxLX&<}CQjJ7rx4dkgd$yIA+^|JRNji%% z-UJ)l=#>V4grSAPKL-umEc8h z{yy|17IA}uvvp|Xc$d)3zp%l3d-?E}x<6pF{Vq+m)ymRX-i?lREF`jIM4==uI5G4p zD-hOCsx$4~a;NJYfXCn=J%Q|3bqA~4$D=x$zC-zc4@3#y99x5k5B-c!C!IapzyWZS z_()o9u50PtmRK_52SiNTr%D-rnUo%mcc)fjYQa`Tf?pVU`|Qi#|K418J8++z(HLo{ z%R=^d15Q$m^EoN5%MSn2!`q{Z)N0Mu9c)Y?h=@sE%cmY2o)%X|3(xuML8EK66H>-N(ZDjms(s>L!@3ltq_7g|HBTssM9@sa%U!Bi@(U3 zb`Qcoq_C}qD4`B)OE5P&N|+$-)~KGRh~$$Q+8qS>!=GmAZU^*{`>*J|wD!Ke3$%)3 zQN4nSd@R5$yN`Tq2?YA34-R#vL_NnFP>W+WpmAEf1@HpMl>JlNJeLCoW0Ye*s@E0o z)}`dFvIX>L_y{w`RbKHaD;?w@<4?={m4yaRFb`7p0x_l*Ln_ERNC!V*_90PuLxrziXxG^SCXYNdh23KWz}K{7A@4i1X7O{41GEM@Trp~7YF`B; z2x0`3a~i~3JbVK*3sre)vAZ=ityq9LX7pxt2kToj=48K`vU^-;#jCnYV^VY+lUD?$ zjD^~~GzZ#ec4NreSJB`h=K&_`tw!=YVfJ(LbYHr7H)$IkQ9yPPG{eY0r&+$g9UX;* z!<~^>?>e?&5eO&gDD&9Us|}!xm0Er!N2c64$>E@>{Hg30A=AG@oF8dZKvc*F^^n}AvffG~q!Fx)T%U##sSngr z&-O=0etsZqvPCRYOE< ze0DEPB?voZIWPIh7(95@9I)&ogDuxU_eFn$k*JjBHO_=kxaB)4isG6_#%5;~E(2SW z9~%WBFg2R7}pZYW^NpV<;XCDl-62Jt=1NetE2y%}px{+X;v}n;}d# z%`!JEDrzO>ZvgCSsl_^Y%3`Vt|xfuqx8~r1Vmf`jY0OiHQ5W)?jU0AsF~zChzowFHPP;g zuCAqLTOe$jtH|){o>v>s=4R|r`36MHDXNezX=EevI-_j)f0rzdN$djk9A9)rl7JsA zVmz~Eym$$FZ(}11J!-Yoy`3(>tmH0aW?hN7WMflmpu3#|M&S|@^dwO`IYcQpQu3HO z5Y4AptV_FGB4;5|1m1&s(ITHDPXNmXKm2pX0h8G}caa*B1%T39no!JD70{;Mte^yS z9_qB(4ZQbSkp4DznF8W0V9+1`KpKe2u_#;Ty*+p}LM>jjEl!d)xBLZ~Mz%D1wyg^u zgShq#`L^0hd`o9AP>nZcf+l{?{P{81Ok`g+Q4I;NXGprJIF4Vct}};{oI#tB?)J@; z;C2xswf@tX`DXKVUpBh^tAV63G@K{0 z+2W8%cqWfrh%HV=gA&T_#=smnH&*7?HBLiF+kbKdA90thg4ZA`48X6)=ZwP(Po{Y< zT8MdB;e>f9ji9HNQY*GzxeFrnzC&Ad@7X3Vj$%TzGjw030dUN+Mk$y5YW%@GR0T{} zVuR$s(`hV}6iKs}tA`iN2|OfJ*G8fl%!;ab#ivD8VCz6r-Y`n!J;Mb2t)=c1FlR`O ztdtbK1J$=LryY*S32T0(pU$Ozcoi6-ExBf8Vymg8s5%(GU|;sI7YjtB|W5Jw)xrxF@aWRzDM zm?xW3>@x_}1KW9tcxcD)KOk=Sv3Tf)dT~6B%wqc@({ljMv?(Hm;IDb0z9{}iR8(Tg z9!nf%(|cG2!d+Dw2nHX;gSrJ{xg;>d?t>+?xw)$fHg8!g4tWCN9W3}N`oomL0S|>l ze~E7%sE1>il{U|{!{Q-rpU41MfP?u=%r)7T^r(F79KzyxHI3BPq2vHjwh4r%+(lNK zYx-apjMGxvO!=hF6i_Q-<^h_c++b$X<+zXmE(t;{;T^$^R)!g56@wdD`d+EGY>g*Y{vWAnwy+$k4)yM1$qg z{E`oEkYEuVsgcLL+KhXvmm6Ux#a{$LLJ`ox`H`U`TNM4*&$V%ViH}i)nUB>U?il3xZVHPVl$>n8M?>1zoSNAxc+M>a zGyq~-@tpbjjGeJ&;*;3Z;%+^69AY7pYtd0Yyc@otF)QBFK?J0Ex5r^ClYgC}W%x9` z8#!ow3>b@O$bXRN3ZsP)j22F(sCu+}D!clp@v5k}off>1klv&wdz~8-RR{KkyNFJg z$Sn|yLqdX;h(DXLb!xvcO9f_ONTY~Wf1F?*qlFN-7IB9h}Hc$1;~$eZ}kr24HeS^@OpTA8G;i+UMWRIf*8+87h1LNZ7KJz@E6y3nXuE z10c*9_NDZhVyW`gb{hvghQ-d)W<#cdJ<*n1lVLi=`9M*CBD&5nZ*YZoSjq{$g|4m%*6VFBKznD1@Z~h*%^-0iTl{&Z?q(dwkdK4dJsFZ9h|dHI>D_V$MvmUC7d4F!(@4KN<$ehXSVoqwf;A#F^@_KcXbZ-N@}ln$|orw^dY zlm%LZo_u7CM*&STnRE+F0aZO%%pHw|2uBE&ZJhfy!{2>!rBp5;*iD;0{#oM>5V+$M zg~(}GS(+nxwm2A(Pigj$ot|y9wmQ$dyHSqpk{F`wfzMH1SRn-)swKOy8*P`-k!DVu zIEyk+ZTEo$gGySvz4c5qp*qo9eFup6@Zk?hSCJl){YzI5`1ad>gHR1g#lC!G#}qWA zzy1ikA`jy~F=YwqJ<7JD-jUtl_+QfN#V3d>>s?vkf1+@1hhq=HT!!PyS=cWTD|)(B zklpVzj^l&!6@nR~KwY3CF;6oWA;VI3NXn1nQAL@;jQwA^XiS@BXVV^%$mm9w~uQjZ@ zSIh3HgEO64m!D8*tp=1oK|hioP@)=6Sqwp?l-kq zp!#U1X69iQ*L@Wq@6GOakc?*Dv7y(MvW_v9CTiRIYLN5<2r7m-O^JUwjzd0eTwPin zIr2PTv@b03@Q1l!Q-7QP%pIlqQ*$vTJG%&&%P0HTkgVecFYtxa|7>hL+vY+&x;V1g zguGm!q(si9{Wn(&n2}U!q}$~l{;s2H@#*GDX?ne@YSHgZrCstCyF=kT+6@`ZG)Z9h zWEUy&|1`}m?){V{d3OD*;B<+VM%LXkT*8BK@Qn>rE4= zgLQbJOB^Ep@3+oT` z?O$2it>gx$0X#SjAnTVAVMrx%{i?3AnP1ZHZavyPSg>nGMp>YL7YamwHv_#U5U#?;J(YkRQ66DemY)S{Xy~!N014O8JX?X z7TB*cL0WFq>tJb_F6mYy^RG*uL5dM2oWh3qF*i>|_Q&v3Fr1^Mq}0=59Xi)iN08nO20OpU~-OwRHC--4@MS` z4|Qfm`Xw&Aunt$5{5e62Exk7-rWnCg2|u9B>Q6_h}2hY9cGYAkgKHV>-G{n7MppE}31okam)cs`VIIXsCWl&$+PLnkvHG%W_fpXgX@$gFz@`#L>SyAk$?Hc!FMj^_{Am5m?FDDLTAgs#(7F+Lnkv)Nl7YLTISx-UPw=_}Z6;=KbKYx6uP z4~}CkoXwPoXu8tEpPi}e{`fhPmiY4^t8xie5oqx~8S8Ej3Wn(J2M*Hop;7^IegAp| z=evE83stx#k(XSHqoZ8*sB#sz;2p=(On!$QJEU*?XP{o!FapsJyc)=Fq3kBRIYk`O zIE_W#WFRpHMv{Mml z7)vzlfDHmwtR++j(moBd6G_8%p zkEbEKe++sZmc!8=aX4L)05!y<$nZLr%$*LVUI*2{D^)HqT`V7-Rm?R>pjM)1@CSo! zF;+FH)}MFC2Ps+9x~cSDD^e6CVJFi@N7{sac(*z-c-6~&iG*>I!U@2L>lUi2&w4~Q;ZGxe2w3xUZ=9B zXc@7g@GTr^6pq&Mz!?vwK&~K6S_dR5#*4e}UQiU?gyIZTp!f%98!dAO0a)CDipCG{ z&PU^3JswfM6>KJV9YfAPd4RIN;WU%w2L}^!9rc!fH9^i6RaVe&B{HCWnP8##^FrOT zjnl{-aOf8dGIouFgB+nw=6MB;z6?n&{KYPs)@tX{X2mzxmMU^$6M#V+?aaxyL3XQN z0bhtWbbEvBm&`&%;&J{JT!SGZ&DHK;WlHVAspu2t49jS==ES)FxEjfXzr2vAZYn1;iH;-{FjvmUNEUR`71a8e|xOJBYR&9sXrW%*v zF(gD!rWSj~hdza55i@{M9G^4dEsYb%3yr)Q2v&)W>5>6(H${q^>&2My)99&^5&;KR zIme^0#;jraZV z33Re3^E3Y70!mVxcRZ>+veFFYy!6qNnJ^x$g|T%{J<~>dRQprglMjz+n~T%FnHC8X z29r}_k=Z%AUSbw4bq-#Fj(j+xkwhj<%bal=yoORchCvUV#mJn8o2DVP2ZwmK0J5() z^T6X^jhX!-2>2An&@<2YgEiD%mk}%K?+uGnp%aJX_dBZgAAzO`1(wW~0Xo#D*_OK$ zibHlHCAp5pc-7Ed*l*=C!c_-0@VQ-7QJ%j;vTIWEZ)3t*Kpx(N8Ci^0Tipe04oZ%XfG4Z#hZuTcLuc{f|8LO z@or3jlF>oz2x1aw(|9QtCVuwrF4UPcf`n7{JxOAH9Dtey(L*~O*}tLrC`^8u4XudP z3Rr|?m2?ibaT|c>N*7g~C$cX~*4Yf!!(b=xwriLGX1J%i&b+e^wU%dfgKu2b85va% z)v+s^F$M7q1=oQBry)VUry@B?JNci*X}^U~6pT)BI`k^>`B{XI6rBJ^!`}M>R&m4t zW=`6Y{sB?$_%PJ`>jYGO5W@QFj$Unl01Z8ilIyGM%!P{3^4NirS3e;83zA$)ypO!G zT>5DzCzuO+yYR3N2%GfLqci2%*ft+*O}{=)hsXE)dH#iZD6LIin(52uI#BSibmTQo z!2ZE*x%X|2I+DK|0N=^o1dRiOF=Ib$;yrBy=`#`7<%}XlB6^?#smVH>6_02^tpr?W z3nTi+p%(~8NK~-4UdGy*?^}h8_Fy{l88XKK9kQ3sX{`Jt;3!OmWwn>t==U%_$qvYshc@zxAkrygnjlWZiKDsb$kGB( zuHN%Xc?2qF5$mNX>x2ORx~&xyamNeBZ`k zWx+ycC!Q1PU7#|OnF~-AiS?I~F zi+oT*GbH|k!T&}p)3N)BY)lt5da1Kw5$2%>=AjuwSPa-s0eb{ql3C?HQu!dq=Dvjq zLn48D%{g7HB{50P4eYpUCqDdK|86NukWn|EQH)ESav zyT&S@zS$hs-!nR1PMZMvCM?6wFuZ;`fZ)wGETB-DD;70yTx3?H18nXGZI6xe4^R?p z5AOi&A6-CF3|7e}a2qA8>7|RgqFmSzDuGCuI_e=+yr87NP$8`os`&ud{z6=kFOS*^ z2M+DOP;k7;#N->VfcwkA0_Mb)yeeyGQR+_{+z9zl%6*; zwq_2P71D9=Ul8@6B@m&7%)@9lqPH^L7jFer z{2lPj>{vJm#V5P-n;A0jHl~b#wUT*K%lBj58(lnm_!$g;o+;_V!;hDEl@|dwKc0nM zt1-4V_6AI6--SoT2Q;(Od|*LR;58av>WbflumAN;2z_X2Z-||l6=uWdf(b-5W6+hC zh1!it^XjnHB|i$k`_8}@Vq=oa2#bS()!GH}F`Me}zq=nPWi?>7=YhBPycj=BEW+;% zrvo8w4DS{Kp`>ldxbOIPAry(fj#(#SSQk?ayfB0s4wPy`zWXlC3)B5|&1jhGPc=o9 z)}0B+y$rg6O6XP%(gSpwh<^%+1>~3Qfx_?J-(IR{c2Vjav;=W27{HhP0mH-tfC;0r zSF1&5sR=x2UwFi`4SHM5<{W_|uY3s4?RQ~4meYDHUr#OF1v1QsToUR!F!}kFcztHL zHHLTm(@nTGPed2u3EHx-K$t8@{01i7 zjoJH5j19A6>tME9l3i2TU>Km=fIbf=BDVsis~e_U4l0r`t=TiMSfeA6C=w4k(nFod zUZM}7NNbFP)Xy>vG7D%UTEIOQv500m1(wa60?>PmiRQ$>V8M6km_Vihlt0}R3(OjG zxB*T#NmT~xD=EWtBKN0IxiaDEj~AGar%J$O4%4j*}cGG zRjUH>5%GlCv@e#|}#D4@_ zB{xjLgOAW*7#xVyfdWG_2F+k(2Q@E{Bt{vM32812UZ!*x2{w-aXA#*$6W1SyJ>qGK z@;q==C$3@h!5O8zGEfuU_6Cq?dr{Vk5dwyDjEG*H+~0^JI$OGKV;DCm~PYIu|4W;xTB3Em02 z10=9u^j@`+itCT$eoIj3Lkd_=py3^x53DVt8?5ug_KR}YRFnaM6a*_=HAYrXdU5!r zR!ec~$>^S`sP71lDUb{54Zjir zI5a6i+yT0#v=dw`B6p6;(8^;SKGN}|h#~`IU z+zFHbLF{Nr0hCWV^EDs9Ek29qvfAK!W6zE5zGk+ZR;6jkh7&ppQLcF|xI1je-H3Y*;+lEY0gXTK?8+NXo z(b@lmV&4SP)&;~YSU7?Mxm{Rfqro8uBqD>8I*1>M575D2lX1?3c=GI9;>)ljzKm;5 zf*_2O>u{_NKK$zpATimWuxDhp?1-!A>;Q;3qJl1dl=r{D52rvWR+I?|-<<`BoX6mc z173uzD43|ob=iV{8+s08aYsY+A{f_7O*+-uRg?_+`ZZiW0%z_J?JjlrpMu@VOEcWA znPRPH$|SKkB(Sggi$lCA0G3s`%KtG0AbU1KEV2lZNq=fi2E5gCyJ?ObE)Wca3;MRu0&I3y^2Ok>B z%y5&q7o>mFfpd_x(X3ichfAiwDvs3_l3$pMceQ2o%s>z7#Z-e*(mnbdS1ye7Ib^k} z6dF9uA|(&NB>k8FVL%-pZ;V<3CoA!}JZc&Gq7QMYzZ-bqm#LoMi8wme+eMlFn6+9-(v1)1lu<`%WVBQTlMZuXZ z6w!lMLwA0pPiPh(>ccbO2-lC{G@Jti3WNX=J)?gk}tGFNmSTZ_?ov+=z5@+}k} zRcGDf>NJ3dT#dNuG~=~9K$0?dXGO&wt>ZXS9M=;)w4ao1#p<}SV7cO>@~k`D1=x~v zM@vwDL5+O^JXBJ8gctmaT9Apu=3vNZzWQzg`RelxP46^pc)u2??A-tz&i@*lxB?Z@ zmEM^pFg%eO&eZbe41(G_KL=6ohc}M?$md!CAt)xA=EJ3{;6IFZv)NharXqs{CRw`f zaMJ^+0XXN#;P!`8gcK0%q*aq-67Rp{_`#j#d;gne&?fg?2ounNO5@9@?8? z8Ax0fW{zolGnYCS*ccBLdm;1!UdOpKKa^qmnSm~J;kYj!UFtK1x(j=GH08~8Xe(|H z)qW`MRiOhJ>JDdF0tKw(aB_H|nqqPVbEwVNg=)QxGkD|qQ2wNQ(Nf{s8Kv4E|CV&_ zh6R}l`ROp&`?GntIS-nXI&h7V(t;$0puaFdHG$rlMS7?VB1O0L;{*C|JlMk273Rzb zH3=#k54Z762Q9`11mn_#+1EnKK3vgEl<#L>?X#vT`keTZS@-&&0-QtHlQPDL8!oeO z{5V&4JKW1v{79c2c?kN&Z>{ltN5UJLE^rljFVpVlfIDpQl{ccg2a?xy_~& zD%Zr?N~-O0@X{5~fJ=NT-Q((s3(TD_2sM+##(c@p@K7Nf%`ATN4b=#(!oK$j^OmBx z;J!2u-|5?3#e&|xL!6b!?pd?yZq12@tv+DzJvliVPiaAekBLh<|Z%f3k91k)7CL;_>_97=Rj8akPsRq|>9Ka_4=Cg^NaAj<+SQ3CWxa;p2T8}5XEkZ+%T5B01f;AgYwV8SWfi0 zEx{USmEa)a!oy%*AU=*=8p*03kmvj$H)9UTcJ8HGwD^Q^z!`BjzH0c#QsoOz9=dt5 zxS+}^R_UzRVCWYhm(t8syWjk#JP)5R4yjDc*4c7%$r#0mRxUcI!-i|E{G)KfO*%5H zoB^HZHaFGl^pPbra#g!jp$M5EI}nU-Ox&dzEVJ=6I?lmWP2A~(^{d|mT1&@lTNI4@ zC~*6*#c}-RR9cM;#03_iHXlzd}t<{ZHRP2O(!ZhK4B(jU6Y&&{vq!{9cpX z2nYMWt^I+Vr3Fn0a^_&14kgL4_U}#l zDi~NGP^}Y(1mxdV5nL|`$bn=0%ffNr5jnI;Badm9DdQ`mdMF|97`~a}3+MZtTvXHr zJsPj3TBRVtZrX+>kqFli1O1 z+6Yi>2p6HMT3>*MN{_Td=Q?z3%eY3usg~a>sMQ!)Oi;BTQaT6|XpumgbZ<4O=Y=os z4haFoq-KWhOAqhNbISZq^*Q9 z-*CZCx&%>!ubATdoWIsZqlKHTuU4>87?_jLX*FJC#|7B!DThw z-G$2tMzsLiq}Te%_!)^=TFJyeaZl58A9JqTn>G;FY*2W zR-!^Mmeo>TfU*t#EQ~Maw29SUBZ1)og|GuR{0duZ>HBkg?UNt}{i^X>mK8_dzHYEHveCj+NY~qkXV<*Cpz8%FK~)i#su@-zOhFD)Gec?uV1y z9dI#Q$&=Ah`eG_kvD5;*ur7`WkVD?@Lmy7oJ)B1R2#47m4jirSctt5FR|_Jdp;^?0 z@k#q}XC$=q%oy%|*#S3ah$C=s=0ku2I#2U=)dCaENR7kTyaHn3)~~pr>md<>y?7WD z2KZaM09dc-yeh`Y8@>&qHA6>%WtQjFnGzYAD2{HMB03K)Y9M6*U%no>1NwiRR#@)O zIC#X`kABL9M#1;c253+n|AHj_>9%4Tm@yBqoy{&*$Od1`zkL?IFObw|SXW#N(}h2n z%tcD{2{nHapcU?TPl3P7mo*3`tJy#Jw1BVwH2|eA32;O4hcq;@M<(X)sA3UTPG!S$ z>yM}N1vjCQCo`PYBEU9&J-xPCZL{?kIP`@J+=Mb*QRstfd(T;^@#2p9k!huF3=jd0h#}|kkZ0>dgh&ct&{nv2<-lETN zubW$pe1LCw;OnPPu15_`I;EptqA9w9!B!;ysK?z6C-7V|TGenPT(9Pgv%oOHhG6($ zNUnbu5xvwR`V0LXi=2G1r`Dord2xX*P=aXvJJ+s+m} zhjuQm4L!SNKtAe$&(+L8M3jro;P-5+FBhc$LU(Cr)@^)!%l@s{HyNp&qB0->+fo6n zBz!I<=9t;w^FDLu(6MRlwISOOf*OPQB+*SbPPH~fKNXs)N zx8Hyy7BKe@xnbf0U=U@5kie*p60J`gFJQb$yg0q2`k+q9y)FDOeDF_X(Xofw&)&CH z6K0?bC8oVPf9=6vuDQDjd(M^e@sHY9HN_UNuh5SpM;9sK>PHpl9~mC746cIoW5vEZlSLGPjIkOAUXbe zFO77EUlpv;9qzu?!Rst{O^4469fkr5@t97)hyQIhE^PoLBD;I=MYPESl?L!BDx(Vd zc-doUgTfsr!r3$}R#=qN;KLj&VkeyE9?G9+>KNgQR);VWUr!6O+p}%Nr+ar+L*X?) zx9V4qM;7cJlkoe6%PQw$F8rZ|uY_jU0W4c~a3I0n_H21cAYHS&f$_^iw}Q`2^seQyDg z;FMcibubbU?dz#etip{L@H3Z-K7;#Y-%s~sdD`n^R@f_ zSulb06DcT>t+VlGUC2{YHPrXSIrpwpK-z!vB7Uh4_nQ5i|AC0+@CO4vw!9TsbDMhC7yWXF}VtdXCu?YeU1 zK!mtZVqUTSGuvMcAw3Ut6o7riGgO%ITX$8za=ZQDYpM&0AInlxbC)Q>2P;{U0_69y~N?q zcCAZSl09c1IB)RTwZ*k~=pa&0nFH6Z&QY#P`mc}^qPfukS~RzL&5oW`5&qMczK))b zCE>X@ax2F3YMyov*XUYb>_`l+?yHa#kK`b`csx9r9xhF-iPgdDBEpsn6jco5HR0He zcz0P+sg|xoZ61;O^Cpu>q)7R3(P4@C!}Y`F9Uy)9aL}ub-3VQsKyi%g*7CMIQ9l85 z43Vu^n0|x*Qpa<0V_x9-R^RVQcp{r+$5P~*+EJT7c3F~xH(vx_cY$3Tz*H=~Tg zN9c&0w5i56PGjNc@$irB9qWAk8<&kie$lpk_&1lu`?Rp4+I9-FT;q=*x+MmbAXrnk zST)UB`sN2rV_V7haNn+6A1-bpv*kcyk-iT-CL{D0q{u%(Q=<3_FIvCO*774D4*CUh zD!60)o-9>He&?y>1T!RWbt~3ogu#@AOaDri8hkO0%81On4cTHB_% za3O08zD5W?dg9CgLXy zUx9Q1h&A|6Z{Qp*w(piAA~R{IP2U7^{oHYF5B@}t+1$$7XV-#NQ2pW#9DDQ2C2!3u zBDcaff)E<$O}mlXHBA8pJ)~Gre`@ci7MHmA%oXrZX4W_ty2j?w^gx$UJV<>3jfm76 zqb%tBjbg#oS-cx-_MLBSrzidiZ$%~&QTn%SJx^0BE&M#qz14eaoDMdCtUBYVk@9ih zupOmR8@WA1L&I(ZZ@%QMK?TF0i^3gO=40b=D2KXlo_twiWRel)Oiyfa&GtP&yDLc% z^;Vg$fgK3{_!f`-hg|_?NkQP1kEp&j%p#&Q;7pB6U6Q zlI?DHh$ErxvhfU1GkBH~i`0oX-`Ea5c}D4S{jXlW?`{H$%ob7VEUnG|(qmBZ2L&6pzxo-iu>f%6L1+@ExciwaBknk}* zt99*i$nPk=l7E6WR0Ptx>A{}>7tIe-bi{A?7L}cc7oUWWGS%Xbb_wLb&S2Xr3hJo0 z^oKP_7?A=H0Df6*SCQVJ9d1rsH^PQeqJ8;?$5A`}?w@Qqaz-O5w?4s9=^BwF~bSwsi6F%I?eFW6}E z;fA?BC_gP38S;y}>3`+QvUWIy{6gDrGo$|lLFJdXKAm-n=PAguCi z-)902MN=ux3eUiT>*8oDNse*8QCoY<8j;VbI6Ck{5^EcF0s;r1>xsW{#^LAtt5_)KFAAzJXm-$! zMDz#D&I66*`q1Jdn+H&Pa6I`lCW?XDCr%{?oBy5|t z6w5fMnv!u?s>CSnd1>nccu)4q)HV|);ai<1;h$@aGs5ilCA4PHx~J5XSGyVSIlKQd zN)rS@-0ri-5GPNJr(6cmp=|L{%~6waDRb-3vdWX%4|!uET6PY*S5OT-FAJxtrU4h?cVUkCd#uGbL5V zb|dERD92M4TuE4%}jJ&AW(-*|O1rEcJtj7yZ41qz(NkA!8oZC~FQ~Tu%B0_U|uJ z%#=kv&#TQm5Q)%jD*S>o$3iK@GjAvxXr{~9D&hsDY9f)ueBHiDwETvi>4!XVYQXRq zta6|rFJHvF@wX&Vzjzf32Q2kj>*4}HCT4acwN%^_o+Zir&wFWKW&lLSQua>!s>HnV z>X)ADz7w$+MYkCE3>NIV@~H~`M0S5G2ig5bhV)@7{38!v{tvs$A@!od2cp;q>lAsI z^9{FV0Ped%%Z2A?8)p{83;czb5+8aD3dnFh=2jM7@lKO!@}4>J8=C>Lzv>BJ8vdD4!FjQ9HkDWM!HFOl2v0#CVpsk5b! ziK^dk2b{FoV!+Feed~dQxgfqnnBLvA%O@|UOR%M8Y~mZxH$rSe4P3CP#w$)E`wJT+ zCo;frQ=sUu`o_<5UHZoHkwBZ$0HLSzkZ?2vMNi-^e-ZYp^&0UcOtA`_klUvg+M5tt z@Ird2*!pST`WBu<-A4R`+LrbeiIeB-a2K4NfrFonm--W{IFU;6LYr2Yko9;(8Z{R- z;-gU~%3Td?IPsiDM5i_H{HB_AeOJsjXsnC`#`7`XxqIk%)0$@9woC9_p8}b8#((JJ zhk+d+MlRx2r1re?`UPwE(N37O$1!(t4^B}KY5+u!diAU8()HVIy9UY-ngO(v8dMk| z{U6W8d+Sg>PHers;#&{-z6%>{_u|c}@VaCHk-R++-9HoajId3YKON6Fjat6qzxb5+{P}dVVDE?L zBNy;%%K|?Qe0q+M)gKhsZ{qxRxRBbBkGPq?cj%lZq;~qj+wMay5sdd9?}$IPsC`}X zMMNbjr0JFTn~*LvH2*nyC9n>MofcHuMXr#1%~lD=r~04&y3xB=bHQ$1_?%n1 ze;hUhD48{A8zvr`dYv?)QnCY8>MrWh)wlFNT?1x82v|v@HW1Pp7?@8_p9p?!M*1V%p+!12!$b* z-U!LEu3#wLjKfA{`I45?ClhhT(h!t#5#_$oa!>mBc~-^FYWNJhvfml}C-8hCGm5dd z(y?Rp6b%Q~E>%a;3geQQFKcFM>z~l7GSSB0I^0%?F}022ZYPiDV)*%7Yauum(V2B| zpuwMSZ?PIazk21>0UU3rKN#w7@_({S1#vZ~sPo_ko)3hN$w3no(1(D;)+gVqPfUMn zRN>VP#GG%;t!={5gESg*2s6gDW@oOZ=wMsG0 z(0KMy{k;=}v8`+AXlq%Xt#O5d6zVk`qCx_EAkI6@3c*P2JcqeYrh`$g2#nK!gq!Tlh=<_q?D>FBX}{&mwQ)}{k8*d5 z-Nv@21wcoX3Z;cNA(_$t%!pP$#mRS1n=`CX`z-B7uW7}h?s*7pgZyV1Mq2MZoYKlx zLOfjI5{ENzeo&Xm_avk#oh~4pf;Z>kD|}}leA*2uB|1SdRz9!gL7IkEt(5|5$ax^( z=XWNhrtf|5+J)Y9b#BGg2Ll%=f+#NyO*jc!X#qGe0mOTX1_K+Gmf!hX@QQmy;1#f(+@X#PaO|R#0Vr@lKBk?t_si=9{Y$v^FnEO*7ts9%63(!< zIJPl!#&JZEn(|ej^DXeLwR!On(z`63H<(TD+j;}=XFa(8rUMSj=p$uP;qw?2{BR9` zfnNb{g~Jo4qM!HGEK>%n=6t-H2j5eo66yZqUkxxnYE~^>>ayp# z_y~0r(NztIoChF)N5e5#3A8WnJ@e0~WT(g7Tr$nwO7eD5MS^}bo?EK{Cc5z!^jEfk zGGnX%luQA$gQHWz-^s^JJM-?Uk5RGTmq$y-fvy`= zT&jJR2!)h@v#I|&HC(T)ihtf)r2t=a_V<1F{JpNqXIA)Z>N--yHZ`rH9fI7pAU z*e3p%MHK`l<=XCpX!|v$$q~Cmej22IZg1-XDQ>2NvGQuy9$XHN>T^=-b&wtZ*Uh#W zeM<1zI-C}WE=mfkASPst3WOco#$GL{aoPs5FFUXX$wGFQ_l0ycLG@<)U5tLwssFsR zD5XI^B_k|pN(X$S*s#9z%WA||qKHr`yRlk_E~n&C(N9oW&7c%?(qc%~pkNEtTxs08;2XMAe{)CH~s zFiJLEjmL7H=HxSbFbmQ=R6hs5EhBg}J9&qWmDqyRBK7xd^VOM5o~RRY22CscK``Wr z=ib8VJd7lMJ1)l%ije5)1IPM6!Er;suz>O zF;C@VD%Co4>L6Q3`>BX{|0Z4?c$@7wO3S%cAyDbx%!)~X!uK}c_Jxzxkor>t>o+6L zn5H0X;Fl{yF70-$6qg3Lkc3-0vPwA8_FM)t) zNp>%Tq}pfYRZH=u23-IXwle%F(~Z9;!GHs-BQUuAR`AYy&kjG2D|I;^PPX29qhYs_ zciwCEk@Nc}D8RX5)%szlAlMgoDfas0k1^>wd*TLhvRQh1{+<-Y^*s9GALnpB z6_NiwH=tam+!#xNgt9$2%u!@-^nI5bpe|he#2qfppVcxb&cvt|Ey9VsFm3O>>UD9r z0>=;QGSNo6&D)79upPB-s&r4Tcxv-m2l0I=yJd)r6@_cx&l-oLCS2an0y zPX>SMIoU;5l>j#>2ny0K5IX$042kZ3WrMNf;UA}|L~hp#p-X?|hdt}PH?MIU>Va`)+HHw-JIdaAC$ z;nl2+D9OVHfFEQzt6=dEYxrDWDw39(KNx`s`Vxf1cgbgs@FKU~@*zshTU)*3^E7Z{6Ooji`7ai>I`MG6h zmIg1J#X`C7EP)^}%YuK)cIMS>P*UUvn{F6ZfbumKhW90?-(-Z{WYP(GH^S1l0Vt@| zvZS>x5ZiN$J5*XnnjZJv8;0@Z_XHOg-hu9_J3!72;mLc0|A(n74}^OA;$KT9rBUjI z8l*(M#6)TA^&}};o|L5+2^BJwE!%jC%2FXs*(&d~STd4*`$|ZpMKQ9CMyc$SCEM@Z z@94eX_pch?x%b?2&vwuGoI4f4x>#`)2wq0c22cy;R}>jAEgzt>g*d8&F`ElsQU#6y zdk1&$j<?KWKvgb;GDC_~3e3=`YHgcu3)yDcWdc+wx^Kb$0v(UXwprTIV@&)DVJ zMnpSWHP_cKW+cRxV^LKBv1P#0eQ4s4Ltv@N_fRPdCRR(wesVNP3{3WVxyr|Yt$0GK z5tP8VCs3}7aTQ6;x9VR?pB{+vl@yk{;DBdza*CJ;0R0up6bgO>f`Q8?zOg_3Zvkea zrNg=)5MhkmY9Ufow_im2>&`kO+&YA%YzjyMG5cr zlw|NBP(X3=$@K03iN_L=0KX>A5BK1=Hgek>Y0D5DCavR1(+1HT~_<@dL(LG{e0B#rs zFId(ObUXIH@%tH6wZoQqv_%09a2cYRV0NUDT#lv^>45D^FqfA5G$~=N2Vepn*vLRQ zI$ej@3mtke6DCkW%1GUt&HEvdk@HE#R!%BncGiC>$pB-!)+#{c2?7j-=Z=wCO4@1x zn;yMGdJx^4fLgh{7vF8|R5rP0Hc3Bl@zmsOoxJ4?w`00#V8-{loq}Jqi$6`MY|Eod z6Ibob#W1#R513auFk|D9L(*I|1Nq*+ot8uP8MtlY_38N(*Tn8xXB~Ge@NDiNCwaO% z$vLJ|eYWiJ?%~<#wxIfXXR%RJQ88xO=0Jv@)(r1tss8cl>J)vi+)SONPyD}+b-b{T z_Yaaf63@XCBAx9{d*mDL!&rAsLu(ex0k6ibkta9rasW>r)+1k2wruidNXKu5^|I4f zWF_;`^oQ`%k=@tmxnLk#)=_u!feBQWYA~3sT%+sWN+;2)j zUvJO&sJ?xX#su$Xd0vpy8c|Fi(nr)Y_Dk%qb(Z%AMF#0!3VXcXO8@82vMV#~FISPP zEL2J^SeXcdT*Ui83{Ra-Y_;} zBE_^S`!9d}tri>71Wn?B-vTT2$8~B3>GygoAEj4k&b}DSiB1c2XWeo)nKBJESb@>~ zh&%{zx)6j~VfLcaBKkSm=qabrhqm#h2UtZzl+Mj6k=X&Y`3K2VV<0s#GS6dg%#>d! z=}Go!J34zs*^G8YMcZR1De|lQ$Dgz+HclJ9Qih*ELV1%(7?}K*=QVssdi2zWM%~A2 zcmov;Vos!4r>V&X8(*4LkAK<0(iaRbcE2RR7QkI_QaXMs-OJk^`PIU3Qv@6pf8{r+ zkS@?GIJ#)io~Q89t!MSVbB+Sf_n-H9&hB@AzeO~Axaet9-kI|;HojcZxQV{z@>C}& zrad@i_L?g@H_ZaUxeb9Q=}L!qO+l3vZM~5s74JZ00wr5ywh%FN2aNVx3GVd7Yo|9D4{r}3-*(2*~GRAgdEn6OC&Kd!kP0c%o z!Z%8VzqmgU7{&gwT!j2et>gX$O>K-Lv6jkI+W+&f49o7kf7qU{s8gJLt51rD040>W zG3JP`xG>v~S3a5d2gexb+w5|8ymEu?hvmb46ak+?^CRm>J`f%;2I%#_VGXD4#ihQa)BZ>OunD&ZjGY5G)QeL(qM0Lq9Ax&Xsc zjJEE0b@%(cl5{maPJw5EEviczMEpZyx_%&1d|6<|Ax|8AM{M-f_!KGX&F?j3YReWJ z3P_=Dv41$O-0^A&bK0`9SpY|Mlc>fNQts^Y!A?1bPuzswT9@}*U+6^6Iuykqp-C)8Qf+FnI@!dLgRayo^wNIpyGE!BB14?)& zUn%1;u4*%_ul6r!`7S2(Iz~c@>U?GA)XG<4BiVKP=le0jM|_FO6K`}i5vo8Ez!ltu zOYm1!>iYO8uhn&hPEz+idFv0Tf8XODZr;%;7h$Gr(JMG*qwrAsPpG!(Isep<5&7bLeW2mv4a7CxtM5ToPgH3lJrR;G zOv8kuAR|Ft$h-L2tuhnzbDMX(zv_A2v!))as#ZpNyYCl(a|=4Rqm}x>*;MS+;l>N) zGwH(tADaH0Na{X!Hk7ekQlXOtoQ!3gcC5o%K($QXj@z{uMw}3tX*Y=ae&_U*r7vtO zp$GAEdceijT`1q1KGO2G2`#kS+iAX&yDtUcUeQ67zuVDw#^OwXEeYmw<&FNFztU}M z`?HrjAwp>3XSFcK?bxSW!$T7`Kdm$)y4NPiW0~yBe@IbNG~ zLq~CcPzLx$`d<*rbcEa8-*inRPI{qjR{OQXj8Lo>|9ycSz5{fQRBf>Gb-96}&HR-? zUV+cqkf-1zA<2eQ09N5=Cf!-)^>(9JajW8$ z1-8%-MBugyNDQ4gT+o4Gz=$Ou` z{7Wl&;JU=o`oIfwFGj|k-kTy-1-%$`L z%B>r;`C0}lZ8Cn$sj8MYTL<7W22f1F2>I?A=84%R& z-Re)kgYqZP;kai1=nMp#Sn+e8ufqx*_d_>+RHxZEUhjx2X@qKb8I2M?B-W``A^j9| z2~&MiFK|?m6a{L;Hsif~=C;*qxl9Vy`!rzmiHgUR?>WglIRWs75CIEp#Lj##^5D$A z*q=^|eDyV|O|hfaW_D{uY-S|>;4J_)tPxFaucb1I?srg5Z^@V?J>B=+AG!MPo^!V_q zamT6Ro^Fe=`INB9-mhw!5b?3MobJUGq^opi({e@!Z%IlUac!N(x48_xFo6OHQi9X4 zRm_kdC;sB(WxB1+GE6_Iy{u=*ImXVDr`Qp0lcsl#n~9Eg>cok&(4u?tEZehV9exBP zG*c~b)!Cb!<$Wl;6Uwe%ct0fapAYfl1q)EQ0SbR8vCS%WkG2?Y`D!=2X~uJjL)Hze zE4DTJzx|vYF5zBR*f8M0iZ(JUQ{mlRgKrf#4%{Ro#?e?yz)VyF%$U$>oTt*R?JKlluZbmplUpw~d{EW3KES_+1qZsJIX(N!9Ns zK5_;U@9nd5nNXT-Kd%zip7K&&-^u2}US>f4E5=QKutHQjQ1Ffwa;kUJWm}=#cFD@gVtV{Fh$&VVcl`=>w6!{Q7grQ4 zlLGPgnh(eGrTv`29bmmXAvr_S&xa#A_rXT>*m87sAVX|RDae}oAy2&i)%Q7AQiLtQ z>i&deG(VSvuj%o({jC7b#WaQ8bjIIcoX`Oe)#jPq)=CAB5k%1oKpW}_@+j|*+j6@6 zq+Qy!E?~@$#ktQT#81ygAdnSR_utb$00{w1q|gNU6T~8JGib)2A|X6T;2S;7fXqMr z5~}M?2(rdZ89q$K=0*l0=75ZUJ{$7bGzFT&tq82tr1t%znWT zQ8UO3V2;OR5muwue6hrwSldHt{*Ca=`S|Jc(3(SD4r>mPd1VLh)BM8e{ z{0VR`^qv2=`^(`R>T|&%w1!>_QyhjVE}?UrxEsoIU|8`Bt2CC#g~C5Bm;i{CAld8>PV1B1tIS9R;PS! z9#jy=7lO<{QdglOq{RUoEWi?SYZ!aJL-G!CSr?$tzzAial7|r>TW%=iy`VE#u{h*( zT}HyhQsP0h?)B@P4n?fw$O_^DAC8arc9)(ZbG_lMHTLiVQ`*vD9AlsW05fUN*PW}- z4Bl@ve&oMgILts)3=Y2G|1s=?;_0AY;|U{GfD{G(W)dJo2w7@nZX4|%1^F3_8jxoU zxoSwy^+dK9ltPl4c~W!Fa8By!DmC@jmyGFb(&>I!kovE}0nBe>p18Ikyq1TV0Ca>O zGBILfae8%CytZ64AH?I6^UGIbRNwzfN^H*_u??$l04)a&2!_Z=yY;s!XcB-Sx;A9( zTr-F)KXd)cys#rq`P<0wD?C>_|LBBl9c{sGI@^KwGEtmx=a7oN><}6s&o>^!fX}U% zH%w&zGLNX7*98IE2q`t-{x#2tJ`%>vkW#(cu~rjd+X^k6SPMqMpwvO$!zCD@zwiji z_`J26M9vTZ((utBsg|WBt_{e7OsZaS+cN}Mq|3^xwLXU&5^PwE6BwMSho(pVIG z)PPc-k2R$A(h3I>gcQN4Cfx==mQFE|n1*3%6_QOrZJA9g@5lM?@*t8@RcaNNpMxe) zHFwhoC3T8nX!XaJT4G^_Eh<-q@cMuGVscqRYD!ex4Kb?~<=jx^98+{F-WE7_?kF)2 zeMnEM*Q85;Mf9!;%PZmo=&|AtYE|7rpuGnnN2`7wB}o|v^`N*A1PLG6p+ONaQ_r*@ zuSFD8=*y3+A~E|9L6u_WEu<51c|h`-2kafzTtJ7(p9Jh4J_MxzEZ4qx+YBldziv1g zZJYMZ9x|6~6G7gWn=|v!fWNX7U=&Pd1(_i^mmksxNs7VlPpZD!dT*KrTsbS(GkT=) zgEnL#F%G$*4CCHTtU5>?7mC4YyTM{~j@I*`lB$48+~eE_Q-H>-kr_@B*)M)=5IjC>jn{WxCvQt5c@AsNr`%zzi^z7x@>@$ZRQ-Rv12V}=J(Bi5G5xv z;O^!XfnzA7ibhx>Aa_FSiK>a2*XLa4<*Hql=vp zh?SXmK+s+T1*oP76oIL-(W!^;tD_cnVfYEil;wkz(3R3djt^J;xROkOqD`PYu;>{A z-(j56)It-Y%(3n9uHk}Is4u+HT!?V|CLetKy3d3jEro&2vS2?ER+X73CGPcqttNZ{ zc8kr-~$SG?FgmGSp@%QDuHEA=m*QpS+JI>=u}*C=0+ERonks!I^`b)Gy(F> z&PQf_V(i+MVsM#?)4C9-XaKTG(EiW#AlPrk6aVL~a?wXNCx7daze$4uE1+fzC!>De za(M`5Vo}*O&IK}TvM_?=1laCzZ2~I5m$Izg0HG-Y96rWudzc!|$50iwudeA%eQQdO z235FSPy+Or)cvy3AiRD&fj&=QF0P!Rc4QdE0Q>FI(|#Y)ISJlMK}lU zx`?G)OP_%tbE$}#$O6k*kc_<%OuCz3WtekfXGJ1key+HOJSTK5%>G(eZT`I#WH5X{ z)GC*D0DGDaNM53ji5Z=2UFES< z^0@$9Eb5kV^ar_o2!#1Qs@wUGoJ2EYWmyPl23`kh35~S%ynEgN_>i$s^ld_j+43bI zFp1LDTcJq@O2eNuz|y1KBNR0vSMGpyFblNy3_~s%mU)pST(wu{cjla6$<>14I79@Y zZ&qx*=wHvE!Vffi$18N}#T=J25w!1tE*ioubXqt`mGoD@{(L#1%nU$iF^0}^X~n+~ zLzaLQ%2=_G?v1Ps7V&?9hP`9Rd~6#WLI6TdwcSkzqQ zNoIMuIiscC^FISvBli#FgJ_F;6uNoesy(|wsu|xAXHl7dmGPtMzf3wrzDk|JzG~#QSxzE`vhSS}|?$s$!lm1RsiD~_TrlKSwIVH}N znEq`bknMR`PyEwbuuE>lG83Wn%@Y!baR4ZLi{BuY`}K71Njw{*z!n)cObhb)eMHL- zHonwepm$H`d%z^RBwwNkY$I{w_V_6XAj0;+YHzPJq|SgPnhGWU zs06#6k>gFwGG1lA1N|f5NK^oM+)OceNFUA1)aCq}G(|99*kmJ&Ib$Ns+qXXW8o@zM z_~cw9_7yO)7>#zBj_em241bgnUF?ReEC!}xJ5a!-um5X^1hB_#w!{l$S15_KL*Eue zLdbSep44Uy2+SIY_Fg2Is(m)T3ve^U$%A_nQKYziNkj*mJiLql_s4SpAP6)C(TFkj zTNI3A@u+BGg+jjy0~k{hZ2(KzkeVK%qrsos{{?`PO1b-^$9 z1FR#z9EKT`_)jr%k##Zl_yE=!^Sd|SOE?yHteWox9Qo~6u?DKdXm;8uFjJ64>!!e| zniD}d8dVg&@eL(M0IAU3`5Jz(xwsc7E+IbMMWzH&2y^Ts*jjxWybz6kQCdyZMWmGr zdSyeu3ArUGiC`E#EcF+FloH_?od*!2Zi>rIWBO7g-IxvmBYw$&n4MLST1deC%RHm) zR&(y2A?Ma9urH;hsv6gyL&B!mX%=n0wHU^n0h3yD6vbbZbbgnb%M}<=BZ{HdgX|*B zhmZXvy!{L!+UKu^Ebpf#EMbiUy!qXPn`4IL?j0^g9+Ct~rG)gm3AsO31RvL5oCHH| zZs!*CQ_zq{i0T~S)3`nn^Vq7$P*d06F!zL}&rBx?&NDbVM86`;H>pP+a0U6qaWrqyjX3_K1mpg`@&f&6Nx3w$TX)5`{l2fwrl0VO)pw zkc5k=S_E$fjZjLEe;R)ClY;igW}udK`=aQdg7M5Dkyrd^p$x+NUn+JRp=vxDkvE`0F)Nj~D6D_WoW?Vk61k@r?TiJe~%mR>c{9>y!mu0ckbFb98Bd1{q8 zvQpt=Gxtv;gEO)CD2R#LuRz_aOQS{!1s2Ti)L)v1js$f_h1{PQE6m_ZA!9krEt1tiK(QsUQ0#Bw|SZ_jG~IyMTGb?k_?;du@H;}UowMSQEL$@*TIbrQuitTksDVd zt9X5*43sBFcgu1?dAZ<&0cwSg*!1MoZ+oJ%k(=P+zxrBP*P#KBF49lX687ys(|_$@ zY7g?M_!Z@7|GmSxXQC|OgbbNOIj)LUHE6)hi9|SQjiSaKjFX2tN$$Y01f$U*Ym()C zQ8SA?d;#?iWNw-VZ;$~3u9}f^g$Q5ZLWw|Aj}OQIncyJT&Dzf>Ea6cPezqa3ORr`n zat^oeyWc85*$ted{sz}PeUUjvj>TgcrxRdu(>$y`Z zBt_8XFiQ!%Fsf8w*mGJ5w@EC_0ys7TQIhU=@+JqxVBLyw%)1FubF~F+5b^5xX9ShS zxc{VI@L#)@-951wjduG!Up4?s03j?~^Xc2R6|}U_Nb6jsJr-gcL0uPAJyt$l<#hJ7CdTmwSh;qs|~`&B_+3GR$h@a36s zC(=XwZ;2C%6=3b?^Lp}&9g606n0qck?BU!q1lpFw;4_4EW_v@79_a^h3Hc_n)@-xJ zKlEZGIJRtPi^WDy{g)QOX5#oS#9J(!P;T5lvxSgiedqxoOzk}!83s-P8h-g&w*IC^ z!NvXYu;8ewpgf{M7{FnP?%~ggED}RlrD~y+PO#_Ipu7KWE9Dw!5b92aT*N=Ar$0)7 z(Dl|T0!5JWhF&^3!bD6urUMHYuU(eFK9yKMn<$R~G0^@un&IvWIF$iWDNM~BtJ-oE zj@3jfY1CW3(8#Nc_Fg%S8q1k$M(-du3G%hx3K?sHJ4!|(uKh4oe9z|u(!J?*mUo zj^Na-PAd3(R;V|>7aXiR#JKL4Kqc=%&<1yi>~O2r673~)hkojGgeSz(YvkXQ3pvYRf4st9{%GS?sF9e$aN`p89swTYCIg0{?+aB=Lk3Fw<*efX3Oaz_?(ge zIbdR>k^Rt{dxXgH7r#(Mp0e;vluFb|363XHc)ChIaZ|zPJE`>q(Ptp;yyJb*ChC|3 zhgLPwBsS{+Q;rOl=6Io7I54U!WQn62kXdDBXufb=U9I+O{ipRJoI8N2HgIYuw(!iE z2JLO)*{Z>j_6e$!_h4OK^lNKmdtfh$>wO+}trG_crhndBy-?1`VRS8o>uyZG}V+H!E&P?Go}+R9hu!l|V`)YLH~BoB!BS z5%dsPP@MRS1r7Vny^U4;y3zb#7l>Z)YMVMQ2@CUp2;`|K;qmCM8s&1?Fzcb zoNh%v;&q#``Oz_Q)`skx!j5nW5@5sc0bmy+H1LY6T7n#;k~oEyCW7k7@r?)bSqZ;u zses}X+?$}U_nER{u=#t4midRSZb(`ZhVDzse+iXXQ%Bk&mtjN;KMQxIUb(WwMM zuVziqEQZhWo1L54HT&k~T8SvZm%s%`F!93pI+qokzmujp;yjUE{f_pN`kNW+%&&t@U_Y_Nh;;o-LX6`92mt^h$uL&mR-KIQ>u@&vvWv z%;cLg+sN7ec+mGBx7^^qg9)DH)8>@2S^bGXz3CMFh4^;}ZZrJCIH5Ihc-49$FF2?S zpxSklqqlP@vxRzp+dcy5_SheslcA&nH*xQdQj8TfcSQ8SSkfoZ!}r?HG)xN6Zs2wwj{EEaSS{V!abcbt z`ArI`s6lLAR>QiB0u(hQI?xFzD8jfJC;bB9WhTncMRkkl51%OHSeDvq=o9xx-KyNo zHjcxAQ#7fxp`Nm`Y3L7aP_6F-ZJ5fXcr|Vm!#Y?Zz*Kdo1yX<}6YHKgdwtCYKi#Hr z?Vht!Kd)H8Z^t(%-wQU)A&8pE7=AG55dC5#GA{tZN0(J#=Qb^ZJ#wsDMg_;`z#9J1 zA+5sA@Pk{kr+aJJ=oPW8 z0ho_2;v?M=_`|v78M=qpaoILL$!^>a{9fm=2}3b60iTS05bKo~6u*178xc@kZxDLY zR@|(^$v*-T+nw_LEqzIVO@uNp{8}(pcM%qu`S`{DpXW|wWc=LOxuxpQ?}pJqRh1sh z8xRYrznA!aoIlWW#SXV#9g`n7e$&@z@1HOVB^4sX?b74KIOky;RRDTt=5N-sE-SJK zd;`F&XC_`NII+9wWjn2 z<{ogmKN*BBvO#db zQ5WK-m1kx$E}||8dxvKsR_0^_NI_dX@eG0#ZLY{js)Z{3Xg#sG#b!8jP4=Y>c?#2L z<<7t;H7SNp{rx{n^|~ZD)ncy4nD&h1&Q56jCMirLTkCebpcAtkZ?p1iAXYY3_5NTo zm?2JxX|!#0>n(cy9qIcXffxVOpa#{#fqY=`KKH9@*;(7CwvZEpCjgY{dz>hiS?l80 zesz#zQ#o*%L03A+3N%jAwDTdmG!qB3D72e&n#|sB7npfwNZBkj;+5PfS^0ihpe3W& z$~oR$_XFhY)LM0fSZT?A;C8SXEAvD+PqQ*XFq}FJr|#9Jjdy6~8`Htx@6;3;ahHoJV`Uk| zlq+r${Ed65eH{J%XxM#lr%sD;9l$n3ca6SQx{NzV#+08vRx}@A`;8xF;jo=aIVkE< zTse{hY}sf54S$f5XO>6>g#}$~$;WkmT_b}9rlro7?(bo|U(Ui@pn9j~VXsxPF&&fTNk*MT*xJ$YK$SOdd03A#1Phs{DIa!p{N)r*f8=4lD|kwDe!~$;U`P*C#_C2eGb%{ zNp7uDqw+PVbJKZ2JD_N0%-`P_FNUI7tyr>TI*4U6 zG)zJKfzp?OUtY?W$bHd5vYY+orT}+eYt?sE&O)ksL8u=azIkVi3iE98P-YuyXlzV+T;0;FCDy5AG~hb~U>XwxR)Ytj@3V#{tPyZ_GV zrWs)5YQ>7p2wGySwO8;=IEl7x3_vx7=QjV=YX(LBvNQYhd{H=aWR#2zK8N_(dLH$Q zbHW10?D>pc%QbI%=IAzU*V-XKu2ih(OH4C3`Q>Srb4Gy4utvpMJ*EL;Q~PGvGcP#$ zsZ;J@-*fkR=mpw{QZB;bH+n>D=}+vOHfzT0l?2D3dSKDu%ip0W0LTz#hji1Ul9$wf z#Bb*rlD}v`I9k`L4+d)2@ZuH&E2Zf=D21?i{^_yhZI?fXl`119!H}h`;(YlSYx3kUDgU%bD+YDES zxJhuIYhH!ZR9oQ}8H{EnE?qB(}umN)e7uda>vqD#{C&V=TG`Qk$tP6 zfBQx)ItbApp$jUFyQOgVpU0=ym~^D5pHFMIWTt$-(k=i6hz>W4A6sNUGN+4HG}Q>G zANaRAN4evD?=qA_M$O-ML+5XAlOlwikg~($Gz~B<--a{mUfL+ZIlyumjv8;II{X2~ z3oyJB-Ox5%EZEzCSPKRGhpC3>4Xd@9hp`Y}k5KHa$D5J(0Y90)DIXatP!8+ulfON z0x%lP%fO2Wew(3~MmTnSb2W*VrS+z$geaDhxaFt^nDr`Au z`Z_Gj<>o{BJ?01$1QxQL$q#^Gd#Vhg8|pW~A#qFGcIFz`7*5LR27J^~@XRj3-U=vu zL7rlp9PFrAkNj4M1B|#&x?N=iA0`xU1So6>DVLQq+uZ4pN6b9)MjNB;>1yHdT$bg$*S^4}nO^H=N-~YE;TdjI;1P)kdqLE32j00pv$ua&D%cT5{ugaGysYR(!d( z3nw4x9f|KdC&4nmifi~Xg=|chh;f3$hcKvC_!JVG;vR^(T!6i-9sLmh!Be#NSaqg2 zMI6@B=yOrXi+dN{yvLGS>KW{c-n!(Yh{86L{Rrb@^ymaR zOdB<@`~~vYr&sz$We5YZb6L@Y!(f}$Bk{l1Te)#g{j zj}~h%HUmHWpwoKaM<=8p7)1{R)&}g}0ECK)eaGZFjw?YDaF+9?N3gmaX7|2KNAEEP zVfLd)Pg=dB1WcOr$A(P39+MxZmMUsC|6C|k4TMZWJm2~g+_@G+D1&NgQvWPC+h{c@g{&!j;cEJ^%lZtg%5M1>MA0#4vwGav;htCh zr0qoN>fy>Z@aUQ(W*7~l5kAx79i914}3&E0fGVcB~fsG zD}poFhW+%Q?)XBh-?5s+EDDU5dFG96zyRjp#{ z-?EmSIFKpq_^E_MO9`7RCHK~ao_YPrtMM&$^j{iwh8VV zgN#6jwlHosx0@vsT~infE;&-GF(07d$B*=WyO5_T+UpXYIj^n-E+WhIp3m$aT#SNj zOxwGIIN0E4B0s%v0RwiD)4consSMZd3#oceVXj-~8gp0U6(9T;$^-{_$e-|GXWYu~ zif}#5lg61b6&s)Uwd}s)#Z;#r1vgz>!0fQO?Xd-5ssLhBi#!21v5U>u8ACHC}+kn0{cn&Z)I3>dA&SB~LodPp;`d&kKt=9)T z7shr>L zg_6cl4t;WYPaGbR)2OFt2_I1&g}atIak)w#Bem225SF6b-gkT6Mf5AkNq1}jw?&C(03Jg)L*>d}ie+3pJ|$+HOsaofqa>zJGbd z@$Gw-?{W>ME#I6s@2SPAhF3G+Z)(9MWFAukA2ArE%JIb_VL6^&DroNsfu)z?2d*@h-q=(t%r5kZB(EZ>O50ASuz$D zwBLEwHa+D08JK_e2*{`knB3?ihxtUWX;GR8Ur)!znye;SU3axe`@ePHCwKY|DuCD4 zT7hF`u9)mMXdt4a@!7}W)?}T84;vU0@AeJC@onGCUA(s>2Z*pEYAP64%;nrb-g|lM zv*VFFlesjJ{XK5`riI0ANX=H0x;5|3%BWQ9A~E~x{J`(iC3YQ zEdFX~pS-6fjQ{z)9a>;u15X{%`xIh5Fg>Gs8cu)V_x-oix!o5cr95(XFRfT#)N1KP!1C8h&t5Tqv+`` zOCQw>#OC|=lJt(tbp6b-6=vm_4osu@B_hS2qv_#cR&%PeH!@ScmcWTUOO&P>uWn?N4Af-3i`cMB02Wt zwNIA9tkQ3p5R+ketgCGHt@+IR(pzb5%c`-xPSY&$Qzc_^We;+$7^}#R%wsk;gXk+# znJZvpe7i0lMuXEHJKe&uQ%@RIqW#l>@;cipk=K5corv_`SK!ngJ0*Z|1iGF)r?PZY1i=TZMq%do&HmOcjOq!itO4j zxRB%peElSY2*>EVA^XX~8gOoUy4+8JjIo(%$tR8ZHbF5u<_*~Db;C*PI<#UoFXoh2o&o)zOa0vNfU^CmM zh?Y@P$>U+_S^I`_X+oHHgm_~v-xlExhRm-+CDQd3Kjl?t-YBq10c!Nz(`dlIJ5mYW zGaAwVRso$ZM|8R>^-l>F`JWY|@7*kone0c3^@s*ZH4N+SNq#SYjVpGf*iFogUX`4E zAlh4&v{;xG7N2ECVV+cbD~(pMplB$1HMVr~-czlxMN!VvS0$}UqQGLRYo75aa1kDw z{x=fV(CxQHxdq_W@P)V6_X4MYaxh~!v6 z=hk@K%J~LqK3tb^4}LH!{~_U;amxZ}RV6`cz^PKU%MEyKOfmSVj;09Jp(sn8!o1W| zGH`bZvIES9H~TTF+*WBtnqcksrpeO%OQjN2Ni?SKgp((t4y%9aSR6Ya7mJ8l=@xE} zRi6P0bK57II^KMk)S>?^Mb(~dTIa;{J(&>@u`>XDBdSL-eh2m$t^ zUA6*}%LD15Nx@se(Az6lvJ<#|C4jIh*glxIGDH(` zl5A9g;U2B<)u@jjja0|YmRdOX4bR`sJV$*0!R#acZm;gG`eBDD<388?K_h9!Kd#se z<`~n{LcrtV8)cae1*VTx344c6wIM>dGnSA*$)ElCW?^ZgaIT&|`8La12U`gHP%Q)t z1wh;06bv6mQr@6AG7%P{P{xPW9hal4NfxrOjBAbh=gOPVVr7LM zd|ob&3;t+#vtLU@D_6Rs<#CS*S@GJ(FdsPTPuUA3=*@Gypjs1axz+Lw!|ie!Rm#R@ zGPeY0L@g0scg9)<4ip|Sh_}pY#w7~9JpKH6L#u#+#Gn&`lLxA$sCy1=7gXltO8`0s z0Qui?fp(*@Oc-i=M%h?>rm3J%oc#chW0?zS>iHOO2_I|%a8aEB-(1g3YQDfa?n5t zu_SbK##)<@*xldsXtqtV8YBOm<295q1{cxR{(uEx3GdKc@HpD3?~NmI{fWK#{Ly+~ z{IRH*MU*L`q}mj+FBsNev(|$-!t>KtuCB~$9|C&}eo6E%?0(it=#!lD^WQAxK2%-vVkjcQCdi@4kzAeVyeJL4;K~x!? z%@cJo|4op#t}=)@k~?Ps6Ri*AABQO?d-k z$FRWVxLSJYXjO9Q=uUd>sQr-Ke0BD9fkQK5S(0@kTDrd- z684($!|=zNnI0J6ov@d0Aq8K8)T-P2`1^7v-KXGUp_J zxJU?a_Y}cyHb4r-wzLoC`D7e}h2;*E45S*s^^fp3^u!|Jp?koDaN%0Ogh&idmnLRc z;1On@V-A0|f&l897~XkOFvNiaG}5EdeDFMQh?$RdAYycCzSVA>dS_Kc3m|jxnLMB~ z<_UZb&$frK5D>7#AP><$Zn%xFuc@p7iALgrf9Ep=UR#%g)^vOtt;wQs`%|@E#C^-j zIXWkhUMM=-g2E`9(%Bd~Bf-VA&aijzFxAj{Od5edg9@`hKCOgJo@ha|znvp>T{ba% zABfIAkD*U1HwTwbq5n`%&d%u(e+aXIfWwIbH07REb~6Mco*d5Uf4gV}#P9?a#f={-+kznAnR{jCD8Wbw-Q(IP zbG3v96(qf9hZ=6U@yEm*-4LfCXb~0}$wjPGM*9N~1FBg82&cBU8Ys(~MZ2mzrw~X8 z;Qy3RMIszWuQR0^{-qNs6NaAzu_A~-e}?CFoFbK#M=&OHtn?wl7-02V;OF3pw4&M9 zzrK$#l4kCs4}1RqLyT$QmImKIqs@I2_x*`HZ%W_5i~)RzKZPI; zOd@)i#)S_+JwJ^0>x0M_XCS3o*uz&UVEzyi5^GQt;!*5=jD+p}KXCKo+(WNIG$?nZ z{*prD8%Wqdi63bR51t4@L5XtuFHr#0Dj^C+u+WzOzCz5G5QQ#-=RZ#Ht1ge~F-jEL zYEO`3$4<9jGHQ-gz|9<4i@r99HvXT!lSoRLJn)JGGuCLO!x@M#=!rRl0;`1N=w684 zuQXW|rPqUrMC*lz;eiMRotTR4>VRmKc$gtp$U+Qn7OVIRZVMmDgP0CKds7MpSd3g1 zWE_0c2)35_hXA2vh%)rhJ@|i=1Wp*W1Wt&61O@FpD>$e-$Jlo#GL9Z}0^@_;3mY+u zKI%CiOgXXESTB9b6thl9vj^qsQc} zA>xiRumQMp!wp1l;cNa&x3x8D)N z^Z?J96+a&m!MILyAu?EJ5AaF&6D`H05#Hmnk;kOgOEWVqflBoCL(Z;869wi(tLAg< zR#<|A1!89O4A^h{JSR*0`!f*_5)cn!T!{^^h=TuMCPvPEs~hK`ZM_``zt=RK0VZH`$=LJ_x5;rc_WYvEk^@V@ zuM?aYZsKc+Nfq(mEFfB^xt|CRay2c*xE6=(n=~*5es;|N^V3yWGMcE`4kCkE^pzi| z#3so<0JEZqwek?hm0AM(B9m|7qe|fdlm=pO2FNZvOk>L{k|Y5{zR%;?=?^P|c1O2Q zj{bdsY5yi?(YB8mVn3dYgnB<jJuQ-yH+ z`ywHh%T>B0KzYw8S%mu*rSrMcl~0?`OrFQ4!=FdZ<(VOc@P}v;ue=tWrIbq5bqt*lYEyB5)=ft=N z(Oisk_Dcs-=fXu#;1W~qFszFQcWK8NOK!z|5!LYEe`mm995kDj(fGkIIvi3;c2hkN zq3>I2F%WPjdL6!=pySyr_%8H*7g`&)3(ZjtmtH8x#Oq+)1mobZG2N@>@rj`lxj6gD z3~&Et;nA0pg4xKxFdIOL%$?8>^yTOlGSB(g-fzHf26fV{ga>CDx6;KdnYLD}`_r67 zV@0L`I}&z6!SuK}oDmcH^4gJ%+(0vanlqBwoqxcL<9@&;#<>9)Y5<0s)jhq8`|J_e z5Qcw7PWZpFbcGm@U@1Mf!>{{>DLp==68jy_h74KsIy}@3&~NAf)I~WL?BNS2VYS|1A7~GP_{Y1R61S)o^JoQ7S_NYsbw4NfGMrG+yRFE0 zMb)qMpslfu7tYlOtM&knSr)lyM0o1n8iHkz5rn$+CCc)XBPHH}8KN$Ju~OTvqcPU+ZDcKNW!X zQd;}@$LSgFCg!O_e+Vj@fGN4xHK8P#MqSvITE-R z<6KAhhh_Mt@9p0D=U&3Af%!%ftbcycbVZoHMSOdTe`HaFs6nMSD%4#2M^?w++$ol< z5Y--<$i=p*qg8URsvK1yu`=B=20TG+X1EfO`r8te>N(xAuDL1W_BF= z{1w?Yc)}rhgNs3iAtv3~3^RIC^eVix2~2fG7pC~dBSBFJFFx@R%F!5?qZ1;?lItk4 zD+h}*S={euN+0_vjJrsa7Essl7S(}XqXCsW9QblJ2|(#%G4qw1KbNY$6Bg<2IX86y za^Q0tVCH^}Lf5kaM;mp@uR}60TQq&FRC9*}{qdpyQT644RA&GG&qYZ@(qxU2Xc}=* z+$3tWnMh5e6mmWC1cBWMWie>l_lG?#7uU^7V&$XN1xB< z`|F>Xy3cc-bKd8@yxz-sACr^|2op$jRK0pNH)MhYS#}AyC~G!%K(t6tME&d*Jz3^% zg2ebon)2!J#5*z=f9kMvor%T;gyb>{21F5)Zya#x8;@Now0nFmK26yIf9x7g*Qd>; zqhqV@Y!P(R1k!?`Dm|YRctiiTH2T|4!LyqUIJS)a+4LGCHmhe&h!XyI&pJAvD{}I& z%??2s_2zy=O!rCEcfHZ#=H@5_Zl&1AU|5`L3Bhhv6Dv6v49$`_I}~-Dr}%FLx8XAs z2~~(rHOYv>;!k%E7}o-fYlPHMj5Ue(4Q!QHfMX7z+Z}ZGIjSMtfDS@Y?2j-k8Tq>7 zPt@BEU!8=|D&r&5nCbZwY>q~R=)BlVwI95Qh9v`Y8h}3F0<#tRJ#3)dBKwSw_#x^c z9Jx%;;njLXq2DCXG4r2%4$NaNFH|czTOTQ}FwkcRowaj2qw9sH7$wCf2LW&)qMe)! zPY5wuNBgPQ62L7v^a!tiqepn><1lY;&G<2vl0-|>M2Tve$Dj56l1I5`hr?Nn zb_KN%U&a``QdD^Fy_K1D@mn@$&zX*{GGQ$du?abhya!c{7gVjumy!nHp>TEnC1IBz zsBc)4epCM`BSb~!TPb5N0Mib1hHa1Z1w|6ef;lJxi zK&3Rpp(jptFA^d5xc;V3l5zSQf5xBe9v-o)UCJ0_B7*>*tGlZkK;X90=~k~x6{~he zGBO<2$?{H2%PnG)=PS#%hg6JF3U63vhn^rneJtt(wOg?kGFI-#VApCyo}SN2fnhXY zlD%aI%xLY&5$5}d^>Ifs&eBO7m#KP90gyo*LFBKFrO&Sx28{x&>$M*qip59=jST<2 z(q`OE01<5M-tqa>ubxkc;sOrTwwRu>Am`hl2Kt@?*CT7ZzGK$yiC4)V@a>OijBF+7$I_IO@IJ@` z&$HR%g@KjAGqZ{lp97z-6t8}>w&d`OZe;kD-OU_RCV7))gE0~W-oJj&!yEvjcR4PP zZN^*NlY=Ss;+*ZBPj%<*JwEl@hvI^|trvBpzI@N?wTUX?pk5m0JEZF{-(d4Ur68j_BAzS1pf##Y8RPP?n!~%e1ISZP9G_c;Ykol?LY}52Ybyqza8+>& zEK^gJ6L(QT56V+lfO?U= zpU9Y_bUOaSK7|S1U?lwEv7tX6wg&N0cZt#5n;(S6T7^v*>ZI4wQ+=T==RDT+=i&Fx zUJ~A03|)RKsZGFk#LX{cKIdXU6sV!(Dn40(5|N8--k~hMX~FJO`<4sDCd_>+)40V! zc-co~jeP=+_cO;-E1v2LGdBt^FC6`yh71ekc!@TpYxeUiBYHTgu$FI+{{l(xCaD6Z z$-$0{_1p~ju0IUlVa;cn#Ty4axwl7P_tN#;)I69X@Cxgk$D)+3gM2IO5e!n;l}o(r zeA&bY4E4jnZK^8-Y_kDXB_>5A-oRtvbyHXWxnZo3cDmzpW9vgyHf74HtwBZd#;4c} z(+>k385_9UpYAuZe6Pw-J?Z(k`9!B`TKadcH0M zWKU#;=U9uVH^#$iFXkOzo*%#oqb(sX+om*ZKl}D!=hSHHZ;fu%;wS{4XKhGxwSm+dUcKW7R9g(T$%P*QiL=6=4dhB2&R*W4^KZ7SXNcj_x=f zdXM3PT7lT0MmxX1jLonOEUuCj)NO20Ys@1+zL;z!HIm@i`Shc>di8eG8b(*2**giY zQX{0ee4;eeMIdi8zgysHkFvN2&lGnkug*o1yYd;71$_1wm@-=z{LJDWLgR)XP5~># zhBn&yw+C+sinKY|XzXvuexuONZGd}K&JfQrih+J*L-2Nfp>m3Fu8=VM_=Z}E0H}z{ zvNxZELlcCqt~pJOdv88dDrkDdxo_?HE(`ujH^6O}@aYUN*>~<`Nej6q&W|784WOD@ z3jzLW)r?L{)%OJ%DW$m->6bG0gP;b_`dI&9mJ_{%GdB&CIf8lC2SojBi^{$$jdlUU z!MZ`CD8o1tI-S64FMw`65K2wJE^ZGIY$7DpnWY0X`{AWL|6v!ut;JbLFzJ3K`a=7H zMxh%&g*-Pl7uem@#Zc^rB(YB_@VRPpc`@4RpuEs{RedrlR01PfV_MX5@1yRuvT!`W zw^EZ6p_&$`*ybtlD(ga{0q@tQjl9RsF}R{~xtand9hekA8I-M+E9RcxYlQx7p1qo! zL13fRoinc!r7iOtGaU+4IOpk0R%Z9@{7cthXua!uFjAeNF;(L!&)9!kw zGQu-28Y}EAWr+JIKg3~w+=f*%@8+=^M;A))Odcpv=BJ6OoC;U?1J)=&{=1by5=^A%zR z6*z2=0F3EC*ev|Eq!?=rNXK(CA3b-mS!k^BvXK$TkbXFfJd6}6#Vd(R5><%Clva>6 zZE9HiqVt6rdxyTDa2A>9c}#Q_XA)>$aTh-OOHb`}Ie|f^Pr^LO1eb4)pPGigxm?XV z`uMJ-n2!o-Id{#mxM}WQhQbH?cZ<0@L4b?wR^OtHAEgbpOU2^p+mCe=+BGhCQaW!A z<3jU*D9px3ZTUw;WJF1B*YbC=^l|KB3j~an-?%@p_^w`%>_1`(6}aUT27)Eb^ynzL zIc}12GKLcM`in#h(p0`CX4!GIvU0_>&o^>K^7b3$JTende^=2Xd@ok$stkrGUke@J z{gqKgGovc7xWS*Y&Qs-2E@EwqI>zUNYL;UKRF&nQ79n!aEIh>7->>H~)HwTxwwpu6T|C{A(C*A|B)7nUmN5Vq zL?qWQNIOl_UMf=hJ2&|0uONzfasroB?DpUP%;31JmWndpAfm4Imn^FgXYsw?ujC%? zC{X})>(6|17nv{iZR<2@Pn(T%pPAQ!Th*3E6PvLk9;ozcyrAj#QZ=nnDqtPo&nCMz z0H9Ke*4Bo1uk$Qp-)L7D$L}#0W3v zSmK{YF@C6n3iqUT>KZ=s;0o?J0SNAR})ZvHsSMrX*jA^gu z60PHybedKBKrLu>g^_5XDyO9-(z%^G4;uXihie79TK#%%`D> >7%NQ3us&?F#= zjD&(aGkfj@)wK9uQbjn;ho_h+k%A6zsN|Gh=0CvF{)qpIW7SE%o$vBsB~JiIXxs!U zAHPBcsksZtd)vD0`QpXUj`01$Oo*8Ec|M3$|zWqkjT3krb zaya80i7v!}o@bs`AZ(5={&yw=GZSPgmRC2$a{s8qXK6dv_HPZ%n zze*7aMfuOKC)m8DkL)(9m>wY8Q|?3wCbebhZ~3uN2vskp#cOfSWhjecN_I>*^e6>A z$nhGHMjDQk(D2ZUJ!EjtB1RINq_xIh*f8!ZOit-s>9eypV|Qp&n!T?Ro_H1x8ay!G zavRM#NOA7M7Zx50TyyJVXip#|tI2L!R!-&g=;N}%S07|JE$~`M{G#Z9BO}L7do&nq zSn=yjDD|TIO?B!8PhNxE&WC}OX(`{Z*PelB(~!~uI`2X53r^fLWS6x&D->=PKwGl0 z-;W>QSQVK(Nv)&?zbQgPBNWCZ2lH}e?gf6i**P9NGtV@tT?&EIdLK!c7nZN065m8!xZ)vN=NwR)HC7oOz zzn%YgnSOI9T9})@HI(W(d;NQ<`rn_zTd`bywqu8cLg+uXJkzFsTgFL#h;Q1ANY6x& z`Tk;!hrzsP0J5Y&h7M;_=I5H-Zv6EiIEWi`YCr)Ba^RQjicoq}_$;0G_{%%49+2SU~<_(djKXMR(Zu z+UrpqDDoFNv|j6c#0i$DoTi}z2D0Iq2F3DFy?m4e5P7Vv$A#^P&)4vp|)17 z?161FZuvUXj;BW+;^OSe#^VyGDC4++%i<7lbF-E_dq{rX$y@_*^-?o0u6vxRRQ;~o z^I|g|$_!M-<>@?a__UKN4S%xbYF?`^p0!$esYua%Z+*+ABVhgzf5dV{I_)y zs_%*8uiCJ*obpMw)zJ;M5DwZ8bSmF0rXJP~Twz*i>6E(;2izCbLA>3q*Es%DSg&x( zCVoDD1&X}*zVt>bLBB*#AGsmO-*U#}2*MH&lzkB$uL2|EH}Oun_zoD+WSDXB6CXlV z2nyMBtatcsN+~?|Tt+W+T28t==wtodM&C367D7JAH6%%dyE>-9MhKB&GuZ7#*VouaMhHv#8P{jjUn`b zGkWoxj>E8Y8V5>x_A&9j{o+3}@Yh(eGSf(-yMa~A6%6(XNOjRqp%a%Y%mn0{9VS)_ zvrmv=b&d~9b5u##kb7QU^I$(*J%v|mRfDxwJOvii8~Un80iMvyekVbl8Y}ovii;Ryo6x7{&HNq z!t0WW_Kfxj;;Ov!z33gU-5zJc%#vjp>lKW56S3tg$*XnvRlZhXa5UVa^ZN@1E_iav z%H(E@qOHqoj`IETQ7HdN90#vmK}rOf#EiC3)z1w}w)X1@Z`|YR$Nj8a(Rz1Mlw}k+ zlmTtpWej*^7cW-Dj&D~;xJ>ZHhhi^CpIpWRCDQ_tUS-4;s$;%o12XHN!n9#EZZ@h7k-TW%BsUzT((^%uvUjjBiajl53B3|fv-h|8tb=(f zMfMYnjMT_y(Gj89MQXVKReSs6lAIxHN(enhi^=bB)3ILLdR6tPXVi!b|cUoSu9BRCO*>g_|s1o7L@qhTV(HDve4q~Ia8#zn#Dir!Dc zG4Ay8rzVaHa_Te^B~ImiSYvAA?0V&Ba#D#rFOlwfq661r&|)g*r|Qj6f3g}EZJ$5) z;A&Q-1Te3mb`OW#2iIkr%;b#+>`w?j57AgX83_F~akZhj9V|2hILi+`Gnub(>frTX zO=Q$g9IX0<7>hQrMxPYKp+ z*a!c88sS)ud!x#1#JW|E-FrIf;E{fpffo9jo{w^C9*Fd!zuzYXR2@f!q-ES566Nok z<5RHIO|&xL?rhj$Tz}`pw1Cf_4Yd*uZ-uUsneUnsTXb~xB`3D=U`QLY%pxiAGZ4FdAH8Ce75lZ zOF>Q{-}*)-_l`f<=#n^ZeOP4VkqXYPDWge) zhMqes#HlFHnA@^0wh7oW784Ua)X+RRV&px$`I?zZ$HMY(vB)Dm_vNX|D&-{ZY8^M) zm5#AwaUae-xZ$8uz>t}d>b)x&nCVzSARhs$m)A5-s)YelRHnc$a6WQ68 zZqLmtC;cX;jc)4O^j5!1$z^v!+`(}%v|*y4EE}T zK;9l=E#L*R;>CoEZ9EX5;Y%X?XwrfR7ZM`&b-uH^y~2#G&_6KZ#@Tq1AmR;Mt4=y? zS3!mXg>?us;GL+O2ZdQ7IC)0mAqYLYB_7@02?T_n81H~oxSMnf#vR|Uym%DN`3OIt z64`1snzj4lfS$A?Ug1Y1$ZrY~v8>PGPQ^2iETqb4b zg>i4aJ9ZBXy)JZhx?8u#j1;N!4Xo8B>ks?xBV?TjYMIi&7EzpjGPk7du(R~sesIw- zo!7XO3|Dyck&@qwv`;|hEKQi3?Rr7$PA;(=PHZ$F#rcS9+TZBJX~=cTW6TS9dG0okOW$AG3N<8w;v#HkVznW1>nWZ8W60>eF=LJgP{+kQElF%NQ~Nq_}4Nc5P+J9@~=LAm#+*@Y&N%QWMu`M6AXb{5Db(K*5CoD z*ErWo$juVg^c}!~hJ12F~d`Po#{N8Hn`4iJlVM z4%^2)nJ1Qg(GC73#cO~^L~)-_eN4Dno@gvpZy!BQ7q;|&IPNsRaTzFtkSUJfP3|R& zW?i7|PuTv$z4|ZAe;$Y@$8YfEeq4TWJ9Dh;!Y+JR>&VNTZ!cms3gr!txwg|lv9KY> zbE-1vB-o(Z6fUH3BW%rUkkz#Ji};LZ)p7U6m$P1B`>n|Hq&j+z%>3^V{6y3-s;8GY zFZcl=KZ@G@q(*iRV|VrOxt&sqwth#h`ItySE9K%bB$41}{#k3d;|rd>%J&-hV&N6G z&{0c7eX_>&Ch|}C=K#KbMLFV+WT!ZLs!#ohe^amQx0dHc>s%KagXioY{R;L6NxQV& z!}(wJQ}{jd`Hb=2gv5J^c2f2FC5N$QByg+JlusQbOti%ino)tzo ze-e`q*oK(N;)5n|i;jFl$opJQ(x^$TJ>Mh7ris<0<( zdQI(^>*KL6cL#3t@j$dKwg5s`^3Dd@>H1ju%P$huPeok*)h`Ly zOX!qGGs>Lvgyy#6y7UY!iXyM+$=nzPQ=xH!NkA$g2WQKaN-B7qUbzdYGRQ|%99r-V z=HQ7rU^`97$sPK13fK7XYSR3fxhw_W5&l%*euwPTe!E4T2hk!NNq3dWOSkueL}}~w zOpc7Tki&!&`#_mRj}pyN`vx<^IH${9{DsDN8?z9j;E ztHm%tZ&o#iR|r|Wblipr20!eK$<3&TuK2Vs^fBTx~Eyxpv>&8B^wS~eFN>tHIdgehhKwY z$G({SN8(yuszLt7q+?7t&82EjUcphO?UE_-D8|uVL`AYz&8Z2~8>nDH^`h!oTLm)T zce*Awtt1hJLq)@Xq`SH_X?*69eyM_`@Z_TZ9XQ?7M{aAg9&(XwA zh-)rWq<2%trLF1D{WO9PErd#X0Lg|G{nlH0f7Be>*lTG@iU>)I* zkMuXzJPPs?LOscG(lwQ*q$$hu>GRWRcIz|PPaInF4o6VTCJR=pC7_T zR$3bQ(A&3+o!EKp(_&BiCG~CgH~U#2?kJC+7uG%SE1=ew{&%sh0leB;b38R0EdN%i!2fsc1e96QbA^H0kqN z##(F-gjy~!V+$kYXF5zD0O2*c=&TQRrG;i6J-LGjufZR-yq=gWs9tQD=0l&$WV@lI z0=7DGKenB{j~>x{%;Y8>M3Iv?a*r#GB|%YcC{A7Cd?WHGm|p@tzw%ctQ;0n$x1g0aoN9mTyXWm*pT`~JHO?y8>=`1mQ5C9N8?ymdr{4&+gy89$JCLxA-?P}*}u zoA8}_o%160JqUwH#Juz4vKN+OOobNQtHPe5t))Bt(7QQpk*g)rD+E4Ad%Z$D}jDDJ$;v-!Qe^Ctv0rGG7^ z!c&fX;(*hta{3b4chSKoz~1_$xqk_rIYvq+m7*Wf)-d55wg|_y>F;`z?=n5-f(O-z zGYOy=SY?2Qa|tns%n@D2v?r^me5YFhRxf0gADVig&)X;$F0T0y+MY_dj36p*mns)Q zc@c9X{p@SQ3QalQr#PVl;7y#grS-1k-?#!p(G(ADryqJTr}Lczz5{Num+8q*A*DYY zoasLD^A;q--VuplO2M+FCL1$f3mrhHyqa@~MA<<;D-x2RvHGAA8P2rHb>ItBlV6gE zivU2mtoSKR?%mn=wyqDfys8jBU_Z$+xq0@g{yHNI;T6Cc(fKsQ=X4!W0mqO`0J=64 z`HKDBKiYOZ*9?7gqyPr4bt1Qq@fsW~C39*2i~eSXPL0_;6RG-AKq!?%v?WB4`9Gc% zSEm*WvlPuG3**K4w)hr35HGGfArK!sv|?O~c$cGKWiREm)tA zr*2~h(SQMujc5NbjJw9rat?u4iu;FLk1&n(W3Ty#h!74nxU8BM_o<*Lf+l$rt_*{H zLkfKDmQ}E{s)Y>!e}A!AB`>wLv*Qa353M&)riM+bcxrPX9()*%bN+*SAWh~{X zlOpN3b$!sfZ3Jd*bwjcQBvJeMMyKn5zwL4%R3f8>K*w6emIxnPc|CXCZ>nkYJV^6w z%Lp6XD@pUOB}MG|4y3U%J}p)VRZTlL_rz~zAr5IY*EqPriM$UE-V)~;?Wnt0y$-6I z^(dV=xSQBlO1vFeIP_3PK86K#qN7_Y@#qVVjhZ()QC0?KY*7?Mly1e7Y?J>1Jh0+f?fU6u)=c@yZiQN%R?Q`wvKf}-Zaay za^h7q(PM|=Ymvv6xhEbKAe^Lzw%yN=PJn*4tV5Wg5cvSy;0r56`}YdvhH|{>izaMG z1okzIgRlnf#|CIKI!eQ=dkT zfWqFP(1~Z34Xh=!pgrWuFz_Gm*z_GnuOBqO4z1k6!FkTWwYbBECf03`fawb)6#r@Q zJ9H=cB(@ZswEGl|+_-lekNZ%6en-!q%&PLQ5hNtN7MzR|I+N7&H`tpcf6c@&tM&-$ zXb9?yWsylWyrFh1iQ!e>l;4awIoelAr>Jd z;PAIp8E*1B|Av69?rwT#<-b!#x$ZLZbH!g&S)!A`s`K<-#r=#}g>xVBR|p>b0EuLu zTF)J_sNFg&ykirnpYYffraGRe6jP$lcq;gI{Q96FHJTQVeMItUMK49z1FtOwvsWAi! zJq*Tl%&{WA)7TrTOz?z2#}RsiW%|gqpah`vgvgE{{zS~C&l)p!lNHK&{ws(gXpZGZ zVn_r?i#x=FGqF;gf1&of?D9W;Q7@_Aitkl7+DAt{&eTH%BT@ScAr;XENIjFo@^={# zX!Q~y3^9($k2;SfQDS3Y=N1y%xkVH7t}A&+8xP5kR~x<>G(+^9nhPpq*J=Qu>PCD5e(LIRy6+PjoLkVZj(3R5CjC);I9T@?Y#R zft~V7UGX%eyY}Do8nuNXza8f7W9EFOc!dg6oQP71F?Ny4agN75tF+=*({)=qxw*m~ zrjT24cFvYQi4`i_8qxefj~3zB1h4-qRIJ;8E8{cj#8f2qVr{FmaL*bK!FN)$Gwq6ga}*kx4}t=_d}!AJ^$G^QDUyIp6ET|f3+=M7K`+&qWA6K z*L~Y_Ydj$Sc0d|B2vD3QdicV5EOTF^#1Pz?Is$&!?f=Q7LF@q8!c~e;#6nr7K=Y1# zTAUz(`*D-$#e0VIAHWwTt^%V0-Mw5x;B8giCQ9}4-V4LfmNcf_K0NU6@SOUcRJjAQf^C+RI ze)RJ-u~s20lfQG$?I9j+nl%ChDmB`sZ}0|g7nrJ%35ZdcN&$Gi7P@YB_0gr;@q$*+s|j#nYJ_z&}6j#^NJ*Z+mvB~-}UMk#6N{R&fXS@ zFhLAp_1SBrfe`jIF1L!)L5HoltMG#(5m!?rCIpFzm=029s@|Ogr*r$`09x%HCS|;c zTJmlamjx#=sQcdWw;3eJKC?|qCWgeWoP_e|SRYU9f4Tq-NHn6S(biNyA*=fHQYehe@65l%3X zOP@bLcL2fnSQ1LIuzU12*)=*?&gNjfM!#ddIxXNu+@R}dDS4K-8(cwhQX)SJr=xg7 zO%B*l>29tst_uCnlL#Z}rG#0NfHZ$g*$IU}lP3?rvg+>u5uwInr7(d-9XGI%EN;A* z#1I{AWZ~=t3~e$LL^#mY?g4*%OA!Zokv{q`vw1FzOF6hCb|Mx@Lk7}};!2zHBtgqe zJMe(D;_(z*FMObEsM^S}z5pffxfYk{vo4LpCw{9<4)xbJuAs7F8$AQ;!w55 z0*H53y{58YQiZ`V4N$Gx3Z10z0$72{Qz3?!m@9)ftiI84F)20!MbOTlrFYvcSIKbP zOtwV$^kqc2e2Go$s`_~s#s6+Bedh8x=-}aH6Vo#otO$u}k$0hV91nl0R_Yw4#1|cAow!&SfNwJya z6!@2ko78_ z+SlMM^>Q!Z2-@u)TmZELr%^>y=Mh@_cG<;u;*3dSyTaa=`n#%YeT=8-R5a(dlbI*x zEKEadpI=GU>*%Fxh(K_CeVTm(ajGb33qF&YiA?mk%EP}_kk3@PhHMbZqxb(A>*J^y zln(!4maIk_q49A`;fe-%cZb>4B_(IcQhs|#YCmYFd~iX>4-Y`DI0pA03_p8FP-gnF z37gc8tSt%ap0h>E9InAG((<8r)TMVe6W(b;t_|)~j&E0Bn&2$)@{W=T=n5-ZeVv=r z74Qk~5Tq#a&NuK1v8xcNgvanci=3!ncO4P2LU=LcVslj2U{+U&!%lh|;4g}Bag>oA zBcEr9Hlk;8*7J=xIUZE(O|m-Tr@j(u%YTF6gIhXI*WsENYzOa7f#N+6f$>`+V*N)G z7LrQ&^#ok({SQZU{1aaLwP6?iOTs_E!Z_eHLcY!;E(b2LFl1GKYO+*B@igj5I zy7=#cBD3LZD%scpw&a-X^`e_6sNhgcU-3nlBc8tKlz8-gG4>I%hd|2Ok^`5+p#hn@ zvt{LYXE5z7Q-NRvz9H>3(FQex97Vh&ZhwW`8i}tw(On1L@&vH$d4SAdNUKZRN@t+y}nksPxNnKFU2S+NiR| z26t_P--)0a{~zQbfeY_0ch-qX*)q7rs<_k`yK1@AjLq31?nzxb9vgl3a_19t{!y>d zr~qQ8MMMHwX8W970XEp(mwh_x1Dlt2bGJVcUm|{gd`1^R8%`nO9HT9X<1LA+Cs!M% z%TcU|aHJ^$NnDj}SoY23nizvugVRD(^_xbOK(xgww_75ka2~FB!es;`>~#K3MBZif zWL6Cjq3|I)V&42U- zR z+Q9ntsrx+xns842!c7HZ(pCBpjdCYq=wRw-J|hV|Eli1Pjv9HQE?=lt^jr|GxAXir zRaWkIbTDXeoS39D?T!w9{b#jiJg?k7+Y?jN6%}dSquzZCh+r%{aCWM?D0?!0^)c^c zQOnA=^Frb19#wX8~!TG*$p(1gUJ-`XYl;fbLX$EgvSHKP7v zb2mvn)fmpz`sm)#`fxhEA$+PaGBCQWdu+CAk8xaLTeoY%of+r#!Hm6jF>P_rzyO1b zuJhP;%0kx^?HH2hb~HM&a=@(W-%rskd1sZ^jn$kAj^_a~lMCk~md&m5x=&e{AeG zXqwIhL%{8(cOKJT!#wi6jlI*S&+j@%|B)EUex(#&nk6e&s%sI%Qm@%fv4U(=pKKP& zQ9>UJsq4k4efM{GJw5uzkm_e#c|i1x2h8Iy&4^a>dHtsUB8wZSz25J!-OsOc8y%e% zHrhKaZd7TATdZ&1FGIK)X)gMjvqzpN>#pirnh>k?z?BeSrLV|qIw7W`_2?$1TzE{W$~J8m7-B0}6Ns9|a@U!@ zn66pPNLxUXfICu)A_G%<{^GrHEjOBd$y|pToG$AV^95Jn>qF%0_mn)t49d#h1m8y0?dXM=5;JMIOw|L!4_OrJ_uF0-tY7^vjS>}t5lJ*ZSO-19U#6)JqfDEMLLyzi;&EuAgr}p$a4OA!a4C8U zicrqY(Y{`It5nx+za^UXt*`h#vWi`Y6yd{{>gaN#alMF-C}yw@;uMvf*u1ri1bF@~ zI!h0_U+}DKnbzo1Xrov z(I;fMRrbKn{w|IA(Jp(I09C z0h-lkozHDxs&#Zuo15997L51SMMwACw-=Pq&%R$tOGJ{ra7wV5_Sd}vM%^B3J z>IK|nw31OK?yM2#m^P9a5r~ygFx1@=pM(3-LbFVUn-vx@@IRzW6I@=t{o{q?Zw?+f827?2fj=!!;H<7h!lQmp6z?!${}i5r)o*DE9wI^ zVNZ|8hUF4}FMLF|4G8I-{u?DV)L=yS;|!ujSOL*31(CK`|l-mr@{ zGLrb9C`{|i?y^)1`(^CfGjA4;Ie8!0KC}5chtcmGbM#XkPzt*XosrD7_xzAs&0OA# z1@KCHN6uQ0q^uV)*G)cEU{t@1{4|qmRKINz zgN39juQ*P8e!^}4ruvQY9l@`>adQkP@-=qE+$y(#d%j`yX8Z>nKWBi&e4BqW#0_0#AFEr;mO^mDbK*CzntGYwd z{9S*WeBC6PaK7>WN=of_5i!>Jq1(+CA%e~J_RHWyt4=yb%S(*O1Qr&&NK*x3PVf(r z|BJx;d8X$X4!yb;zDVFyYi0Mq)I*dzhNgv|xV%LY%czLd^Gi8qqrz0061#hSw!xQF zyGEBKy1L)lH4mJ)d${SsF3UoX>(i||rsob>I51dTe}mmWGjU~uEG&`GOx3vmE!dn} zzX|*CN}E+C-Lv&_Q-``f+P!-zzkNOZT2mKS~1|=cwnpg zloBhdf$c8KxF6~fr?BRU*>H{6hF@)5mvY^qcT7J_a0l1QJ>!-%mfen&!Y#%5=SOv+ zDd523APQ8cckJhRgT{JV%X|0X`#ZB|YON@| z?0YGhv<2c`yya73dR{Y|-1cbiBX;cpn>debk1W~i1XS@KMby~ONEWpUD10D6Y*&wq z4RV1yzN|Awu`JOF@qQ^Qdr#h_n}xAG%AS30)iLm~KIp*M<8W>0b=PefPwkYj=?#iF zrGC4a#2yi-dH!TrlK=Y|*#p~KCcbnHy%Xm@>gyP0apps0!*x?u=Dh5VH$?gU$Rsc8 zail<$-m;n_cvX-Rcl=N2#d7I)N{k=+>?}IB-e1l;RKGgcY*_PJd64IA@cVb(wL6ZK zt+R-Y_b(H)YI=7xs4O&U;Mh4dnfahm;rX3%+X<3{O$xBNGM~YZiC3BZcT@FIjC0II z+gh{3-eU z9D!Z1#iTG{G*8v9G3Uwj+L90D;gII0MvaoSysOA^(9+ z4O=GE?OX9tEb?5BZHzS{ko>SQ6SwH;u7;+e6AOcPHf(z<&D-iEAjrDp@xv<=FkcKz zefez54YQCEz?&dfTiN+nom{pBNS)J%zW!Pf!T)=GAS2;%yh`eZ;2Rflz(p-jY%~}) zx$z~F+7032@9J-wm~>X?w@m7r=zjZKs;j*W3%Lg`O36nMWS&dBPlI=1r%!Iq#R9KY@vm%;Fn}%?0Gc328p9a; zMTV*M5#iiu%dN2;$qk{(|Ex)rFU<1tpe7W}*p!a;o<(^wvrgh2g=3R`yQUIj`{#w@ zY|%?3x96s1wsc1v6Jsg7XcQ|Np;Pc3e++xQTjcW;!M2WB9W)jd;8kKTExDSipP=W$|#4tmY-Fjs5NCW*)`kzPPdVIwVu>`*M(z~O^>|liV7#j zbrU5VcB~bQ(KCF6G!o8Yg2nz*E3wQe;pLF?j9>M9?m|*^3zZ*>rpWrXMW!>L^JVqP zj;!d__1#gKD9s6Moy1_y3$3J0a8CkKiL(uPt*f%DSM`-N?_swsSSA%zyg+D2+T8^P z5nGN6sjOP@O>x93K1<+x$psg=9HBD#twl=WF0Y@kz~z$S z&0na95AG2!FIG8;=2(VGEHNt0FRYkP*`=L7DwgHi&z>(Hs1YDPf0~MTYa?ctX5%TW zGjgS7e!xItU{&f)$Ek^$eYM8D9od0SP3JVI9VH8p@6xb#XenjRxBB-g!YY0dZN_i> zJ%y!C=d^s*4`Ikq5jXCoGpOsb=%Go?PG1^w6;oO-fU2gbwzc&bUn)8-)o$X0%Nr{J zD(Z=Z?KnmKsYQB|&aBossAWCRYMcz~ax7iM8o z&Am!%-E6!oc8!O4TPAs4BAH ziR2RVzLpR*Wd_blOAfuH#Ii8=V86Gv?gvc zB{x{=W##j>*>c-wnE$KHi(#5^ll_D0+UQ2nz66I12Ax7hmnj{ac#SaMO&g!JC(amr zSwIz?kS^>;?S$MaB%}Ei;^x}|!on<^7f_Woss>lqpA8wI23L%?op7PJjw1?4M+_bh zRa3UzRvJIJ4es4reLQp`^qx|nxF8c5#2%TOWdY4ihlAR0$o6O!*~A3XlvLQLr=v^E^kS1vr>)zft`+&gDx^jl@a zP%x!Jqqef4W0%^&VpM8ZttRy8)b^Au@rv+r7eU-WSGgtUl1D(?+2tj5df_cgsGJ2; zGAX|_>tUB7uI^?dSy*B5J|+3cj?!^0gKp$#%GZX7%4TaEPbk++3G`nGim|S3-{yDf z8!?JMo=Y#|eOr8H>ZR0R)JWw`fKl*~M`v$rf9QtT%7deM~dRFZU0 zK3UhKbs{B@!MopAV!@=iVPO+AdvO|)PwuzC4ycB>w?GCxmP^`dk2JSMe-m{nE}Rw+ zFc?*KQc^Nedn6{+o8s>7CR@jp3w5st^TdM^u{UhQ4i@*vZ&EED)g)zdISAZaGifn; zb3fVNqToWY6f@Xp)$_u4o?S-c&i;foG(4bIWzNc(^FVm&kczb)Jt4@K`77u zQ+q@;~om*XDFl-a(*Kk^qq%KR-{<2Rwip=|Dz;lSwXBg7GQjd&YGdJ-A z&?to$Fe6tetI7&UlzmtCw+52`Ozx!kLCdrZg1@8?;vAx7(xGpVG1y3Jmd2^D3078j z3_Wa#zmFm|ehpz|_L#WR{J;g~+XQ&&eah|r7R?*HxBc3!#Nghoe?Dl?nMH=%XCRES z$;u-ZeG>S7SeV(@ue;%|Df-4>CVJdfZRG$%>t(`JtQZ-Zf9$9CSwvnRhSlqJQ@n&n zb`xp;mb3|UHykJXW9K6PPO~&T-qn{|l!a!HYirQDgp&Se(5wjzmPN}VgsXaJ+i?dC zJD(X3uTQg96z}L=jQPr8_WRbbaKyuQ5TQAXmdk#nrO)jljW8al0qrqK1S|p7J z)s@@dwmC1Rxcg3#zSMlawE4D~#fCr4=h}VPSsG@;Ks-pu1CW-+{k=TON@75=Q;t(C*M`f_N@yMu$kw?#PPk4 zcj<>n#9x~;T9QLa$!8=cC6ofp$EH_71x?9>u*V52NJ4TA0yi^D1^g-pgutr8J^OTJzUb$dmKqu&(kECvW)&v_$a2K8{-)O~ z*JSbjVgCXY(GU$s$w8NeJYl5^y$cEO?-6;s@9 zdR&>ymH7l^&W&5`Bp<@2cskR!!E+Qh@L_UZSk8s8@v3j}SKj0!<@Q%?KeEu!oi?4! zALDW(!f54z#a{3ilP=Bz6Y)xE?autsBJ&}wu4xg%aBr=)l{!k})8#Y*lgUkfnwlJF zD4FYyT06i4XGzE)QQWbMX(=~-0WBsW>Cp^!0p2KnnEbQ{`&?E-WP$yQw&!xmY{_(& zMfA&6;IawTx%c*3xDq8O0*!@fCp7;ow*H?#>20_i=^p$M3faUl>DaOLt!8EUcQ&0sv1 zv%tbjNm3K))^j0#;uzcv5u%iz5j)EbkBNH)p|qKkkDcwxGL$uos8g=!mAIa;oJDgB zSCILI!J9{8NZvVG5j-E<)>*ibpmHBYb7KMCJesd_I2NNC%15@9+R!pHXsQ=Cc^fjr zGNQ>jsEKtOZ7WUQKxXfA@t}oQ-Es!*uAvt`{R*2T4e(+>4m?r&z2f8a$jT>aQ602R z{$#h!dV6U(5Cat0d9h-O|BDaNu-w#_mBd=6z-Z%dYJ=-lC~JzWf>P`pd|RTVe2nM` zhj3cbLnBj2klQea@~Dv?E#i}( zUI^3EGSDI%8&Lyx@!AO>bCe$21biGD zEP<62qWOADc%?NUlgpf#DfF&tx2I7ZcPA~T0J2Aj)|=z(qbL%M=_Ck=I&AUYe_MXo zSM9K+R5|3{N@*hht7xX@IYF61E6ov$Gn8d9dWWn>hL%H_$m9L840lF@ENQyPs^b~O?jnNiY6%&-yBCKZx4>EKkiLFK6l zHKUqRW<2AtqbO0LZX(hq#!y7eZt$3F;hKGRJ3!NqDsN3ca$d@kZ*N%{ebiy?DI01-uo2o_s@z!t$1>`;!dKED8C zL+p-9q49Hr`&6ua63^Oo4(=NX(WsS>)*qHq1!sMO{{2QX7 zL;33jyQ5x8F@}}JJYWo{fK#^eSr*u4{j0DvV=Fsv*9+A#^ATQRZL2;Ci`qg+B`9{= z1{(t8(2xWjp+7HjK7-%`h{r39WdkNhEAP&`g;?6eFtq`lKqPsquRuKhOF`Pyf5>hf z5CEYhJqsU`^p**BwUA`~&sG`?6H}<*ra^|;f&q}fSUmUE0lK{H!t%Plry#IsDHG+y zyqz(b%DeD{yo*Noao6{n7LR~R&_PnXU)eJBfs6B*AP>ry;UG;R zC5^5?8m^}U5TUsRvsm)A;@k}?>W|0}bGu5zHG>Sx0fVru_|48l-TbcrfOSi9r5va_)N;3L?wf4Hirf1z8aO z;v`w#Q>?o{@FLvMGF7Evt9_KeH9q7%ocy@&BZ8?V@&8p$DuwN5R#g^~Q8V550M ztW#Oz43Vh%T3DH6ky+LX+zu}U6a=v6%ns-wLsW5BCRt$P6s`H46E^NK%FfuZbwZR4 zHG$Hqxwm3LvSb~$>>XJ4CS${SG&%y{Jt*^wc!G70R|qe;TpMMF(0d9q*cMU#=G1ja zeFZhUZfRHRa-rLzadSIk@|A)px$hASz`ioU@vNy`NS(ydfre|ShR<%G0G7l}M)VzS zv6f+}%|+SDPP!-y!IlE^0Q&|pnCF!aBX&rMoELGA7Y3F)i$06F!?gPrjyN1VQ$Vm} z=xkZ1a>HkaV}>rhiEI`QP@I_LgT)h zpmqw*LoqN`Gs==U{zu@wJC6^>AsuDUY~jlE?Yf*RlUes!u)p9PQ+E$PGx}N2H3I#H z9r_=6o$a~J-&{-mtzgIGe^3l0WW8!W$NUbxD^Q8jVFKZ2f$Ue;wwF1APmd1}2F(_5 z5b^s%X)g=;4CLt)l*D0=3*AQ16=5660Kv`|qGR%(3SzqdO_8#ta43<-u}Mp*da-;K zJa_FRi!5fF_SXwOBl$Rn1*nk;Eaz4%6c#*AupNAlLkw;*3TZ}FMrT$Mehgc&wL3sR zILcIeW=?F3F(pJ~us{fFcUfTOGhe`o76H4dkMA*TJzbzhrZVE^%To$s>IOY#xIukm zF~UxmjZ$8a;Fy141NXGb)OwK)e^G!<rypXnxY@F ze_LpPrhdql?vW*kuHkc^j$w}YM%rBqiyC3=0wf`6GCymJ2P`{^-X6ZtYmW^r3ta1%VPwZCm$Cr@NB^Xle=_l-EJxQ@FLkF>az|r*kmE7lj)meZ^^iZ+NsQ+b0&9OFUVxg2>R7e*rui)RJI`8eO)x3((DZqRgDdL zP-g*0aX*x+;6SHd5Mm3?q$)ZVpdW*T*yR0G1~E| zX23jI9s(@RhZz?Dp$)(m77vOj(BOIp_tob-#gC4tkOW8SE{}%7QkSePTGBy`N{KSy zwhe}cK^9AEse$BA72s~G)N-}zZ%E1^R4#czY%4TN|&Cb8v?ngc(ym@=RFA!%Q; z(@4lj7#aMA+XXG{@Ov+WU)=7Ep0ZS!^zeRyNtd6b#_s1B3O0GWz@bYcJ32EWS}Ve$ zBi~($JgI!$>YP&W{+81M=L^q_KeS~$s2$qo{lQ-=`M?a>StJj{Xqfnou}gvzpLD1P zXLI+G^u=A53$^vNC0WRGZcG^RSd&+3`~DkAXGV$lhc^{k5~oU@B!4ZefZ`^UDx9qW zOw<;EK9aC^&6@Vk>2HpGLo+%TZX321+iV)0)ACG9J+1&G`7cu^<43UVz^dl&-~D1l z6ke&4sKt@7b?Zw5{Z;b^TgM#j_u*}erqX4e0ijf0G*u3Y^DYxMJ$cKJi2TJ#o46wV zqIk7&$+5`z^S3vTCB~P=O7VJ;VBGSTrxe7qDBbbzVHOb+xy9uKc!`&%x%YhxUJ|husCMbjwZ>dQjKaD8=^myV7+L9qCw zA4PmdyJ_;_`bsmyb{ntG(_v2ox`0xnzO4$$U;T+fe~e?0KL59XHb~c%y0Smv)?xLy zwmYSY=EgCTUZ$T^d7*IB8QifzPkp#W`AkOTB1&+M{PWAIR7t6jiFVi#=-l;XRDgG3 z%>a)&#iN%KEZ#rY%p*fut~}pK+*ugL&oiCmxS1)V`m2*mIzo2qpC?1EQkpR1s@9?= zQg)1*I5g)))m84TGdBG2`L_GptcGe8U8LU>s%W@LitfXvihAE7x;?{IA6ekS>5@F^ zGYo9JdM*q-N#b@v>)gfV4jr83kJMtyG$Kiy(bZXSX>-sgvx6mtAI3Wx_twl5Y!+4T zR7St_CyMd)_K2P*XK!}CcTw>wpmM?aQC&+l?;k4$>#LEur#czL%uM)!k0~g{3goAJ z^50(UJveLYyHBS+=O5jr%J0rot--$o{}@9K*_EdPZi`i(Zu|Y~gL7op9gSzL%$~lCJ!labvqYk$=p7nu)}_VW5CA)x zbisWD>wsGP-_1VZFIxADZ#a(+? zT!BaKX;dcbj>_s!?5s;UJW@w`0HKw^ytPF;mt5~99T(Zs51y9A#C*!&boaNPrpM^Y zC6VtW>6@2DIU4m={SE7jSV>*U%nq`0+mjHl)TU`q&e*J9Yyeb0QAgSU?krYwj~X#jS$d1`&CPlB*gsIQ2~d-&Wqv(Q z@eTWKt?Pwyke#1%|B~iqJ;*M}Q=Z-#1Bed?q&^<;1QhgUo=g7FwhcinO*grpvqo`q z=Gy$I4TC_@1NBN}D8S68LOz-BPh|fjH;U>u>sJ=r-#3@KLh z6A+Z2KZfrSD+ZOk$_@cogObiND7^ilC4<6 zX4z&l!`kTV^<3+MWdd|_W=6>UN7;Rv3`0P~#pdm(dwL1!Z)pHhZY7nD?U2mk#tOLp zPwNEK%9WLWOjTKzZmb{UP)sFp$7L5tVq}3*xd=;15(<{MYBW=b{_6_ zXz}0*(Jy_fv3wmH(@}LF->1r;&S7pyHD4A8c}C#hju2$_3pnDrw~8j}cAQpjFrp+3 z;TAWRxcHIfEK*iziO?45D(*%#WTqrLm3N+VYqP$0=}hz$6SRTd96Ru;?e+P2wStUf&vKrmbB1e~TwVM>=T?M~3F>d!lEe%UotHHB6% z=hZcus=EfJtiL~4i}z*rCx4dgm5oIfLN4AH>&R4YxH(wcbf)aS%LU+`S9^%@6Us_2 zmK!FY(p2mY!G?G?FGazq`kq$WG^(D#;d+A{vYk#_f5I0Ci7_%+C{9HkOytUs{~Tki zhxb@zc}|X7H&@=*_WC8Y1vQ7Af{P*_)`m}bI>Mr6+(DA|*CN?j#qT=Su2}JsrhbZk z>DzSGO+tB$@IhB7TmzZ6tY1G{W>z?q8}hN7t=7(W_=NXlbMry0uE@YN&JgJH>Kq~C zreEQ$bMW!!65`MJObilIo?ASKR*ct4rorsGpLIIWN8x$u==g0P;?J1OZ>33xNl^wf!XOm2IRXv%pu@DB z91~O6GEjc1 ztfzD$rR^w@wm%Gx`0E`_CO8xqmc;0wx5B&pUT7G}ec`GTLOhs$l6W`-T0!**>aAF! z&vW}7HjS>YG*TyLK|hn71TaV9sp6!fY7ATEQ9<+_Mohue4UWCxc!csGu4O4l$vHj7 zixO=a(MyXvXuf6W3rkC}SdALMJQ=W1kBx8~s#q9FoT@}p;%$|(jy$dTfZ zIX7(x;7q`XYv(`Jcj!O!J8i{}%pj|qY}?F`(`^Bm!y+akXYZ5pa17jBnWp8QQzl{+7 zhBCpLaltRTdTZvxaQPCwxa*mcsYe-#35DH)!(oj!`ed52(6iQ0mpO; zs8J46eyJ04Y>I&?1?bdJuUTxuY59ca|JX4i>c$9u$|&2m(-XD1Hw+1>z24s&j7N+B zE}qAu52j@PD_;o2a4HZ_#N8)_gyEXDFri+dnH6nbl}Xod8`eN2>Mi2Q@|gK!{mIQ^ zheu5LM839P{jK)4C(_)mS6(X#xg_v zc%-LE98B|KA@8RySbR~svPZ{n9~!}s#W~8;gJ1_q@^QLzCm6jOoh)?{U#A)Hx%C z^cMT4po+UwoLny`3(=3v!aWE&l9EB7z>O-A0`{WfTO$B${gZyRJ1@vDm#B1#U!1=< zhorMa2T40m`SR;HJvsSsF?W}^9&redI=Y^(TQX_lT)wKGab!(c7};M}F^f3HiW+fR z)QEk+WGq7_U6Ar-ycf~7_(Pdfh%?3vVR8H6FQ9l^=V7Yahn~~Eu&}TVzJDL@L5oIY z6*N&k0FxDAvL@w9nibQd+IfJ5f1FQe)h~S$o;5~% zS$+VzaQ&LyE;6%yk_E8em@H-*9(;cYfUIZkYd%wML%8_l^jDQ-pGUvKO_BQq1k ziU{w%tRV>*PcJ1hW)Aui5+0@MGR@LD_h+|^4iRPaKPsX&L6-6)NERF%zO-_zG~Ydw64k03&zM|xuU-CAc`j1zC9||Rqsyv_x)l!j z&hw%VE1-`O@vI+_FA%4R!ZeD|LiGO(){=(F@^-{@Ht4In z=-NJhN6%~)|7cB$o_bTwx}L=Ul<@nH#w1^qBlW6KSqKc4!mS%pwH;PAfjbk#g?J)L z*OMz&EDq^OyuL7&)SX|}0IlMlvM51a0G{)nfy$LPF~|ytQ53#Bm&$?ARe_3C9%jCF zg=p=oxP)GvapZB^K}rx7CUcM9Ldx(e3{O6n-9nrJgLBP~nyPinWFh0IzDt*+yxAEu ze_a^yZ~d#6{=Rt>b4~Af+sFE%nSstM(jl}{p}?G@@`^I}qVC6hZ9S=W)|PV@J+Wpf ztGyA&OJKM|YCBfeRW2^%IQ4j+Gn$6SQ<@IU;u|Xp z(;=H5E^eQiuU}4gVcyNw9amJ5NKY2(IEXnsO>H+tZz=_fc8L^qV-)S}^_!MtO!3r` z9+y=iVLGH<=(!;L?4y_`v3lMu8XFWJRfZZKUvZ6i1l~++c;!cn+MpZKH@6zZva&t}oy>NhpwA(otYK_nz zK-9zcKswys{fR%hb{+=<4ui_1-cJbV`PoP4R`0N_?wl(Pzna;QFjQ43jQ(+OSV zoKMASG0S*4-lk%;qfmJ_49IgpBn*ScgP9PrIMEF5d{s@R?VdMv$x!NNsO z&c|fxC$D88wS%?zHKx`RYsUGLOQ)z{o)HD}NC?=uE(~Lu?(MTvIwhsx3G_2f{8Vb@ zz^@Vryua`{9i7UFgE+b*la3xL%WIA&>U==6T&j#8e;Ws(P^_aWkrroVz9eEGU3Vfg z-#d>(y5g_R-bLE5Hr$1kf#i_HiaEO>^^vfY`(F&O8NQK zb@A>085Q%#%bFX=0*x*a2?qIM+Gb@%(t&g(qC49j_DF~Z5_!KJi`|rXQDu&2_Y!^Yp9Y5Us zfB$;BI=Sfipp@(J=6+<~eY)=-1X37_q&Pn_rNpsAZN>#c zG4b9!Q=}>Q4q7`g(e+Gfw*sz_birQeAn;=Yhk;*G<9FY!T+DDR>PzEkv1zSfPtl8piwBTK*vU`%i$t z;56e@#~$iq{O?fvvH(9-dk(~8aiSyT&ot8!juzwNiX6HYN0Gq|fz^}>^kd?{>Keey zossm%x8YvVoiBRpg}3SEsR&Dsf^`~4W=u@QflxL>2vVpOeo~NLxxiN3(uAIY)p)#8 z*t#QYlmXklvNluhSBTtyE-15R6cwncL0Az?rf7%8X5w$ewjkU((__}Eyfd`%mhx|ivl3tLM66h<09!0(1JtSgKmKi^I96;$q)HBq?>AHsNw zcA-^~|93y9gZ&@J{r3m*^iV2lxS3g$!m-p^Io_$IlcMolWNE-$;ah~SWW=UJd?b>0 zE?p4*iM!{r-)y8jL(wjzo6s+v{%0DZx(S1ee-5Io(*NdqGlx$9n@~I`Hv8(!%#a#=8{W%OU)@s7n)8HwHDD`$JJ2Ua*sc*sXPy6 z@SpkpM%h(DdgJcmYvFq+>gnFkDVP`V1ojWqr~p=?_=fe-a6xxq!76enXgDEAgXu?; z@opyFWFA!Rqm>~Ifs|&;M^l}nzwEYso64!7&jl@E9h`(+gTnu^GH_4A&;Dg)a1e`v z*Znj+`8Y!dUAblzB~U4jeNp2FL;KPA75PHv9jhslyFqon;`Ilr$=#;$ji8e^D0oNr zDwEPpS#OVfTOYTsbg zl2}(J;io`IMEn1FCPw}0B;}DfssVL=>CK=Ci7N#@4le@8`ybyUkWqp|)+*L|2uDnR z5}1-wj=bsACHUO2n!58fB6=}@?@e7UrXm{#>zylaK>t^~XkXN8X&Pv9AuO+AfZ#W} zJ#m%biNW1{d%u;cN~r!zL`RJLGB&pFK9&a~FM@7!?1Epz!n7eN1--V)lVfL4Q4;e_ z;{+S;@Eeu?z}wi~KR_Z6<|6(9o&9ddH>AOb`ju|{F^hVnuWm;_=1IO|BmUdLD?m?O z$uuYY5PX5+Yy6p9Ym}13V}W9iV=(!q?$4>)a;+aP<;sH*-kDydhPNBl{r(y&zTpK~ zRD|mBQZr%u%v^BMcOfFKxhj<}K%svg$PnM~obp6;!3KFy&G=_DfN7(ptWkjI^@0nX z#AF9~>%hW6K&zu9{G<7p!bM5Wpl7{+ ziC7#lgwn%wrr%aF_lh~fM#OCArH+O4Pe=#? z7@r%XDi>Ujh)QfiL4hAe1ENd4Da*W*Q>kOC7qcKf)LHEhHrJCEA=}LDXTJR-REN~X zw@?Zs+PvKU<__dV>LG4^zO0#UzRl8-*I)lhf4=}4%5+2Z`Ke&z6R-bhC1+5EcA(ky z{=Yt@41Yqi+YS?SypuBob0o%0KJU%~kQk9(!>NqB zh4=3-f9s{S^$nGgk0IGbe9>XYt-7D|iP5_7+wG?j|Ne{v8HGcMWDIj%=?{Q1`Lg^k zbfk+a4UaEhO+1*ai-2VSUH`HygQR67dB~K-$=L!ky2Dn=j6~0E2QQFek2Pt}l^B0; zWwKVs2sZeTqsagC#mfg^i~0tZx4s&(FI_EmToW|ry*JI8!Ka;NrRdtw@Y43_`jw_z zOjxGio)}*r7B=~=0F3Qf*c-x@E3lwDQ6RA3aH`5H)DxPz}wQIpI(5_gai%_=N0g|=N5U1>Wjjl`}$er$zmjdK%?chUPYBUpzN z4@IBq@s^|Hnw*-24v|!*lvEF?;4Y5%IqD4(7sy_6t)eX&PeHTC>J*{3zYEo+sTV>J zcx|9F9T45uV;T?mw^Aqi;X$QezJ7#8kLxL#%<+^4o@fPf*n zj23I;fl}Fd2ZdX|d3+JgUcI^`WC^5w#d3u{rQ8v(KeQa2ieI1iy@RTSM#7k9T0&j1 z=V-e&w88OzB142Td~=EaNr=?P3||yBst66T3%-HWn>n^uUf(m2gbxrYa}-^Hefc}1 z(LWHZ!#DXhgg74oJKF>y8Qm?6s>yy4{mf>a|MIj@jpn_4#X$A3ObAp@h_#&K*d{m7 z45qDNgq?RZ@~D5zpmgp|op$|=G%Zw`uJ;~};GumkjEwHO^9koFio$&R`&yF+q46pH zc_7T~P;Q_g1frSWk9O~lW7^iYo@thu5Z7HPXq~u^bhBX0z7eT%6Ed>A?X_l|38{E| z-oh)Zxvu9b93f;r#^C^R6r6pmbOE3OJ=Fk7yY5ec`qxZW74E4mWZ$hBLQ&$tGsO=# z_6@X7H9MlEb`wYVjV65&EIHorVpT>E@1U`6-;>3XWPtaG8&Khd*6cP3o_Y*pIi>^L${=#Bu z0MX-vS+Jn^B;7{K!eZc(dqh)c+cw4d2>ja*6iG+}88Oq&!(&T7Z&YnUO}ipka+rgOVnSJ{&a)_6z`u7m%Iy9PsoFMVCm7v(;u=Ds{}5bc3SS?(}C8#0du zdAG zLvea2+MqPLElC=EOHDQEF37v{FU5NMVJZ?g-ma6l64f1gayOzHnMTe>G+=)_25EPt zyXe>V;ykaY(7*N!CA9!5m7BUNZRPH@+q8=saQ-|5<+#~?XsHiGJ!>U9e8M}5DmeZg zz{~#7V99iXen^PK6#Au&I#LqfT~O^fOv`@NCCjzte^E|lEDe7#P~A>{C>0K)1M8Jg zzW2^BsPD}U?=(euwU_+m`@2|Acg=FG49!7-!Ftk&Se!!|HVUVmm)^Rs<$j*ZFgtQc z)LvAEEpf099OZp{8_-?5;u@YW#A$ETK2#zidi)}(g~)AJ+urTgXMDb)V+J+k|@&&@@lk?|vl^5X_Zy z4FUIipVX6+w4WFNd;IW@k^1;*gQ0!6AIgxlz88g>qytUL%G1SKzo&15)A{H>`TCD1 zP%IvJ>l{NF_1S2xVV99yOWP*aP^&4S#-r(Fon#S-J9iMQ9TMaZ9Xl-Q*y>1_<6$ds zMyBsMZgtA~L57V`(gb8SN%9!haIFYMbu)d*ppu)ra4cJ`Jy=gZj&Aj==FC`fP~6pE znhPykusv2jSqEE638h;~U|Sjt&+2%Io%l*Z$=>0oPAaHZgXz%_azbNisnBIdRg+KA z#&0v|d0E?lf7%Ha34<4o_j;`5u!C|ys(ypgJzvIb;`NJ(yLcNM__JCg;oiLJ;SeQ^ zUm=d)it(Lsf-t^8YJK)8nlVZ!h0+*>)}034^{XFd7fGR9FKHmuem6iSm&;=8eTi1) zTYMI{T=1VFRUbyngi!}-09?6RXpSNakUDnQ66lPMJhXC40dDynXp*Dw;SKA~=T?V7 z%9@Uxcaf^M*aj~_yToOxTft1X_EmdB^*k{_lFDmr7#SKWiKRCNsK4&=?8)V_b3dfn zwr#reD3okH?_Sb;O%I(*QoM0e`s|l{+`AiXf8#MRww<^w8M}IV_!@#&<~SXkD^5!>+>`GA_NjD7N@*12cg>XL0R<+QSrYr)ie3B{!?J_PZC2A2f$_FUXY#Iib^k}}zg~uwdc0Y3P7dX=nQ;_#f z6KwJm5gH}anneCrv63ixHu`Oh9O4|EE=k|&Iv7{n)46`02|(QUei1uj&>*2$(_-=9 zYTXEP=^EPmO*dowlrkhQb{ z1k9hGiD@fAWh2w6Y49g#%~YIo3^JHJi22Z|k2HyG?Q|PJp9fXwlhk(f@+*p8LQdi+ zqIDHIAYhd9y_heH+nuqm=jpT8R5+D+XRvlxk+ zhYW(TJaA>jBl*b&tH{Npi*U^{W+`;Kc)*MFTy~D; z$VZ7wD=ch5i}3uZkd!l5RW8AO+!xb>tQkY;NjS}n2szq8*=ZuOKPd$Qhjt7NLC4N) z8SQ%90A znO-wp9J+UO#);y9YdEM3?{iHxGum9=D~?@dqj$d&eQXuSZ9uv>7M#g#`|aN`2AK@k zwZUx|_n1Tb9XaVlD$HSu+TVe5R|4HV$86d5K|G zc2J?yg*s~8*LAiMqem}{rNKD%_M+2{_=vrJvmZhX=Eb5pZpWH8eeyqb`kd2}`iWb2 zi^km$*ozeo0OCH0@S40m{1{Wc|Dc&4*D?60ZN1){m2fuVUK0Av^tccGPrE@cl|qB9 z@hE!u!N}0*f})_Gy1#hGK*#4ym4`i5YEI&#Wz4 zIB7J=qNQZ^ZqprBW?Jt{7=q+aF)uA$0mp2ei29Lz)W{v}(Xl%;a&%4_M#jhBpcDFd z=G>y$y6|4&YMXIm%Ji_Fd@uBYdZRn0V5=c*;zgIL;#D7YCG0N+B#zsddrpLQ@$=9R zYW-qNdaNa&#Ir`+bCY>(AZJ)DyCs}P_~l<;-P-)1w!)=l!)ymY*bCCGx90lAWXSo? zKAte(JQ1v_Z=glLQlht{nx0lLHZCrj*!39~y{3mgSH@hQd?3BWAS2a|99U^wlDIqa zsB%U??}`Li`uWiZhiIjj&>_Xx>JEBLY&L27@;94@E;TCo_1Mq;LoYRJRQ19kh)Q4Y zzWgXOP4JeYWg7&drd_a)`k`v3P2Bm{du_TJ+Y52|g=5yB*`(nKyEa3-i~(;4;Y^1^ zL7-&&-d}GR^LK!&t~?JU?z`EpbJ1SF-w8DM@OHQbN~_IrDW_=?U_{ip$`NrzFQ1eD7`}z_dQrq@~>CNynlbtyX&2OltIgf zM+KD^Bi7_KCfzRX=yZDbp!UPj52MJIwu)74%QuY#= zY#izw8|g>n14UbM8&lw6W+XU>O6+7;-Or>tA^*ioOGj?c%yn`e4Np@B5R zcbL(?qjw}S@JU@JTAZgSBd^)8OX#|SyGzkTXkF|WZ!z%fm$>vJH;Ekx_7UxNtRi3U zwGZM2a($%_(c?|UDCgp3+62-Y;X6_Pc$S^NGEHT`$t#YkEqbMJd)39gxQ{DXG&(r- z&5|Lg7-VLa*tOzT7^b+29dvD6`HLFBx$z>}i~S{qdLAJoeQ#3KNI4)gaWG+SB7Y8~ zlJLIaz!Lnu?p0k;%>)V(exVXc{kNDsOE?SMkE-L9$}Zxi%e32iuB`cdE}*k?9&7XB zf<^acJX-J;j4J$YaffMQKc&|R<=tqjrQpZv7C@+cOSX&2&VYGBM2A98pqb&kXtNHS zPE-p=iHW|j#r491|77RiaOjD3t|MJr;cT4u_Q@i7NFx-v6YK-d}zLZKV;#ZyrVacr|~X&NuO;w*UNpX;=jGz zoo8L_wQB0DIl4a${VKheuIsFPL(??ETlL5uLH`6XWwX(4NQ_q zQL}x0BCf;W*94atb7e;K1|EXDFESF|T;B-!(o8XsS`vVT++gq^sy47+)uHo_8mO_o2a)dR}RLJYdkb{#8Ia= zaS|mU{7d1FHGSQzAsXv@64S9vGt{r>Idjq(VnuYggW@2+3V+*}r&M;FhF<-D9jeCJp=A`Kt|1Y%E+ZiY!6Or8k(R0nyx9D=l zOle8zB|4(Uz7J&bOd2ckhF%ciR|; zqJ>ELrW%WS*HIwA`hnU~68;TSizXZ}Nx&P=V6oMM8oOPXN+j$zD~`U~^Kj8~AR)yC zdpGMvS~}b*LndbF|7O0!0vNd#aLr>cYonFVJXxt<(@w{9edYl^7P8|;q{;IifpT3Y zlT}iYDfpC)sdeIZ#7x`gboKH4u2z%FGae5{`dB1RbnB%0OV+54pWY5>3Z2e+Cwd-x zcR8e*@_t>Yx6D8oPK--U@s^EGLMj!SeOp5k8W}Nihcf!(wXUlPo4&VwUWhZa{Z?L< za7QPCR=Mm76})KCd~2(Vuyy$nj6=zkgA#T=04bEQl&t$Q4}2-TkL5 z@kkDIo?xw4tkZfG8@4hm_`JopEMYArEs#>&l5D+(Jr!>CnG=r>~&6 z>R)k^j;dO+g}C|M&91qE7OJ;H3o|IS=j17$odur}Z+!pH{{5>g3+_$AdoAlkTWxyK zB_ZUwAq07wdD%vY^2;w7ABLWI7jyD*#}8;JiN6&nJ4!9gVbPZDz8m4bP}pAWnt3w1 zJt8h7Pq|^*+DgjyO^<$8zP|${kgk;7+DHu(rnr6glI6Iwi0CFKfbq>n4TLuog{=4T zfB4Sr7-Xv_Z@e~u(M>_Fv{5+>VJbSC^7el(ic1BPq70j!~=3D8c`(llvi995Qn8At#QBkPB**_ ziII;SP4t>~>pJX?M(3YTJricSHEd1-Ll3}X07^h+!hd2S_3l}9(bpvXW3nH_|0BtuXsbOE=Jxz7Q--YqGZ;Tr=nn|vF+ydDvy!L>9Fg=0k z58J6GIeZe!RJSRf`B|w}bu5lCWZT!V=wAeM~8wiW#S$$^gf3cfNR3n2C%Pvp^FN#Sz|9AZ@_-st|^|E z9#wYGvaJYLV1)k}qAMp-H^yYO(>6KS6fkWqj_Ol3^%G5O*QM7hFNBnigoR3rGOzD( zj2hs{R^qSve22SH6K$92^S9x#$zbLPIVVG0O`5jN9P9o<{N_YDzH49%>~vLs!M2my zFX5?Fj&?qM!^LA)4+Gv)3hgEO&bOl!(zhyq-%zr>u`SaU`oEE8I?wBl| zf%~(LjWZDb_P0{mE)*Np7xHeePT150p;x<)I(7UT!soJ_AvxnI8=crOt2fbv()C{y z_vFzFd#Z8AY-j$%EIYRsPpHzjG>$alM#`HxRa5b#;20+6Bs43}e&&nebd8T8FC>WF z>_g;_l`Ho?oKSWE-h$h2Z@GR9(IGV=B9#Zhw#ONt6YPTNUh}e7_US!IxDgXf?(AWu zdA-ZA5NZ}&eT^WU$EGmq%CnU#4=Kwn%WD==7dxTsPs*V$8Ko4sQY8k2Nj@nn?IWK8 z&hsfu^YQLj-*W@060AFRWCR`0n2o32r(BuxaC5@%bd_5Rs!KJ5Y`oD;Jo!%x0@|nx zdJ7j+m3h(rr=Fy05S#2eo{qC93u30N>E13F3_+-j#MJdZoMEyo@W^>qs7vGr1y1!8 zQH)~1N3W-u+8C!*MNOvEoCOTT^>^h!H({-3&gCerdqCWN7X@|y53=&OiYfi5be*Yc zwqMzkI5>!VpQBv)tBvl$_C?xgJe!ixj(%}E>XM_%4M9{^34MQS6c(ICH`9?7lHekv zc!3OKSGS;XM|NwLtkSJzV-P-%k|hLyP6~ZdDt^dRR$Io#&BV<-rdyG@%2NK`4q>>! zfCIk+J}D7cq!GJKK4xAPC>u@3?hx&~gUQi6Pdvxq^$N>#zdo#NV}%p0Bfc#Dy6lkh zcV$-My>{GD?0#j0z*L91B8MK%xfPh;Qfie#$m^#?%B;+lPrlJ5>W!ktr{Tp@NBS58 zC5r#@X*q|K(Xa?4y_?uMCuiC&8n*rkR_0*WXj!QZS)apvC6_o?hQq%z*H&-rgOeS5 zOmvQgKx%+`Swy8?MQ@IuWH7#Q0)8wLO|Irgab-t zI*hD-Y@VHX?-llxwk_H+iO%~A3rb1aXnKL{%>1K*ej4^PwV7<+dk{oviH^ z6D@MUXYa!wq10(3nZV%bp~vRNZZ-aAdSQX5kSjo|$#ZiA3Ec{ugC{}VCJif~5?r-) z29+0JaZ)u=)Kc63L4M$AXSH><0_o8=;sc-*ykkS#O(%??4Pbu{8l5s9R9BH zcfdDps~G%!;U)uKuqvSNHT+LmX`{CRHOi)9<%oE%IJ(I9%qO8YLV6L6>68Sl@HwEv zzCq&fML)_iEtA&Zy6yP;BkEsechZfY76(`N#M{TVi+iL}f!p+GZdVT?745j=?|Js+ zlAq2}QJt3K0eKO4?kb+YBQvQm)>y62SoXxRCvs=g*3Oer=5b?0=4rI6Gvyzqy_gR3 zBpsd^hYJUUg^N~*A1Mfp;d;98v{UBYON;-FSyQt3cja6+Ye+km<{$8@z!lBc;;w2A z2@G9T1N4@*-Ms$hPJt?E!maht;+jLs+p>_9ht~Dc0Yn|L$1S2ijP98@h62b$yrg;= z@}Pt~I1Eq4+UC-=rCEx@haRH080~$y*{g>R_c%XOnE`i3vaJLN2rf6<&2{=xU`hP# z5t#f#6G*OpD9W_F0`@R&rt>whl-qyIZEa!S12BwQ;^423u(jFKdoS*`Bzk?qLlngm zHuP~}gb%+xqz=L15al<8t>jt)gM$0EHXH3OX43Y0rO`~-ho-&aNBe z6Wl(u1KY#D`1t{WdmbiPI$5Q>x~EMtJckvab)Qb*%+y-Z|D;V-w%ckLUipK$CK(Z4 zVQ~Ds|NFl-3ImXtnGm^wZV^|)H}@d@R{RQIk_Ed@E{PzHGXh(`f3eeY-lAxtXt6iR z*z6TbhcIAvjCdqV^to^DI77@8-P`uxhlShd6~gdwM&m5s?0Q(Fj4HyL2I1Ds0`Mk= zTeURbPr2X?C?y7?il_^6;&}5@ydunt`4}KW8wshk5eByxsbchno{l^qrlSv0H;HQ) z=B%$L^%O?)7e|wRyAttx<)=2gKN|oG9UMCS$yVi-ACyW#71B(^0eV*AW%Skwf~ve;y%(F@nhEJ> ziWN7x8Uxh$p7}KNMsOd#U*Gj--sZKO*8PWp6xp;vmkPtJ`#a1qFe%9vd~vcw9N+aI zWb$G0gMw-5j-!cPBg_5@-bu(y3ub=Q%kz+r!!t(Tl%07zkgHf_yZGJPS+dkD;C~UA z6A$_*YQ68Vj6^T+$^EZg%TihkE`?MADQZ3wXR$g+ZRp^pMY>D)_xdJdBHo3`zF7xr zOPsnX@!#I(xxs@hy0nSg{%BZN}Rj>&3lL#3w09h9+n4qr>6T5qOKBYp#E&q#tAQis%wqk-RAF@*iQA1^ujczNJ?B1 zw@fB}@yXV4CKhkC5gfBD2jPdT+J9{Q5d2^9Sj9T~^>IbF|A6X*i%^-EPQ#nbn7Xq0 zx#uYx#r(`wTeIVmilT(M?}>BoORPxW)fG@WeaSpbe(lI9rw?P&Lm^ySy9r>31eBfL zlJioJa}#!+t30io`^_bS{Eet#>dTu4MlG^@Q~kO&ck#yLBeGI;W8}~dtaHC8VAPJL zK5G53>cdq@%%WF!OFTWT?kwAQf25Bl@9DUnSn+?Dpp$D@vBl1BtIXC^Ia)`z`e#~B z8RC;YLw2wI~dl{{~v_aV%XD={Pnef7r<} zjd7KQQE@Zvht(U!@3`Cts5(wuWz~*~^fdP&8GGG_jEQ|$_e>fae{F)#^Zs?Hv2gRd54wx6 zW^<7v)H!)nd2cXaUJCzT{Ytd|^eycv&?CAe?bMbJ_`cD4S F{{v=kovHu; literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnLinearSVM.png b/core/gui/src/assets/operator_images/SklearnLinearSVM.png new file mode 100644 index 0000000000000000000000000000000000000000..510d3914291e8dd41bdc0672b06103c41951e27d GIT binary patch literal 17599 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 ZQpH2N9pmnT|40H^pRl*6GWY)P{{yZ~PY3`2 literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnLogisticRegression.png b/core/gui/src/assets/operator_images/SklearnLogisticRegression.png new file mode 100644 index 0000000000000000000000000000000000000000..4c598becc92b6c719b941ae3824cf86d9134d7dd GIT binary patch literal 18324 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 tKmSoH3Y^3Pou!6{S)U$;>H48k8Z)*dU>ZGS5k( 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 Ju(_N6`(NXNcIE&8 literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnPassiveAggressive.png b/core/gui/src/assets/operator_images/SklearnPassiveAggressive.png new file mode 100644 index 0000000000000000000000000000000000000000..1b41270fd0ce78c07db5aa7bfc21a92159cc5101 GIT binary patch literal 9322 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 MiuUb-TNW?=7qZ9;FaQ7m literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnPerceptron.png b/core/gui/src/assets/operator_images/SklearnPerceptron.png new file mode 100644 index 0000000000000000000000000000000000000000..858c506282958b8a9ae291d15e546720431d1603 GIT binary patch literal 13079 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 literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnPrediction.png b/core/gui/src/assets/operator_images/SklearnPrediction.png new file mode 100644 index 0000000000000000000000000000000000000000..622f9a71dd26e795db49ad55aa4d46e262c67b0a GIT binary patch literal 98115 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ธzEjeiF{5 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 Y2RhNm9|p$85pkO7;AEd~>lOX~0miR5?*IS* literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnRandomForest.png b/core/gui/src/assets/operator_images/SklearnRandomForest.png new file mode 100644 index 0000000000000000000000000000000000000000..2ba59197dc8e13c51f4c712ab673bc1b5893e6d6 GIT binary patch literal 81937 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�hHl;lIi1KB-rMXv&j{cYbP_~3Z)>P+ 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 literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnRidge.png b/core/gui/src/assets/operator_images/SklearnRidge.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1f47c743527ceb7ad069d81b187451221bff4d GIT binary patch literal 24635 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 literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnRidgeCV.png b/core/gui/src/assets/operator_images/SklearnRidgeCV.png new file mode 100644 index 0000000000000000000000000000000000000000..b28c68ee083c2f3eced3d83d593b968daf7d9d07 GIT binary patch literal 16258 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 NOSA2!g~o1S{{ei=;iCWm literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnSVM.png b/core/gui/src/assets/operator_images/SklearnSVM.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb5d4aede532fda60b32d0ba98ef7614a371876 GIT binary patch literal 17776 zcmcG#XIN9g*Dsm^M5GA_D7_;f9jVfk5NXKvUp2@KyKXNYka0SbYD-eNw4z$ic#fE>w(qmwfXzu?Z{$q z46+Bh7ZcV>_JG8K>hwzUmFCCKC+VpjiTv2sSNff4M;bgga$PuTNNVJ2C~Hi1e)vKC zAOtW0A`OYroE+PTSy*^55tOcbaUx!4XvO!jxt3rKm5JU5A4bjo#!#cE%v4c3b0ME8 zrXVtx4oz{=uR{m2U0ScpFv-wN5#RVJpwt&6@Y9F0$>SH<>6@=g^$Q>oCi%e!pEQ{z8|w(TB#3-O8s0>&3yORoxtWvfl%wq%x0(a`N`OlSMF%}sFrS6;FL4W zN0kra1~W-HMRRgCxD!gN2BbmN96lb)I62%++|^^WR^MupWE~%Ph(iH?Ok9&P=F$rB zztlYGwR)2M&BBnjwM_nv2>r|-br5rHX7Vw*#;H4Le5lG*PDb(y9w+& zq%L#6J}fF!(B?RM&K2c?t0*nVoJ~d;?4`8BUEp0Ig`8)8G9%=66yM*}UUz5THn1tc zJ?Qmh+6LpE_=Vk&OSkCf4-KLH&7*`Yjr_vNDLV~1WZVvzNj?Qla4CeMzxA^+Fl$Ry zOjYqI;3`KS8w%}YGNO# z43OHsqrUMn)VWq?y6^(lze$e^!th`S;exHFc4;P=`zLJz?u_o3rFW9O7PtpCi5V=5 zcq(<+)ep$MsPZvS;Tr329R-_OnaZt7rMXXY-Xtyu)0sFKNvZ+bz#WfZe1U)YbKW0H^6Z=l%?d8 zB@-ZFNbW;dnOHyBn%33@78bbWYj3axkHZBOsGRs$tCl>t2P9G~OEu0083f1q5c1Sv zqjp-zR5RjckiUvId&V*S_G7SG0m8M zg=p0ER_5f9z}4M2qIeH;FUz>KHgl^{x9uzAHAj{jCr!)Ty~kY{Uv7^C9lpq5nNFou zk^BB&BtRg71=J=j7bSNsnTku8>m~0j(&*Nr+Hknhk~zk@t(8HSl$hcdU?@o=C zDU~AXa7AcjRSk~ZR5xR*CIcGML-O4AWUJ|Mt7tRX$GsWK_JSH?@46?mE=7X!Vkq;! zQ+g9bRAC0hJec7UPt}p>UTPnG$jyP^5llT=P`F`02qT3LwfAPXyU(z?JpmI||4KEY zzZTQ)+`g);N+Lta(<$yu#LU8?N;d{!juX(hSM8O`_1O+lSha6(n$z#hHxfL@tEbuf z)pG=yo~H&gtrgcZ~E%VTOjea^F{i8odY`1<>nh8I|>+ zD43gUkkU?1G5_o^UUyPzM2oE_!DKS(oV=*fNpr}VenhAE%Ek41pOdClFW3IPG5BZ; z>p0Gk%pKACu9v!CRrO~SKVqUJRS~XPOGXdrM1}ag^zu-udC@8oL;2(?q7hkt{H#rK__e3x5#mmA6#`0VASMHFEygED&tmYA=SuJo{dj0@0V85mz0b;pphFH4LkybSF(z?t_^%PX;e6HSg=7%w{vE@8?HcQ`=#7=LsY^bSPssh%+&Y z6Rp#&*az3!6~@!TUn!U>L4>&n@+`^ch~|t>XM+u^M<-CK9Sk+v%CEcR=CK#n-d76J zOKk-LjSO^kInVv;?c@~$mnNSVe9qO&bY=}AO#apWa~*NzQcQj!Hd9yKljAlIOg?$^{u7H7i#kz zvCo1;;wkfASUp0RYrw?FCCq7M@?7INgN3%OF*C#AuQ}3Ub}r*Ueiu)sMKOLfn6#|&$+=>sg4bSaFt5dN&ua*|dS=;5ct`|%oG5TH8=}uq)!W=!Y^xu3I;Jc;<}%H@E|uLfBNMSejx;9@9h&n=IHHE zuYP+GxmK)l1MGW}p=bHNoY}yr{OG1Ypy(G?Oz9Kdbv@W&7QG5rgDu*t@Nw?G~ z4B8*K>2-tr)_wBnkXomrUh3apYCS*II%JeTV*cxptVa8PM(ZLeg9U6l3#sa_cfFp} zlL&f(ZC@m`n~%SoHl3uk@fAu|RN^$=U0|33KTyuJ60JTwi|g(Ti83k>x1VNql9;9N z_w#0^@FZUguqnyl6{iiO4SLafk&n+opFB1UnS_tBo|Kp@$dF0}irb}Z3TnLG$u*LF ze4tswG!lDR#Li7Sye3rb}YUUTn!TIleY@$IxPk;dvo zv@2MBFhcOh%K#dxg;RS3iq``w0*BoJ5B%w=g=>k@#$|5n2D;X8LagcoS2s8Dac%7}ZN{CoWOBZxCy$e{L`9>cx&` z67@9N`G^U*dpgjgngX(w0d$q&PYXlS;~UGKv00!3k&he-T522o$7U1HAFoNQufO0x zlkHztPUR9nAjrZy%bdbkysz*yg!VfpIT?79xlf|~rbc}ZU!w_FzT;(EPD>qRJlXt( zG=vcH2-m?8%UKa)a$I7-j;Mmwm|4z(IxA!f12A2t!mb<5*i?7_XMRhWQZ>|Yb7Fq{nJPLHRIox(>Z#h@ ze@`%E%+}ndB2_Vv?MP?)l*(p@=%VRnEb~dN&n>We6UbOLKXAH2 zQ7l5Ydf#CARAkX@9YlGnj?btiqGO4my8FNZosxC*#r4~&z#cX0HL=g{o6LBB4eE=9 zjAt%5UHFDk(CyY)ui3sXJ9t>VFLwW%1pm>VRr&`pcU;@$&e3-AX7&ieM#=-rQhX{q z>%7}Gy$Y$QYdII#mEn}Ncyt2`^{}7v-O0UQV8?-|6pPnU5Hrjdx#7MTYf|NZK@)xP#Td8gG^t4T=xEpV-qQ9!@jM1 zyDhG19{qQeIClX9+MNJMzLY%20Z6yAhN8fdxkPhTR5BXMIA)7`&qZDJS znZ;t5m(Lvw<1+(#tE^woT!6}JUU=~To4wZ!aXzprE+F+!?(ivDU?Q(i{MbEEg$ zawGO9>0hKpBkHsRbG|W;jq^Ot-?H%Kpm3`8IXCoRKzrq!WUG(&D57H+aHDvuSuHkH zOHQ%==#x!wBjTlNZM1pV{XtFzzP|C~m`aMln`=IIVv@WYh|}->eijvD%pjnl%BNi1 zB^Yu~`gv#3Qe^8z)Y#Lcrqp&H-F63M1OYEt8US^Io zTjSEr5e(^Hs=LZ{ilQMv^8|N(n~3Z*sPBNhrNQ%XR<6%hB=>GxJ6zI8?78v25O4Jx zgj$uW20A9RE?ml{X3>brQE!Y(mN(8vYex6t>!B!pz#Kh-b>bh61;HQQ0Hr*0aUIjlK-qrD6 zkch0;_A4X|y%4)2OnN1{ml|`FA|Z!IC4-i4l@obxx@fGGtt>jaM%OEq7Ysmh;>dkUT>#a0qY zr~!WD{_@;A6+8!)S#|naGnd1H<%2a_2YhH+Mth8;r@?1}Z}fA6@NYy@Kk3<#0vcmK z%=|jhMIma|&l^TGtaM@Lf^tzLCwgT+Y;14xnFdUNYQAtW1`$q>FgX7z>Q(Pyjtd|dTWp}{e;1i zk{qWmQSMSm^;QtjSd>5O;iQ9pKf5)Q^5D6Ev>`a5gvg(1DG?<7it_E-Uh1D^fXX_1 zUK=+D>_R!sr3^-_0z;Q#_tXnn-Ml_6bwn9{)#9{RTMXT?H{aE1H;N}r9oO-Phb&4 z<0Zo1BC9E6xiLatx#FyVpa@NeQNddQ13#qW^O^Y5_kZ%#dw|jjee#IZVsPh)%6B&>E3p;vd4SEYx1Kf zCutCEahXOtmp*vmz|CVB0`rgZh`8>qAGbXn1Jq2uv8e*gzHk3C>RodyupMgvZpG+x zKkILMzfRCpoTSoWcvQO9`)o-)Z*xB-Y_WI?9eGNQqAoV;+=ud@fc0K5HSY+x3p!6}Hm0Qq_nxUgqctH{8NY1>!km-$QavjeQCLjxy8Enw_&e5#_B9YT<&b1msz>qS4-S`Dq6qbe48^FCEVk<=y*5A#6=iQ3WZMv;h&F^$T9|cyD29x?5c(Z>Hh8*mr zf34#Zs}s^3f~=_bjED;&f3>NMvXSt#uaS?IyCL+zR%DxcXL~bm63~btPeS?Ad4g*H zrX>aj^=*HhJ6znttqd20YM4-6pSX>)4xiM3(JYbUC|IQfe4ii=cnqZ*Q&twRXSaq` z$i<(2+>lk9_=+rFRw6>q>GCYbH8Wbhj%Snzy$@6hmPoo5v@ZJSAq> z5jVzuG<(Haece?i6JLMxO>&uCaET*dPR1{Irna<*+?zN4R}Sl5=ZWZKpW5sb$>@+X zC95~PVe4G(t!tV^c#n4e!wVBwo96C5Ew!+AjtTFcPk8*JOSDcqyco85>}~jtmc5$n zW1J)(SkBRBZ7WIrgPP82MV}$=R&LMIbYjbi-oWO4OyY2Dz3LY&wk`p#qtti)is;ub z=`L4)ZB#iqQ`=(myiNqIx$h0K1y0k;-?Z3%Mp>=hWgP5h)tI{)WqokYQB2gV4SYtY z8fAH~1*$VNV02Jb&(Z?Sqw%rNt&;xa;(q1xh$8sXED~!7+ZCzn=1)6&C_v9dDwaoXepNb~>F~D)u=B2&lJb z^N`bb1QAay?g5JNoa%#j6X??_1)Z#`ke(w=00E20Pzvd)m%y4WgY!D z+lRx)0Lz4AObcL+O6sxqI!M~u)*r7R8U-AINGnEZwq{{ez&uROxYr(0&7GS3x`ttU zV7~K<5Eybh53kD%M5vh=(~PL(#fQVSPnIJwcpo}>HlDTLr+H-`!6~3}8w4BiJazp^ zPckDhRbMGhe~SGumPp3%=cSyt$zFt@0cSSc2BvCw=gFcWuG^<-|6T5@!6?R6e~FN< zRJ%+>P&92?CLQgWpN1C^N9BHPTI&KU%NKUW!;#zFp!5GA{dR!}Ms^FsCy7NaZ9~3cNf;ESKk<=Kj!|eMAV~G1otT z>68RG)HY_Qdu2}ZR-C>L;#fO6SVw`~+lQLBxCh>~rx~@`h{cBvRz4#cps79XN+~Zs z>0_p4M}>=OAq`tO!EFnFLiFdy6Fos3HPe?a&T6}*?9lcaO`wGW`xJ>IiuGg-RmFL9 zAiA^P`CAX@xOm;~@KGcKEYdKQ4E}RKOVHO9(V8UiYg3QW$F$fE6;Ndl zQOex!_6|+$>kqxWd8KBfRg-JgwCp^^3DO38K-CNYjM-~Mm5~|kR}Zh&IC|gYX(2rf z!o3zp-;M!5?*y8Kd`;_W?n$scxL6cnS~^(0n?4O0>6N9Xau?yH@HE$qi?CrI2s+t& z7^a0H`JRMm z)`cJVt-FFDHVFBQX;V1VAdWp%yl=b=6OMxXw&wKZ&lL{R#dX*->m@lc+(3y`bW}h~ zVtC^+6sTn`%cMv?6VspqSreVtzW$?k!llN)o0jB}u2OyBVZ5=sEX_65f2VBsi7s<0 zMRLlCN0v_+$(L|hrccuQ*=LEm*np)YQ(>(0r2g#-fdXbL1DR80TmeQsxx~{VR4ezOM@+BS7+ppbdIw|04wMu$HNo*(;Up^26BtC|s@OQ5ET=tAM$(b!)NLeTHnzCQX(Rvni z@=K~>|0V#h!-=P7H~mob_!sSArF-Sf-O8n0&wM*aXyEOhdPqVtUJiCJ?w6|jZTSXT zi>Y=*!=QH)0NB5Drj^_jgvW4)Ar~`CfPRPr+QrXaw==Huez<#1dIbj>xg@n#Kx@=% zQZeAixYo9jFA;th3G)fn8SIzhN~M484l6AW`uyTemb)KecNL_H#`I5c3tgETUxIC$ zjg+xFX~0Hk5@U3%KO&c418`(eGT}B?;%C9$4$IfMEznJ{#S_Ga8f*lTxKO+`Z~)bT zBb}fkuPE=JD*K%&aOIfMeA};IsxV<0(`I$&sC#|=CeU+E(dTYMf7^npqbZe9vHi|; zIA&Z1;15kD5W`Ci^RY;y{L4w8BlNtDp#Xg+XVaNcAQvljzEV4Um zctV6fF_);+o-XHSTVKcY>PI)VQPx`WqA8~94NCat4c1YVsZJwXb)BqHO_2K2WR}4LrESLsWBxY0VlRlnf zemKpaiI2>L+M`e6pU(STl8`4lv;e>`zqhSn9CA?>8PmebOGo<D1!pKr{7sIr-YP?hEGi4_GigQ_FS450)^hb7$^K1$oQq0p zC)w0D?3T#m>xW%B*NJB~zO90u+(tCo8C*XPG_3t;k;I0PLK!4>O4f}IRKzM!^t@X# zeHjZUTi42ajQ(Ox@^U-2bV>R(ZzE`ni{fRAf?R@wjw3j8S{EaRLRaautOZ6%s+>OX zyKwXtO%_m$5OkREy2uuS0jvaY`=sQ@-aCGfyE0Q)C8ghyQjH)}7-byg9fUn%gI=gZ z5MJ;xb3Y^t+D6md+pjBG=aUc3{PqWda%8>L2pOp0&%-)F3GI->;~N+6UI{6~yJnjT zGiuX#C+Tg(Mz#SLP;XDSGYfa>&bfW>#jEV}X#n1LoS=ZyR{X{H%jYzQE1O~N27?89 zF`4hB!Fv&R4jWsyhEEt=oWXYjed|rVue=wRm_ur}k? zB1wNgJtT|{h>BUBAdH7f=dK)fMiUHP-h~hpe)orR>*ykbz_S`Kj?$RV{quTdos%y} zCzv4C(sczcjf!vlBO&F04LmMSEZR3(lfvaj6U3+`f;hL^Fjvkev2KjNm2Sy`8QqP% zuUOh6$|2UE^Ke91p8BmcNteafk2T*}_yqV6&}~JFlby9-Y@QqU!RbY>%tdKwgiX<$ zhCtf**O}nqmFF42;q*Ek{{?+bb?b$gT!NKaYEEDNkJTv4xsZw9E9!QLcrboQ7ECYw zK|7q{*_{VqXE{rA;F7INc8MSRz+DUd}AMU}v z+e$*2jLuUDTpRhk-bLe$V=t=1Tm{*~^aWTy+m!`noh?YtuCL@srKei?;{Wtu-Ag~= zt;AcMla~$qT$Fkr4tbH5R?Hi8JFVo8+0G-WKVMP0vZDk9CLR}F`ed=8%(fjr-L{$5=W;lL#^n^12uKezgT@d>4SpqN>sNq1n3EP1HxBv$ER zSEw#ghgnxBqORs;ndn2&x`wFE`CL4{k1rrxibomQ$=5mjDAwe5q)d*hkw5?J9o!yx z$kX$I{f;8SU(v`wa9apPT{PSnNBNf5jbwr%?t8ta^;;KGcUznr;M6lBhTo=XZt9$A ze_C>TDfI}`4!{3&ZsDG%%t5LE?}|ozTjwWib=JPx%o`AR{_bgxreOMCp!|nJ zc>H)*^i_dmzfi-CpNeO~k~#c`d-%#$z~{8%jg zWc|F_onTG0=_lrHj0p`=V>{8JBirkcka<0etn2fCC&jA_cpj-(%KWcDu5m2KqKK>C zIWqHruHEYUe__h+ES+q0S8NP_R>JfA2q(S%?;3eAJqcza;vKf|Th|Mj_e!einh`oD z8DD=!oYyXjsSI~_PEyW?*+u714)2+>9C|+#nV2BDjUzR1V1hy zqt0?`lMhYY?2J}59d%9+*Q(UvJYFuKK{U!aA|KTo!b}^^I0@v2+WIe_AjpQr%12ag z-Fp+)acKd{|NXbC4_;p1+#DH6tHh2c!95eVuK7iJWyI{U%bB6ccYUJ=ZCd5;&<)~H ziN2~C!`i{0t@%Gdx}Jo{-rx_y+?W@b6F`&+(0u4BvW%fD)+$5sJ(<)o!f&L3y`Z(a zc+YBa#bg1TZFUgj%K^TVNxx%1tg0MWFkCrUPKtX-uVpp!>5DyS z&ipS{94*Ggwyn4lE=W9=_2Fc7;f+!Ay#cC-g<06EyD7)k*cC$1}z2yrnKw|sc#E&f?6o^r9c#Wj_*`q=Y=?tBLin2E& zI&|&$nuE)8gxv5GlIDQ9i`6cRS|`Jl+w%N!lsJwNbVTZ^8N>p1*tE(n-tgbDk%~KQ z!hY6^co9CKq2#{x@A_CV5tsb!bYG5!j*Z4kQ?fRl?fLN`56|E1!#QSJ@S!foBJ&MI zm$o@^7=ToYHpBwVjHA1WS_d+cx$Qrbh|1-bV*~@S2F$EALtK!9X^}`>RABqJpk zcc&1$W_b?@;=5ukDkI&(jVYKr(>88zZq1`;YcHE*8{QKL#IAbU=!Z>L@Fn$}_Da=* z^w>jZpqNSQS+9WKw{fCoWW9e;FA9ukBn`NIA>S1J#=0|~=Wx7?Ao2VKo$-qd|99VL zDs&lcD$CCrqeeA!Ugm>h1Manain7cUm(+9F=2dMZokEyXHDi;6tnHyYwTg z-y905X8j0Enp}Ye?XM+aO;0tzBBhU%>K?A+hoK3d5eTP*p8SuX3!rkOB9PBg7YSnH zijN7aUv0S$%JU`g`24E4X5pn}dBXIz%=Q8sZRKaw13fW4Jg(-=>5)Cu^#;)%gKE^g zub@h)dd6xCs`xOs!X=Q#`A|~&98gYDc^egfWGlAJ72~Oi^a`)L(aGb0F%Oscx+3?c zPmC=iLm@fPY@P)Kl%BbCNB~EbejKODX49fsD9dBPybkRd5B;iO= zE$MdTucx#3$q7G}d?OK6Usf$B>X<%maJ`RqEeEwmZAquVdB7BY(g9cq zh{<>#J(<|!g|RvTO(yi32{9Iw^>7-NpE2(GFHbtXN^9148UO+x`osu{xidbWU(QyR z^1a#M;zZtIsRND!qI|(`*8i2nq^rcP;9U{c+&;9+PkeBqI8lk#%ZI$~{Eo*Maa`5n z%5rk_QxQn6ZkceM7xqIOZgUm%`4M7>BX8?VUP~Kid&)lkZd>OhGp6+u@To+ zcEL)&aZB*f!zC||tiivD3;@D2LP+IFl5j>==^>Lhm@mNsyu%UqFXAM{j=F|bh@ya8 zr|-Cq#Z#9%so3D=llU*Tx;C?x8+cP7)&5d1DYtkT=Q|=G+|bJbUiMwt_r=i-tBl=5 z6JKiywcMWxFc!fbZ_#yjEcsDnrDn8ewrSmAUBQQy1Qn|XlR0yZ-2FxT!DAmCvp@Il zJ!gg8jdK6C34~BL$$}SnSSb3J>I&~(*b-==?|O|LzbZ{i9-yir^93=>b@ULu#haBwQ>uB zK-tG^gP#DA`j<2*y6}89YW{MYqFhw8S`&zC z3!X>a>{hb1{NsU5fX>PKGnk`3F~7ttwahKKIK>{?wqPS&U?TvRwm}ZBofA(f$VFXN z(>q@fbYBP}!875O<$M?MN<2mLPt9{y@sp~5Ya(DWk%w!#?V+U13@oYu%tTz;Kqo8U zCRd)+p{y58iQ*i_%Cx3Wn*i3(Pfu-ai5j#GliZP(cX5}vZqXL`2tg7Yepq!L8kzV; znJm>DLUee2n`&6)o-GT26Y&D&P3)0sx4Ck4n5k=qLK|3u{5oS!)h(olXR&94tL!iL zRd&m>j(KpM`4Q=hA7;ImlO`sj<6O|cF1|duv{Tak9Cr2ke9qyIK#}d|@8?IaY#qHq z$$wh~N)s%%TKpH((TOpk3p!X~P{rVo^RuDjYH=B>vsso;@ok|G;(#-$<-6)1i65I~ z185vq@r=XaDK{cLAC^P;CTa`v%~!c`Vm_O0^bL(23YOQcVRH{wLd_oosJ#by9Re}L z8Bd&d(w^Mk5j5;a6v3RX5-j1eLfe+$`qeK+nkMLWaU+*gvqY#9$<}E20!brft~Mhb zV+eWXdm&gZ8@7yTw+mEi* zK9Q0e%xE0C;%$0=_tjnz^}N^ktf!VMX_8_=QlTuxDiM!KTrNoaW6rZ*9x|`cuW0Y@WV)URAH_+ND#>&Onv>L0&OEIqeXvXVWNDAN z#;=t@=K2H4&p~FYW_vdyhjY(n-SR~;6?z;ga7pBGny#~Un9Sk4p@bED>2>DnwZ>LB zS5+Nd2=b*Js9SKvrD_d`W z<>iZHhvc0FqR2w`J-*tVSlg)VuZ%p~JD_+Xd<=?x4Bjp$f6Q7xKEY!4;nn^aWBmQe zrknzi?9t$Jr+mCVtb??IaWaIvK8b|7^~y?gMG2+8C{skt8?a;rxoYcfBUK%R^OR;A0jG?NyV50+T5L` z8M3Qmp}oCO0GzZW3ZUt)T18; zBAUN-_4DsF^2d2D^6{6;V~xB`TN3JpZTD-PHV*h~eymP(B`mza!pHUU;~$RCx`ivn zE6#HT3rB*f?A+%NGxHh|s%#Y=m6uQ1BM$9nJ18m?KAdD5yx^O%7ngB$!78$ZfLV50 zYZQ;D6tkY32-H~Zd$4}rlX=#bywELKu_Abk)OidY!J6*}rMt8;PdR)fpp!1^y%#db zs1RuU`9zf9*1z>hJDle_bJzPuJB*5?&9k5(`)$AL%uOn@TgX_)^wkKdQYEfR2i7x1 z#B8WaCQwltt=A}G=iWclm_rvrowF@p%Uc>GxRQUh&V?!|x@st1F_(+=gka~sN#fG? z%Gx6E<}j>^{3OY*2{Yy^xLuJ1s5jqS94ba_U(BiR090eS|DqnX^_ddG;AkT9!E*#u ztsX*x8eYo#f;${&Y|nZb4dh0SPRQr`L}%MEf_?s7x3Yuzp18Noytlix6Y_DZJB2UF z?7pm?HabtT;ZfG=52?={R)tXt$JYiMb2MI--zM*ZyRpl?d>@=UR-Gr$MTpCZ@nPqx&~z6!|%{sbGt>w_aeol6-!&X7=GdQJwsv)^C$`?%A0g?Y!t)25MyP zFT;W^mkPUn!qqP%EPqyzJ-(*nA1uwiV9XNOBoD`aj~#EMXGi@^K98*T45GClX?rGS zqKR+6W?c9{;mipWBe3vL{*13CesbrL-RJ&BP%iW~(^O2ofJTNZZ_Y*aI4wpG`T)?1kwxGmA$jNc zLe#{U%Hi;(x2pn{M9zN_M~s$ek{aQ^h33g-*9b}K0U}&JO_o$QN$7*1tx_Z1uL4wQ^d3)XThd0uGsf;A)69IJ(tM zd{!NP5go^43*^X6c9T{5H~CRCuXHp+JNbm9u$fCRtOHm#fNpKD&2gwk7)1FfvrsL+ zsAew_?ck=`HDmJD%fTA|{!66Rg~iW+9_&HP`tz=nO*K3}QOsUWZ}m(O># zra+Ab(o#W!!$>st``nq-h~+!<-S3<>B7U6;a#y}40|`O&qubnaZ>TFk!023Z31!{@ zI?4EH_|qHQZQO&Ax(_#db^hdN;63%_gP;Rnf|5FnGeErVuBK2)k+F_!_Wo2!13DeV zVOc}h*f_4J7x zqVY|}nM7%>J#F#=-zt0;+5jrv)G-6MJ7TZ4SCP!G;!Ray5F3OD55@0!Nx3&kbE;_3 z?02%Ej+)#oFEu3UR+82I6~*M1L_+ zh=(VKa}_69r@6YPfJ_^C_(@%_v%pC^pv=p7r5H*gOn)w1V9WPLO`x-+L?F^g@;e*$ z483aOSwNJYK7Ge20i44;b(i zsAmfg`yGj@z=IH7$5}ZqyR}YHUokL!#6TRk&dEc0nQYCFFW3d_MVc1!cTYmWEjYuc zG@#5o$y~GV`dN9a{ocK*8<$VbMxJ4O{J4a`gCv80Gva;)_xubt%^;F>Sk20gUx05+ zfNuE`sPqW&e+iYhU`R2KK6s?8k>IwFUS2^s7lb)z2%M|Km{K3`wYB;BAsddyP%TH$ zOP-`<-4h^GiKI%-eI$*&j2pn8PiKTGlh&MH^Yr5`t#0Fo%DnX8FWtI084mA90bWbh zjP>c$*=rAy$L?4&JSachX$_Z$r*3S4-y}{Lx3NATziBeL?2kaRH!1)SIT{nB$@3wz z=D{y#JRhCAjQuw%e((g_UD~#&dVjmas}V^dIs3t)F-H+eX(|j|jl9Yd=BY-K7uRgg zaPGaH3;-}27SzaQ1gTJZSu_8p9*PXMA5S!k4Er z4>ZIqb>tIEgIjeaJ|NP4O^JedAv=jeoe?Wnxg-ktqoJPjNk%7UfyjQ{ckH z54?5(^lK_wnQzZ5vt{h-jSkY_F|0^5rRw@EbBOa(1_!aUtp-dh(&brKX>TVaGQQ5p zbk;365V(`zYL8={8FvxS5k$sAR<1gMv|=c{sGZFqH%Xe9?+HAepV;$}EhS&%>j?q# zV2*7a&_3b!!_#_R8pQCRj9JeIuv?en)C5L~0L(X@M`$LPXrO9ZHcJUq?MZOc-R1nF z1>Z>2%e;=LZBnQ7pL$Sj2jK2A%FZadz>$bXuF|OP@cI)mV$6`{C^N4Wv-uxs&n#U> zJ?_l{^sitGl*j86A9vcXvO79P^x&S|RAkEG!6nLKVQYxh7Tzyy=kebmq&5;sdNu*j zd%%^q;j)tH=bVyHj(_x$7{h@vci7r%4;6$DNyLlPq4H>K&cy1+-=WO%UA98kR#2H) z#Sm-ZjX|UJ(dWQ2yuuk0NE$bx74(ey?XJA3w_2Mw8BG2N{qyyMCFwesaEb7$!O~VH z88#V;<|(Y{r{9xZ@+yh*M@jP7Mk6QkC?X{aVEulH|rBPVn z?eftr;2I7zn5V0MDFHO#tmvpPc&0g?h92vl21=Cl=`3^4Qa~H=?>s&$91S>AjLbZa z9R5bI3b#XX{#Z#wYt}uiX)4dB0SfV9ZOP-002mu3cI70$+!2A)yNj9~RDy^8-zK*lcn z6o5Xr6>%<@wpZ3QA=yUnF76mUTF{<5>-ZKWm){HU)(P60Z00ZWR(_OTeJAA4cG8FT ztN7!%V(%jedbR5x`BCV6@j4|iaI_)m&<^x1!H--{$pFQCU6W5v!jgsCzhmmin1i*! zWQMV9(U<;u2gc&f6*jdO$6WA&wh4jX-Lo5tI73_zN`AR-?kv8RqoIqN^c#>h_2uC~ zuUzdEz9H7ucx;Wk;@2rGe(A4PXP2pCGNy}AU-vA_Iq$!Wgx{hL16ioAE1s2_y((bh z0lddCikskU_;L1yYy1@RxB_MvWnz7J`{BRtj4uHrJtSh}mMDdV=Rr&pX%@#Z@j%)E zlm1>B$JvZD8hezMYu!}AUm^!p?F*A;cxX3)$=S(vLwYeHKQhebqitkO89&5cJt%egt5R` zqN$X6i?l$xbszq1dcRI_xdfGeIs_pDGnGn?d8{7U;PG!o_#uR35{0?hy_0zrIlsNt zPxbWiH)~F>+5BE4Y=E5TFFK@Zg!$Jh%@48?USYKYUwb?q8+&PRM48&L68F7*pmf37l=h+$eDbjy=atqv3C z|0h`sTHIBM*=zo=ZQe1?tEIiwNCLE2`Vq2E^uGqsL*DOq=ECJ*-l2w{af-JrfY^w1 zoyW94r{G;J=58x7h zxLq>>aR6EVq|R+v%7da~RQ!SOjHl$y{NpgmX;`ce=Gx!8Rb;rRXBu6|ja-Isy5KNP z;d)?emr-%kWWzt&tdjqu&nlJFU8}Z#Fc&2}5`r8rn=ghFhr+T+vKR3&5w>5G{zGmZ z4ov-p(FM(+AWl}Yp2=L!mUx>2=Y^V>kNB|jMCZ?5K=LY1B*=#kV})px1ukMW9RDg< zypr)*4=I6^z=k~Z7S(z8$9+Vo_N29cA)4yz_hr{9^rx%2A;Y{@#1vi^4uG*`t2UYN z{}2Q4b%2-zKQ*4rnU*QGer^jX0<|XUSV$$^F#c11HdZBBG%>-qm_2wa%6 zLL6MPk;d_$NC|pMf?>e@(OZ5O#?CU>xBqEb#ES_<91!6|;CmE)FsZ0m_|s*K zUU*FOFL`{Zn=>5yKSyr_meT#{ge80>(WKm8SS!lK8@jDvX#B z#*}?DT{Cm@)kCl&t~aNa$p_9-|2#%54OSwl zy3r_zJ(C6+%lxNtF_FvzgH~^W>#lm4>75GO&0m@s*Zoi{zLN=Bv1dewN`9TUBn9|m z|1<3rP>(HQBPj_8cLZ(7Z2BJ0iVDAXZ%R&@dyG3?oMejr6<5kOBH8BqALRp<3>4i_ z05Cs(wA4kyhRf#1;v_|Qi-B0&8YK>4sO{=FbiicjlWGlZqS(8mh5Uv3ADjm)_FA`5 zEJZjmCQzZX3U-_R0TXbj^vQXgb^kPgwT8Fm>5z66amC2qioE~QNtm=~!|S0l%-Csj zD^fltuf1-I(B65@dYIFCQOb9|Gw-iLT9fnN)_$Wv;0I?h(Uh*G7IH5idL=Q?XALrm zKorR*OjDe`_Y(uV>aI&gi|6fUt8oWC{i&JdBL<#V2^1Dj^bjFO6gBj!s)~#9$$_X# zgryez6d{EV%TZeEP*Z*43FOH-<0zF? zRToRij8s+SG)eXUuRcp-1V6?^ed(RxX*7`R#Ip#1qoXcistcec=Cm|#fg6J?e({tl zs;azi?U9@mHgA50yoDF=gQK75e$_)UY9TqV-`}MzjiY%BFG@L8EgOHXBFfqFV6tEC z)*oJwN3jl0eVLupR1eR5xGy%8+p2fk{>_867xTkn!ofa-zK-d)e6_7yN_dZv15d zxygU@3O@edr6YN%h(!v9zdUyljGGKU$(yL@`c#hkV3<119I|5f$EMt2?)JEIw###V zjVY%BK7h1CRtD}Z9MS7Dl)#ArM(h?7-7pmAQA$MUL$2~CCgs7sZUCHx^8u_&QLO~t z8vqKHsA~v(4L1wp94H{V!O59}BDx{Y(QvMs35fj(L@ShYpb&V&`-jf`f9=Jb6RAso z@{LeV^J1i`FIjaHOYZvn@N;;twMWv0)sy@#Q$r%F77_CC8kBS5)>Id|?`san(5U6l3Nbxus zK&TCf*IWo32O7-7v;8Iq%ytGS_qmNDvT?moDkBEOYw0ev%{bz9SNX5kdU+Q9Bk1DJ z-@lX6z}Ccn=liA*BZX;ShtN?c3QrUHLrea2#MWJ#Qvc%!(5w9aKFw(V`*-cHy{MV5 zUH_x!!)$-mIEFPHdixs7i>N3#b{Rxag>i6l8rHS0B$$lQ0jy18T1h~BiUHbx{q2Qh zQ`h+WS$hS<@LzwrneAk4gjaHMQBzZwetm3{RjMV*r=iXXP$@`e7m6gRk#ncmeqQ6Q zs;XK>5VQ%x>D?E?oFKV=EdJ?{4b=dJLDFaUs3yT=$YK}~574oJb~Rv0x@n88lhm1P zQ{Pq@pk{nRg&Wu(>%{9JDYMBcptlP;ngNmm-%)QCvce++FWxDEb Date: Sun, 5 May 2024 17:59:19 -0700 Subject: [PATCH 17/44] Spam SMS Detection Model Operator from Hugging face (#2629) ML operator for Spam SMS Detection from Hugging face. ![Screen Recording 2024-04-29 at 1 38 46 AM](https://github.com/Texera/texera/assets/114192306/a26970f7-0082-4f7e-9663-f7bbd7151a42) --------- Co-authored-by: Xinyuan Lin --- .../workflow/common/operators/LogicalOp.scala | 7 +- .../HuggingFaceSpamSMSDetectionOpDesc.scala | 66 ++++++++++++++++++ .../HuggingFaceSpamSMSDetection.png | Bin 0 -> 21230 bytes 3 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSpamSMSDetectionOpDesc.scala create mode 100644 core/gui/src/assets/operator_images/HuggingFaceSpamSMSDetection.png diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala index cd603a28759..fa9d5ea7679 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala @@ -36,7 +36,8 @@ import edu.uci.ics.texera.workflow.operators.keywordSearch.KeywordSearchOpDesc import edu.uci.ics.texera.workflow.operators.limit.LimitOpDesc import edu.uci.ics.texera.workflow.operators.huggingFace.{ HuggingFaceSentimentAnalysisOpDesc, - HuggingFaceTextSummarizationOpDesc + HuggingFaceTextSummarizationOpDesc, + HuggingFaceSpamSMSDetectionOpDesc } import edu.uci.ics.texera.workflow.operators.projection.ProjectionOpDesc import edu.uci.ics.texera.workflow.operators.randomksampling.RandomKSamplingOpDesc @@ -264,6 +265,10 @@ trait StateTransferFunc new Type( value = classOf[HuggingFaceTextSummarizationOpDesc], name = "HuggingFaceTextSummarization" + ), + new Type( + value = classOf[HuggingFaceSpamSMSDetectionOpDesc], + name = "HuggingFaceSpamSMSDetection" ) ) ) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSpamSMSDetectionOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSpamSMSDetectionOpDesc.scala new file mode 100644 index 00000000000..44f9b961440 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSpamSMSDetectionOpDesc.scala @@ -0,0 +1,66 @@ +package edu.uci.ics.texera.workflow.operators.huggingFace + +import com.fasterxml.jackson.annotation.{JsonProperty, JsonPropertyDescription} +import edu.uci.ics.amber.engine.common.workflow.{InputPort, OutputPort} +import edu.uci.ics.texera.workflow.common.metadata.annotations.AutofillAttributeName +import edu.uci.ics.texera.workflow.common.metadata.{OperatorGroupConstants, OperatorInfo} +import edu.uci.ics.texera.workflow.common.operators.PythonOperatorDescriptor +import edu.uci.ics.texera.workflow.common.tuple.schema.{AttributeType, Schema} + +class HuggingFaceSpamSMSDetectionOpDesc extends PythonOperatorDescriptor { + @JsonProperty(value = "attribute", required = true) + @JsonPropertyDescription("column to perform spam detection on") + @AutofillAttributeName + var attribute: String = _ + + @JsonProperty( + value = "Spam result attribute", + required = true, + defaultValue = "is_spam" + ) + @JsonPropertyDescription("column name of whether spam or not") + var resultAttributeSpam: String = _ + + @JsonProperty( + value = "Score result attribute", + required = true, + defaultValue = "score" + ) + @JsonPropertyDescription("column name of Probability for classification") + var resultAttributeProbability: String = _ + + override def generatePythonCode(): String = { + s"""from transformers import pipeline + |from pytexera import * + | + |class ProcessTupleOperator(UDFOperatorV2): + | + | def open(self): + | self.pipeline = pipeline("text-classification", model="mrm8488/bert-tiny-finetuned-sms-spam-detection") + | + | @overrides + | def process_tuple(self, tuple_: Tuple, port: int) -> Iterator[Optional[TupleLike]]: + | result = self.pipeline(tuple_["$attribute"])[0] + | tuple_["$resultAttributeSpam"] = (result["label"] == "LABEL_1") + | tuple_["$resultAttributeProbability"] = result["score"] + | yield tuple_""".stripMargin + } + + override def operatorInfo: OperatorInfo = + OperatorInfo( + "Hugging Face Spam Detection", + "Spam Detection by SMS Spam Detection Model from Hugging Face", + OperatorGroupConstants.MACHINE_LEARNING_GROUP, + inputPorts = List(InputPort()), + outputPorts = List(OutputPort()) + ) + + override def getOutputSchema(schemas: Array[Schema]): Schema = { + Schema + .builder() + .add(schemas(0)) + .add(resultAttributeSpam, AttributeType.BOOLEAN) + .add(resultAttributeProbability, AttributeType.DOUBLE) + .build() + } +} diff --git a/core/gui/src/assets/operator_images/HuggingFaceSpamSMSDetection.png b/core/gui/src/assets/operator_images/HuggingFaceSpamSMSDetection.png new file mode 100644 index 0000000000000000000000000000000000000000..7f2802d620843799ee5a4c914e30daf348596b31 GIT binary patch literal 21230 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 Date: Sun, 5 May 2024 20:12:35 -0700 Subject: [PATCH 18/44] Result Panel: Plot Visualization (#2646) This PR puts the visualization of plots inside the result panel. The plots are resizable as the result panel resized. https://github.com/Texera/texera/assets/86388854/6c70b898-55ca-4603-8393-a071e62d08ac --------- Co-authored-by: MiuMiuMiue Co-authored-by: mengw15 <125719918+mengw15@users.noreply.github.com> Co-authored-by: aglinxinyuan --- core/gui/src/app/app.module.ts | 2 - .../result-panel/result-panel.component.html | 3 - .../result-panel/result-panel.component.scss | 1 - .../result-panel/result-panel.component.ts | 22 +++---- .../result-table-frame.component.ts | 4 +- .../visualization-frame.component.html | 24 ------- .../visualization-frame.component.scss | 8 --- .../visualization-frame.component.ts | 62 ------------------- ...visualization-frame-content.component.scss | 6 +- .../visualization-frame-content.component.ts | 23 +++++-- 10 files changed, 36 insertions(+), 119 deletions(-) delete mode 100644 core/gui/src/app/workspace/component/result-panel/visualization-frame/visualization-frame.component.html delete mode 100644 core/gui/src/app/workspace/component/result-panel/visualization-frame/visualization-frame.component.scss delete mode 100644 core/gui/src/app/workspace/component/result-panel/visualization-frame/visualization-frame.component.ts diff --git a/core/gui/src/app/app.module.ts b/core/gui/src/app/app.module.ts index cd69a68d564..0a53a47d533 100644 --- a/core/gui/src/app/app.module.ts +++ b/core/gui/src/app/app.module.ts @@ -53,7 +53,6 @@ import { PropertyEditorComponent } from "./workspace/component/property-editor/p import { TypeCastingDisplayComponent } from "./workspace/component/property-editor/typecasting-display/type-casting-display.component"; import { ResultPanelComponent } from "./workspace/component/result-panel/result-panel.component"; import { VisualizationFrameContentComponent } from "./workspace/component/visualization-panel-content/visualization-frame-content.component"; -import { VisualizationFrameComponent } from "./workspace/component/result-panel/visualization-frame/visualization-frame.component"; import { WorkflowEditorComponent } from "./workspace/component/workflow-editor/workflow-editor.component"; import { WorkspaceComponent } from "./workspace/component/workspace.component"; import { NzCardModule } from "ng-zorro-antd/card"; @@ -169,7 +168,6 @@ registerLocaleData(en); PresetWrapperComponent, MultiSchemaTypeComponent, NullTypeComponent, - VisualizationFrameComponent, VisualizationFrameContentComponent, CodeareaCustomTemplateComponent, CodeEditorComponent, diff --git a/core/gui/src/app/workspace/component/result-panel/result-panel.component.html b/core/gui/src/app/workspace/component/result-panel/result-panel.component.html index 73679d86cbe..a895bd4b846 100644 --- a/core/gui/src/app/workspace/component/result-panel/result-panel.component.html +++ b/core/gui/src/app/workspace/component/result-panel/result-panel.component.html @@ -1,5 +1,3 @@ - -

>(iUJ+;f93z=t{qpKbcbp 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 literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnLogisticRegressionCV.png b/core/gui/src/assets/operator_images/SklearnLogisticRegressionCV.png new file mode 100644 index 0000000000000000000000000000000000000000..d7dbc742e345d9d18557442865b4e765f97677fc GIT binary patch literal 10842 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 T5{W1lMfxPKE>|mK{{8;|gz}|t literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnMultiLayerPerceptron.png b/core/gui/src/assets/operator_images/SklearnMultiLayerPerceptron.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd38d1d56cdec4f22742da2ca3c2a14a5028982 GIT binary patch literal 128735 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 literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/SklearnMultinomialNaiveBayes.png b/core/gui/src/assets/operator_images/SklearnMultinomialNaiveBayes.png new file mode 100644 index 0000000000000000000000000000000000000000..8de675ba7f551b9d3306e4c1be7dbb8099152f66 GIT binary patch literal 34729 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

-
diff --git a/core/gui/src/app/workspace/component/result-panel/result-panel.component.scss b/core/gui/src/app/workspace/component/result-panel/result-panel.component.scss index 386e2c57f7f..a3ec5226274 100644 --- a/core/gui/src/app/workspace/component/result-panel/result-panel.component.scss +++ b/core/gui/src/app/workspace/component/result-panel/result-panel.component.scss @@ -42,7 +42,6 @@ $type-colors: ( ); #content { - height: 100%; overflow-y: auto; padding-top: 38px; } diff --git a/core/gui/src/app/workspace/component/result-panel/result-panel.component.ts b/core/gui/src/app/workspace/component/result-panel/result-panel.component.ts index 2cef987944c..1f0e1311564 100644 --- a/core/gui/src/app/workspace/component/result-panel/result-panel.component.ts +++ b/core/gui/src/app/workspace/component/result-panel/result-panel.component.ts @@ -7,7 +7,6 @@ import { ResultTableFrameComponent } from "./result-table-frame/result-table-fra import { ConsoleFrameComponent } from "./console-frame/console-frame.component"; import { WorkflowResultService } from "../../service/workflow-result/workflow-result.service"; import { PanelResizeService } from "../../service/workflow-result/panel-resize/panel-resize.service"; -import { VisualizationFrameComponent } from "./visualization-frame/visualization-frame.component"; import { filter } from "rxjs/operators"; import { UntilDestroy, untilDestroyed } from "@ngneat/until-destroy"; import { isPythonUdf, isSink } from "../../service/workflow-graph/model/workflow-graph"; @@ -15,6 +14,7 @@ import { WorkflowVersionService } from "../../../dashboard/user/service/workflow import { ErrorFrameComponent } from "./error-frame/error-frame.component"; import { WorkflowConsoleService } from "../../service/workflow-console/workflow-console.service"; import { NzResizeEvent } from "ng-zorro-antd/resizable"; +import { VisualizationFrameContentComponent } from "../visualization-panel-content/visualization-frame-content.component"; /** * ResultPanelComponent is the bottom level area that displays the @@ -37,15 +37,6 @@ export class ResultPanelComponent implements OnInit, OnDestroy { maxWidth = window.innerWidth; maxHeight = window.innerHeight; - onResize({ width, height }: NzResizeEvent) { - cancelAnimationFrame(this.id); - this.id = requestAnimationFrame(() => { - this.width = width!; - this.height = height!; - this.resizeService.changePanelSize(this.width, this.height); - }); - } - // the highlighted operator ID for display result table / visualization / breakpoint currentOperatorId?: string | undefined; @@ -223,7 +214,7 @@ export class ResultPanelComponent implements OnInit, OnDestroy { } else if (resultService) { // display visualization result this.frameComponentConfigs.set("Result", { - component: VisualizationFrameComponent, + component: VisualizationFrameContentComponent, componentInputs: { operatorId }, }); } @@ -258,4 +249,13 @@ export class ResultPanelComponent implements OnInit, OnDestroy { this.height = 32.5; this.width = 0; } + + onResize({ width, height }: NzResizeEvent) { + cancelAnimationFrame(this.id); + this.id = requestAnimationFrame(() => { + this.width = width!; + this.height = height!; + this.resizeService.changePanelSize(this.width, this.height); + }); + } } diff --git a/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.ts b/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.ts index 04d2d75d307..2b6daeea714 100644 --- a/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.ts +++ b/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.ts @@ -104,8 +104,8 @@ export class ResultTableFrameComponent implements OnInit, OnChanges { } private adjustPageSizeBasedOnPanelSize(panelHeight: number) { - const rowHeight = 35; - let extra: number = Math.floor((panelHeight - 200) / rowHeight); + const rowHeight = 36; + let extra: number = Math.floor((panelHeight - 170) / rowHeight); this.pageSize = 1 + extra; this.resizeService.pageSize = this.pageSize; } diff --git a/core/gui/src/app/workspace/component/result-panel/visualization-frame/visualization-frame.component.html b/core/gui/src/app/workspace/component/result-panel/visualization-frame/visualization-frame.component.html deleted file mode 100644 index 66ea2ccfdd3..00000000000 --- a/core/gui/src/app/workspace/component/result-panel/visualization-frame/visualization-frame.component.html +++ /dev/null @@ -1,24 +0,0 @@ - - - -
-
- Visualization - - - -
-
-
diff --git a/core/gui/src/app/workspace/component/result-panel/visualization-frame/visualization-frame.component.scss b/core/gui/src/app/workspace/component/result-panel/visualization-frame/visualization-frame.component.scss deleted file mode 100644 index ca4e29ec9b6..00000000000 --- a/core/gui/src/app/workspace/component/result-panel/visualization-frame/visualization-frame.component.scss +++ /dev/null @@ -1,8 +0,0 @@ -::ng-deep .cdk-overlay-pane { - /* Target the modal content */ - .ant-modal-content { - /* Enable resizing behavior */ - resize: both; - overflow: auto; - } -} diff --git a/core/gui/src/app/workspace/component/result-panel/visualization-frame/visualization-frame.component.ts b/core/gui/src/app/workspace/component/result-panel/visualization-frame/visualization-frame.component.ts deleted file mode 100644 index 4fd8760e815..00000000000 --- a/core/gui/src/app/workspace/component/result-panel/visualization-frame/visualization-frame.component.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { Component, Input } from "@angular/core"; -import { NzModalRef, NzModalService } from "ng-zorro-antd/modal"; -import { VisualizationFrameContentComponent } from "../../visualization-panel-content/visualization-frame-content.component"; -import { ViewChild, TemplateRef } from "@angular/core"; -import { FullscreenExitOutline, FullscreenOutline } from "@ant-design/icons-angular/icons"; -import { NZ_ICONS } from "ng-zorro-antd/icon"; - -/** - * VisualizationFrameComponent displays the button for visualization in ResultPanel when the result type is chart. - * - * When user click on button, this component will open VisualizationFrameContentComponent and display figure. - * User could click close at the button of VisualizationFrameContentComponent to exit the visualization panel. - */ -@Component({ - selector: "texera-visualization-frame", - templateUrl: "./visualization-frame.component.html", - styleUrls: ["./visualization-frame.component.scss"], - providers: [{ provide: NZ_ICONS, useValue: [FullscreenExitOutline, FullscreenOutline] }], -}) -export class VisualizationFrameComponent { - @Input() operatorId?: string; - @ViewChild("modalTitle") modalTitle: TemplateRef<{}>; - modalRef?: NzModalRef; - isFullscreen: Boolean = false; - - constructor(private modalService: NzModalService) { - this.modalTitle = {} as TemplateRef; - } - - onClickVisualize(): void { - if (!this.operatorId) { - return; - } - this.modalRef = this.modalService.create({ - nzTitle: this.modalTitle, - nzStyle: { top: "20px", width: "70vw", height: "78vh" }, - nzContent: VisualizationFrameContentComponent, - nzFooter: null, // null indicates that the footer of the window would be hidden - nzBodyStyle: { width: "70vw", height: "74vh" }, - nzData: { operatorId: this.operatorId }, - }); - this.isFullscreen = false; - } - - toggleFullscreen(): void { - this.isFullscreen = !this.isFullscreen; - if (!this.modalRef) { - return; - } - if (!this.isFullscreen) { - this.modalRef.updateConfig({ - nzStyle: { top: "20px", width: "70vw", height: "78vh" }, - nzBodyStyle: { width: "70vw", height: "74vh" }, - }); - } else { - this.modalRef.updateConfig({ - nzStyle: { top: "5px", bottom: "0", left: "0", right: "0", width: "100vw", height: "94vh" }, - nzBodyStyle: { width: "98vw", height: "92vh" }, - }); - } - } -} diff --git a/core/gui/src/app/workspace/component/visualization-panel-content/visualization-frame-content.component.scss b/core/gui/src/app/workspace/component/visualization-panel-content/visualization-frame-content.component.scss index 6a1233e5a6f..b7f944b6f88 100644 --- a/core/gui/src/app/workspace/component/visualization-panel-content/visualization-frame-content.component.scss +++ b/core/gui/src/app/workspace/component/visualization-panel-content/visualization-frame-content.component.scss @@ -1,4 +1,6 @@ #html-content { - width: 100%; - height: 100%; + position: fixed; + width: calc(100% - 115px); + height: calc(100% - 40px); + border: none; } diff --git a/core/gui/src/app/workspace/component/visualization-panel-content/visualization-frame-content.component.ts b/core/gui/src/app/workspace/component/visualization-panel-content/visualization-frame-content.component.ts index d9919ed92de..15289f60049 100644 --- a/core/gui/src/app/workspace/component/visualization-panel-content/visualization-frame-content.component.ts +++ b/core/gui/src/app/workspace/component/visualization-panel-content/visualization-frame-content.component.ts @@ -1,9 +1,8 @@ -import { AfterContentInit, Component, inject } from "@angular/core"; +import { AfterContentInit, Component, Input } from "@angular/core"; import { DomSanitizer } from "@angular/platform-browser"; import { WorkflowResultService } from "../../service/workflow-result/workflow-result.service"; import { auditTime, filter } from "rxjs/operators"; import { untilDestroyed, UntilDestroy } from "@ngneat/until-destroy"; -import { NZ_MODAL_DATA } from "ng-zorro-antd/modal"; @UntilDestroy() @Component({ @@ -12,7 +11,8 @@ import { NZ_MODAL_DATA } from "ng-zorro-antd/modal"; styleUrls: ["./visualization-frame-content.component.scss"], }) export class VisualizationFrameContentComponent implements AfterContentInit { - operatorId: string = inject(NZ_MODAL_DATA).operatorId; + // operatorId: string = inject(NZ_MODAL_DATA).operatorId; + @Input() operatorId?: string; // progressive visualization update and redraw interval in milliseconds public static readonly UPDATE_INTERVAL_MS = 2000; htmlData: any = ""; @@ -49,6 +49,21 @@ export class VisualizationFrameContentComponent implements AfterContentInit { if (!data) { return; } - this.htmlData = this.sanitizer.bypassSecurityTrustHtml(Object(data[0])["html-content"]); // this line bypasses angular security + + const parser = new DOMParser(); + const doc = parser.parseFromString(Object(data[0])["html-content"], "text/html"); + + doc.documentElement.style.height = "100%"; + doc.body.style.height = "100%"; + + const firstDiv = doc.body.querySelector("div"); + if (firstDiv) { + firstDiv.style.height = "100%"; + } + + const serializer = new XMLSerializer(); + const newHtmlString = serializer.serializeToString(doc); + + this.htmlData = this.sanitizer.bypassSecurityTrustHtml(newHtmlString); // this line bypasses angular security } } From c524f06de3e5b50ba8e58e658a46e8ad7fe25e5e Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Sun, 5 May 2024 21:18:03 -0700 Subject: [PATCH 19/44] Add HuggingFace Iris-dataset Logistic Regression Binary Classification Inference Operator (#2628) This PR adds a simple and lightweight ML-inference operator based on a pre-trained HuggingFace model found here: https://huggingface.co/sadhaklal/logistic-regression-iris. The ML task performed by this operator is a binary classification on the [Iris](https://archive.ics.uci.edu/dataset/53/iris) dataset. [The dataset CSV can be accessed in HuggingFace.](https://huggingface.co/datasets/scikit-learn/iris/blob/main/Iris.csv) - The operator is only supposed to work on the Iris dataset. - It takes two numerical features, `PetalLengthCm` and `PetalWidthCm`. - It predicts a `Species` attribute. The `Species` prediction only supports `Iris-setosa` and `Not Iris-etosa`, i.e., it is a binary classification. - Additionally, the operator also outputs the probability of the input being `Iris-setosa`. --- .../workflow/common/operators/LogicalOp.scala | 7 +- ...gingFaceIrisLogisticRegressionOpDesc.scala | 106 ++++++++++++++++++ .../HuggingFaceIrisLogisticRegression.png | Bin 0 -> 46540 bytes 3 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceIrisLogisticRegressionOpDesc.scala create mode 100644 core/gui/src/assets/operator_images/HuggingFaceIrisLogisticRegression.png diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala index fa9d5ea7679..2d71e78554e 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala @@ -37,7 +37,8 @@ import edu.uci.ics.texera.workflow.operators.limit.LimitOpDesc import edu.uci.ics.texera.workflow.operators.huggingFace.{ HuggingFaceSentimentAnalysisOpDesc, HuggingFaceTextSummarizationOpDesc, - HuggingFaceSpamSMSDetectionOpDesc + HuggingFaceSpamSMSDetectionOpDesc, + HuggingFaceIrisLogisticRegressionOpDesc } import edu.uci.ics.texera.workflow.operators.projection.ProjectionOpDesc import edu.uci.ics.texera.workflow.operators.randomksampling.RandomKSamplingOpDesc @@ -269,6 +270,10 @@ trait StateTransferFunc new Type( value = classOf[HuggingFaceSpamSMSDetectionOpDesc], name = "HuggingFaceSpamSMSDetection" + ), + new Type( + value = classOf[HuggingFaceIrisLogisticRegressionOpDesc], + name = "HuggingFaceIrisLogisticRegression" ) ) ) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceIrisLogisticRegressionOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceIrisLogisticRegressionOpDesc.scala new file mode 100644 index 00000000000..dd8245a732b --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceIrisLogisticRegressionOpDesc.scala @@ -0,0 +1,106 @@ +package edu.uci.ics.texera.workflow.operators.huggingFace + +import com.fasterxml.jackson.annotation.{JsonProperty, JsonPropertyDescription} +import edu.uci.ics.amber.engine.common.workflow.{InputPort, OutputPort} +import edu.uci.ics.texera.workflow.common.metadata.{OperatorGroupConstants, OperatorInfo} +import edu.uci.ics.texera.workflow.common.metadata.annotations.AutofillAttributeName +import edu.uci.ics.texera.workflow.common.operators.PythonOperatorDescriptor +import edu.uci.ics.texera.workflow.common.tuple.schema.{AttributeType, Schema} + +class HuggingFaceIrisLogisticRegressionOpDesc extends PythonOperatorDescriptor { + + @JsonProperty(value = "petalLengthCmAttribute", required = true) + @JsonPropertyDescription("attribute in your dataset corresponding to PetalLengthCm") + @AutofillAttributeName + var petalLengthCmAttribute: String = _ + + @JsonProperty(value = "petalWidthCmAttribute", required = true) + @JsonPropertyDescription("attribute in your dataset corresponding to PetalWidthCm") + @AutofillAttributeName + var petalWidthCmAttribute: String = _ + + @JsonProperty( + value = "prediction class name", + required = true, + defaultValue = "Species_prediction" + ) + @JsonPropertyDescription("output attribute name for the predicted class of species") + var predictionClassName: String = _ + + @JsonProperty( + value = "prediction probability name", + required = true, + defaultValue = "Species_probability" + ) + @JsonPropertyDescription( + "output attribute name for the prediction's probability of being a Iris-setosa" + ) + var predictionProbabilityName: String = _ + + /** + * Python code to apply a pre-trained liner regression model on the Iris dataset. + * For more info about the model, see https://huggingface.co/sadhaklal/logistic-regression-iris. + * @return a String representation of the executable Python source code. + */ + override def generatePythonCode(): String = { + s"""from pytexera import * + |import numpy as np + |import torch + |import torch.nn as nn + |from huggingface_hub import PyTorchModelHubMixin + | + |class ProcessTupleOperator(UDFOperatorV2): + | def open(self): + | class LinearModel(nn.Module, PyTorchModelHubMixin): + | def __init__(self): + | super().__init__() + | self.fc = nn.Linear(2, 1) + | + | def forward(self, x): + | out = self.fc(x) + | return out + | + | self.model = LinearModel.from_pretrained("sadhaklal/logistic-regression-iris") + | self.model.eval() + | + | @overrides + | def process_tuple(self, tuple_: Tuple, port: int) -> Iterator[Optional[TupleLike]]: + | training_features_means = [3.72666667, 1.17619048] + | training_features_stds = [1.72528903, 0.73788937] + | length = tuple_["$petalLengthCmAttribute"] + | width = tuple_["$petalWidthCmAttribute"] + | features = np.array([[length, width]]) + | features = ((features - training_features_means) / training_features_stds) + | features = torch.from_numpy(features).float() + | with torch.no_grad(): + | logits = self.model(features) + | proba = torch.sigmoid(logits.squeeze()) + | preds = (proba > 0.5).long() + | tuple_["$predictionProbabilityName"] = float(proba) + | tuple_["$predictionClassName"] = "Iris-setosa" if preds == 1 else "Not Iris-setosa" + | yield tuple_""".stripMargin + } + + override def operatorInfo: OperatorInfo = + OperatorInfo( + "Hugging Face Iris Logistic Regression", + "Predict whether an iris is an Iris-setosa using a pre-trained logistic regression model", + OperatorGroupConstants.MACHINE_LEARNING_GROUP, + inputPorts = List(InputPort()), + outputPorts = List(OutputPort()) + ) + + override def getOutputSchema(schemas: Array[Schema]): Schema = { + if ( + predictionClassName == null || predictionClassName.trim.isEmpty || + predictionProbabilityName == null || predictionProbabilityName.trim.isEmpty + ) + throw new RuntimeException("Result attribute name should not be empty") + Schema + .builder() + .add(schemas(0)) + .add(predictionClassName, AttributeType.STRING) + .add(predictionProbabilityName, AttributeType.DOUBLE) + .build() + } +} diff --git a/core/gui/src/assets/operator_images/HuggingFaceIrisLogisticRegression.png b/core/gui/src/assets/operator_images/HuggingFaceIrisLogisticRegression.png new file mode 100644 index 0000000000000000000000000000000000000000..4f747d93533a761f3f0c6b745951c7d15f592f11 GIT binary patch literal 46540 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 z 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

wu3`=GMnMw6EZWG)OpZ0H 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 Date: Mon, 6 May 2024 09:21:04 -0700 Subject: [PATCH 20/44] Add sklearn linear regression operator (#2647) This PR adds a new operator "SklearnLinearRegression" from sklearn. ![2024-05-06 05 16 35](https://github.com/Texera/texera/assets/17627829/757d85e2-767b-4d8b-9c6d-00d614479813) --- .../workflow/common/operators/LogicalOp.scala | 6 +- .../SklearnLinearRegressionOpDesc.scala | 7 +++ .../operators/sklearn/SklearnMLOpDesc.scala | 58 +++++++++++++----- .../SklearnLinearRegression.png | Bin 0 -> 13177 bytes 4 files changed, 53 insertions(+), 18 deletions(-) create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearRegressionOpDesc.scala create mode 100644 core/gui/src/assets/operator_images/SklearnLinearRegression.png diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala index 2d71e78554e..cf0607f4c81 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala @@ -35,10 +35,10 @@ import edu.uci.ics.texera.workflow.operators.intervalJoin.IntervalJoinOpDesc import edu.uci.ics.texera.workflow.operators.keywordSearch.KeywordSearchOpDesc import edu.uci.ics.texera.workflow.operators.limit.LimitOpDesc import edu.uci.ics.texera.workflow.operators.huggingFace.{ + HuggingFaceIrisLogisticRegressionOpDesc, HuggingFaceSentimentAnalysisOpDesc, - HuggingFaceTextSummarizationOpDesc, HuggingFaceSpamSMSDetectionOpDesc, - HuggingFaceIrisLogisticRegressionOpDesc + HuggingFaceTextSummarizationOpDesc } import edu.uci.ics.texera.workflow.operators.projection.ProjectionOpDesc import edu.uci.ics.texera.workflow.operators.randomksampling.RandomKSamplingOpDesc @@ -58,6 +58,7 @@ import edu.uci.ics.texera.workflow.operators.sklearn.{ SklearnGaussianNaiveBayesOpDesc, SklearnGradientBoostingOpDesc, SklearnKNNOpDesc, + SklearnLinearRegressionOpDesc, SklearnLinearSVMOpDesc, SklearnLogisticRegressionCVOpDesc, SklearnLogisticRegressionOpDesc, @@ -229,6 +230,7 @@ trait StateTransferFunc new Type(value = classOf[SklearnNearestCentroidOpDesc], name = "SklearnNearestCentroid"), new Type(value = classOf[SklearnSVMOpDesc], name = "SklearnSVM"), new Type(value = classOf[SklearnLinearSVMOpDesc], name = "SklearnLinearSVM"), + new Type(value = classOf[SklearnLinearRegressionOpDesc], name = "SklearnLinearRegression"), new Type(value = classOf[SklearnDecisionTreeOpDesc], name = "SklearnDecisionTree"), new Type(value = classOf[SklearnExtraTreeOpDesc], name = "SklearnExtraTree"), new Type( diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearRegressionOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearRegressionOpDesc.scala new file mode 100644 index 00000000000..e7f2524f402 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearRegressionOpDesc.scala @@ -0,0 +1,7 @@ +package edu.uci.ics.texera.workflow.operators.sklearn + +class SklearnLinearRegressionOpDesc extends SklearnMLOpDesc { + model = "from sklearn.linear_model import LinearRegression" + name = "Linear Regression" + classification = false +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala index 3d25195b52f..e189ab20220 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala @@ -8,12 +8,16 @@ import edu.uci.ics.texera.workflow.common.operators.PythonOperatorDescriptor import edu.uci.ics.texera.workflow.common.tuple.schema.{AttributeType, Schema} abstract class SklearnMLOpDesc extends PythonOperatorDescriptor { + @JsonIgnore var model = "" @JsonIgnore var name = "" + @JsonIgnore + var classification: Boolean = true + @JsonProperty(value = "Target Attribute", required = true) @JsonPropertyDescription("attribute in your dataset corresponding to target") @AutofillAttributeName @@ -21,7 +25,8 @@ abstract class SklearnMLOpDesc extends PythonOperatorDescriptor { override def generatePythonCode(): String = s"""$model - |from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score + |from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score, mean_absolute_error, r2_score + |import pandas as pd |from pytexera import * |class ProcessTableOperator(UDFTableOperator): | @overrides @@ -32,17 +37,27 @@ abstract class SklearnMLOpDesc extends PythonOperatorDescriptor { .last}().fit(table.drop("$target", axis=1), table["$target"]) | else: | predictions = self.model.predict(table.drop("$target", axis=1)) - | auc = accuracy_score(table["$target"], predictions) - | f1 = f1_score(table["$target"], predictions, average='micro') - | precision = precision_score(table["$target"], predictions, average='micro') - | recall = recall_score(table["$target"], predictions, average='micro') - | print("Accuracy:", auc, ", F1:", f1, ", Precision:", precision, ", Recall:", recall) - | yield {"name" : "$name", + | if ${if (classification) "True" else "False"}: + | auc = accuracy_score(table["$target"], predictions) + | f1 = f1_score(table["$target"], predictions, average='micro') + | precision = precision_score(table["$target"], predictions, average='micro') + | recall = recall_score(table["$target"], predictions, average='micro') + | print("Accuracy:", auc, ", F1:", f1, ", Precision:", precision, ", Recall:", recall) + | yield {"name" : "$name", | "accuracy" : auc, | "f1" : f1, | "precision" : precision, | "recall" : recall, - | "model" : self.model}""".stripMargin + | "model" : self.model} + | else: + | mae = mean_absolute_error(table["$target"], predictions) + | r2 = r2_score(table["$target"], predictions) + | print("MAE:", mae, ", R2:", r2) + | yield {"name" : "$name", + | "mae": mae, + | "r2": r2, + | "model" : self.model} + | """.stripMargin override def operatorInfo: OperatorInfo = OperatorInfo( @@ -56,14 +71,25 @@ abstract class SklearnMLOpDesc extends PythonOperatorDescriptor { outputPorts = List(OutputPort()) ) - override def getOutputSchema(schemas: Array[Schema]): Schema = - Schema + override def getOutputSchema(schemas: Array[Schema]): Schema = { + val builder = Schema .builder() .add("name", AttributeType.STRING) - .add("accuracy", AttributeType.DOUBLE) - .add("f1", AttributeType.DOUBLE) - .add("precision", AttributeType.DOUBLE) - .add("recall", AttributeType.DOUBLE) - .add("model", AttributeType.BINARY) - .build() + if (classification) { + builder + .add("accuracy", AttributeType.DOUBLE) + .add("f1", AttributeType.DOUBLE) + .add("precision", AttributeType.DOUBLE) + .add("recall", AttributeType.DOUBLE) + .add("model", AttributeType.BINARY) + + } else { + builder + .add("mae", AttributeType.DOUBLE) + .add("r2", AttributeType.DOUBLE) + .add("model", AttributeType.BINARY) + } + builder.build() + + } } diff --git a/core/gui/src/assets/operator_images/SklearnLinearRegression.png b/core/gui/src/assets/operator_images/SklearnLinearRegression.png new file mode 100644 index 0000000000000000000000000000000000000000..5ee01e7e477db402f7adc70b0164ec3bceedb3fb GIT binary patch literal 13177 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 WKS?MAN9RG{3w6p&zv#r}JO2j_EPxdN literal 0 HcmV?d00001 From 5f2fe88582c11a3a1a8fde6fe0444fd1b0388fd2 Mon Sep 17 00:00:00 2001 From: Shengquan Ni <13672781+shengquan-ni@users.noreply.github.com> Date: Mon, 6 May 2024 21:51:43 -0700 Subject: [PATCH 21/44] Add color column to scatter plot (#2648) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR adds an optional parameter to the scatter plot to color the dots. 截屏2024-05-06 上午10 17 29 截屏2024-05-06 上午10 16 34 --- .../scatterplot/ScatterplotOpDesc.scala | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/scatterplot/ScatterplotOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/scatterplot/ScatterplotOpDesc.scala index 5766a33caa6..a87dced657f 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/scatterplot/ScatterplotOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/scatterplot/ScatterplotOpDesc.scala @@ -39,6 +39,14 @@ class ScatterplotOpDesc extends VisualizationOperator with PythonOperatorDescrip @AutofillAttributeName private val yColumn: String = "" + @JsonProperty(required = false) + @JsonSchemaTitle("Color-Column") + @JsonPropertyDescription( + "Dots will be assigned different colors based on their values of this column" + ) + @AutofillAttributeName + private val colorColumn: String = "" + override def chartType: String = VisualizationConstants.HTML_VIZ override def getOutputSchema(schemas: Array[Schema]): Schema = { @@ -56,17 +64,21 @@ class ScatterplotOpDesc extends VisualizationOperator with PythonOperatorDescrip def manipulateTable(): String = { assert(xColumn.nonEmpty && yColumn.nonEmpty) + val colorColExpr = if (colorColumn.nonEmpty) { s"'$colorColumn'" } + else { "" } s""" | # drops rows with missing values pertaining to relevant columns - | table.dropna(subset=['$xColumn', '$yColumn'], inplace = True) + | table.dropna(subset=['$xColumn', '$yColumn', $colorColExpr], inplace = True) | |""".stripMargin } def createPlotlyFigure(): String = { assert(xColumn.nonEmpty && yColumn.nonEmpty) + val colorColExpr = if (colorColumn.nonEmpty) { s"color='$colorColumn'" } + else { "" } s""" - | fig = go.Figure(px.scatter(table, x='$xColumn', y='$yColumn')) + | fig = go.Figure(px.scatter(table, x='$xColumn', y='$yColumn', $colorColExpr)) |""".stripMargin } @@ -84,7 +96,7 @@ class ScatterplotOpDesc extends VisualizationOperator with PythonOperatorDescrip |class ProcessTableOperator(UDFTableOperator): | | def render_error(self, error_msg): - | return '''

TreeMap is not available.

+ | return '''

Scatter Plot is not available.

|

Reasons are: {}

| '''.format(error_msg) | From 4a1bb0f23c5a92415b3de579c8c8b2b5f1b8b648 Mon Sep 17 00:00:00 2001 From: YS0meone <61521613+YS0meone@users.noreply.github.com> Date: Tue, 7 May 2024 18:25:36 -0700 Subject: [PATCH 22/44] Add Dataset-related statistics to Quota Dashboard (#2615) This pr introduces two new components to the Quota Dashboard shown as follows. ![quota-dashboard-enhancement](https://github.com/Texera/texera/assets/61521613/05624faa-f319-4c85-8724-dd3ba8efd392) The users can now check the total number of uploaded datasets and the total size of them, giving us more insight into the dataset statistics. Fixes #2606 --------- Co-authored-by: Jiadong Bai <43344272+bobbai00@users.noreply.github.com> --- .../utils/DatasetStatisticsUtils.scala | 60 +++++++++++++++++++ .../user/quota/UserQuotaResource.scala | 18 ++++++ .../admin/service/admin-user.service.ts | 12 ++++ .../user-quota/user-quota.component.html | 9 ++- .../user-quota/user-quota.component.spec.ts | 2 + .../user-quota/user-quota.component.ts | 14 +++++ .../service/user-quota/user-quota.service.ts | 10 ++++ 7 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/utils/DatasetStatisticsUtils.scala diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/utils/DatasetStatisticsUtils.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/utils/DatasetStatisticsUtils.scala new file mode 100644 index 00000000000..a85d8c747b9 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/utils/DatasetStatisticsUtils.scala @@ -0,0 +1,60 @@ +package edu.uci.ics.texera.web.resource.dashboard.user.dataset.utils + +import edu.uci.ics.texera.web.SqlServer +import edu.uci.ics.texera.web.model.jooq.generated.tables.Dataset.DATASET +import edu.uci.ics.texera.web.resource.dashboard.user.dataset.DatasetResource.{DatasetIDs} +import edu.uci.ics.texera.web.resource.dashboard.user.dataset.utils.PathUtils.DATASETS_ROOT +import org.jooq.types.UInteger +import scala.jdk.CollectionConverters._ + +import java.nio.file.{Files, Path} +import java.nio.file.attribute.BasicFileAttributes + +object DatasetStatisticsUtils { + final private lazy val context = SqlServer.createDSLContext() + // this function retrieves the total counts of dataset that belongs to the user + def getUserCreatedDatasetCount(uid: UInteger): Int = { + val count = context + .selectCount() + .from(DATASET) + .where(DATASET.OWNER_UID.eq(uid)) + .fetchOne(0, classOf[Int]) + + count + } + + // this function would return a list of dataset ids that belongs to the user + private def getUserCreatedDatasetList(uid: UInteger): DatasetIDs = { + val datasetIDs = context + .select( + DATASET.DID + ) + .from(DATASET) + .where(DATASET.OWNER_UID.eq(uid)) + .fetch() + + val idsList: List[UInteger] = datasetIDs.asScala.map(_.getValue(DATASET.DID)).toList + + DatasetIDs(idsList) + } + private def getFolderSize(folderPath: Path): Long = { + val walk = Files.walk(folderPath) + try { + walk + .filter(Files.isRegularFile(_)) + .mapToLong(p => Files.readAttributes(p, classOf[BasicFileAttributes]).size()) + .sum() + } finally { + walk.close() + } + } + + def getUserDatasetSize(uid: UInteger): Long = { + val datasetIDs = getUserCreatedDatasetList(uid) + + datasetIDs.dids.map { did => + val datasetPath = DATASETS_ROOT.resolve(did.toString) + getFolderSize(datasetPath) + }.sum + } +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/quota/UserQuotaResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/quota/UserQuotaResource.scala index 6775e0e1693..6463c683c61 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/quota/UserQuotaResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/quota/UserQuotaResource.scala @@ -19,6 +19,10 @@ import java.util import javax.ws.rs._ import javax.ws.rs.core.MediaType import edu.uci.ics.texera.web.model.jooq.generated.Tables._ +import edu.uci.ics.texera.web.resource.dashboard.user.dataset.utils.DatasetStatisticsUtils.{ + getUserCreatedDatasetCount, + getUserDatasetSize +} import edu.uci.ics.texera.web.storage.MongoDatabaseManager import io.dropwizard.auth.Auth @@ -227,6 +231,20 @@ class UserQuotaResource { getUserCreatedFile(current_user.getUid) } + @GET + @Path("/dataset_size") + @Produces(Array(MediaType.APPLICATION_JSON)) + def getDatasetSize(@Auth current_user: SessionUser): Long = { + getUserDatasetSize(current_user.getUid) + } + + @GET + @Path("/number_of_datasets") + @Produces(Array(MediaType.APPLICATION_JSON)) + def getCreatedDatasetCount(@Auth current_user: SessionUser): Int = { + getUserCreatedDatasetCount(current_user.getUid) + } + @GET @Path("/created_workflows") @Produces(Array(MediaType.APPLICATION_JSON)) diff --git a/core/gui/src/app/dashboard/admin/service/admin-user.service.ts b/core/gui/src/app/dashboard/admin/service/admin-user.service.ts index 08ee9d58fb5..a0fea11de37 100644 --- a/core/gui/src/app/dashboard/admin/service/admin-user.service.ts +++ b/core/gui/src/app/dashboard/admin/service/admin-user.service.ts @@ -9,6 +9,8 @@ export const USER_LIST_URL = `${USER_BASE_URL}/list`; export const USER_UPDATE_URL = `${USER_BASE_URL}/update`; export const USER_ADD_URL = `${USER_BASE_URL}/add`; export const USER_CREATED_FILES = `${USER_BASE_URL}/uploaded_files`; +export const USER_UPLOADED_DATASE_SIZE = `${USER_BASE_URL}/dataset_size`; +export const USER_UPLOADED_DATASET_COUNT = `${USER_BASE_URL}/uploaded_dataset`; export const USER_CREATED_WORKFLOWS = `${USER_BASE_URL}/created_workflows`; export const USER_ACCESS_WORKFLOWS = `${USER_BASE_URL}/access_workflows`; export const USER_ACCESS_FILES = `${USER_BASE_URL}/access_files`; @@ -43,6 +45,16 @@ export class AdminUserService { return this.http.get>(`${USER_CREATED_FILES}`, { params: params }); } + public getTotalUploadedDatasetSize(uid: number): Observable { + let params = new HttpParams().set("user_id", uid.toString()); + return this.http.get(`${USER_UPLOADED_DATASE_SIZE}`, { params: params }); + } + + public getTotalUploadedDatasetCount(uid: number): Observable { + let params = new HttpParams().set("user_id", uid.toString()); + return this.http.get(`${USER_UPLOADED_DATASET_COUNT}`, { params: params }); + } + public getCreatedWorkflows(uid: number): Observable> { let params = new HttpParams().set("user_id", uid.toString()); return this.http.get>(`${USER_CREATED_WORKFLOWS}`, { params: params }); diff --git a/core/gui/src/app/dashboard/user/component/user-quota/user-quota.component.html b/core/gui/src/app/dashboard/user/component/user-quota/user-quota.component.html index 37ce702f4d4..7881093d9c6 100644 --- a/core/gui/src/app/dashboard/user/component/user-quota/user-quota.component.html +++ b/core/gui/src/app/dashboard/user/component/user-quota/user-quota.component.html @@ -41,13 +41,20 @@ margin-top: 10px; } -

Files Uploaded

{{ this.createdFiles.length }}

+
+

Datasets Uploaded

+

{{ this.totalUploadedDatasetCount }}

+
+
+

Total Size of Datasets

+

{{ convertFileSize(this.totalUploadedDatasetSize) }}

+

Workflows Created

{{ this.createdWorkflows.length }}

diff --git a/core/gui/src/app/dashboard/user/component/user-quota/user-quota.component.spec.ts b/core/gui/src/app/dashboard/user/component/user-quota/user-quota.component.spec.ts index 6603be9165e..ce356561668 100644 --- a/core/gui/src/app/dashboard/user/component/user-quota/user-quota.component.spec.ts +++ b/core/gui/src/app/dashboard/user/component/user-quota/user-quota.component.spec.ts @@ -10,6 +10,8 @@ describe("UserQuotaComponent", () => { beforeEach(() => { const userQuotaServiceSpy = jasmine.createSpyObj("UserQuotaService", [ "getUploadedFiles", + "getTotalUploadedDatasetSize", + "getTotalUploadedDatasetCount", "getCreatedWorkflows", "getAccessFiles", "getAccessWorkflows", diff --git a/core/gui/src/app/dashboard/user/component/user-quota/user-quota.component.ts b/core/gui/src/app/dashboard/user/component/user-quota/user-quota.component.ts index 9f95c922fee..a5fac33bbc0 100644 --- a/core/gui/src/app/dashboard/user/component/user-quota/user-quota.component.ts +++ b/core/gui/src/app/dashboard/user/component/user-quota/user-quota.component.ts @@ -21,6 +21,8 @@ export class UserQuotaComponent { totalFileSize: number = 0; totalMongoSize: number = 0; + totalUploadedDatasetSize: number = 0; + totalUploadedDatasetCount: number = 0; createdFiles: ReadonlyArray = []; createdWorkflows: ReadonlyArray = []; accessFiles: ReadonlyArray = []; @@ -67,6 +69,18 @@ export class UserQuotaComponent { this.topFiveFiles = copiedFiles.slice(0, 5); }); + this.UserService.getTotalUploadedDatasetSize(this.userId) + .pipe(untilDestroyed(this)) + .subscribe(datasetSize => { + this.totalUploadedDatasetSize = datasetSize; + }); + + this.UserService.getTotalUploadedDatasetCount(this.userId) + .pipe(untilDestroyed(this)) + .subscribe(datasetCount => { + this.totalUploadedDatasetCount = datasetCount; + }); + this.UserService.getCreatedWorkflows(this.userId) .pipe(untilDestroyed(this)) .subscribe(workflowList => { diff --git a/core/gui/src/app/dashboard/user/service/user-quota/user-quota.service.ts b/core/gui/src/app/dashboard/user/service/user-quota/user-quota.service.ts index 0ac03c7b74d..ecd7f027cbf 100644 --- a/core/gui/src/app/dashboard/user/service/user-quota/user-quota.service.ts +++ b/core/gui/src/app/dashboard/user/service/user-quota/user-quota.service.ts @@ -6,6 +6,8 @@ import { File, Workflow, MongoExecution } from "src/app/common/type/user"; export const USER_BASE_URL = `${AppSettings.getApiEndpoint()}/quota`; export const USER_CREATED_FILES = `${USER_BASE_URL}/uploaded_files`; +export const USER_UPLOADED_DATASET_COUNT = `${USER_BASE_URL}/number_of_datasets`; +export const USER_UPLOADED_DATASE_SIZE = `${USER_BASE_URL}/dataset_size`; export const USER_CREATED_WORKFLOWS = `${USER_BASE_URL}/created_workflows`; export const USER_ACCESS_WORKFLOWS = `${USER_BASE_URL}/access_workflows`; export const USER_ACCESS_FILES = `${USER_BASE_URL}/access_files`; @@ -22,6 +24,14 @@ export class UserQuotaService { return this.http.get>(`${USER_CREATED_FILES}`); } + public getTotalUploadedDatasetSize(uid: number): Observable { + return this.http.get(`${USER_UPLOADED_DATASE_SIZE}`); + } + + public getTotalUploadedDatasetCount(uid: number): Observable { + return this.http.get(`${USER_UPLOADED_DATASET_COUNT}`); + } + public getCreatedWorkflows(uid: number): Observable> { return this.http.get>(`${USER_CREATED_WORKFLOWS}`); } From 979d1bd15b5352d8210ee5174662a450d2575bed Mon Sep 17 00:00:00 2001 From: Harry Xiong Date: Tue, 7 May 2024 20:25:27 -0700 Subject: [PATCH 23/44] Left menu support second level (#2607) The GUI Left Menu supports the second level. ![left-menu](https://github.com/Texera/texera/assets/62498853/5da1ea48-39ce-4c07-acd5-ec24c7f9e7af) How to config: In the config file, we only need to add a new List of GroupInfo to indicate the second level. image --------- Co-authored-by: Xinyuan Lin --- .../metadata/OperatorGroupConstants.scala | 29 +++--- .../metadata/OperatorMetadataGenerator.scala | 2 +- ...gingFaceIrisLogisticRegressionOpDesc.scala | 2 +- .../HuggingFaceSentimentAnalysisOpDesc.scala | 2 +- .../HuggingFaceSpamSMSDetectionOpDesc.scala | 2 +- .../HuggingFaceTextSummarizationOpDesc.scala | 2 +- .../operators/sklearn/SklearnMLOpDesc.scala | 8 +- .../sklearn/SklearnPredictionOpDesc.scala | 2 +- .../left-panel/left-panel.component.ts | 2 +- .../operator-label.component.scss | 3 +- .../operator-menu.component.html | 49 +++++----- .../operator-menu.component.scss | 19 ++-- .../operator-menu.component.spec.ts | 76 +-------------- .../operator-menu/operator-menu.component.ts | 94 ++++--------------- .../mock-operator-metadata.data.ts | 6 +- .../types/operator-schema.interface.ts | 3 +- 16 files changed, 90 insertions(+), 211 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorGroupConstants.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorGroupConstants.scala index 04929b0f4f5..e7fec2b4edc 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorGroupConstants.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorGroupConstants.scala @@ -14,25 +14,26 @@ object OperatorGroupConstants { final val API_GROUP = "External API" final val UDF_GROUP = "User-defined Functions" final val VISUALIZATION_GROUP = "Visualization" + final val HUGGINGFACE_GROUP = "Hugging Face" + final val SKLEARN_GROUP = "Sklearn" /** * The order of the groups to show up in the frontend operator panel. * The order numbers are relative. */ final val OperatorGroupOrderList: List[GroupInfo] = List( - GroupInfo(INPUT_GROUP, 0), - GroupInfo(DATABASE_GROUP, 1), - GroupInfo(SEARCH_GROUP, 2), - GroupInfo(CLEANING_GROUP, 3), - GroupInfo(MACHINE_LEARNING_GROUP, 4), - GroupInfo(JOIN_GROUP, 5), - GroupInfo(SET_GROUP, 6), - GroupInfo(AGGREGATE_GROUP, 7), - GroupInfo(SORT_GROUP, 8), - GroupInfo(UTILITY_GROUP, 9), - GroupInfo(API_GROUP, 10), - GroupInfo(UDF_GROUP, 11), - GroupInfo(VISUALIZATION_GROUP, 12) + GroupInfo(INPUT_GROUP), + GroupInfo(DATABASE_GROUP), + GroupInfo(SEARCH_GROUP), + GroupInfo(CLEANING_GROUP), + GroupInfo(MACHINE_LEARNING_GROUP, List(GroupInfo(SKLEARN_GROUP), GroupInfo(HUGGINGFACE_GROUP))), + GroupInfo(JOIN_GROUP), + GroupInfo(SET_GROUP), + GroupInfo(AGGREGATE_GROUP), + GroupInfo(SORT_GROUP), + GroupInfo(UTILITY_GROUP), + GroupInfo(API_GROUP), + GroupInfo(UDF_GROUP), + GroupInfo(VISUALIZATION_GROUP) ) - } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorMetadataGenerator.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorMetadataGenerator.scala index 14abf149279..c0368aecab0 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorMetadataGenerator.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorMetadataGenerator.scala @@ -35,7 +35,7 @@ case class OperatorMetadata( case class GroupInfo( groupName: String, - groupOrder: Int + children: List[GroupInfo] = null ) case class AllOperatorMetadata( diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceIrisLogisticRegressionOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceIrisLogisticRegressionOpDesc.scala index dd8245a732b..2990b180237 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceIrisLogisticRegressionOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceIrisLogisticRegressionOpDesc.scala @@ -85,7 +85,7 @@ class HuggingFaceIrisLogisticRegressionOpDesc extends PythonOperatorDescriptor { OperatorInfo( "Hugging Face Iris Logistic Regression", "Predict whether an iris is an Iris-setosa using a pre-trained logistic regression model", - OperatorGroupConstants.MACHINE_LEARNING_GROUP, + OperatorGroupConstants.HUGGINGFACE_GROUP, inputPorts = List(InputPort()), outputPorts = List(OutputPort()) ) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSentimentAnalysisOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSentimentAnalysisOpDesc.scala index ac9a109df9d..e00b1acbf85 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSentimentAnalysisOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSentimentAnalysisOpDesc.scala @@ -72,7 +72,7 @@ class HuggingFaceSentimentAnalysisOpDesc extends PythonOperatorDescriptor { OperatorInfo( "Hugging Face Sentiment Analysis", "Analyzing Sentiments with a Twitter-Based Model from Hugging Face", - OperatorGroupConstants.MACHINE_LEARNING_GROUP, + OperatorGroupConstants.HUGGINGFACE_GROUP, inputPorts = List(InputPort()), outputPorts = List(OutputPort()), supportReconfiguration = true diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSpamSMSDetectionOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSpamSMSDetectionOpDesc.scala index 44f9b961440..0a816eb45c0 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSpamSMSDetectionOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceSpamSMSDetectionOpDesc.scala @@ -50,7 +50,7 @@ class HuggingFaceSpamSMSDetectionOpDesc extends PythonOperatorDescriptor { OperatorInfo( "Hugging Face Spam Detection", "Spam Detection by SMS Spam Detection Model from Hugging Face", - OperatorGroupConstants.MACHINE_LEARNING_GROUP, + OperatorGroupConstants.HUGGINGFACE_GROUP, inputPorts = List(InputPort()), outputPorts = List(OutputPort()) ) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceTextSummarizationOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceTextSummarizationOpDesc.scala index cf697127f9f..c537036a0d3 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceTextSummarizationOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/huggingFace/HuggingFaceTextSummarizationOpDesc.scala @@ -53,7 +53,7 @@ class HuggingFaceTextSummarizationOpDesc extends PythonOperatorDescriptor { OperatorInfo( "Hugging Face Text Summarization", "Summarize the given text content with a mini2bert pre-trained model from Hugging Face", - OperatorGroupConstants.MACHINE_LEARNING_GROUP, + OperatorGroupConstants.HUGGINGFACE_GROUP, inputPorts = List(InputPort()), outputPorts = List(OutputPort()) ) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala index e189ab20220..1fd52f1e141 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala @@ -63,7 +63,7 @@ abstract class SklearnMLOpDesc extends PythonOperatorDescriptor { OperatorInfo( name, "Sklearn " + name + " Operator", - OperatorGroupConstants.MACHINE_LEARNING_GROUP, + OperatorGroupConstants.SKLEARN_GROUP, inputPorts = List( InputPort(PortIdentity(), "training"), InputPort(PortIdentity(1), "testing", dependencies = List(PortIdentity())) @@ -81,15 +81,11 @@ abstract class SklearnMLOpDesc extends PythonOperatorDescriptor { .add("f1", AttributeType.DOUBLE) .add("precision", AttributeType.DOUBLE) .add("recall", AttributeType.DOUBLE) - .add("model", AttributeType.BINARY) - } else { builder .add("mae", AttributeType.DOUBLE) .add("r2", AttributeType.DOUBLE) - .add("model", AttributeType.BINARY) } - builder.build() - + builder.add("model", AttributeType.BINARY).build() } } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPredictionOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPredictionOpDesc.scala index faa177aa20d..eaed10cc0b2 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPredictionOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPredictionOpDesc.scala @@ -32,7 +32,7 @@ class SklearnPredictionOpDesc extends PythonOperatorDescriptor { OperatorInfo( "Sklearn Prediction", "Skleanr Prediction Operator", - OperatorGroupConstants.MACHINE_LEARNING_GROUP, + OperatorGroupConstants.SKLEARN_GROUP, inputPorts = List( InputPort(PortIdentity(), "model"), InputPort(PortIdentity(1), "testing", dependencies = List(PortIdentity())) diff --git a/core/gui/src/app/workspace/component/left-panel/left-panel.component.ts b/core/gui/src/app/workspace/component/left-panel/left-panel.component.ts index 8fdc21cfa12..5bfced5ff1d 100644 --- a/core/gui/src/app/workspace/component/left-panel/left-panel.component.ts +++ b/core/gui/src/app/workspace/component/left-panel/left-panel.component.ts @@ -18,7 +18,7 @@ export class LeftPanelComponent implements OnDestroy, OnInit { protected readonly window = window; currentComponent: Type | null = null; title = "Operators"; - width = 230; + width = 300; height = Math.max(300, window.innerHeight * 0.6); id = -1; currentIndex = 0; diff --git a/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-label/operator-label.component.scss b/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-label/operator-label.component.scss index a68be221a8d..1e1b1b741cb 100644 --- a/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-label/operator-label.component.scss +++ b/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-label/operator-label.component.scss @@ -3,6 +3,7 @@ } .operator-label { + white-space: nowrap; width: 100%; height: 32px; line-height: 32px; @@ -13,7 +14,7 @@ transition: border-color 0.3s, color 0.3s; - overflow: hidden; + overflow-x: hidden; &:hover { border-color: rgba(64, 169, 255, 1); > .text { diff --git a/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.html b/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.html index 66ee831070a..55d9a0f29bc 100644 --- a/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.html +++ b/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.html @@ -18,25 +18,30 @@
- - -
    -
  • - -
  • -
-
-
+ +
+ + + + + + +
+ +
+ +
+
+
+
+
diff --git a/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.scss b/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.scss index 37425628eb8..8d6107217a9 100644 --- a/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.scss +++ b/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.scss @@ -11,22 +11,29 @@ } } -.operator-submenu-title { +.operator-group { background-color: #fff; - border-bottom: 1px solid #e0e0e0 !important; } -.operator-submenu { +.operator-group:last-child { + border-bottom: 1px solid #e0e0e0; +} + +.operator-group .operator-group { border: none; } -.texera-operator-label { - padding-left: 30px; +.indent { + padding-left: 10px; +} + +.operator-label { + padding-left: 7px; padding-right: 0; margin: 0 !important; height: 32px; } -#operator-menu { +#spacer { margin-top: 32px; } diff --git a/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.spec.ts b/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.spec.ts index 713b078703d..e475c03f3fe 100644 --- a/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.spec.ts +++ b/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.spec.ts @@ -1,20 +1,12 @@ -import { - mockOperatorGroup, - mockOperatorMetaData, - mockOperatorSchemaList, - mockScanSourceSchema, -} from "../../../service/operator-metadata/mock-operator-metadata.data"; +import { mockScanSourceSchema } from "../../../service/operator-metadata/mock-operator-metadata.data"; import { UndoRedoService } from "../../../service/undo-redo/undo-redo.service"; import { DragDropService } from "../../../service/drag-drop/drag-drop.service"; import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing"; -import { By } from "@angular/platform-browser"; import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; -import * as c from "./operator-menu.component"; import { OperatorMenuComponent } from "./operator-menu.component"; import { OperatorLabelComponent } from "./operator-label/operator-label.component"; import { OperatorMetadataService } from "../../../service/operator-metadata/operator-metadata.service"; import { StubOperatorMetadataService } from "../../../service/operator-metadata/stub-operator-metadata.service"; -import { GroupInfo, OperatorSchema } from "../../../types/operator-schema.interface"; import { RouterTestingModule } from "@angular/router/testing"; import { WorkflowActionService } from "../../../service/workflow-graph/model/workflow-action.service"; import { JointUIService } from "../../../service/joint-ui/joint-ui.service"; @@ -54,72 +46,6 @@ describe("OperatorPanelComponent", () => { expect(component).toBeTruthy(); }); - it("should sort group names correctly based on order", () => { - const result = c.getGroupNamesSorted(mockOperatorGroup); - - expect(result).toEqual(["Source", "Analysis", "View Results"]); - }); - - it("should sort group names correctly based on order relatively. ex: (100, 1) -> (1, 100)", () => { - const groups: GroupInfo[] = [ - { groupName: "group_1", groupOrder: 1 }, - { groupName: "group_2", groupOrder: 100 }, - ]; - - const result = c.getGroupNamesSorted(groups); - - expect(result).toEqual(["group_1", "group_2"]); - }); - - it("should sort group names correctly from an empty list", () => { - const groups: GroupInfo[] = []; - const result = c.getGroupNamesSorted(groups); - expect(result).toEqual([]); - }); - - it("should generate a map from operator groups to a list operators correctly", () => { - const opMetadata = mockOperatorMetaData; - - const result = c.getOperatorGroupMap(opMetadata); - - const sourceOperators = opMetadata.operators.filter(op => op.additionalMetadata.operatorGroupName === "Source"); - const analysisOperators = opMetadata.operators.filter(op => op.additionalMetadata.operatorGroupName === "Analysis"); - const resultOperators = opMetadata.operators.filter( - op => op.additionalMetadata.operatorGroupName === "View Results" - ); - - const expectedResult = new Map(); - expectedResult.set("Source", sourceOperators); - expectedResult.set("Analysis", analysisOperators); - expectedResult.set("View Results", resultOperators); - - expect(result).toEqual(expectedResult); - }); - - it("should receive operator metadata from service", () => { - // if the length of our schema list is equal to the length of mock data - // we assume the mock data has been received - expect(component.operatorSchemaList.length).toEqual(mockOperatorSchemaList.length); - expect(component.groupNamesOrdered.length).toEqual(mockOperatorGroup.length); - }); - - it("should have all group names shown in the UI side panel", () => { - const groupNamesInUI = fixture.debugElement - .queryAll(By.css(".operator-submenu-title")) - .map(el => el.nativeElement.querySelector(".ant-collapse-header").innerText); - - expect(groupNamesInUI).toEqual(mockOperatorGroup.map(group => group.groupName)); - }); - - it("should create child operator label component for all operators", () => { - const operatorLabels = fixture.debugElement - .queryAll(By.directive(OperatorLabelComponent)) - .map(debugEl => debugEl.componentInstance) - .map(operatorLabel => operatorLabel.operator); - - expect(operatorLabels.length).toEqual(mockOperatorMetaData.operators.length); - }); - it("should search an operator by its user friendly name", () => { component.searchInputValue = "Source: Scan"; diff --git a/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.ts b/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.ts index 381bf528976..c52a3982fcf 100644 --- a/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.ts +++ b/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-menu.component.ts @@ -1,38 +1,22 @@ -import { Component, OnInit } from "@angular/core"; +import { Component } from "@angular/core"; import Fuse from "fuse.js"; import { OperatorMetadataService } from "../../../service/operator-metadata/operator-metadata.service"; -import { GroupInfo, OperatorMetadata, OperatorSchema } from "../../../types/operator-schema.interface"; +import { GroupInfo, OperatorSchema } from "../../../types/operator-schema.interface"; import { DragDropService } from "../../../service/drag-drop/drag-drop.service"; import { WorkflowActionService } from "../../../service/workflow-graph/model/workflow-action.service"; import { WorkflowUtilService } from "../../../service/workflow-graph/util/workflow-util.service"; import { UntilDestroy, untilDestroyed } from "@ngneat/until-destroy"; import { NzAutocompleteOptionComponent } from "ng-zorro-antd/auto-complete"; -/** - * OperatorMenuComponent is a panel that shows the operators. - * - * This component gets all the operator metadata from OperatorMetaDataService, - * and then displays the operators, which are grouped using their group name from the metadata. - * - * Clicking a group name reveals the operators in the group, each operator is a sub-component: OperatorLabelComponent, - * this is implemented using Angular Material's expansion panel component: https://material.angular.io/components/expansion/overview - * - * OperatorMenuComponent also includes a search box, which uses fuse.js to support fuzzy search on operator names. - * - */ @UntilDestroy() @Component({ selector: "texera-operator-menu", templateUrl: "operator-menu.component.html", styleUrls: ["operator-menu.component.scss"], }) -export class OperatorMenuComponent implements OnInit { - // a list of all operator's schema - public operatorSchemaList: ReadonlyArray = []; - // a list of group names, sorted based on the groupOrder from OperatorMetadata - public groupNamesOrdered: ReadonlyArray = []; - // a map of group name to a list of operator schema of this group - public operatorGroupMap = new Map>(); +export class OperatorMenuComponent { + public opList = new Map>(); + public groupNames: ReadonlyArray = []; // input value of the search input box public searchInputValue: string = ""; @@ -65,19 +49,23 @@ export class OperatorMenuComponent implements OnInit { this.workflowActionService .getWorkflowModificationEnabledStream() .pipe(untilDestroyed(this)) - .subscribe(canModify => { - this.canModify = canModify; - }); - } - - ngOnInit() { - // subscribe to the operator metadata changed observable and process it - // the operator metadata will be fetched asynchronously on application init - // after the data is fetched, it will be passed through this observable + .subscribe(canModify => (this.canModify = canModify)); this.operatorMetadataService .getOperatorMetadata() .pipe(untilDestroyed(this)) - .subscribe(value => this.processOperatorMetadata(value)); + .subscribe(operatorMetadata => { + const ops = operatorMetadata.operators.filter( + operatorSchema => operatorSchema.operatorType !== "PythonUDF" && operatorSchema.operatorType !== "Dummy" + ); + this.groupNames = operatorMetadata.groups; + ops.forEach(x => { + const group = x.additionalMetadata.operatorGroupName; + const list = this.opList.get(group) || []; + list.push(x); + this.opList.set(group, list); + }); + this.fuse.setCollection(ops); + }); } /** @@ -115,48 +103,4 @@ export class OperatorMenuComponent implements OnInit { this.autocompleteOptions = []; }, 0); } - - /** - * populate the class variables based on the operator metadata fetched from the backend: - * - sort the group names based on the group order - * - put the operators into the hashmap of group names - * - * @param operatorMetadata metadata of all operators - */ - private processOperatorMetadata(operatorMetadata: OperatorMetadata): void { - operatorMetadata = { - ...operatorMetadata, - operators: operatorMetadata.operators - .filter(operatorSchema => operatorSchema.operatorType != "PythonUDF") - .filter(operatorSchema => operatorSchema.operatorType != "Dummy"), - }; - this.operatorSchemaList = operatorMetadata.operators; - this.groupNamesOrdered = getGroupNamesSorted(operatorMetadata.groups); - this.operatorGroupMap = getOperatorGroupMap(operatorMetadata); - this.fuse.setCollection(this.operatorSchemaList); - } -} - -/** - * generates a list of group names sorted by the order - * slice() will make a copy of the list, because we don't want to sort the original list - */ -export function getGroupNamesSorted(groupInfoList: ReadonlyArray): string[] { - return groupInfoList - .slice() - .sort((a, b) => a.groupOrder - b.groupOrder) - .map(groupInfo => groupInfo.groupName); -} - -/** - * returns a new empty map from the group name to a list of OperatorSchema - */ -export function getOperatorGroupMap(operatorMetadata: OperatorMetadata): Map { - const groups = operatorMetadata.groups.map(groupInfo => groupInfo.groupName); - const operatorGroupMap = new Map(); - groups.forEach(groupName => { - const operators = operatorMetadata.operators.filter(x => x.additionalMetadata.operatorGroupName === groupName); - operatorGroupMap.set(groupName, operators); - }); - return operatorGroupMap; } diff --git a/core/gui/src/app/workspace/service/operator-metadata/mock-operator-metadata.data.ts b/core/gui/src/app/workspace/service/operator-metadata/mock-operator-metadata.data.ts index 235be8353c2..3d5e03e16bb 100644 --- a/core/gui/src/app/workspace/service/operator-metadata/mock-operator-metadata.data.ts +++ b/core/gui/src/app/workspace/service/operator-metadata/mock-operator-metadata.data.ts @@ -282,9 +282,9 @@ export const mockOperatorSchemaList: ReadonlyArray = [ ]; export const mockOperatorGroup: ReadonlyArray = [ - { groupName: "Source", groupOrder: 1 }, - { groupName: "Analysis", groupOrder: 2 }, - { groupName: "View Results", groupOrder: 3 }, + { groupName: "Source" }, + { groupName: "Analysis" }, + { groupName: "View Results" }, ]; export const mockOperatorMetaData: OperatorMetadata = { diff --git a/core/gui/src/app/workspace/types/operator-schema.interface.ts b/core/gui/src/app/workspace/types/operator-schema.interface.ts index f440162dedb..889b7155e0e 100644 --- a/core/gui/src/app/workspace/types/operator-schema.interface.ts +++ b/core/gui/src/app/workspace/types/operator-schema.interface.ts @@ -1,4 +1,3 @@ -import { JSONSchema7 } from "json-schema"; import { CustomJSONSchema7 } from "./custom-json-schema.interface"; /** @@ -46,7 +45,7 @@ export interface OperatorSchema export interface GroupInfo extends Readonly<{ groupName: string; - groupOrder: number; + children?: GroupInfo[] | null; }> {} export interface OperatorMetadata From 4fe31ff288a259ae99786b277ff5e7d8442308b7 Mon Sep 17 00:00:00 2001 From: Jiadong Bai <43344272+bobbai00@users.noreply.github.com> Date: Wed, 8 May 2024 14:14:31 -0700 Subject: [PATCH 24/44] Fix the issue that datasets not retrieved completely (#2650) This PR fixes the issue that some datasets are missing on the dashboard. The issue is caused by the search component, which limit the number of query result to 20 by default. The fix is to not using this component to retrieve, but use jooq query instead. --- .../user/dataset/DatasetResource.scala | 59 +++++++++++++------ 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/DatasetResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/DatasetResource.scala index 279188f936c..31873b0201c 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/DatasetResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/dataset/DatasetResource.scala @@ -15,9 +15,8 @@ import edu.uci.ics.texera.web.model.jooq.generated.tables.pojos.{ DatasetVersion } import edu.uci.ics.texera.web.model.jooq.generated.tables.Dataset.DATASET +import edu.uci.ics.texera.web.model.jooq.generated.tables.DatasetUserAccess.DATASET_USER_ACCESS import edu.uci.ics.texera.web.model.jooq.generated.tables.DatasetVersion.DATASET_VERSION -import edu.uci.ics.texera.web.resource.dashboard.DashboardResource -import edu.uci.ics.texera.web.resource.dashboard.DashboardResource.SearchQueryParams import edu.uci.ics.texera.web.resource.dashboard.user.dataset.DatasetAccessResource.{ getDatasetUserAccessPrivilege, userHasReadAccess, @@ -71,7 +70,9 @@ import javax.ws.rs.{ QueryParam } import javax.ws.rs.core.{MediaType, Response, StreamingOutput} +import scala.collection.convert.ImplicitConversions.`collection AsScalaIterable` import scala.collection.mutable +import scala.collection.mutable.ListBuffer import scala.jdk.CollectionConverters._ object DatasetResource { @@ -597,25 +598,47 @@ class DatasetResource { def listDatasets( @Auth user: SessionUser ): List[DashboardDataset] = { - val result = DashboardResource.searchAllResources( - user, - SearchQueryParams(resourceType = "dataset") - ) - var accessibleDatasets = result.results.map(_.dataset.get) - val publicDatasets = retrievePublicDatasets(context) - - publicDatasets.forEach { publicDataset => - if (!accessibleDatasets.exists(_.dataset.getDid == publicDataset.getDid)) { - val dashboardDataset = DashboardDataset( - isOwner = false, - dataset = publicDataset, - accessPrivilege = DatasetUserAccessPrivilege.READ + val uid = user.getUid + withTransaction(context)(ctx => { + // we first retrieve all datasets user have the direct access to + var accessibleDatasets = + ListBuffer.from( + ctx + .selectFrom( + DATASET + .leftJoin(DATASET_USER_ACCESS) + .on(DATASET_USER_ACCESS.DID.eq(DATASET.DID)) + .where( + DATASET_USER_ACCESS.UID.eq(uid) + ) + ) + .fetch() + .map(datasetAndAccess => { + val dataset = datasetAndAccess.into(classOf[Dataset]) + val datasetAccess = datasetAndAccess.into(classOf[DatasetUserAccess]) + DashboardDataset( + isOwner = dataset.getOwnerUid == uid, + dataset = dataset, + accessPrivilege = datasetAccess.getPrivilege + ) + }) ) - accessibleDatasets = accessibleDatasets :+ dashboardDataset + + // then we fetch the public datasets and merge it as a part of the result if not exist + val publicDatasets = retrievePublicDatasets(context) + publicDatasets.forEach { publicDataset => + if (!accessibleDatasets.exists(_.dataset.getDid == publicDataset.getDid)) { + val dashboardDataset = DashboardDataset( + isOwner = false, + dataset = publicDataset, + accessPrivilege = DatasetUserAccessPrivilege.READ + ) + accessibleDatasets = accessibleDatasets :+ dashboardDataset + } } - } - accessibleDatasets + accessibleDatasets.toList + }) } @GET From b197caa51e03630898a9854703ddff0cdc0ea7bb Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Fri, 10 May 2024 13:53:17 -0700 Subject: [PATCH 25/44] Fix Naming of Materialization Write and Read Operators in Region Plan Generator (#2651) This PR fixes #2611. Cost-based RPG sometime does not work properly for the case of multiple operators connected after the same blocking output port. The reason is in cost-based RPG, a blocking output port is always materialized. The materialization should create a pair of cache read/write operators _for each link_ after a blocking output port. However, the current implementation is using operator name as the id of replaced cache read/write operators. This would cause duplicate creation of materialization write/read operators with the same Id, which causes unexpected behavior. Using the link to the materialization operators eliminates the problem. As the name of materialization operators get longer after this change, an update to the `operator_id` field in `workflow_runtime_statistics` table is necessary. --- .../scheduling/RegionPlanGenerator.scala | 19 +++++++++++++------ core/scripts/sql/update/12.sql | 4 ++++ 2 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 core/scripts/sql/update/12.sql diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/RegionPlanGenerator.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/RegionPlanGenerator.scala index ea57fc52557..34e0c80f32c 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/RegionPlanGenerator.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/RegionPlanGenerator.scala @@ -140,7 +140,7 @@ abstract class RegionPlanGenerator( // create cache writer and link val matWriterPhysicalOp: PhysicalOp = - createMatWriter(fromOp.id.logicalOpId) + createMatWriter(physicalLink) val sourceToWriterLink = PhysicalLink( fromOp.id, @@ -154,7 +154,7 @@ abstract class RegionPlanGenerator( // create cache reader and link val matReaderPhysicalOp: PhysicalOp = - createMatReader(matWriterPhysicalOp.id.logicalOpId) + createMatReader(matWriterPhysicalOp.id.logicalOpId, physicalLink) val readerToDestLink = PhysicalLink( matReaderPhysicalOp.id, @@ -170,14 +170,15 @@ abstract class RegionPlanGenerator( } def createMatReader( - matWriterLogicalOpId: OperatorIdentity + matWriterLogicalOpId: OperatorIdentity, + physicalLink: PhysicalLink ): PhysicalOp = { val matReader = new CacheSourceOpDesc( matWriterLogicalOpId, opResultStorage: OpResultStorage ) matReader.setContext(workflowContext) - matReader.setOperatorId("cacheSource_" + matWriterLogicalOpId.id) + matReader.setOperatorId(s"cacheSource_${getMatIdFromPhysicalLink(physicalLink)}") matReader .getPhysicalOp( @@ -189,11 +190,11 @@ abstract class RegionPlanGenerator( } def createMatWriter( - fromLogicalOpId: OperatorIdentity + physicalLink: PhysicalLink ): PhysicalOp = { val matWriter = new ProgressiveSinkOpDesc() matWriter.setContext(workflowContext) - matWriter.setOperatorId("materialized_" + fromLogicalOpId.id) + matWriter.setOperatorId(s"materialized_${getMatIdFromPhysicalLink(physicalLink)}") // expect exactly one input port and one output port @@ -211,4 +212,10 @@ abstract class RegionPlanGenerator( } + private def getMatIdFromPhysicalLink(physicalLink: PhysicalLink) = + s"${physicalLink.fromOpId.logicalOpId}_${physicalLink.fromOpId.layerName}_" + + s"${physicalLink.fromPortId.id}_" + + s"${physicalLink.toOpId.logicalOpId}_${physicalLink.toOpId.layerName}_" + + s"${physicalLink.toPortId.id}" + } diff --git a/core/scripts/sql/update/12.sql b/core/scripts/sql/update/12.sql new file mode 100644 index 00000000000..24bd29ce7ab --- /dev/null +++ b/core/scripts/sql/update/12.sql @@ -0,0 +1,4 @@ +USE `texera_db`; + +ALTER TABLE texera_db.workflow_runtime_statistics + MODIFY COLUMN operator_id VARCHAR(512); \ No newline at end of file From ed93da45908260000573a8488c767c09782e7401 Mon Sep 17 00:00:00 2001 From: Xinyuan Lin Date: Fri, 10 May 2024 21:19:08 -0700 Subject: [PATCH 26/44] Keep the feature names and report the feature mismatch errors in ML prediction operator (#2649) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After this PR, it will report errors to the user when the order of features mismatches for ML prediction operator. Screenshot 2024-05-06 at 6 16 03 PM --- .../workflow/operators/sklearn/SklearnPredictionOpDesc.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPredictionOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPredictionOpDesc.scala index eaed10cc0b2..6241695335a 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPredictionOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPredictionOpDesc.scala @@ -25,7 +25,7 @@ class SklearnPredictionOpDesc extends PythonOperatorDescriptor { | if port == 0: | self.model = tuple_["$model"] | else: - | tuple_["$resultAttribute"] = str(self.model.predict([tuple_])[0]) + | tuple_["$resultAttribute"] = str(self.model.predict(Table.from_tuple_likes([tuple_]))[0]) | yield tuple_""".stripMargin override def operatorInfo: OperatorInfo = From b3d6d03fd78b59713c8909cbf99fb4df9e77133b Mon Sep 17 00:00:00 2001 From: Yicong Huang <17627829+Yicong-Huang@users.noreply.github.com> Date: Fri, 10 May 2024 22:24:44 -0700 Subject: [PATCH 27/44] Make classifiers logs out evaluations per class instead of an average (#2654) The way we used for evaluations including f1_score, precision, and recall are all using the `micro` average method. This way for multi-class usage, the evaluations for each individual class are aggregated, resulting the same value for all evaluations. This PR changes this behavior and lets each class's individual evaluations be logged out on the console. And it also removes those evaluations from the output tuple as it is not useful. ![CleanShot 2024-05-10 at 12 10 38](https://github.com/Texera/texera/assets/17627829/dbe749a4-7797-4f99-9002-068c2dc1332d) ![CleanShot 2024-05-10 at 12 06 29](https://github.com/Texera/texera/assets/17627829/1e445d82-9c0e-412e-ba4b-65d735662662) --- .../SklearnAdaptiveBoostingOpDesc.scala | 4 +- .../sklearn/SklearnBaggingOpDesc.scala | 4 +- .../SklearnBernoulliNaiveBayesOpDesc.scala | 4 +- .../SklearnComplementNaiveBayesOpDesc.scala | 4 +- .../sklearn/SklearnDecisionTreeOpDesc.scala | 4 +- .../SklearnDummyClassifierOpDesc.scala | 4 +- .../sklearn/SklearnExtraTreeOpDesc.scala | 4 +- .../sklearn/SklearnExtraTreesOpDesc.scala | 4 +- .../SklearnGaussianNaiveBayesOpDesc.scala | 4 +- .../SklearnGradientBoostingOpDesc.scala | 4 +- .../operators/sklearn/SklearnKNNOpDesc.scala | 4 +- .../SklearnLinearRegressionOpDesc.scala | 4 +- .../sklearn/SklearnLinearSVMOpDesc.scala | 4 +- .../SklearnLogisticRegressionCVOpDesc.scala | 4 +- .../SklearnLogisticRegressionOpDesc.scala | 4 +- .../operators/sklearn/SklearnMLOpDesc.scala | 77 ++++++++----------- .../SklearnMultiLayerPerceptronOpDesc.scala | 4 +- .../SklearnMultinomialNaiveBayesOpDesc.scala | 4 +- .../SklearnNearestCentroidOpDesc.scala | 4 +- .../SklearnPassiveAggressiveOpDesc.scala | 4 +- .../sklearn/SklearnPerceptronOpDesc.scala | 4 +- .../SklearnProbabilityCalibrationOpDesc.scala | 4 +- .../sklearn/SklearnRandomForestOpDesc.scala | 4 +- .../sklearn/SklearnRidgeCVOpDesc.scala | 4 +- .../sklearn/SklearnRidgeOpDesc.scala | 4 +- .../operators/sklearn/SklearnSDGOpDesc.scala | 4 +- .../operators/sklearn/SklearnSVMOpDesc.scala | 4 +- 27 files changed, 82 insertions(+), 99 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnAdaptiveBoostingOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnAdaptiveBoostingOpDesc.scala index 70893c7c693..44538d873f7 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnAdaptiveBoostingOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnAdaptiveBoostingOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnAdaptiveBoostingOpDesc extends SklearnMLOpDesc { - model = "from sklearn.ensemble import AdaBoostClassifier" - name = "Adaptive Boosting" + override def getImportStatements = "from sklearn.ensemble import AdaBoostClassifier" + override def getUserFriendlyModelName = "Adaptive Boosting" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBaggingOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBaggingOpDesc.scala index 98cbee10950..26a11b36926 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBaggingOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBaggingOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnBaggingOpDesc extends SklearnMLOpDesc { - model = "from sklearn.ensemble import BaggingClassifier" - name = "Bagging" + override def getImportStatements = "from sklearn.ensemble import BaggingClassifier" + override def getUserFriendlyModelName = "Bagging" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBernoulliNaiveBayesOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBernoulliNaiveBayesOpDesc.scala index 4f8aabeb950..2b7ce683e6f 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBernoulliNaiveBayesOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnBernoulliNaiveBayesOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnBernoulliNaiveBayesOpDesc extends SklearnMLOpDesc { - model = "from sklearn.naive_bayes import BernoulliNB" - name = "Bernoulli Naive Bayes" + override def getImportStatements = "from sklearn.naive_bayes import BernoulliNB" + override def getUserFriendlyModelName = "Bernoulli Naive Bayes" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnComplementNaiveBayesOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnComplementNaiveBayesOpDesc.scala index cac35f5daf9..0ebeb9023c7 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnComplementNaiveBayesOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnComplementNaiveBayesOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnComplementNaiveBayesOpDesc extends SklearnMLOpDesc { - model = "from sklearn.naive_bayes import ComplementNB" - name = "Complement Naive Bayes" + override def getImportStatements = "from sklearn.naive_bayes import ComplementNB" + override def getUserFriendlyModelName = "Complement Naive Bayes" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDecisionTreeOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDecisionTreeOpDesc.scala index 815e4047664..b174b719e44 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDecisionTreeOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDecisionTreeOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnDecisionTreeOpDesc extends SklearnMLOpDesc { - model = "from sklearn.tree import DecisionTreeClassifier" - name = "Decision Tree" + override def getImportStatements = "from sklearn.tree import DecisionTreeClassifier" + override def getUserFriendlyModelName = "Decision Tree" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDummyClassifierOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDummyClassifierOpDesc.scala index 286540836a1..aa0599c1fc4 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDummyClassifierOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnDummyClassifierOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnDummyClassifierOpDesc extends SklearnMLOpDesc { - model = "from sklearn.dummy import dummy" - name = "Dummy Classifier" + override def getImportStatements = "from sklearn.dummy import dummy" + override def getUserFriendlyModelName = "Dummy Classifier" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreeOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreeOpDesc.scala index b7b05a7bcc3..f16a9d282f1 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreeOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreeOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnExtraTreeOpDesc extends SklearnMLOpDesc { - model = "from sklearn.tree import ExtraTreeClassifier" - name = "Extra Tree" + override def getImportStatements = "from sklearn.tree import ExtraTreeClassifier" + override def getUserFriendlyModelName = "Extra Tree" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreesOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreesOpDesc.scala index 8dee19029cb..46caea5eb16 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreesOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnExtraTreesOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnExtraTreesOpDesc extends SklearnMLOpDesc { - model = "from sklearn.ensemble import ExtraTreesClassifier" - name = "Extra Trees" + override def getImportStatements = "from sklearn.ensemble import ExtraTreesClassifier" + override def getUserFriendlyModelName = "Extra Trees" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGaussianNaiveBayesOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGaussianNaiveBayesOpDesc.scala index b8d378e83e7..e89bb5edbc6 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGaussianNaiveBayesOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGaussianNaiveBayesOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnGaussianNaiveBayesOpDesc extends SklearnMLOpDesc { - model = "from sklearn.naive_bayes import GaussianNB" - name = "Gaussian Naive Bayes" + override def getImportStatements = "from sklearn.naive_bayes import GaussianNB" + override def getUserFriendlyModelName = "Gaussian Naive Bayes" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGradientBoostingOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGradientBoostingOpDesc.scala index f89ba74c0f2..a83f763dd8a 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGradientBoostingOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnGradientBoostingOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnGradientBoostingOpDesc extends SklearnMLOpDesc { - model = "from sklearn.ensemble import GradientBoostingClassifier" - name = "Gradient Boosting" + override def getImportStatements = "from sklearn.ensemble import GradientBoostingClassifier" + override def getUserFriendlyModelName = "Gradient Boosting" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnKNNOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnKNNOpDesc.scala index 1d60f25dced..92524f495f7 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnKNNOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnKNNOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnKNNOpDesc extends SklearnMLOpDesc { - model = "from sklearn.neighbors import KNeighborsClassifier" - name = "K-nearest Neighbors" + override def getImportStatements = "from sklearn.neighbors import KNeighborsClassifier" + override def getUserFriendlyModelName = "K-nearest Neighbors" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearRegressionOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearRegressionOpDesc.scala index e7f2524f402..5013831f63c 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearRegressionOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearRegressionOpDesc.scala @@ -1,7 +1,7 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnLinearRegressionOpDesc extends SklearnMLOpDesc { - model = "from sklearn.linear_model import LinearRegression" - name = "Linear Regression" + override def getImportStatements = "from sklearn.linear_model import LinearRegression" + override def getUserFriendlyModelName = "Linear Regression" classification = false } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearSVMOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearSVMOpDesc.scala index 1f3a78852a6..548d2d23e53 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearSVMOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLinearSVMOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnLinearSVMOpDesc extends SklearnMLOpDesc { - model = "from sklearn.svm import LinearSVC" - name = "Linear Support Vector Machine" + override def getImportStatements = "from sklearn.svm import LinearSVC" + override def getUserFriendlyModelName = "Linear Support Vector Machine" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionCVOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionCVOpDesc.scala index 7fddd2f9ebd..60be12a89cc 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionCVOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionCVOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnLogisticRegressionCVOpDesc extends SklearnMLOpDesc { - model = "from sklearn.linear_model import LogisticRegressionCV" - name = "Logistic Regression Cross Validation" + override def getImportStatements = "from sklearn.linear_model import LogisticRegressionCV" + override def getUserFriendlyModelName = "Logistic Regression Cross Validation" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionOpDesc.scala index 8be99e62e50..3b0463850b9 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnLogisticRegressionOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnLogisticRegressionOpDesc extends SklearnMLOpDesc { - model = "from sklearn.linear_model import LogisticRegression" - name = "Logistic Regression" + override def getImportStatements = "from sklearn.linear_model import LogisticRegression" + override def getUserFriendlyModelName = "Logistic Regression" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala index 1fd52f1e141..17c52a7ae7a 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala @@ -9,12 +9,6 @@ import edu.uci.ics.texera.workflow.common.tuple.schema.{AttributeType, Schema} abstract class SklearnMLOpDesc extends PythonOperatorDescriptor { - @JsonIgnore - var model = "" - - @JsonIgnore - var name = "" - @JsonIgnore var classification: Boolean = true @@ -23,46 +17,45 @@ abstract class SklearnMLOpDesc extends PythonOperatorDescriptor { @AutofillAttributeName var target: String = _ + def getImportStatements = "" + + def getUserFriendlyModelName = "" + override def generatePythonCode(): String = - s"""$model + s"""$getImportStatements |from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score, mean_absolute_error, r2_score - |import pandas as pd + |import numpy as np |from pytexera import * |class ProcessTableOperator(UDFTableOperator): | @overrides | def process_table(self, table: Table, port: int) -> Iterator[Optional[TableLike]]: + | Y = table["$target"] + | X = table.drop("$target", axis=1) | if port == 0: - | self.model = ${model - .split(" ") - .last}().fit(table.drop("$target", axis=1), table["$target"]) + | self.model = ${getImportStatements.split(" ").last}().fit(X, Y) | else: - | predictions = self.model.predict(table.drop("$target", axis=1)) - | if ${if (classification) "True" else "False"}: - | auc = accuracy_score(table["$target"], predictions) - | f1 = f1_score(table["$target"], predictions, average='micro') - | precision = precision_score(table["$target"], predictions, average='micro') - | recall = recall_score(table["$target"], predictions, average='micro') - | print("Accuracy:", auc, ", F1:", f1, ", Precision:", precision, ", Recall:", recall) - | yield {"name" : "$name", - | "accuracy" : auc, - | "f1" : f1, - | "precision" : precision, - | "recall" : recall, - | "model" : self.model} + | predictions = self.model.predict(X) + | if ${if (classification) "True" + else "False"}: + | accuracy = accuracy_score(Y, predictions) + | print("Overall Accuracy:", accuracy) + | + | f1s = f1_score(Y, predictions, average=None) + | precisions = precision_score(Y, predictions, average=None) + | recalls = recall_score(Y, predictions, average=None) + | for i, class_name in enumerate(np.unique(Y)): + | print("Class", repr(class_name), " - F1:", f1s[i], ", Precision:", precisions[i], ", Recall:", recalls[i]) + | yield {"model_name" : "$getUserFriendlyModelName", "model" : self.model} | else: - | mae = mean_absolute_error(table["$target"], predictions) - | r2 = r2_score(table["$target"], predictions) + | mae = mean_absolute_error(Y, predictions) + | r2 = r2_score(Y, predictions) | print("MAE:", mae, ", R2:", r2) - | yield {"name" : "$name", - | "mae": mae, - | "r2": r2, - | "model" : self.model} - | """.stripMargin + | yield {"model_name" : "$getUserFriendlyModelName", "model" : self.model}""".stripMargin override def operatorInfo: OperatorInfo = OperatorInfo( - name, - "Sklearn " + name + " Operator", + getUserFriendlyModelName, + "Sklearn " + getUserFriendlyModelName + " Operator", OperatorGroupConstants.SKLEARN_GROUP, inputPorts = List( InputPort(PortIdentity(), "training"), @@ -72,20 +65,10 @@ abstract class SklearnMLOpDesc extends PythonOperatorDescriptor { ) override def getOutputSchema(schemas: Array[Schema]): Schema = { - val builder = Schema + Schema .builder() - .add("name", AttributeType.STRING) - if (classification) { - builder - .add("accuracy", AttributeType.DOUBLE) - .add("f1", AttributeType.DOUBLE) - .add("precision", AttributeType.DOUBLE) - .add("recall", AttributeType.DOUBLE) - } else { - builder - .add("mae", AttributeType.DOUBLE) - .add("r2", AttributeType.DOUBLE) - } - builder.add("model", AttributeType.BINARY).build() + .add("model_name", AttributeType.STRING) + .add("model", AttributeType.BINARY) + .build() } } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultiLayerPerceptronOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultiLayerPerceptronOpDesc.scala index c368ad9257c..61bcedd8d84 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultiLayerPerceptronOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultiLayerPerceptronOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnMultiLayerPerceptronOpDesc extends SklearnMLOpDesc { - model = "from sklearn.neural_network import MLPClassifier" - name = "Multi-layer Perceptron" + override def getImportStatements = "from sklearn.neural_network import MLPClassifier" + override def getUserFriendlyModelName = "Multi-layer Perceptron" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultinomialNaiveBayesOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultinomialNaiveBayesOpDesc.scala index c2f0caccac6..97f2f754b75 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultinomialNaiveBayesOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMultinomialNaiveBayesOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnMultinomialNaiveBayesOpDesc extends SklearnMLOpDesc { - model = "from sklearn.naive_bayes import MultinomialNB" - name = "Multinomial Naive Bayes" + override def getImportStatements = "from sklearn.naive_bayes import MultinomialNB" + override def getUserFriendlyModelName = "Multinomial Naive Bayes" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnNearestCentroidOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnNearestCentroidOpDesc.scala index 88293093a1f..0c8ecd0b394 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnNearestCentroidOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnNearestCentroidOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnNearestCentroidOpDesc extends SklearnMLOpDesc { - model = "from sklearn.neighbors import NearestCentroid" - name = "Nearest Centroid" + override def getImportStatements = "from sklearn.neighbors import NearestCentroid" + override def getUserFriendlyModelName = "Nearest Centroid" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPassiveAggressiveOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPassiveAggressiveOpDesc.scala index 978d9ebc4e2..4edaa494133 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPassiveAggressiveOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPassiveAggressiveOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnPassiveAggressiveOpDesc extends SklearnMLOpDesc { - model = "from sklearn.linear_model import PassiveAggressiveClassifier" - name = "Passive Aggressive" + override def getImportStatements = "from sklearn.linear_model import PassiveAggressiveClassifier" + override def getUserFriendlyModelName = "Passive Aggressive" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPerceptronOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPerceptronOpDesc.scala index 2f5e120f811..7e1d7f28b36 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPerceptronOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnPerceptronOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnPerceptronOpDesc extends SklearnMLOpDesc { - model = "from sklearn.linear_model import Perceptron" - name = "Linear Perceptron" + override def getImportStatements = "from sklearn.linear_model import Perceptron" + override def getUserFriendlyModelName = "Linear Perceptron" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnProbabilityCalibrationOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnProbabilityCalibrationOpDesc.scala index 19d3f22a535..cb24e42a686 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnProbabilityCalibrationOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnProbabilityCalibrationOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnProbabilityCalibrationOpDesc extends SklearnMLOpDesc { - model = "from sklearn.calibration import CalibratedClassifierCV" - name = "Probability Calibration" + override def getImportStatements = "from sklearn.calibration import CalibratedClassifierCV" + override def getUserFriendlyModelName = "Probability Calibration" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRandomForestOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRandomForestOpDesc.scala index 159ef40a26e..1b862df16c3 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRandomForestOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRandomForestOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnRandomForestOpDesc extends SklearnMLOpDesc { - model = "from sklearn.ensemble import RandomForestClassifier" - name = "Random Forest" + override def getImportStatements = "from sklearn.ensemble import RandomForestClassifier" + override def getUserFriendlyModelName = "Random Forest" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeCVOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeCVOpDesc.scala index f12e9723016..6a8938aba54 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeCVOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeCVOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnRidgeCVOpDesc extends SklearnMLOpDesc { - model = "from sklearn.linear_model import RidgeClassifierCV" - name = "Ridge Regression Cross Validation" + override def getImportStatements = "from sklearn.linear_model import RidgeClassifierCV" + override def getUserFriendlyModelName = "Ridge Regression Cross Validation" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeOpDesc.scala index 1dce1033eb2..d18c23b2c56 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnRidgeOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnRidgeOpDesc extends SklearnMLOpDesc { - model = "from sklearn.linear_model import RidgeClassifier" - name = "Ridge Regression" + override def getImportStatements = "from sklearn.linear_model import RidgeClassifier" + override def getUserFriendlyModelName = "Ridge Regression" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSDGOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSDGOpDesc.scala index 2c366976459..e22ddf49faf 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSDGOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSDGOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnSDGOpDesc extends SklearnMLOpDesc { - model = "from sklearn.linear_model import SGDClassifier" - name = "Stochastic Gradient Descent" + override def getImportStatements = "from sklearn.linear_model import SGDClassifier" + override def getUserFriendlyModelName = "Stochastic Gradient Descent" } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSVMOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSVMOpDesc.scala index a1f3507f10e..d64131d0c84 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSVMOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnSVMOpDesc.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.workflow.operators.sklearn class SklearnSVMOpDesc extends SklearnMLOpDesc { - model = "from sklearn.svm import SVC" - name = "Support Vector Machine" + override def getImportStatements = "from sklearn.svm import SVC" + override def getUserFriendlyModelName = "Support Vector Machine" } From 6fc2f9b6ade1b805dcaed9815d7743f81e22ecd4 Mon Sep 17 00:00:00 2001 From: Shengquan Ni <13672781+shengquan-ni@users.noreply.github.com> Date: Sat, 11 May 2024 22:05:33 -0700 Subject: [PATCH 28/44] Add JsonIgnore to import and user friendly names to sklearn operators (#2657) as title. --- .../ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala index 17c52a7ae7a..7efda54241e 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sklearn/SklearnMLOpDesc.scala @@ -17,8 +17,10 @@ abstract class SklearnMLOpDesc extends PythonOperatorDescriptor { @AutofillAttributeName var target: String = _ + @JsonIgnore def getImportStatements = "" + @JsonIgnore def getUserFriendlyModelName = "" override def generatePythonCode(): String = From c19fe9f5c3a23eca6aa7ab334c5a73e38c28cbe6 Mon Sep 17 00:00:00 2001 From: Yicong Huang <17627829+Yicong-Huang@users.noreply.github.com> Date: Sat, 11 May 2024 23:08:48 -0700 Subject: [PATCH 29/44] Include the dkNET Webinar video in README (#2655) As title. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 89043f61fda..2abd5d04daa 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ The following is a workflow formulated using the Texera GUI in a Web browser, wh * (4/2021) Why Do People Oppose Mask Wearing? A Comprehensive Analysis of US Tweets During the COVID-19 Pandemic, Lu He, Changyang He, Tera Leigh Reynolds, Qiushi Bai, Yicong Huang, Chen Li, Kai Zheng, and Yunan Chen, in JAMIA 2021 [PDF](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7989302/pdf/ocab047.pdf). ## Videos - +* [dkNET Webinar "Texera: A Scalable Cloud Computing Platform for Sharing Data & Workflow-based Analysis" 04/26/2024](https://www.youtube.com/watch?v=B81iMFS5fPc) * [Texera demo in VLDB 2020](https://www.youtube.com/watch?v=SP-XiDADbw0) * [Amber engine presentation in VLDB 2020](https://www.youtube.com/watch?v=T5ShFRfHmgI) * See [Texera in action](https://www.youtube.com/watch?v=NXfynBUwdVg). From 2be4dcf35c369b67d43b157d0e3086b0f8f81369 Mon Sep 17 00:00:00 2001 From: Yicong Huang <17627829+Yicong-Huang@users.noreply.github.com> Date: Sun, 12 May 2024 05:56:39 -0700 Subject: [PATCH 30/44] Rearrange operators into sub-menus (#2658) --- .../metadata/OperatorGroupConstants.scala | 17 +++++++++-------- .../operators/udf/java/JavaUDFOpDesc.scala | 2 +- .../DualInputPortsPythonUDFOpDescV2.scala | 2 +- .../udf/python/PythonLambdaFunctionOpDesc.scala | 2 +- .../udf/python/PythonTableReducerOpDesc.scala | 2 +- .../udf/python/PythonUDFOpDescV2.scala | 2 +- .../python/source/PythonUDFSourceOpDescV2.java | 2 +- 7 files changed, 15 insertions(+), 14 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorGroupConstants.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorGroupConstants.scala index e7fec2b4edc..49f3ce3aabe 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorGroupConstants.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorGroupConstants.scala @@ -5,17 +5,19 @@ object OperatorGroupConstants { final val DATABASE_GROUP = "Database Connector" final val SEARCH_GROUP = "Search" final val CLEANING_GROUP = "Data Cleaning" - final val MACHINE_LEARNING_GROUP = "Machine Learning" final val JOIN_GROUP = "Join" final val SET_GROUP = "Set" final val AGGREGATE_GROUP = "Aggregate" final val SORT_GROUP = "Sort" final val UTILITY_GROUP = "Utilities" final val API_GROUP = "External API" - final val UDF_GROUP = "User-defined Functions" final val VISUALIZATION_GROUP = "Visualization" + final val MACHINE_LEARNING_GROUP = "Machine Learning" final val HUGGINGFACE_GROUP = "Hugging Face" final val SKLEARN_GROUP = "Sklearn" + final val UDF_GROUP = "User-defined Functions" + final val PYTHON_GROUP = "Python" + final val JAVA_GROUP = "Java" /** * The order of the groups to show up in the frontend operator panel. @@ -25,15 +27,14 @@ object OperatorGroupConstants { GroupInfo(INPUT_GROUP), GroupInfo(DATABASE_GROUP), GroupInfo(SEARCH_GROUP), - GroupInfo(CLEANING_GROUP), + GroupInfo( + CLEANING_GROUP, + List(GroupInfo(JOIN_GROUP), GroupInfo(AGGREGATE_GROUP), GroupInfo(SORT_GROUP)) + ), GroupInfo(MACHINE_LEARNING_GROUP, List(GroupInfo(SKLEARN_GROUP), GroupInfo(HUGGINGFACE_GROUP))), - GroupInfo(JOIN_GROUP), - GroupInfo(SET_GROUP), - GroupInfo(AGGREGATE_GROUP), - GroupInfo(SORT_GROUP), GroupInfo(UTILITY_GROUP), GroupInfo(API_GROUP), - GroupInfo(UDF_GROUP), + GroupInfo(UDF_GROUP, List(GroupInfo(PYTHON_GROUP), GroupInfo(JAVA_GROUP))), GroupInfo(VISUALIZATION_GROUP) ) } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/java/JavaUDFOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/java/JavaUDFOpDesc.scala index 06f5b759288..d3c4b30c4c9 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/java/JavaUDFOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/java/JavaUDFOpDesc.scala @@ -144,7 +144,7 @@ class JavaUDFOpDesc extends LogicalOp { OperatorInfo( "Java UDF", "User-defined function operator in Java script", - OperatorGroupConstants.UDF_GROUP, + OperatorGroupConstants.JAVA_GROUP, inputPortInfo, outputPortInfo, dynamicInputPorts = true, diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/DualInputPortsPythonUDFOpDescV2.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/DualInputPortsPythonUDFOpDescV2.scala index 9a5928e9756..0f8c57f6d6f 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/DualInputPortsPythonUDFOpDescV2.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/DualInputPortsPythonUDFOpDescV2.scala @@ -113,7 +113,7 @@ class DualInputPortsPythonUDFOpDescV2 extends LogicalOp { OperatorInfo( "2-in Python UDF", "User-defined function operator in Python script", - OperatorGroupConstants.UDF_GROUP, + OperatorGroupConstants.PYTHON_GROUP, inputPorts = List( InputPort(PortIdentity(), displayName = "model", allowMultiLinks = true), InputPort( diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonLambdaFunctionOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonLambdaFunctionOpDesc.scala index d205bd6d636..3408a7f48c0 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonLambdaFunctionOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonLambdaFunctionOpDesc.scala @@ -44,7 +44,7 @@ class PythonLambdaFunctionOpDesc extends PythonOperatorDescriptor { OperatorInfo( "Python Lambda Function", "Modify or add a new column with more ease", - OperatorGroupConstants.UDF_GROUP, + OperatorGroupConstants.PYTHON_GROUP, inputPorts = List(InputPort()), outputPorts = List(OutputPort()), supportReconfiguration = true diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonTableReducerOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonTableReducerOpDesc.scala index 7fcce27f894..fb7f82ccaa6 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonTableReducerOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonTableReducerOpDesc.scala @@ -24,7 +24,7 @@ class PythonTableReducerOpDesc extends PythonOperatorDescriptor { OperatorInfo( "Python Table Reducer", "Reduce Table to Tuple", - OperatorGroupConstants.UDF_GROUP, + OperatorGroupConstants.PYTHON_GROUP, inputPorts = List(InputPort()), outputPorts = List(OutputPort()) ) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonUDFOpDescV2.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonUDFOpDescV2.scala index 143992e6a47..a736e23696a 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonUDFOpDescV2.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/PythonUDFOpDescV2.scala @@ -152,7 +152,7 @@ class PythonUDFOpDescV2 extends LogicalOp { OperatorInfo( "Python UDF", "User-defined function operator in Python script", - OperatorGroupConstants.UDF_GROUP, + OperatorGroupConstants.PYTHON_GROUP, inputPortInfo, outputPortInfo, dynamicInputPorts = true, diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/source/PythonUDFSourceOpDescV2.java b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/source/PythonUDFSourceOpDescV2.java index 76dcccf48a1..cb8c155449e 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/source/PythonUDFSourceOpDescV2.java +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/source/PythonUDFSourceOpDescV2.java @@ -97,7 +97,7 @@ public OperatorInfo operatorInfo() { return new OperatorInfo( "1-out Python UDF", "User-defined function operator in Python script", - OperatorGroupConstants.UDF_GROUP(), + OperatorGroupConstants.PYTHON_GROUP(), asScala(new ArrayList()).toList(), asScala(singletonList(new OutputPort(new PortIdentity(0, false), "", false))).toList(), false, From 5488732d70cf4b16af7c6dfb016a233e98e96c6c Mon Sep 17 00:00:00 2001 From: Xinyuan Lin Date: Sun, 12 May 2024 15:20:04 -0700 Subject: [PATCH 31/44] Fix Operator Menu Overflow (#2653) --- .../operator-label/operator-label.component.scss | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-label/operator-label.component.scss b/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-label/operator-label.component.scss index 1e1b1b741cb..f3c31281164 100644 --- a/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-label/operator-label.component.scss +++ b/core/gui/src/app/workspace/component/left-panel/operator-menu/operator-label/operator-label.component.scss @@ -4,11 +4,8 @@ .operator-label { white-space: nowrap; - width: 100%; height: 32px; - line-height: 32px; - display: flex; - align-content: center; + line-height: 30px; border-radius: 3px; border: 1px solid rgba(0, 0, 0, 0); transition: From 1ce1edb2771a226f6035a1b63fb722d6d60eb59b Mon Sep 17 00:00:00 2001 From: Xinyuan Lin Date: Sun, 12 May 2024 20:05:06 -0700 Subject: [PATCH 32/44] Sync JOOQ codegen classes with latest DDL (#2652) As title --- .../web/model/jooq/generated/Indexes.java | 4 +- .../texera/web/model/jooq/generated/Keys.java | 4 +- .../generated/tables/WorkflowExecutions.java | 20 +- .../tables/daos/WorkflowExecutionsDao.java | 28 +-- .../interfaces/IWorkflowExecutions.java | 20 +- .../tables/pojos/WorkflowExecutions.java | 36 ++-- .../records/WorkflowExecutionsRecord.java | 202 +++++++++--------- 7 files changed, 157 insertions(+), 157 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/Indexes.java b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/Indexes.java index 955fd18a928..f6ece46f9e0 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/Indexes.java +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/Indexes.java @@ -79,7 +79,7 @@ public class Indexes { public static final Index USER_FILE_ACCESS_PRIMARY = Indexes0.USER_FILE_ACCESS_PRIMARY; public static final Index WORKFLOW_IDX_WORKFLOW_NAME_DESCRIPTION_CONTENT = Indexes0.WORKFLOW_IDX_WORKFLOW_NAME_DESCRIPTION_CONTENT; public static final Index WORKFLOW_PRIMARY = Indexes0.WORKFLOW_PRIMARY; - public static final Index WORKFLOW_EXECUTIONS_FK_ENVIRONMENT_EID = Indexes0.WORKFLOW_EXECUTIONS_FK_ENVIRONMENT_EID; + public static final Index WORKFLOW_EXECUTIONS_ENVIRONMENT_EID = Indexes0.WORKFLOW_EXECUTIONS_ENVIRONMENT_EID; public static final Index WORKFLOW_EXECUTIONS_PRIMARY = Indexes0.WORKFLOW_EXECUTIONS_PRIMARY; public static final Index WORKFLOW_EXECUTIONS_UID = Indexes0.WORKFLOW_EXECUTIONS_UID; public static final Index WORKFLOW_EXECUTIONS_VID = Indexes0.WORKFLOW_EXECUTIONS_VID; @@ -136,7 +136,7 @@ private static class Indexes0 { public static Index USER_FILE_ACCESS_PRIMARY = Internal.createIndex("PRIMARY", UserFileAccess.USER_FILE_ACCESS, new OrderField[] { UserFileAccess.USER_FILE_ACCESS.UID, UserFileAccess.USER_FILE_ACCESS.FID }, true); public static Index WORKFLOW_IDX_WORKFLOW_NAME_DESCRIPTION_CONTENT = Internal.createIndex("idx_workflow_name_description_content", Workflow.WORKFLOW, new OrderField[] { Workflow.WORKFLOW.NAME, Workflow.WORKFLOW.DESCRIPTION, Workflow.WORKFLOW.CONTENT }, false); public static Index WORKFLOW_PRIMARY = Internal.createIndex("PRIMARY", Workflow.WORKFLOW, new OrderField[] { Workflow.WORKFLOW.WID }, true); - public static Index WORKFLOW_EXECUTIONS_FK_ENVIRONMENT_EID = Internal.createIndex("fk_environment_eid", WorkflowExecutions.WORKFLOW_EXECUTIONS, new OrderField[] { WorkflowExecutions.WORKFLOW_EXECUTIONS.ENVIRONMENT_EID }, false); + public static Index WORKFLOW_EXECUTIONS_ENVIRONMENT_EID = Internal.createIndex("environment_eid", WorkflowExecutions.WORKFLOW_EXECUTIONS, new OrderField[] { WorkflowExecutions.WORKFLOW_EXECUTIONS.ENVIRONMENT_EID }, false); public static Index WORKFLOW_EXECUTIONS_PRIMARY = Internal.createIndex("PRIMARY", WorkflowExecutions.WORKFLOW_EXECUTIONS, new OrderField[] { WorkflowExecutions.WORKFLOW_EXECUTIONS.EID }, true); public static Index WORKFLOW_EXECUTIONS_UID = Internal.createIndex("uid", WorkflowExecutions.WORKFLOW_EXECUTIONS, new OrderField[] { WorkflowExecutions.WORKFLOW_EXECUTIONS.UID }, false); public static Index WORKFLOW_EXECUTIONS_VID = Internal.createIndex("vid", WorkflowExecutions.WORKFLOW_EXECUTIONS, new OrderField[] { WorkflowExecutions.WORKFLOW_EXECUTIONS.VID }, false); diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/Keys.java b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/Keys.java index 11a5686d1c8..755739e2ce1 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/Keys.java +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/Keys.java @@ -135,7 +135,7 @@ public class Keys { public static final ForeignKey USER_FILE_ACCESS_IBFK_2 = ForeignKeys0.USER_FILE_ACCESS_IBFK_2; public static final ForeignKey WORKFLOW_EXECUTIONS_IBFK_1 = ForeignKeys0.WORKFLOW_EXECUTIONS_IBFK_1; public static final ForeignKey WORKFLOW_EXECUTIONS_IBFK_2 = ForeignKeys0.WORKFLOW_EXECUTIONS_IBFK_2; - public static final ForeignKey FK_ENVIRONMENT_EID = ForeignKeys0.FK_ENVIRONMENT_EID; + public static final ForeignKey WORKFLOW_EXECUTIONS_IBFK_3 = ForeignKeys0.WORKFLOW_EXECUTIONS_IBFK_3; public static final ForeignKey WORKFLOW_OF_PROJECT_IBFK_1 = ForeignKeys0.WORKFLOW_OF_PROJECT_IBFK_1; public static final ForeignKey WORKFLOW_OF_PROJECT_IBFK_2 = ForeignKeys0.WORKFLOW_OF_PROJECT_IBFK_2; public static final ForeignKey WORKFLOW_OF_USER_IBFK_1 = ForeignKeys0.WORKFLOW_OF_USER_IBFK_1; @@ -215,7 +215,7 @@ private static class ForeignKeys0 { public static final ForeignKey USER_FILE_ACCESS_IBFK_2 = Internal.createForeignKey(edu.uci.ics.texera.web.model.jooq.generated.Keys.KEY_FILE_PRIMARY, UserFileAccess.USER_FILE_ACCESS, "user_file_access_ibfk_2", UserFileAccess.USER_FILE_ACCESS.FID); public static final ForeignKey WORKFLOW_EXECUTIONS_IBFK_1 = Internal.createForeignKey(edu.uci.ics.texera.web.model.jooq.generated.Keys.KEY_WORKFLOW_VERSION_PRIMARY, WorkflowExecutions.WORKFLOW_EXECUTIONS, "workflow_executions_ibfk_1", WorkflowExecutions.WORKFLOW_EXECUTIONS.VID); public static final ForeignKey WORKFLOW_EXECUTIONS_IBFK_2 = Internal.createForeignKey(edu.uci.ics.texera.web.model.jooq.generated.Keys.KEY_USER_PRIMARY, WorkflowExecutions.WORKFLOW_EXECUTIONS, "workflow_executions_ibfk_2", WorkflowExecutions.WORKFLOW_EXECUTIONS.UID); - public static final ForeignKey FK_ENVIRONMENT_EID = Internal.createForeignKey(edu.uci.ics.texera.web.model.jooq.generated.Keys.KEY_ENVIRONMENT_PRIMARY, WorkflowExecutions.WORKFLOW_EXECUTIONS, "fk_environment_eid", WorkflowExecutions.WORKFLOW_EXECUTIONS.ENVIRONMENT_EID); + public static final ForeignKey WORKFLOW_EXECUTIONS_IBFK_3 = Internal.createForeignKey(edu.uci.ics.texera.web.model.jooq.generated.Keys.KEY_ENVIRONMENT_PRIMARY, WorkflowExecutions.WORKFLOW_EXECUTIONS, "workflow_executions_ibfk_3", WorkflowExecutions.WORKFLOW_EXECUTIONS.ENVIRONMENT_EID); public static final ForeignKey WORKFLOW_OF_PROJECT_IBFK_1 = Internal.createForeignKey(edu.uci.ics.texera.web.model.jooq.generated.Keys.KEY_WORKFLOW_PRIMARY, WorkflowOfProject.WORKFLOW_OF_PROJECT, "workflow_of_project_ibfk_1", WorkflowOfProject.WORKFLOW_OF_PROJECT.WID); public static final ForeignKey WORKFLOW_OF_PROJECT_IBFK_2 = Internal.createForeignKey(edu.uci.ics.texera.web.model.jooq.generated.Keys.KEY_PROJECT_PRIMARY, WorkflowOfProject.WORKFLOW_OF_PROJECT, "workflow_of_project_ibfk_2", WorkflowOfProject.WORKFLOW_OF_PROJECT.PID); public static final ForeignKey WORKFLOW_OF_USER_IBFK_1 = Internal.createForeignKey(edu.uci.ics.texera.web.model.jooq.generated.Keys.KEY_USER_PRIMARY, WorkflowOfUser.WORKFLOW_OF_USER, "workflow_of_user_ibfk_1", WorkflowOfUser.WORKFLOW_OF_USER.UID); diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/WorkflowExecutions.java b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/WorkflowExecutions.java index 8d2fc17206a..55270abe256 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/WorkflowExecutions.java +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/WorkflowExecutions.java @@ -35,7 +35,7 @@ @SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class WorkflowExecutions extends TableImpl { - private static final long serialVersionUID = 589554867; + private static final long serialVersionUID = -408740655; /** * The reference instance of texera_db.workflow_executions @@ -65,6 +65,11 @@ public Class getRecordType() { */ public final TableField UID = createField(DSL.name("uid"), org.jooq.impl.SQLDataType.INTEGERUNSIGNED.nullable(false), this, ""); + /** + * The column texera_db.workflow_executions.environment_eid. + */ + public final TableField ENVIRONMENT_EID = createField(DSL.name("environment_eid"), org.jooq.impl.SQLDataType.INTEGERUNSIGNED, this, ""); + /** * The column texera_db.workflow_executions.status. */ @@ -105,11 +110,6 @@ public Class getRecordType() { */ public final TableField LOG_LOCATION = createField(DSL.name("log_location"), org.jooq.impl.SQLDataType.CLOB, this, ""); - /** - * The column texera_db.workflow_executions.environment_eid. - */ - public final TableField ENVIRONMENT_EID = createField(DSL.name("environment_eid"), org.jooq.impl.SQLDataType.INTEGERUNSIGNED, this, ""); - /** * Create a texera_db.workflow_executions table reference */ @@ -150,7 +150,7 @@ public Schema getSchema() { @Override public List getIndexes() { - return Arrays.asList(Indexes.WORKFLOW_EXECUTIONS_FK_ENVIRONMENT_EID, Indexes.WORKFLOW_EXECUTIONS_PRIMARY, Indexes.WORKFLOW_EXECUTIONS_UID, Indexes.WORKFLOW_EXECUTIONS_VID); + return Arrays.asList(Indexes.WORKFLOW_EXECUTIONS_ENVIRONMENT_EID, Indexes.WORKFLOW_EXECUTIONS_PRIMARY, Indexes.WORKFLOW_EXECUTIONS_UID, Indexes.WORKFLOW_EXECUTIONS_VID); } @Override @@ -170,7 +170,7 @@ public List> getKeys() { @Override public List> getReferences() { - return Arrays.>asList(Keys.WORKFLOW_EXECUTIONS_IBFK_1, Keys.WORKFLOW_EXECUTIONS_IBFK_2, Keys.FK_ENVIRONMENT_EID); + return Arrays.>asList(Keys.WORKFLOW_EXECUTIONS_IBFK_1, Keys.WORKFLOW_EXECUTIONS_IBFK_2, Keys.WORKFLOW_EXECUTIONS_IBFK_3); } public WorkflowVersion workflowVersion() { @@ -182,7 +182,7 @@ public User user() { } public Environment environment() { - return new Environment(this, Keys.FK_ENVIRONMENT_EID); + return new Environment(this, Keys.WORKFLOW_EXECUTIONS_IBFK_3); } @Override @@ -216,7 +216,7 @@ public WorkflowExecutions rename(Name name) { // ------------------------------------------------------------------------- @Override - public Row12 fieldsRow() { + public Row12 fieldsRow() { return (Row12) super.fieldsRow(); } } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/daos/WorkflowExecutionsDao.java b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/daos/WorkflowExecutionsDao.java index 254b955d552..e6d66f57664 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/daos/WorkflowExecutionsDao.java +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/daos/WorkflowExecutionsDao.java @@ -89,6 +89,20 @@ public Listenvironment_eid BETWEEN lowerInclusive AND upperInclusive + */ + public List fetchRangeOfEnvironmentEid(UInteger lowerInclusive, UInteger upperInclusive) { + return fetchRange(WorkflowExecutions.WORKFLOW_EXECUTIONS.ENVIRONMENT_EID, lowerInclusive, upperInclusive); + } + + /** + * Fetch records that have environment_eid IN (values) + */ + public List fetchByEnvironmentEid(UInteger... values) { + return fetch(WorkflowExecutions.WORKFLOW_EXECUTIONS.ENVIRONMENT_EID, values); + } + /** * Fetch records that have status BETWEEN lowerInclusive AND upperInclusive */ @@ -200,18 +214,4 @@ public List fetchByLogLocation(String... values) { return fetch(WorkflowExecutions.WORKFLOW_EXECUTIONS.LOG_LOCATION, values); } - - /** - * Fetch records that have environment_eid BETWEEN lowerInclusive AND upperInclusive - */ - public List fetchRangeOfEnvironmentEid(UInteger lowerInclusive, UInteger upperInclusive) { - return fetchRange(WorkflowExecutions.WORKFLOW_EXECUTIONS.ENVIRONMENT_EID, lowerInclusive, upperInclusive); - } - - /** - * Fetch records that have environment_eid IN (values) - */ - public List fetchByEnvironmentEid(UInteger... values) { - return fetch(WorkflowExecutions.WORKFLOW_EXECUTIONS.ENVIRONMENT_EID, values); - } } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/interfaces/IWorkflowExecutions.java b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/interfaces/IWorkflowExecutions.java index da8d99c5443..c7bfbdcbf9e 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/interfaces/IWorkflowExecutions.java +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/interfaces/IWorkflowExecutions.java @@ -46,6 +46,16 @@ public interface IWorkflowExecutions extends Serializable { */ public UInteger getUid(); + /** + * Setter for texera_db.workflow_executions.environment_eid. + */ + public void setEnvironmentEid(UInteger value); + + /** + * Getter for texera_db.workflow_executions.environment_eid. + */ + public UInteger getEnvironmentEid(); + /** * Setter for texera_db.workflow_executions.status. */ @@ -126,16 +136,6 @@ public interface IWorkflowExecutions extends Serializable { */ public String getLogLocation(); - /** - * Setter for texera_db.workflow_executions.environment_eid. - */ - public void setEnvironmentEid(UInteger value); - - /** - * Getter for texera_db.workflow_executions.environment_eid. - */ - public UInteger getEnvironmentEid(); - // ------------------------------------------------------------------------- // FROM and INTO // ------------------------------------------------------------------------- diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/pojos/WorkflowExecutions.java b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/pojos/WorkflowExecutions.java index 2a4c1d23eff..e200239388b 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/pojos/WorkflowExecutions.java +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/pojos/WorkflowExecutions.java @@ -17,11 +17,12 @@ @SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class WorkflowExecutions implements IWorkflowExecutions { - private static final long serialVersionUID = 709249401; + private static final long serialVersionUID = 1253486979; private UInteger eid; private UInteger vid; private UInteger uid; + private UInteger environmentEid; private Byte status; private String result; private Timestamp startingTime; @@ -30,7 +31,6 @@ public class WorkflowExecutions implements IWorkflowExecutions { private String name; private String environmentVersion; private String logLocation; - private UInteger environmentEid; public WorkflowExecutions() {} @@ -38,6 +38,7 @@ public WorkflowExecutions(IWorkflowExecutions value) { this.eid = value.getEid(); this.vid = value.getVid(); this.uid = value.getUid(); + this.environmentEid = value.getEnvironmentEid(); this.status = value.getStatus(); this.result = value.getResult(); this.startingTime = value.getStartingTime(); @@ -46,13 +47,13 @@ public WorkflowExecutions(IWorkflowExecutions value) { this.name = value.getName(); this.environmentVersion = value.getEnvironmentVersion(); this.logLocation = value.getLogLocation(); - this.environmentEid = value.getEnvironmentEid(); } public WorkflowExecutions( UInteger eid, UInteger vid, UInteger uid, + UInteger environmentEid, Byte status, String result, Timestamp startingTime, @@ -60,12 +61,12 @@ public WorkflowExecutions( Byte bookmarked, String name, String environmentVersion, - String logLocation, - UInteger environmentEid + String logLocation ) { this.eid = eid; this.vid = vid; this.uid = uid; + this.environmentEid = environmentEid; this.status = status; this.result = result; this.startingTime = startingTime; @@ -74,7 +75,6 @@ public WorkflowExecutions( this.name = name; this.environmentVersion = environmentVersion; this.logLocation = logLocation; - this.environmentEid = environmentEid; } @Override @@ -107,6 +107,16 @@ public void setUid(UInteger uid) { this.uid = uid; } + @Override + public UInteger getEnvironmentEid() { + return this.environmentEid; + } + + @Override + public void setEnvironmentEid(UInteger environmentEid) { + this.environmentEid = environmentEid; + } + @Override public Byte getStatus() { return this.status; @@ -187,16 +197,6 @@ public void setLogLocation(String logLocation) { this.logLocation = logLocation; } - @Override - public UInteger getEnvironmentEid() { - return this.environmentEid; - } - - @Override - public void setEnvironmentEid(UInteger environmentEid) { - this.environmentEid = environmentEid; - } - @Override public String toString() { StringBuilder sb = new StringBuilder("WorkflowExecutions ("); @@ -204,6 +204,7 @@ public String toString() { sb.append(eid); sb.append(", ").append(vid); sb.append(", ").append(uid); + sb.append(", ").append(environmentEid); sb.append(", ").append(status); sb.append(", ").append(result); sb.append(", ").append(startingTime); @@ -212,7 +213,6 @@ public String toString() { sb.append(", ").append(name); sb.append(", ").append(environmentVersion); sb.append(", ").append(logLocation); - sb.append(", ").append(environmentEid); sb.append(")"); return sb.toString(); @@ -227,6 +227,7 @@ public void from(IWorkflowExecutions from) { setEid(from.getEid()); setVid(from.getVid()); setUid(from.getUid()); + setEnvironmentEid(from.getEnvironmentEid()); setStatus(from.getStatus()); setResult(from.getResult()); setStartingTime(from.getStartingTime()); @@ -235,7 +236,6 @@ public void from(IWorkflowExecutions from) { setName(from.getName()); setEnvironmentVersion(from.getEnvironmentVersion()); setLogLocation(from.getLogLocation()); - setEnvironmentEid(from.getEnvironmentEid()); } @Override diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/records/WorkflowExecutionsRecord.java b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/records/WorkflowExecutionsRecord.java index 3a456acb5b6..6a1015e4461 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/records/WorkflowExecutionsRecord.java +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/model/jooq/generated/tables/records/WorkflowExecutionsRecord.java @@ -21,9 +21,9 @@ * This class is generated by jOOQ. */ @SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class WorkflowExecutionsRecord extends UpdatableRecordImpl implements Record12, IWorkflowExecutions { +public class WorkflowExecutionsRecord extends UpdatableRecordImpl implements Record12, IWorkflowExecutions { - private static final long serialVersionUID = -376962722; + private static final long serialVersionUID = 606021422; /** * Setter for texera_db.workflow_executions.eid. @@ -73,12 +73,28 @@ public UInteger getUid() { return (UInteger) get(2); } + /** + * Setter for texera_db.workflow_executions.environment_eid. + */ + @Override + public void setEnvironmentEid(UInteger value) { + set(3, value); + } + + /** + * Getter for texera_db.workflow_executions.environment_eid. + */ + @Override + public UInteger getEnvironmentEid() { + return (UInteger) get(3); + } + /** * Setter for texera_db.workflow_executions.status. */ @Override public void setStatus(Byte value) { - set(3, value); + set(4, value); } /** @@ -86,7 +102,7 @@ public void setStatus(Byte value) { */ @Override public Byte getStatus() { - return (Byte) get(3); + return (Byte) get(4); } /** @@ -94,7 +110,7 @@ public Byte getStatus() { */ @Override public void setResult(String value) { - set(4, value); + set(5, value); } /** @@ -102,7 +118,7 @@ public void setResult(String value) { */ @Override public String getResult() { - return (String) get(4); + return (String) get(5); } /** @@ -110,7 +126,7 @@ public String getResult() { */ @Override public void setStartingTime(Timestamp value) { - set(5, value); + set(6, value); } /** @@ -118,7 +134,7 @@ public void setStartingTime(Timestamp value) { */ @Override public Timestamp getStartingTime() { - return (Timestamp) get(5); + return (Timestamp) get(6); } /** @@ -126,7 +142,7 @@ public Timestamp getStartingTime() { */ @Override public void setLastUpdateTime(Timestamp value) { - set(6, value); + set(7, value); } /** @@ -134,7 +150,7 @@ public void setLastUpdateTime(Timestamp value) { */ @Override public Timestamp getLastUpdateTime() { - return (Timestamp) get(6); + return (Timestamp) get(7); } /** @@ -142,7 +158,7 @@ public Timestamp getLastUpdateTime() { */ @Override public void setBookmarked(Byte value) { - set(7, value); + set(8, value); } /** @@ -150,7 +166,7 @@ public void setBookmarked(Byte value) { */ @Override public Byte getBookmarked() { - return (Byte) get(7); + return (Byte) get(8); } /** @@ -158,7 +174,7 @@ public Byte getBookmarked() { */ @Override public void setName(String value) { - set(8, value); + set(9, value); } /** @@ -166,7 +182,7 @@ public void setName(String value) { */ @Override public String getName() { - return (String) get(8); + return (String) get(9); } /** @@ -174,7 +190,7 @@ public String getName() { */ @Override public void setEnvironmentVersion(String value) { - set(9, value); + set(10, value); } /** @@ -182,7 +198,7 @@ public void setEnvironmentVersion(String value) { */ @Override public String getEnvironmentVersion() { - return (String) get(9); + return (String) get(10); } /** @@ -190,7 +206,7 @@ public String getEnvironmentVersion() { */ @Override public void setLogLocation(String value) { - set(10, value); + set(11, value); } /** @@ -198,23 +214,7 @@ public void setLogLocation(String value) { */ @Override public String getLogLocation() { - return (String) get(10); - } - - /** - * Setter for texera_db.workflow_executions.environment_eid. - */ - @Override - public void setEnvironmentEid(UInteger value) { - set(11, value); - } - - /** - * Getter for texera_db.workflow_executions.environment_eid. - */ - @Override - public UInteger getEnvironmentEid() { - return (UInteger) get(11); + return (String) get(11); } // ------------------------------------------------------------------------- @@ -231,12 +231,12 @@ public Record1 key() { // ------------------------------------------------------------------------- @Override - public Row12 fieldsRow() { + public Row12 fieldsRow() { return (Row12) super.fieldsRow(); } @Override - public Row12 valuesRow() { + public Row12 valuesRow() { return (Row12) super.valuesRow(); } @@ -256,50 +256,50 @@ public Field field3() { } @Override - public Field field4() { + public Field field4() { + return WorkflowExecutions.WORKFLOW_EXECUTIONS.ENVIRONMENT_EID; + } + + @Override + public Field field5() { return WorkflowExecutions.WORKFLOW_EXECUTIONS.STATUS; } @Override - public Field field5() { + public Field field6() { return WorkflowExecutions.WORKFLOW_EXECUTIONS.RESULT; } @Override - public Field field6() { + public Field field7() { return WorkflowExecutions.WORKFLOW_EXECUTIONS.STARTING_TIME; } @Override - public Field field7() { + public Field field8() { return WorkflowExecutions.WORKFLOW_EXECUTIONS.LAST_UPDATE_TIME; } @Override - public Field field8() { + public Field field9() { return WorkflowExecutions.WORKFLOW_EXECUTIONS.BOOKMARKED; } @Override - public Field field9() { + public Field field10() { return WorkflowExecutions.WORKFLOW_EXECUTIONS.NAME; } @Override - public Field field10() { + public Field field11() { return WorkflowExecutions.WORKFLOW_EXECUTIONS.ENVIRONMENT_VERSION; } @Override - public Field field11() { + public Field field12() { return WorkflowExecutions.WORKFLOW_EXECUTIONS.LOG_LOCATION; } - @Override - public Field field12() { - return WorkflowExecutions.WORKFLOW_EXECUTIONS.ENVIRONMENT_EID; - } - @Override public UInteger component1() { return getEid(); @@ -316,50 +316,50 @@ public UInteger component3() { } @Override - public Byte component4() { + public UInteger component4() { + return getEnvironmentEid(); + } + + @Override + public Byte component5() { return getStatus(); } @Override - public String component5() { + public String component6() { return getResult(); } @Override - public Timestamp component6() { + public Timestamp component7() { return getStartingTime(); } @Override - public Timestamp component7() { + public Timestamp component8() { return getLastUpdateTime(); } @Override - public Byte component8() { + public Byte component9() { return getBookmarked(); } @Override - public String component9() { + public String component10() { return getName(); } @Override - public String component10() { + public String component11() { return getEnvironmentVersion(); } @Override - public String component11() { + public String component12() { return getLogLocation(); } - @Override - public UInteger component12() { - return getEnvironmentEid(); - } - @Override public UInteger value1() { return getEid(); @@ -376,50 +376,50 @@ public UInteger value3() { } @Override - public Byte value4() { + public UInteger value4() { + return getEnvironmentEid(); + } + + @Override + public Byte value5() { return getStatus(); } @Override - public String value5() { + public String value6() { return getResult(); } @Override - public Timestamp value6() { + public Timestamp value7() { return getStartingTime(); } @Override - public Timestamp value7() { + public Timestamp value8() { return getLastUpdateTime(); } @Override - public Byte value8() { + public Byte value9() { return getBookmarked(); } @Override - public String value9() { + public String value10() { return getName(); } @Override - public String value10() { + public String value11() { return getEnvironmentVersion(); } @Override - public String value11() { + public String value12() { return getLogLocation(); } - @Override - public UInteger value12() { - return getEnvironmentEid(); - } - @Override public WorkflowExecutionsRecord value1(UInteger value) { setEid(value); @@ -439,61 +439,61 @@ public WorkflowExecutionsRecord value3(UInteger value) { } @Override - public WorkflowExecutionsRecord value4(Byte value) { + public WorkflowExecutionsRecord value4(UInteger value) { + setEnvironmentEid(value); + return this; + } + + @Override + public WorkflowExecutionsRecord value5(Byte value) { setStatus(value); return this; } @Override - public WorkflowExecutionsRecord value5(String value) { + public WorkflowExecutionsRecord value6(String value) { setResult(value); return this; } @Override - public WorkflowExecutionsRecord value6(Timestamp value) { + public WorkflowExecutionsRecord value7(Timestamp value) { setStartingTime(value); return this; } @Override - public WorkflowExecutionsRecord value7(Timestamp value) { + public WorkflowExecutionsRecord value8(Timestamp value) { setLastUpdateTime(value); return this; } @Override - public WorkflowExecutionsRecord value8(Byte value) { + public WorkflowExecutionsRecord value9(Byte value) { setBookmarked(value); return this; } @Override - public WorkflowExecutionsRecord value9(String value) { + public WorkflowExecutionsRecord value10(String value) { setName(value); return this; } @Override - public WorkflowExecutionsRecord value10(String value) { + public WorkflowExecutionsRecord value11(String value) { setEnvironmentVersion(value); return this; } @Override - public WorkflowExecutionsRecord value11(String value) { + public WorkflowExecutionsRecord value12(String value) { setLogLocation(value); return this; } @Override - public WorkflowExecutionsRecord value12(UInteger value) { - setEnvironmentEid(value); - return this; - } - - @Override - public WorkflowExecutionsRecord values(UInteger value1, UInteger value2, UInteger value3, Byte value4, String value5, Timestamp value6, Timestamp value7, Byte value8, String value9, String value10, String value11, UInteger value12) { + public WorkflowExecutionsRecord values(UInteger value1, UInteger value2, UInteger value3, UInteger value4, Byte value5, String value6, Timestamp value7, Timestamp value8, Byte value9, String value10, String value11, String value12) { value1(value1); value2(value2); value3(value3); @@ -518,6 +518,7 @@ public void from(IWorkflowExecutions from) { setEid(from.getEid()); setVid(from.getVid()); setUid(from.getUid()); + setEnvironmentEid(from.getEnvironmentEid()); setStatus(from.getStatus()); setResult(from.getResult()); setStartingTime(from.getStartingTime()); @@ -526,7 +527,6 @@ public void from(IWorkflowExecutions from) { setName(from.getName()); setEnvironmentVersion(from.getEnvironmentVersion()); setLogLocation(from.getLogLocation()); - setEnvironmentEid(from.getEnvironmentEid()); } @Override @@ -549,20 +549,20 @@ public WorkflowExecutionsRecord() { /** * Create a detached, initialised WorkflowExecutionsRecord */ - public WorkflowExecutionsRecord(UInteger eid, UInteger vid, UInteger uid, Byte status, String result, Timestamp startingTime, Timestamp lastUpdateTime, Byte bookmarked, String name, String environmentVersion, String logLocation, UInteger environmentEid) { + public WorkflowExecutionsRecord(UInteger eid, UInteger vid, UInteger uid, UInteger environmentEid, Byte status, String result, Timestamp startingTime, Timestamp lastUpdateTime, Byte bookmarked, String name, String environmentVersion, String logLocation) { super(WorkflowExecutions.WORKFLOW_EXECUTIONS); set(0, eid); set(1, vid); set(2, uid); - set(3, status); - set(4, result); - set(5, startingTime); - set(6, lastUpdateTime); - set(7, bookmarked); - set(8, name); - set(9, environmentVersion); - set(10, logLocation); - set(11, environmentEid); + set(3, environmentEid); + set(4, status); + set(5, result); + set(6, startingTime); + set(7, lastUpdateTime); + set(8, bookmarked); + set(9, name); + set(10, environmentVersion); + set(11, logLocation); } } From deff16b45f85751f1c5075726c6e1e1627bf8a15 Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Sun, 12 May 2024 21:59:40 -0700 Subject: [PATCH 33/44] Update Physical Plan DAG to Use PhysicalLink and Support Parallel Edges for DirectedAcyclicGraph (#2656) This PR makes two updates to the Physical Pan's internal DAG structure (from jgrapht): 1. Set `allowMultipleEdges` when constructing `DirectedAcyclicGraph` class from jgrapht to allow parallel edges between two operators. This is done for both `LogicalPlan` and `PhysicalPlan`. 2. Use `PhysicalLink` instead of `DefaultEdge` so parallel edges between two operators (connecting to different ports) can be distinguished. These updates can fix errors in scheduling DAGs with parallel edges, for both RPGs. --------- Co-authored-by: Yicong Huang <17627829+Yicong-Huang@users.noreply.github.com> --- .../CostBasedRegionPlanGenerator.scala | 4 ++-- .../ExpansionGreedyRegionPlanGenerator.scala | 4 ++-- .../workflow/common/workflow/LogicalPlan.scala | 8 +++++++- .../common/workflow/PhysicalPlan.scala | 18 ++++++++++++------ 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/CostBasedRegionPlanGenerator.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/CostBasedRegionPlanGenerator.scala index e2a982c7f0f..fa127431615 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/CostBasedRegionPlanGenerator.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/CostBasedRegionPlanGenerator.scala @@ -8,7 +8,7 @@ import edu.uci.ics.texera.workflow.common.WorkflowContext import edu.uci.ics.texera.workflow.common.storage.OpResultStorage import edu.uci.ics.texera.workflow.common.workflow.PhysicalPlan import org.jgrapht.alg.connectivity.BiconnectivityInspector -import org.jgrapht.graph.{DefaultEdge, DirectedAcyclicGraph, DirectedPseudograph} +import org.jgrapht.graph.{DirectedAcyclicGraph, DirectedPseudograph} import scala.collection.mutable import scala.jdk.CollectionConverters.{CollectionHasAsScala, IteratorHasAsScala} @@ -56,7 +56,7 @@ class CostBasedRegionPlanGenerator( val matEdgesRemovedDAG = matEdges.foldLeft(physicalPlan) { (currentPlan, linkToRemove) => currentPlan.removeLink(linkToRemove) } - val connectedComponents = new BiconnectivityInspector[PhysicalOpIdentity, DefaultEdge]( + val connectedComponents = new BiconnectivityInspector[PhysicalOpIdentity, PhysicalLink]( matEdgesRemovedDAG.dag ).getConnectedComponents.asScala.toSet connectedComponents.zipWithIndex.map { diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/ExpansionGreedyRegionPlanGenerator.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/ExpansionGreedyRegionPlanGenerator.scala index 013610a37b9..98fb45d70eb 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/ExpansionGreedyRegionPlanGenerator.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/ExpansionGreedyRegionPlanGenerator.scala @@ -8,7 +8,7 @@ import edu.uci.ics.texera.workflow.common.WorkflowContext import edu.uci.ics.texera.workflow.common.storage.OpResultStorage import edu.uci.ics.texera.workflow.common.workflow.PhysicalPlan import org.jgrapht.alg.connectivity.BiconnectivityInspector -import org.jgrapht.graph.{DefaultEdge, DirectedAcyclicGraph} +import org.jgrapht.graph.DirectedAcyclicGraph import scala.annotation.tailrec import scala.collection.mutable @@ -64,7 +64,7 @@ class ExpansionGreedyRegionPlanGenerator( */ private def createRegions(physicalPlan: PhysicalPlan): Set[Region] = { val dependeeLinksRemovedDAG = physicalPlan.getDependeeLinksRemovedDAG - val connectedComponents = new BiconnectivityInspector[PhysicalOpIdentity, DefaultEdge]( + val connectedComponents = new BiconnectivityInspector[PhysicalOpIdentity, PhysicalLink]( dependeeLinksRemovedDAG.dag ).getConnectedComponents.asScala.toSet connectedComponents.zipWithIndex.map { diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/workflow/LogicalPlan.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/workflow/LogicalPlan.scala index fa115bbcfc8..65f9695fb78 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/workflow/LogicalPlan.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/workflow/LogicalPlan.scala @@ -9,6 +9,7 @@ import edu.uci.ics.texera.workflow.common.operators.LogicalOp import edu.uci.ics.texera.workflow.common.operators.source.SourceOperatorDescriptor import edu.uci.ics.texera.workflow.common.tuple.schema.Schema import org.jgrapht.graph.DirectedAcyclicGraph +import org.jgrapht.util.SupplierUtil import java.util import scala.collection.mutable.ArrayBuffer @@ -23,7 +24,12 @@ object LogicalPlan { links: List[LogicalLink] ): DirectedAcyclicGraph[OperatorIdentity, LogicalLink] = { val workflowDag = - new DirectedAcyclicGraph[OperatorIdentity, LogicalLink](classOf[LogicalLink]) + new DirectedAcyclicGraph[OperatorIdentity, LogicalLink]( + null, // vertexSupplier + SupplierUtil.createSupplier(classOf[LogicalLink]), // edgeSupplier + false, // weighted + true // allowMultipleEdges + ) operatorList.foreach(op => workflowDag.addVertex(op.operatorIdentifier)) links.foreach(l => workflowDag.addEdge( diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/workflow/PhysicalPlan.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/workflow/PhysicalPlan.scala index dc463982ec2..df16fe76be1 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/workflow/PhysicalPlan.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/workflow/PhysicalPlan.scala @@ -12,8 +12,9 @@ import edu.uci.ics.amber.engine.common.workflow.PhysicalLink import edu.uci.ics.texera.workflow.common.WorkflowContext import org.jgrapht.alg.connectivity.BiconnectivityInspector import org.jgrapht.alg.shortestpath.AllDirectedPaths -import org.jgrapht.graph.{DefaultEdge, DirectedAcyclicGraph} +import org.jgrapht.graph.DirectedAcyclicGraph import org.jgrapht.traverse.TopologicalOrderIterator +import org.jgrapht.util.SupplierUtil import scala.jdk.CollectionConverters.{IteratorHasAsScala, ListHasAsScala, SetHasAsScala} @@ -70,10 +71,15 @@ case class PhysicalPlan( operators.map(o => (o.id, o)).toMap // the dag will be re-computed again once it reaches the coordinator. - @transient lazy val dag: DirectedAcyclicGraph[PhysicalOpIdentity, DefaultEdge] = { - val jgraphtDag = new DirectedAcyclicGraph[PhysicalOpIdentity, DefaultEdge](classOf[DefaultEdge]) + @transient lazy val dag: DirectedAcyclicGraph[PhysicalOpIdentity, PhysicalLink] = { + val jgraphtDag = new DirectedAcyclicGraph[PhysicalOpIdentity, PhysicalLink]( + null, // vertexSupplier + SupplierUtil.createSupplier(classOf[PhysicalLink]), // edgeSupplier + false, // weighted + true // allowMultipleEdges + ) operatorMap.foreach(op => jgraphtDag.addVertex(op._1)) - links.foreach(l => jgraphtDag.addEdge(l.fromOpId, l.toOpId)) + links.foreach(l => jgraphtDag.addEdge(l.fromOpId, l.toOpId, l)) jgraphtDag } @@ -256,7 +262,7 @@ case class PhysicalPlan( */ def getNonBridgeNonBlockingLinks: Set[PhysicalLink] = { val bridges = - new BiconnectivityInspector[PhysicalOpIdentity, DefaultEdge](this.dag).getBridges.asScala + new BiconnectivityInspector[PhysicalOpIdentity, PhysicalLink](this.dag).getBridges.asScala .map { edge => { val fromOpId = this.dag.getEdgeSource(edge) @@ -279,7 +285,7 @@ case class PhysicalPlan( * @return All the maximal chains of this physical plan, where each chain is represented as a set of links. */ private def getMaxChains: Set[Set[PhysicalLink]] = { - val dijkstra = new AllDirectedPaths[PhysicalOpIdentity, DefaultEdge](this.dag) + val dijkstra = new AllDirectedPaths[PhysicalOpIdentity, PhysicalLink](this.dag) val chains = this.dag .vertexSet() .asScala From 3ba1dfe9e53f217fbe363af0d2562fcf743a6269 Mon Sep 17 00:00:00 2001 From: Shengquan Ni <13672781+shengquan-ni@users.noreply.github.com> Date: Sun, 12 May 2024 23:47:20 -0700 Subject: [PATCH 34/44] Add seed attribute to train/test split opeator (#2660) This PR adds the random `seed` as an attribute of train/test split to provide reproducibility of its output. --- .../workflow/operators/split/SplitOpDesc.scala | 12 ++++++------ .../workflow/operators/split/SplitOpExec.scala | 5 ++--- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/split/SplitOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/split/SplitOpDesc.scala index 8a9323a8ff5..c86af3cc528 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/split/SplitOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/split/SplitOpDesc.scala @@ -1,10 +1,9 @@ package edu.uci.ics.texera.workflow.operators.split -import com.fasterxml.jackson.annotation.{JsonIgnore, JsonProperty, JsonPropertyDescription} +import com.fasterxml.jackson.annotation.{JsonProperty, JsonPropertyDescription} import com.google.common.base.Preconditions import edu.uci.ics.amber.engine.architecture.deploysemantics.{PhysicalOp, SchemaPropagationFunc} import edu.uci.ics.amber.engine.architecture.deploysemantics.layer.OpExecInitInfo -import edu.uci.ics.amber.engine.common.AmberConfig import edu.uci.ics.amber.engine.common.virtualidentity.{ExecutionIdentity, WorkflowIdentity} import edu.uci.ics.amber.engine.common.workflow.{InputPort, OutputPort, PortIdentity} import edu.uci.ics.texera.workflow.common.metadata.{OperatorGroupConstants, OperatorInfo} @@ -19,9 +18,9 @@ class SplitOpDesc extends LogicalOp { @JsonPropertyDescription("percentage of training split data (default 80%)") var k: Int = 80 - // Store random seeds for each executor to satisfy the fault tolerance requirement. - @JsonIgnore - val seeds: Array[Int] = Array.fill(AmberConfig.numWorkerPerOperatorByDefault)(Random.nextInt()) + @JsonProperty(value = "random seed", required = false) + @JsonPropertyDescription("Random seed for split") + var seed: Int = Random.nextInt() override def getPhysicalOp( workflowId: WorkflowIdentity, @@ -32,10 +31,11 @@ class SplitOpDesc extends LogicalOp { workflowId, executionId, operatorIdentifier, - OpExecInitInfo((idx, _) => new SplitOpExec(k, idx, seeds.apply)) + OpExecInitInfo((_, _) => new SplitOpExec(k, seed)) ) .withInputPorts(operatorInfo.inputPorts) .withOutputPorts(operatorInfo.outputPorts) + .withParallelizable(false) .withPropagateSchema( SchemaPropagationFunc(inputSchemas => operatorInfo.outputPorts diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/split/SplitOpExec.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/split/SplitOpExec.scala index 32a8cc143b4..b3ed107e6b2 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/split/SplitOpExec.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/split/SplitOpExec.scala @@ -9,11 +9,10 @@ import scala.util.Random class SplitOpExec( k: Int, - worker: Int, - getSeed: Int => Int + seed: Int ) extends OperatorExecutor { - lazy val random = new Random(getSeed(worker)) + lazy val random = new Random(seed) override def processTupleMultiPort( tuple: Tuple, From 441b196621fb2f5474bf2197e2682330e06e0c0a Mon Sep 17 00:00:00 2001 From: Yicong Huang <17627829+Yicong-Huang@users.noreply.github.com> Date: Tue, 14 May 2024 20:09:28 -1000 Subject: [PATCH 35/44] Fix HideAnnotation (#2663) --- .../operator-property-edit-frame.component.ts | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/core/gui/src/app/workspace/component/property-editor/operator-property-edit-frame/operator-property-edit-frame.component.ts b/core/gui/src/app/workspace/component/property-editor/operator-property-edit-frame/operator-property-edit-frame.component.ts index 30d23d8b3d6..dd3bbaa8f6a 100644 --- a/core/gui/src/app/workspace/component/property-editor/operator-property-edit-frame/operator-property-edit-frame.component.ts +++ b/core/gui/src/app/workspace/component/property-editor/operator-property-edit-frame/operator-property-edit-frame.component.ts @@ -23,6 +23,7 @@ import { AttributeTypeEnumRule, AttributeTypeRuleSet, CustomJSONSchema7, + hideTypes, } from "../../../types/custom-json-schema.interface"; import { isDefined } from "../../../../common/util/predicate"; import { ExecutionState, OperatorState, OperatorStatistics } from "src/app/workspace/types/execute-workflow.interface"; @@ -34,6 +35,7 @@ import { } from "../../../service/dynamic-schema/schema-propagation/schema-propagation.service"; import { createOutputFormChangeEventStream, + createShouldHideFieldFunc, setChildTypeDependency, setHideExpression, } from "src/app/common/formly/formly-utils"; @@ -366,7 +368,7 @@ export class OperatorPropertyEditFrameComponent implements OnInit, OnChanges, On mapSource: CustomJSONSchema7 ): FormlyFieldConfig => { // apply the overridden css style if applicable - mappedField.expressionProperties = { + mappedField.expressions = { "templateOptions.attributes": () => { if ( isDefined(mappedField) && @@ -382,7 +384,8 @@ export class OperatorPropertyEditFrameComponent implements OnInit, OnChanges, On // Disable dummy operator for user if (mappedField.key === "dummyOperator") { - mappedField.expressionProperties = { + mappedField.expressions = { + ...mappedField.expressions, "templateOptions.disabled": () => true, "templateOptions.readonly": () => true, }; @@ -390,7 +393,8 @@ export class OperatorPropertyEditFrameComponent implements OnInit, OnChanges, On // Disable dummy property and value fields for user if (mappedField.key === "dummyProperty" || mappedField.key === "dummyValue") { - mappedField.expressionProperties = { + mappedField.expressions = { + ...mappedField.expressions, "templateOptions.readonly": () => true, "templateOptions.disabled": () => true, }; @@ -398,11 +402,9 @@ export class OperatorPropertyEditFrameComponent implements OnInit, OnChanges, On // Disable dummy property list for all operators, except for dummy operator. if (mappedField.key === "dummyPropertyList") { - mappedField.hide = true; - if (this.currentOperatorSchema?.operatorType === "Dummy") { - mappedField.hide = false; - } - mappedField.expressionProperties = { + mappedField.hide = this.currentOperatorSchema?.operatorType !== "Dummy"; + mappedField.expressions = { + ...mappedField.expressions, "templateOptions.disabled": () => true, "templateOptions.readonly": () => true, "templateOptions.canRemove": () => false, @@ -410,6 +412,24 @@ export class OperatorPropertyEditFrameComponent implements OnInit, OnChanges, On }; } + // conditionally hide the field according to the schema + if ( + isDefined(mapSource.hideExpectedValue) && + isDefined(mapSource.hideTarget) && + isDefined(mapSource.hideType) && + hideTypes.includes(mapSource.hideType) + ) { + mappedField.expressions = { + ...mappedField.expressions, + hide: createShouldHideFieldFunc( + mapSource.hideTarget, + mapSource.hideType, + mapSource.hideExpectedValue, + mapSource.hideOnNull + ), + }; + } + // if the title is fileName, then change it to custom autocomplete input template if (mappedField.key == "fileName") { mappedField.type = "inputautocomplete"; From 39e2d2689dcb654cbb7d262a3a42991e11a5628c Mon Sep 17 00:00:00 2001 From: Yicong Huang <17627829+Yicong-Huang@users.noreply.github.com> Date: Wed, 15 May 2024 17:10:18 -1000 Subject: [PATCH 36/44] Properly clean up workspace before switching workflows (#2569) Before switching the workflows (either to a different workflow or back to dashboard), some established connections and services should be cleaned: 1. stop shared editing; 2. remove workflow metadata; 3. reload back to an empty workflow. --- .../src/app/workspace/component/workspace.component.ts | 10 +++++----- .../workflow-graph/model/workflow-action.service.ts | 6 ++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/core/gui/src/app/workspace/component/workspace.component.ts b/core/gui/src/app/workspace/component/workspace.component.ts index 1c9d38c3773..655aa0e3f51 100644 --- a/core/gui/src/app/workspace/component/workspace.component.ts +++ b/core/gui/src/app/workspace/component/workspace.component.ts @@ -39,7 +39,7 @@ export class WorkspaceComponent implements AfterViewInit, OnInit, OnDestroy { public gitCommitHash: string = Version.raw; public showResultPanel: boolean = false; userSystemEnabled = environment.userSystemEnabled; - @ViewChild("codeEditor", { read: ViewContainerRef }) vc!: ViewContainerRef; + @ViewChild("codeEditor", { read: ViewContainerRef }) codeEditorViewRef!: ViewContainerRef; constructor( private userService: UserService, // list additional services in constructor so they are initialized even if no one use them directly @@ -109,7 +109,7 @@ export class WorkspaceComponent implements AfterViewInit, OnInit, OnDestroy { this.registerLoadOperatorMetadata(); - this.codeEditorService.vc = this.vc; + this.codeEditorService.vc = this.codeEditorViewRef; } @HostListener("window:beforeunload") @@ -118,10 +118,10 @@ export class WorkspaceComponent implements AfterViewInit, OnInit, OnDestroy { const workflow = this.workflowActionService.getWorkflow(); this.workflowPersistService.persistWorkflow(workflow).pipe(untilDestroyed(this)).subscribe(); } - this.workflowActionService.setWorkflowMetadata(undefined); - this.workflowActionService.destroySharedModel(); + + this.codeEditorViewRef.clear(); this.workflowWebsocketService.closeWebsocket(); - this.vc.clear(); + this.workflowActionService.clearWorkflow(); } registerAutoCacheWorkFlow(): void { diff --git a/core/gui/src/app/workspace/service/workflow-graph/model/workflow-action.service.ts b/core/gui/src/app/workspace/service/workflow-graph/model/workflow-action.service.ts index fecfd7237ef..e93ddfe40b5 100644 --- a/core/gui/src/app/workspace/service/workflow-graph/model/workflow-action.service.ts +++ b/core/gui/src/app/workspace/service/workflow-graph/model/workflow-action.service.ts @@ -787,6 +787,12 @@ export class WorkflowActionService { this.setWorkflowMetadata({ ...this.workflowMetadata, name: newName }); } + public clearWorkflow(): void { + this.destroySharedModel(); + this.setWorkflowMetadata(undefined); + this.reloadWorkflow(undefined); + } + /** * Need to quit shared-editing room at first. */ From a256d770909883cb329b3b40713a609abf5a8ab0 Mon Sep 17 00:00:00 2001 From: Jiadong Bai <43344272+bobbai00@users.noreply.github.com> Date: Thu, 16 May 2024 16:33:02 -0700 Subject: [PATCH 37/44] Modify the VirtualDocument API semantic (#2664) This PR modifies the `VirtualDocument`, rename some APIs and fix the `write` related APIs so that all write are semantically doing append. --- .../common/storage/VirtualDocument.scala | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/VirtualDocument.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/VirtualDocument.scala index b42ec3bdd0c..082e8b790b9 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/VirtualDocument.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/VirtualDocument.scala @@ -11,52 +11,66 @@ import java.net.URI */ abstract class VirtualDocument[T >: Null <: AnyRef] { + /** + * get the URI of corresponding document + * @return the URI of the document + */ def getURI: URI /** - * read ith item and return + * find ith item and return * @param i index starting from 0 * @return data item of type T */ - def readItem(i: Int): T = - throw new UnsupportedOperationException("readItem method is not supported") + def getItem(i: Int): T = + throw new NotImplementedError("getItem method is not implemented") /** - * iterate over whole document using iterator + * get a iterator that iterates all indexed items * @return an iterator that return data item of type T */ - def read(): Iterator[T] = throw new UnsupportedOperationException("read method is not supported") + def get(): Iterator[T] = throw new NotImplementedError("get method is not implemented") /** * append one data item to the document * @param item the data item */ - def writeItem(item: T): Unit = - throw new UnsupportedOperationException("writeItem method is not supported") + def setItem(item: T): Unit = + throw new NotImplementedError("setItem method is not implemented") + + /** + * set ith item + * @param item the data item + */ + def setItem(i: Int, item: T): Unit = + throw new NotImplementedError("setItem method is not implemented") /** * append data items from the iterator to the document * @param items iterator for the data item */ def write(items: Iterator[T]): Unit = - throw new UnsupportedOperationException("write method is not supported") + throw new NotImplementedError("write method is not implemented") /** - * overwrite the file content with an opened input stream + * append the file content with an opened input stream * @param inputStream the data source input stream */ - def writeWithStream(inputStream: InputStream): Unit = - throw new UnsupportedOperationException("writeWithStream method is not supported") + def write(inputStream: InputStream): Unit = + throw new NotImplementedError("write method is not implemented") /** - * read the document as an input stream - * + * convert document as an input stream * @return the input stream */ def asInputStream(): InputStream = - throw new UnsupportedOperationException("asInputStream method is not supported") + throw new NotImplementedError("asInputStream method is not implemented") - def asFile(): File = throw new UnsupportedOperationException("asFile method is not supported") + /** + * convert document as a File + * @return the file + */ + def asFile(): File = throw new NotImplementedError("asFile method is not implemented") /** * physically remove current document From 3d69fdcedbb409b47162c4b55406c77e54abe416 Mon Sep 17 00:00:00 2001 From: Shengquan Ni <13672781+shengquan-ni@users.noreply.github.com> Date: Thu, 16 May 2024 22:53:22 -0700 Subject: [PATCH 38/44] Move actor-system related components into AmberRuntime global object (#2667) Before this PR, all variables and functions for the actor system are spread all over the place, this PR moves them into one single object called `AmberRuntime` for better management. --- .../amber/engine/common/AmberRuntime.scala | 90 +++++++++++++++++++ .../ics/amber/engine/common/AmberUtils.scala | 82 ----------------- .../amber/engine/common/CheckpointState.scala | 4 +- .../edu/uci/ics/texera/web/SqlServer.java | 1 - .../uci/ics/texera/web/TexeraRunWorker.scala | 4 +- .../ics/texera/web/TexeraWebApplication.scala | 31 +++---- .../texera/web/WorkflowLifecycleManager.scala | 8 +- .../web/service/ExecutionResultService.scala | 6 +- .../sink/managed/ProgressiveSinkOpDesc.java | 5 +- .../typecasting/TypeCastingOpDesc.java | 5 +- .../source/PythonUDFSourceOpDescV2.java | 5 +- .../util/OperatorDescriptorUtils.scala | 7 ++ .../faulttolerance/CheckpointSpec.scala | 6 +- 13 files changed, 132 insertions(+), 122 deletions(-) create mode 100644 core/amber/src/main/scala/edu/uci/ics/amber/engine/common/AmberRuntime.scala delete mode 100644 core/amber/src/main/scala/edu/uci/ics/amber/engine/common/AmberUtils.scala diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/AmberRuntime.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/AmberRuntime.scala new file mode 100644 index 00000000000..3313b5da458 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/AmberRuntime.scala @@ -0,0 +1,90 @@ +package edu.uci.ics.amber.engine.common + +import akka.actor.{ActorSystem, Address, Cancellable, DeadLetter, Props} +import akka.serialization.{Serialization, SerializationExtension} +import com.typesafe.config.ConfigFactory.defaultApplication +import com.typesafe.config.{Config, ConfigFactory} +import edu.uci.ics.amber.clustering.ClusterListener +import edu.uci.ics.amber.engine.architecture.messaginglayer.DeadLetterMonitorActor + +import java.io.{BufferedReader, InputStreamReader} +import java.net.URL +import scala.concurrent.duration.FiniteDuration +import scala.concurrent.ExecutionContext.Implicits.global + +object AmberRuntime { + + var serde: Serialization = _ + private var _actorSystem: ActorSystem = _ + + def actorSystem: ActorSystem = { + _actorSystem + } + + def scheduleCallThroughActorSystem(delay: FiniteDuration)(call: => Unit): Cancellable = { + _actorSystem.scheduler.scheduleOnce(delay)(call) + } + + def scheduleRecurringCallThroughActorSystem(initialDelay: FiniteDuration, delay: FiniteDuration)( + call: => Unit + ): Cancellable = { + _actorSystem.scheduler.scheduleWithFixedDelay(initialDelay, delay)(() => call) + } + + private def getNodeIpAddress: String = { + try { + val query = new URL("http://checkip.amazonaws.com") + val in = new BufferedReader(new InputStreamReader(query.openStream())) + in.readLine() + } catch { + case e: Exception => throw e + } + } + + def startActorMaster(clusterMode: Boolean): Unit = { + var localIpAddress = "localhost" + if (clusterMode) { + localIpAddress = getNodeIpAddress + } + + val masterConfig = ConfigFactory + .parseString(s""" + akka.remote.artery.canonical.port = 2552 + akka.remote.artery.canonical.hostname = $localIpAddress + akka.cluster.seed-nodes = [ "akka://Amber@$localIpAddress:2552" ] + """) + .withFallback(akkaConfig) + AmberConfig.masterNodeAddr = createMasterAddress(localIpAddress) + createAmberSystem(masterConfig) + } + + def akkaConfig: Config = ConfigFactory.load("cluster").withFallback(defaultApplication()) + + private def createMasterAddress(addr: String): Address = Address("akka", "Amber", addr, 2552) + + def startActorWorker(mainNodeAddress: Option[String]): Unit = { + val addr = mainNodeAddress.getOrElse("localhost") + var localIpAddress = "localhost" + if (mainNodeAddress.isDefined) { + localIpAddress = getNodeIpAddress + } + val workerConfig = ConfigFactory + .parseString(s""" + akka.remote.artery.canonical.hostname = $localIpAddress + akka.remote.artery.canonical.port = 0 + akka.cluster.seed-nodes = [ "akka://Amber@$addr:2552" ] + """) + .withFallback(akkaConfig) + AmberConfig.masterNodeAddr = createMasterAddress(addr) + createAmberSystem(workerConfig) + } + + private def createAmberSystem(actorSystemConf: Config): Unit = { + _actorSystem = ActorSystem("Amber", actorSystemConf) + _actorSystem.actorOf(Props[ClusterListener](), "cluster-info") + val deadLetterMonitorActor = + _actorSystem.actorOf(Props[DeadLetterMonitorActor](), name = "dead-letter-monitor-actor") + _actorSystem.eventStream.subscribe(deadLetterMonitorActor, classOf[DeadLetter]) + serde = SerializationExtension(_actorSystem) + } +} diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/AmberUtils.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/AmberUtils.scala deleted file mode 100644 index 7a8709bfd8d..00000000000 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/AmberUtils.scala +++ /dev/null @@ -1,82 +0,0 @@ -package edu.uci.ics.amber.engine.common - -import akka.actor.{ActorSystem, Address, DeadLetter, Props} -import akka.serialization.{Serialization, SerializationExtension} -import com.typesafe.config.ConfigFactory.defaultApplication -import com.typesafe.config.{Config, ConfigFactory} -import edu.uci.ics.amber.clustering.ClusterListener -import edu.uci.ics.amber.engine.architecture.messaginglayer.DeadLetterMonitorActor -import scala.jdk.CollectionConverters._ -import java.io.{BufferedReader, InputStreamReader} -import java.net.URL - -object AmberUtils { - - var serde: Serialization = _ - - def toImmutableMap[K, V]( - javaMap: java.util.Map[K, V] - ): scala.collection.immutable.Map[K, V] = { - javaMap.asScala.toMap - } - - def startActorMaster(clusterMode: Boolean): ActorSystem = { - var localIpAddress = "localhost" - if (clusterMode) { - try { - val query = new URL("http://checkip.amazonaws.com") - val in = new BufferedReader(new InputStreamReader(query.openStream())) - localIpAddress = in.readLine() - } catch { - case e: Exception => throw e - } - } - - val masterConfig = ConfigFactory - .parseString(s""" - akka.remote.artery.canonical.port = 2552 - akka.remote.artery.canonical.hostname = $localIpAddress - akka.cluster.seed-nodes = [ "akka://Amber@$localIpAddress:2552" ] - """) - .withFallback(akkaConfig) - AmberConfig.masterNodeAddr = createMasterAddress(localIpAddress) - createAmberSystem(masterConfig) - } - - def akkaConfig: Config = ConfigFactory.load("cluster").withFallback(defaultApplication()) - - def createMasterAddress(addr: String): Address = Address("akka", "Amber", addr, 2552) - - def startActorWorker(mainNodeAddress: Option[String]): ActorSystem = { - val addr = mainNodeAddress.getOrElse("localhost") - var localIpAddress = "localhost" - if (mainNodeAddress.isDefined) { - try { - val query = new URL("http://checkip.amazonaws.com") - val in = new BufferedReader(new InputStreamReader(query.openStream())) - localIpAddress = in.readLine() - } catch { - case e: Exception => throw e - } - } - val workerConfig = ConfigFactory - .parseString(s""" - akka.remote.artery.canonical.hostname = $localIpAddress - akka.remote.artery.canonical.port = 0 - akka.cluster.seed-nodes = [ "akka://Amber@$addr:2552" ] - """) - .withFallback(akkaConfig) - AmberConfig.masterNodeAddr = createMasterAddress(addr) - createAmberSystem(workerConfig) - } - - def createAmberSystem(actorSystemConf: Config): ActorSystem = { - val system = ActorSystem("Amber", actorSystemConf) - system.actorOf(Props[ClusterListener](), "cluster-info") - val deadLetterMonitorActor = - system.actorOf(Props[DeadLetterMonitorActor](), name = "dead-letter-monitor-actor") - system.eventStream.subscribe(deadLetterMonitorActor, classOf[DeadLetter]) - serde = SerializationExtension(system) - system - } -} diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/CheckpointState.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/CheckpointState.scala index 41e7f4e80ac..6f0bdb7fb86 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/CheckpointState.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/CheckpointState.scala @@ -7,7 +7,7 @@ class CheckpointState { private val states = new mutable.HashMap[String, SerializedState]() def save[T <: Any](key: String, state: T): Unit = { - states(key) = SerializedState.fromObject(state.asInstanceOf[AnyRef], AmberUtils.serde) + states(key) = SerializedState.fromObject(state.asInstanceOf[AnyRef], AmberRuntime.serde) } def has(key: String): Boolean = { @@ -16,7 +16,7 @@ class CheckpointState { def load[T <: Any](key: String): T = { if (states.contains(key)) { - states(key).toObject(AmberUtils.serde).asInstanceOf[T] + states(key).toObject(AmberRuntime.serde).asInstanceOf[T] } else { throw new RuntimeException(s"no state saved for key = $key") } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/SqlServer.java b/core/amber/src/main/scala/edu/uci/ics/texera/web/SqlServer.java index db34d93a569..d5f7bd1b2ef 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/SqlServer.java +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/SqlServer.java @@ -2,7 +2,6 @@ import com.mysql.cj.jdbc.MysqlDataSource; import edu.uci.ics.amber.engine.common.AmberConfig; -import edu.uci.ics.amber.engine.common.AmberUtils; import org.jooq.DSLContext; import org.jooq.SQLDialect; import org.jooq.impl.DSL; diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/TexeraRunWorker.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/TexeraRunWorker.scala index 8814161e968..854bdcf6040 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/TexeraRunWorker.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/TexeraRunWorker.scala @@ -1,6 +1,6 @@ package edu.uci.ics.texera.web -import edu.uci.ics.amber.engine.common.AmberUtils +import edu.uci.ics.amber.engine.common.AmberRuntime import org.apache.commons.jcs3.access.exception.InvalidArgumentException import scala.annotation.tailrec @@ -25,7 +25,7 @@ object TexeraRunWorker { def main(args: Array[String]): Unit = { val argMap = parseArgs(args) // start actor system worker node - AmberUtils.startActorWorker(argMap.get(Symbol("serverAddr")).asInstanceOf[Option[String]]) + AmberRuntime.startActorWorker(argMap.get(Symbol("serverAddr")).asInstanceOf[Option[String]]) } } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/TexeraWebApplication.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/TexeraWebApplication.scala index dab486f997e..248b32384db 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/TexeraWebApplication.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/TexeraWebApplication.scala @@ -1,19 +1,18 @@ package edu.uci.ics.texera.web -import akka.actor.{ActorSystem, Cancellable} import com.fasterxml.jackson.databind.module.SimpleModule import com.fasterxml.jackson.module.scala.DefaultScalaModule import com.github.dirkraft.dropwizard.fileassets.FileAssetsBundle import com.github.toastshaman.dropwizard.auth.jwt.JwtAuthFilter import com.typesafe.scalalogging.LazyLogging import edu.uci.ics.amber.engine.architecture.controller.ControllerConfig -import edu.uci.ics.amber.engine.common.{AmberConfig, AmberUtils} +import edu.uci.ics.amber.engine.common.AmberRuntime.scheduleRecurringCallThroughActorSystem +import edu.uci.ics.amber.engine.common.{AmberConfig, AmberRuntime} import edu.uci.ics.amber.engine.common.client.AmberClient import edu.uci.ics.amber.engine.common.storage.SequentialRecordStorage import edu.uci.ics.amber.engine.common.virtualidentity.ExecutionIdentity import edu.uci.ics.texera.Utils import edu.uci.ics.texera.Utils.{maptoStatusCode, objectMapper} -import edu.uci.ics.texera.web.TexeraWebApplication.scheduleRecurringCallThroughActorSystem import edu.uci.ics.texera.web.auth.JwtAuth.jwtConsumer import edu.uci.ics.texera.web.auth.{ GuestAuthFilter, @@ -68,8 +67,7 @@ import org.glassfish.jersey.media.multipart.MultiPartFeature import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature import java.time.Duration -import scala.concurrent.ExecutionContext.Implicits.global -import scala.concurrent.duration.{DurationInt, FiniteDuration} +import scala.concurrent.duration.DurationInt import org.apache.commons.jcs3.access.exception.InvalidArgumentException import java.net.URI @@ -93,21 +91,16 @@ object TexeraWebApplication { conf: ControllerConfig, errorHandler: Throwable => Unit ): AmberClient = { - new AmberClient(actorSystem, workflowContext, physicalPlan, opResultStorage, conf, errorHandler) - } - - def scheduleCallThroughActorSystem(delay: FiniteDuration)(call: => Unit): Cancellable = { - actorSystem.scheduler.scheduleOnce(delay)(call) - } - - def scheduleRecurringCallThroughActorSystem(initialDelay: FiniteDuration, delay: FiniteDuration)( - call: => Unit - ): Cancellable = { - actorSystem.scheduler.scheduleWithFixedDelay(initialDelay, delay)(() => call) + new AmberClient( + AmberRuntime.actorSystem, + workflowContext, + physicalPlan, + opResultStorage, + conf, + errorHandler + ) } - private var actorSystem: ActorSystem = _ - type OptionMap = Map[Symbol, Any] def parseArgs(args: Array[String]): OptionMap = { @tailrec @@ -133,7 +126,7 @@ object TexeraWebApplication { discardUncommittedChangesOfAllDatasets() // start actor system master node - actorSystem = AmberUtils.startActorMaster(clusterMode) + AmberRuntime.startActorMaster(clusterMode) // start web server new TexeraWebApplication().run( diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/WorkflowLifecycleManager.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/WorkflowLifecycleManager.scala index d1c63697348..185e20fa6a9 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/WorkflowLifecycleManager.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/WorkflowLifecycleManager.scala @@ -3,6 +3,7 @@ package edu.uci.ics.texera.web import java.time.{LocalDateTime, Duration => JDuration} import akka.actor.Cancellable import com.typesafe.scalalogging.LazyLogging +import edu.uci.ics.amber.engine.common.AmberRuntime import edu.uci.ics.texera.web.storage.ExecutionStateStore import edu.uci.ics.texera.web.workflowruntimestate.{ExecutionMetadataStore, WorkflowAggregatedState} import edu.uci.ics.texera.web.workflowruntimestate.WorkflowAggregatedState.RUNNING @@ -32,10 +33,9 @@ class WorkflowLifecycleManager(id: String, cleanUpTimeout: Int, cleanUpCallback: logger.info( s"[$id] workflow state clean up will start at ${LocalDateTime.now().plus(JDuration.ofSeconds(cleanUpTimeout))}" ) - cleanUpExecution = - TexeraWebApplication.scheduleCallThroughActorSystem(cleanUpTimeout.seconds) { - cleanUp() - } + cleanUpExecution = AmberRuntime.scheduleCallThroughActorSystem(cleanUpTimeout.seconds) { + cleanUp() + } } } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ExecutionResultService.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ExecutionResultService.scala index 8dcfe35399a..0b67141fc20 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ExecutionResultService.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ExecutionResultService.scala @@ -6,7 +6,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode import com.typesafe.scalalogging.LazyLogging import edu.uci.ics.amber.engine.architecture.controller.ControllerEvent.ExecutionStateUpdate import edu.uci.ics.amber.engine.architecture.controller.promisehandlers.FatalErrorHandler.FatalError -import edu.uci.ics.amber.engine.common.AmberConfig +import edu.uci.ics.amber.engine.common.{AmberConfig, AmberRuntime} import edu.uci.ics.amber.engine.common.client.AmberClient import edu.uci.ics.amber.engine.common.virtualidentity.OperatorIdentity import edu.uci.ics.texera.workflow.common.IncrementalOutputMode.{SET_DELTA, SET_SNAPSHOT} @@ -30,7 +30,7 @@ import edu.uci.ics.texera.web.workflowruntimestate.WorkflowAggregatedState.{ KILLED, RUNNING } -import edu.uci.ics.texera.web.{SubscriptionManager, TexeraWebApplication} +import edu.uci.ics.texera.web.SubscriptionManager import edu.uci.ics.texera.workflow.common.IncrementalOutputMode import edu.uci.ics.texera.workflow.common.storage.OpResultStorage import edu.uci.ics.texera.workflow.common.tuple.Tuple @@ -190,7 +190,7 @@ class ExecutionResultService( { if (newState.state == RUNNING) { if (resultUpdateCancellable == null || resultUpdateCancellable.isCancelled) { - resultUpdateCancellable = TexeraWebApplication + resultUpdateCancellable = AmberRuntime .scheduleRecurringCallThroughActorSystem( 2.seconds, resultPullingFrequency.seconds diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sink/managed/ProgressiveSinkOpDesc.java b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sink/managed/ProgressiveSinkOpDesc.java index f2fce071f6a..b73c5b32eb1 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sink/managed/ProgressiveSinkOpDesc.java +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/sink/managed/ProgressiveSinkOpDesc.java @@ -5,7 +5,7 @@ import edu.uci.ics.amber.engine.architecture.deploysemantics.PhysicalOp; import edu.uci.ics.amber.engine.architecture.deploysemantics.SchemaPropagationFunc; import edu.uci.ics.amber.engine.architecture.deploysemantics.layer.OpExecInitInfo; -import edu.uci.ics.amber.engine.common.AmberUtils; +import edu.uci.ics.amber.engine.common.AmberRuntime; import edu.uci.ics.amber.engine.common.virtualidentity.ExecutionIdentity; import edu.uci.ics.amber.engine.common.virtualidentity.OperatorIdentity; import edu.uci.ics.amber.engine.common.virtualidentity.WorkflowIdentity; @@ -21,6 +21,7 @@ import edu.uci.ics.texera.workflow.operators.sink.SinkOpDesc; import edu.uci.ics.texera.workflow.operators.sink.storage.SinkStorageReader; import edu.uci.ics.texera.workflow.operators.sink.storage.SinkStorageWriter; +import edu.uci.ics.texera.workflow.operators.util.OperatorDescriptorUtils; import scala.Option; import scala.Tuple2; import scala.collection.immutable.Map; @@ -97,7 +98,7 @@ public PhysicalOp getPhysicalOp(WorkflowIdentity workflowId, ExecutionIdentity e // set schema for the storage getStorage().setSchema(outputSchema); // Convert the Java Map to a Scala immutable Map - return AmberUtils.toImmutableMap(javaMap); + return OperatorDescriptorUtils.toImmutableMap(javaMap); }) ); } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/typecasting/TypeCastingOpDesc.java b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/typecasting/TypeCastingOpDesc.java index f2a807f6c60..a624419b920 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/typecasting/TypeCastingOpDesc.java +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/typecasting/TypeCastingOpDesc.java @@ -6,7 +6,7 @@ import edu.uci.ics.amber.engine.architecture.deploysemantics.PhysicalOp; import edu.uci.ics.amber.engine.architecture.deploysemantics.SchemaPropagationFunc; import edu.uci.ics.amber.engine.architecture.deploysemantics.layer.OpExecInitInfo; -import edu.uci.ics.amber.engine.common.AmberUtils; +import edu.uci.ics.amber.engine.common.AmberRuntime; import edu.uci.ics.amber.engine.common.virtualidentity.ExecutionIdentity; import edu.uci.ics.amber.engine.common.virtualidentity.WorkflowIdentity; import edu.uci.ics.amber.engine.common.workflow.InputPort; @@ -19,6 +19,7 @@ import edu.uci.ics.texera.workflow.common.tuple.schema.AttributeTypeUtils; import edu.uci.ics.texera.workflow.common.tuple.schema.Schema; +import edu.uci.ics.texera.workflow.operators.util.OperatorDescriptorUtils; import scala.Tuple2; import scala.collection.immutable.Map; @@ -64,7 +65,7 @@ public PhysicalOp getPhysicalOp(WorkflowIdentity workflowId, ExecutionIdentity e javaMap.put(operatorInfo().outputPorts().head().id(), outputSchema); // Convert the Java Map to a Scala immutable Map - return AmberUtils.toImmutableMap(javaMap); + return OperatorDescriptorUtils.toImmutableMap(javaMap); }) ); } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/source/PythonUDFSourceOpDescV2.java b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/source/PythonUDFSourceOpDescV2.java index cb8c155449e..f3196d95973 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/source/PythonUDFSourceOpDescV2.java +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/python/source/PythonUDFSourceOpDescV2.java @@ -7,7 +7,7 @@ import edu.uci.ics.amber.engine.architecture.deploysemantics.PhysicalOp; import edu.uci.ics.amber.engine.architecture.deploysemantics.SchemaPropagationFunc; import edu.uci.ics.amber.engine.architecture.deploysemantics.layer.OpExecInitInfo; -import edu.uci.ics.amber.engine.common.AmberUtils; +import edu.uci.ics.amber.engine.common.AmberRuntime; import edu.uci.ics.amber.engine.common.virtualidentity.ExecutionIdentity; import edu.uci.ics.amber.engine.common.virtualidentity.WorkflowIdentity; import edu.uci.ics.amber.engine.common.workflow.InputPort; @@ -18,6 +18,7 @@ import edu.uci.ics.texera.workflow.common.operators.source.SourceOperatorDescriptor; import edu.uci.ics.texera.workflow.common.tuple.schema.Attribute; import edu.uci.ics.texera.workflow.common.tuple.schema.Schema; +import edu.uci.ics.texera.workflow.operators.util.OperatorDescriptorUtils; import scala.Option; import scala.collection.immutable.Map; @@ -67,7 +68,7 @@ public PhysicalOp getPhysicalOp(WorkflowIdentity workflowId, ExecutionIdentity e javaMap.put(operatorInfo().outputPorts().head().id(), sourceSchema()); // Convert the Java Map to a Scala immutable Map - return AmberUtils.toImmutableMap(javaMap); + return OperatorDescriptorUtils.toImmutableMap(javaMap); }); PhysicalOp physicalOp = PhysicalOp.sourcePhysicalOp( workflowId, diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/util/OperatorDescriptorUtils.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/util/OperatorDescriptorUtils.scala index df8dce4a713..9aa3edc387f 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/util/OperatorDescriptorUtils.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/util/OperatorDescriptorUtils.scala @@ -1,6 +1,7 @@ package edu.uci.ics.texera.workflow.operators.util import scala.collection.mutable +import scala.jdk.CollectionConverters._ object OperatorDescriptorUtils { @@ -23,4 +24,10 @@ object OperatorDescriptorUtils { goalPerWorker.toList } + def toImmutableMap[K, V]( + javaMap: java.util.Map[K, V] + ): scala.collection.immutable.Map[K, V] = { + javaMap.asScala.toMap + } + } diff --git a/core/amber/src/test/scala/edu/uci/ics/amber/engine/faulttolerance/CheckpointSpec.scala b/core/amber/src/test/scala/edu/uci/ics/amber/engine/faulttolerance/CheckpointSpec.scala index cdcab0becde..9836f128b69 100644 --- a/core/amber/src/test/scala/edu/uci/ics/amber/engine/faulttolerance/CheckpointSpec.scala +++ b/core/amber/src/test/scala/edu/uci/ics/amber/engine/faulttolerance/CheckpointSpec.scala @@ -17,7 +17,7 @@ import edu.uci.ics.amber.engine.architecture.deploysemantics.layer.{ import edu.uci.ics.amber.engine.architecture.worker.WorkflowWorker.StateRestoreConfig import edu.uci.ics.amber.engine.architecture.worker.DataProcessor import edu.uci.ics.amber.engine.common.{ - AmberUtils, + AmberRuntime, CheckpointState, CheckpointSupport, SourceOperatorExecutor @@ -72,9 +72,9 @@ class CheckpointSpec extends AnyFlatSpecLike with BeforeAndAfterAll { ) override def beforeAll(): Unit = { - system = ActorSystem("Amber", AmberUtils.akkaConfig) + system = ActorSystem("Amber", AmberRuntime.akkaConfig) system.actorOf(Props[SingleNodeListener](), "cluster-info") - AmberUtils.serde = SerializationExtension(system) + AmberRuntime.serde = SerializationExtension(system) } "Default controller state" should "be serializable" in { From 6bd995e93727a4ac5f3e1331a99e5b4b6a59ebf3 Mon Sep 17 00:00:00 2001 From: Shengquan Ni <13672781+shengquan-ni@users.noreply.github.com> Date: Fri, 17 May 2024 10:17:46 -0700 Subject: [PATCH 39/44] Associate Python syntax error to the specific UDF operator (#2618) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR makes the error reporting by categorizing **Unfixable** errors into 3 types instead of 2. This is a continuing work after #2195. Now we have the following 3 kinds of **Unfixable** errors: 1. runtime fatal error resulting from a control message from the client. 2. runtime fatal error resulting from the engine itself. 3. compilation errors. Before this PR: There is a global Python Syntax Error with no operator to focus on. 截屏2024-04-26 上午11 58 46 The corresponding Python UDF does not show any error. 截屏2024-04-26 上午11 58 55 After this PR: There is a global Python Syntax Error with the corresponding operator to focus on. 截屏2024-04-26 下午12 03 01 The corresponding Python UDF shows the error. 截屏2024-04-26 下午12 03 11 Co-authored-by: Xiaozhen Liu --- .../architecture/controller/Controller.scala | 14 +++++---- ...ControllerAsyncRPCHandlerInitializer.scala | 1 - .../controller/ControllerEvent.scala | 3 ++ .../promisehandlers/FatalErrorHandler.scala | 29 ------------------- .../PortCompletedHandler.scala | 13 ++++++++- .../pythonworker/PythonProxyServer.scala | 5 ++-- .../RegionExecutionCoordinator.scala | 8 ----- .../engine/architecture/worker/DPThread.scala | 17 ++++++----- .../architecture/worker/DataProcessor.scala | 2 +- .../architecture/worker/WorkflowWorker.scala | 6 ---- .../ControlCommandConvertUtils.scala | 13 +++++---- .../WorkflowRuntimeException.scala | 20 +++++++++---- .../ambermessage/InvocationConvertUtils.scala | 4 ++- .../engine/common/rpc/AsyncRPCClient.scala | 4 --- .../engine/common/rpc/AsyncRPCServer.scala | 1 - .../common/statetransition/StateManager.scala | 23 +++++++++++---- .../statetransition/WorkerStateManager.scala | 4 ++- .../edu/uci/ics/amber/error/ErrorUtils.scala | 13 +++++++++ .../web/service/ExecutionResultService.scala | 6 ++-- .../web/service/ExecutionStatsService.scala | 13 +++------ .../texera/web/service/WorkflowService.scala | 13 +++++++-- .../amber/engine/e2e/DataProcessingSpec.scala | 6 ++-- 22 files changed, 117 insertions(+), 101 deletions(-) delete mode 100644 core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/promisehandlers/FatalErrorHandler.scala diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/Controller.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/Controller.scala index 8755532c845..1370c8a32a4 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/Controller.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/Controller.scala @@ -4,16 +4,16 @@ import akka.actor.SupervisorStrategy.Stop import akka.actor.{AllForOneStrategy, Props, SupervisorStrategy} import edu.uci.ics.amber.engine.architecture.common.WorkflowActor import edu.uci.ics.amber.engine.architecture.common.WorkflowActor.NetworkAck -import edu.uci.ics.amber.engine.architecture.controller.Controller.{ - ReplayStatusUpdate, - WorkflowRecoveryStatus -} +import edu.uci.ics.amber.engine.architecture.controller.ControllerEvent.FatalError import edu.uci.ics.amber.engine.architecture.controller.execution.OperatorExecution -import edu.uci.ics.amber.engine.architecture.controller.promisehandlers.FatalErrorHandler.FatalError import edu.uci.ics.amber.engine.architecture.worker.WorkflowWorker.{ FaultToleranceConfig, StateRestoreConfig } +import edu.uci.ics.amber.engine.architecture.controller.Controller.{ + ReplayStatusUpdate, + WorkflowRecoveryStatus +} import edu.uci.ics.amber.engine.common.ambermessage.WorkflowMessage.getInMemSize import edu.uci.ics.amber.engine.common.ambermessage.{ ChannelMarkerPayload, @@ -182,7 +182,9 @@ class Controller( case e: Throwable => val failedWorker = actorRefMappingService.findActorVirtualIdentity(sender()) logger.error(s"Encountered fatal error from $failedWorker, amber is shutting done.", e) - cp.asyncRPCServer.execute(FatalError(e, failedWorker), actorId) + cp.asyncRPCClient.sendToClient( + FatalError(e, failedWorker) + ) // only place to actively report fatal error Stop } diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/ControllerAsyncRPCHandlerInitializer.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/ControllerAsyncRPCHandlerInitializer.scala index e91e7cba1c3..6ecd8d7181e 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/ControllerAsyncRPCHandlerInitializer.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/ControllerAsyncRPCHandlerInitializer.scala @@ -17,7 +17,6 @@ class ControllerAsyncRPCHandlerInitializer( with ResumeHandler with StartWorkflowHandler with PortCompletedHandler - with FatalErrorHandler with ConsoleMessageHandler with RetryWorkflowHandler with ModifyLogicHandler diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/ControllerEvent.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/ControllerEvent.scala index 39f56ab1ba6..d8a5809c6df 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/ControllerEvent.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/ControllerEvent.scala @@ -20,4 +20,7 @@ object ControllerEvent { case class WorkerAssignmentUpdate(workerMapping: Map[String, Seq[String]]) extends ControlCommand[Unit] + + final case class FatalError(e: Throwable, fromActor: Option[ActorVirtualIdentity] = None) + extends ControlCommand[Unit] } diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/promisehandlers/FatalErrorHandler.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/promisehandlers/FatalErrorHandler.scala deleted file mode 100644 index dd8d59a1a36..00000000000 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/promisehandlers/FatalErrorHandler.scala +++ /dev/null @@ -1,29 +0,0 @@ -package edu.uci.ics.amber.engine.architecture.controller.promisehandlers - -import edu.uci.ics.amber.engine.architecture.controller.ControllerAsyncRPCHandlerInitializer -import edu.uci.ics.amber.engine.architecture.controller.promisehandlers.FatalErrorHandler.FatalError -import edu.uci.ics.amber.engine.common.rpc.AsyncRPCServer.ControlCommand -import edu.uci.ics.amber.engine.common.virtualidentity.ActorVirtualIdentity - -object FatalErrorHandler { - final case class FatalError(e: Throwable, fromActor: Option[ActorVirtualIdentity] = None) - extends ControlCommand[Unit] -} - -/** Indicate a fatal error has occurred in the workflow - * - * possible sender: controller, worker - */ -trait FatalErrorHandler { - this: ControllerAsyncRPCHandlerInitializer => - - registerHandler[FatalError, Unit] { (msg, sender) => - { - // log the error to console - logger.error("FatalError received", msg) - - //report to client - sendToClient(msg) - } - } -} diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/promisehandlers/PortCompletedHandler.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/promisehandlers/PortCompletedHandler.scala index 8012556cf76..c525158b9f7 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/promisehandlers/PortCompletedHandler.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/promisehandlers/PortCompletedHandler.scala @@ -2,10 +2,12 @@ package edu.uci.ics.amber.engine.architecture.controller.promisehandlers import com.twitter.util.Future import edu.uci.ics.amber.engine.architecture.controller.ControllerAsyncRPCHandlerInitializer +import edu.uci.ics.amber.engine.architecture.controller.ControllerEvent.FatalError import edu.uci.ics.amber.engine.architecture.controller.promisehandlers.PortCompletedHandler.PortCompleted import edu.uci.ics.amber.engine.architecture.controller.promisehandlers.QueryWorkerStatisticsHandler.ControllerInitiateQueryStatistics import edu.uci.ics.amber.engine.architecture.scheduling.GlobalPortIdentity import edu.uci.ics.amber.engine.common.VirtualIdentityUtils +import edu.uci.ics.amber.engine.common.amberexception.WorkflowRuntimeException import edu.uci.ics.amber.engine.common.rpc.AsyncRPCServer.ControlCommand import edu.uci.ics.amber.engine.common.virtualidentity.util.CONTROLLER import edu.uci.ics.amber.engine.common.workflow.PortIdentity @@ -56,7 +58,16 @@ trait PortCompletedHandler { else operatorExecution.isOutputPortCompleted(msg.portId) if (isPortCompleted) { - cp.workflowExecutionCoordinator.executeNextRegions(cp.actorService) + cp.workflowExecutionCoordinator + .executeNextRegions(cp.actorService) + // Since this message is sent from a worker, any exception from the above code will be returned to that worker. + // Additionally, a fatal error is sent to the client, indicating that the region cannot be scheduled. + .onFailure { + case err: WorkflowRuntimeException => + sendToClient(FatalError(err, err.relatedWorkerId)) + case other => + sendToClient(FatalError(other, None)) + } } else { // if the port is not completed yet, do nothing Future(()) diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/pythonworker/PythonProxyServer.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/pythonworker/PythonProxyServer.scala index 6e6137d23fb..f63c3537c51 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/pythonworker/PythonProxyServer.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/pythonworker/PythonProxyServer.scala @@ -24,6 +24,7 @@ import com.twitter.util.Promise import java.nio.charset.Charset private class AmberProducer( + actorId: ActorVirtualIdentity, outputPort: NetworkOutputGateway, promise: Promise[Int] ) extends NoOpFlightProducer { @@ -42,7 +43,7 @@ private class AmberProducer( case returnInvocation: ReturnInvocationV2 => outputPort.sendTo( to = pythonControlMessage.tag, - payload = returnInvocationToV1(returnInvocation) + payload = returnInvocationToV1(actorId, returnInvocation) ) case controlInvocation: ControlInvocationV2 => @@ -133,7 +134,7 @@ class PythonProxyServer( val allocator: BufferAllocator = new RootAllocator().newChildAllocator("flight-server", 0, Long.MaxValue); - val producer: FlightProducer = new AmberProducer(outputPort, promise) + val producer: FlightProducer = new AmberProducer(actorId, outputPort, promise) val location: Location = (() => { Location.forGrpcInsecure("localhost", portNumber.intValue()) diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/RegionExecutionCoordinator.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/RegionExecutionCoordinator.scala index 8c245834ebf..231eff2ee1d 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/RegionExecutionCoordinator.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/scheduling/RegionExecutionCoordinator.scala @@ -11,7 +11,6 @@ import edu.uci.ics.amber.engine.architecture.controller.execution.{ OperatorExecution, WorkflowExecution } -import edu.uci.ics.amber.engine.architecture.controller.promisehandlers.FatalErrorHandler.FatalError import edu.uci.ics.amber.engine.architecture.controller.promisehandlers.LinkWorkersHandler.LinkWorkers import edu.uci.ics.amber.engine.architecture.deploysemantics.PhysicalOp import edu.uci.ics.amber.engine.architecture.worker.promisehandlers.InitializeExecutorHandler.InitializeExecutor @@ -97,13 +96,6 @@ class RegionExecutionCoordinator( .flatMap(_ => connectChannels(region.getLinks)) .flatMap(_ => openOperators(operatorsToInit)) .flatMap(_ => sendStarts(region)) - .rescue { - case err: Throwable => - // this call may come from client or worker(by execution completed) - // thus we need to force it to send error to client. - asyncRPCClient.sendToClient(FatalError(err, None)) - Future.Unit - } .unit } private def buildOperator( diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/DPThread.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/DPThread.scala index ca2f451dad1..fb7838f5530 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/DPThread.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/DPThread.scala @@ -1,12 +1,13 @@ package edu.uci.ics.amber.engine.architecture.worker -import edu.uci.ics.amber.engine.architecture.controller.promisehandlers.FatalErrorHandler.FatalError -import edu.uci.ics.amber.engine.architecture.worker.WorkflowWorker.DPInputQueueElement +import edu.uci.ics.amber.engine.architecture.worker.WorkflowWorker.{ + DPInputQueueElement, + MainThreadDelegateMessage +} import edu.uci.ics.amber.engine.architecture.logreplay.ReplayLogManager import edu.uci.ics.amber.engine.architecture.worker.statistics.WorkerState.{READY, UNINITIALIZED} import edu.uci.ics.amber.engine.common.AmberLogging import edu.uci.ics.amber.engine.common.actormessage.{ActorCommand, Backpressure} -import edu.uci.ics.amber.engine.common.amberexception.WorkflowRuntimeException import edu.uci.ics.amber.engine.common.ambermessage.{ ChannelMarkerPayload, ControlPayload, @@ -14,7 +15,7 @@ import edu.uci.ics.amber.engine.common.ambermessage.{ WorkflowFIFOMessage } import edu.uci.ics.amber.engine.common.virtualidentity.{ActorVirtualIdentity, ChannelIdentity} -import edu.uci.ics.amber.engine.common.virtualidentity.util.{CONTROLLER, SELF} +import edu.uci.ics.amber.engine.common.virtualidentity.util.SELF import edu.uci.ics.amber.error.ErrorUtils.safely import java.util.concurrent.{ @@ -85,10 +86,10 @@ class DPThread( logger.info("DP Thread exits") case err: Throwable => logger.error("DP Thread exists unexpectedly", err) - dp.asyncRPCClient.send( - FatalError(new WorkflowRuntimeException("DP Thread exists unexpectedly", err)), - CONTROLLER - ) + dp.outputHandler(Left(MainThreadDelegateMessage((worker) => { + // notify main thread + throw err + }))) } dp.statisticsManager.updateTotalExecutionTime(System.nanoTime()) endFuture.complete(()) diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/DataProcessor.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/DataProcessor.scala index dd4f4f60e1d..be6115e7718 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/DataProcessor.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/DataProcessor.scala @@ -60,7 +60,7 @@ class DataProcessor( // inner dependencies private val initializer = new DataProcessorRPCHandlerInitializer(this) val pauseManager: PauseManager = wire[PauseManager] - val stateManager: WorkerStateManager = new WorkerStateManager() + val stateManager: WorkerStateManager = new WorkerStateManager(actorId) val inputManager: InputManager = new InputManager(actorId) val outputManager: OutputManager = new OutputManager(actorId, outputGateway) val channelMarkerManager: ChannelMarkerManager = new ChannelMarkerManager(actorId, inputGateway) diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/WorkflowWorker.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/WorkflowWorker.scala index 6d9fb570148..c9575d5da8a 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/WorkflowWorker.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/WorkflowWorker.scala @@ -4,7 +4,6 @@ import akka.actor.Props import edu.uci.ics.amber.engine.architecture.common.WorkflowActor import edu.uci.ics.amber.engine.architecture.common.WorkflowActor.NetworkAck import edu.uci.ics.amber.engine.architecture.controller.Controller.ReplayStatusUpdate -import edu.uci.ics.amber.engine.architecture.controller.promisehandlers.FatalErrorHandler.FatalError import edu.uci.ics.amber.engine.architecture.messaginglayer.WorkerTimerService import edu.uci.ics.amber.engine.architecture.scheduling.config.WorkerConfig import edu.uci.ics.amber.engine.architecture.worker.WorkflowWorker._ @@ -13,7 +12,6 @@ import edu.uci.ics.amber.engine.common.actormessage.{ActorCommand, Backpressure} import edu.uci.ics.amber.engine.common.ambermessage.WorkflowFIFOMessage import edu.uci.ics.amber.engine.common.ambermessage.WorkflowMessage.getInMemSize import edu.uci.ics.amber.engine.common.rpc.AsyncRPCClient.ControlInvocation -import edu.uci.ics.amber.engine.common.virtualidentity.util.CONTROLLER import edu.uci.ics.amber.engine.common.virtualidentity.{ChannelIdentity, ChannelMarkerIdentity} import java.net.URI @@ -102,10 +100,6 @@ class WorkflowWorker( super.preRestart(reason, message) logger.error(s"Encountered fatal error, worker is shutting done.", reason) postStop() - dp.asyncRPCClient.send( - FatalError(reason, Some(workerConfig.workerId)), - CONTROLLER - ) } override def receive: Receive = { diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlCommandConvertUtils.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlCommandConvertUtils.scala index 1f4dda35884..41c8fee60c2 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlCommandConvertUtils.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlCommandConvertUtils.scala @@ -11,10 +11,7 @@ import edu.uci.ics.amber.engine.architecture.pythonworker.promisehandlers.Replay import edu.uci.ics.amber.engine.architecture.pythonworker.promisehandlers.WorkerDebugCommandHandler.WorkerDebugCommand import edu.uci.ics.amber.engine.architecture.sendsemantics.partitionings.Partitioning import edu.uci.ics.amber.engine.architecture.worker.controlreturns.ControlReturnV2.Value.Empty -import edu.uci.ics.amber.engine.architecture.worker.controlreturns.{ - ControlException, - ControlReturnV2 -} +import edu.uci.ics.amber.engine.architecture.worker.controlreturns.ControlReturnV2 import edu.uci.ics.amber.engine.architecture.worker.promisehandlers.AddInputChannelHandler.AddInputChannel import edu.uci.ics.amber.engine.architecture.worker.promisehandlers.AddPartitioningHandler.AddPartitioning import edu.uci.ics.amber.engine.architecture.worker.promisehandlers.AssignPortHandler.AssignPort @@ -25,7 +22,9 @@ import edu.uci.ics.amber.engine.architecture.worker.promisehandlers.QueryStatist import edu.uci.ics.amber.engine.architecture.worker.promisehandlers.ResumeHandler.ResumeWorker import edu.uci.ics.amber.engine.architecture.worker.promisehandlers.StartHandler.StartWorker import edu.uci.ics.amber.engine.architecture.worker.statistics.WorkerMetrics +import edu.uci.ics.amber.engine.common.amberexception.WorkflowRuntimeException import edu.uci.ics.amber.engine.common.rpc.AsyncRPCServer.ControlCommand +import edu.uci.ics.amber.engine.common.virtualidentity.ActorVirtualIdentity import edu.uci.ics.amber.engine.common.workflow.PhysicalLink object ControlCommandConvertUtils { @@ -89,13 +88,15 @@ object ControlCommandConvertUtils { } def controlReturnToV1( + actorId: ActorVirtualIdentity, controlReturnV2: ControlReturnV2 ): Any = { controlReturnV2.value match { case Empty => () case _: ControlReturnV2.Value.CurrentInputTupleInfo => null - case exp: ControlReturnV2.Value.ControlException => ControlException(exp.value.msg) - case _ => controlReturnV2.value.value + case exp: ControlReturnV2.Value.ControlException => + new WorkflowRuntimeException(exp.value.msg, Some(actorId)) + case _ => controlReturnV2.value.value } } diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/amberexception/WorkflowRuntimeException.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/amberexception/WorkflowRuntimeException.scala index 0320a381991..d75a9e5eb16 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/amberexception/WorkflowRuntimeException.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/amberexception/WorkflowRuntimeException.scala @@ -1,20 +1,30 @@ package edu.uci.ics.amber.engine.common.amberexception -class WorkflowRuntimeException(message: String) - extends RuntimeException(message) +import edu.uci.ics.amber.engine.common.virtualidentity.ActorVirtualIdentity + +class WorkflowRuntimeException( + val message: String, + val relatedWorkerId: Option[ActorVirtualIdentity] = None +) extends RuntimeException(message) with Serializable { - def this(message: String, cause: Throwable) = { - this(message) + def this(message: String, cause: Throwable, relatedWorkerId: Option[ActorVirtualIdentity]) = { + this(message, relatedWorkerId) initCause(cause) } + def this(cause: Throwable, relatedWorkerId: Option[ActorVirtualIdentity]) = { + this(Option(cause).map(_.toString).orNull, cause, relatedWorkerId) + } + def this(cause: Throwable) = { - this(Option(cause).map(_.toString).orNull, cause) + this(Option(cause).map(_.toString).orNull, cause, None) } def this() = { this(null: String) } + override def toString: String = message + } diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/ambermessage/InvocationConvertUtils.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/ambermessage/InvocationConvertUtils.scala index 557e3824e39..adb2fb7093f 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/ambermessage/InvocationConvertUtils.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/ambermessage/InvocationConvertUtils.scala @@ -10,6 +10,7 @@ import edu.uci.ics.amber.engine.architecture.worker.controlcommands.{ } import edu.uci.ics.amber.engine.common.rpc.AsyncRPCClient.{ControlInvocation, ReturnInvocation} import edu.uci.ics.amber.engine.common.rpc.AsyncRPCServer.ControlCommand +import edu.uci.ics.amber.engine.common.virtualidentity.ActorVirtualIdentity object InvocationConvertUtils { @@ -31,11 +32,12 @@ object InvocationConvertUtils { } def returnInvocationToV1( + actorId: ActorVirtualIdentity, returnInvocation: ReturnInvocationV2 ): ReturnInvocation = { ReturnInvocation( returnInvocation.originalCommandId, - controlReturnToV1(returnInvocation.controlReturn) + controlReturnToV1(actorId, returnInvocation.controlReturn) ) } diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/rpc/AsyncRPCClient.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/rpc/AsyncRPCClient.scala index 73a248e6889..09fe5173a36 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/rpc/AsyncRPCClient.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/rpc/AsyncRPCClient.scala @@ -2,10 +2,8 @@ package edu.uci.ics.amber.engine.common.rpc import com.twitter.util.{Future, Promise} import edu.uci.ics.amber.engine.architecture.messaginglayer.NetworkOutputGateway -import edu.uci.ics.amber.engine.architecture.worker.controlreturns.ControlException import edu.uci.ics.amber.engine.architecture.worker.statistics.WorkerStatistics import edu.uci.ics.amber.engine.common.AmberLogging -import edu.uci.ics.amber.engine.common.amberexception.WorkflowRuntimeException import edu.uci.ics.amber.engine.common.ambermessage.{ ChannelMarkerPayload, ChannelMarkerType, @@ -110,8 +108,6 @@ class AsyncRPCClient( ret.controlReturn match { case error: Throwable => p.setException(error) - case ControlException(msg) => - p.setException(new WorkflowRuntimeException(msg)) case _ => p.setValue(ret.controlReturn.asInstanceOf[p.returnType]) } diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/rpc/AsyncRPCServer.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/rpc/AsyncRPCServer.scala index 75a7617d422..4ef7383b0e4 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/rpc/AsyncRPCServer.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/rpc/AsyncRPCServer.scala @@ -70,7 +70,6 @@ class AsyncRPCServer( // if error occurs, return it to the sender. logger.error("Exception occurred", err) returnResult(senderID, control.commandID, err) - // if throw this exception right now, the above message might not be able // to be sent out. We do not throw for now. // throw err diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/statetransition/StateManager.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/statetransition/StateManager.scala index 7be6869a4e1..39291b5c9d3 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/statetransition/StateManager.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/statetransition/StateManager.scala @@ -5,28 +5,39 @@ import edu.uci.ics.amber.engine.common.statetransition.StateManager.{ InvalidStateException, InvalidTransitionException } +import edu.uci.ics.amber.engine.common.virtualidentity.ActorVirtualIdentity object StateManager { - case class InvalidStateException(message: String) extends WorkflowRuntimeException(message) + case class InvalidStateException(msg: String, actorId: ActorVirtualIdentity) + extends WorkflowRuntimeException(msg, Some(actorId)) - case class InvalidTransitionException(message: String) extends WorkflowRuntimeException(message) + case class InvalidTransitionException(msg: String, actorId: ActorVirtualIdentity) + extends WorkflowRuntimeException(msg, Some(actorId)) } -class StateManager[T](stateTransitionGraph: Map[T, Set[T]], initialState: T) extends Serializable { +class StateManager[T]( + actorId: ActorVirtualIdentity, + stateTransitionGraph: Map[T, Set[T]], + initialState: T +) extends Serializable { private var currentState: T = initialState def assertState(state: T): Unit = { if (currentState != state) { - throw InvalidStateException(s"except state = $state but current state = $currentState") + throw InvalidStateException( + s"except state = $state but current state = $currentState", + actorId + ) } } def assertState(states: T*): Unit = { if (!states.contains(currentState)) { throw InvalidStateException( - s"except state in [${states.mkString(",")}] but current state = $currentState" + s"except state in [${states.mkString(",")}] but current state = $currentState", + actorId ) } } @@ -51,7 +62,7 @@ class StateManager[T](stateTransitionGraph: Map[T, Set[T]], initialState: T) ext } if (!stateTransitionGraph.getOrElse(currentState, Set()).contains(state)) { - throw InvalidTransitionException(s"cannot transit from $currentState to $state") + throw InvalidTransitionException(s"cannot transit from $currentState to $state", actorId) } currentState = state } diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/statetransition/WorkerStateManager.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/statetransition/WorkerStateManager.scala index 4b13ed11bd7..a931e77f087 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/statetransition/WorkerStateManager.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/statetransition/WorkerStateManager.scala @@ -2,14 +2,16 @@ package edu.uci.ics.amber.engine.common.statetransition import edu.uci.ics.amber.engine.architecture.worker.statistics.WorkerState import edu.uci.ics.amber.engine.architecture.worker.statistics.WorkerState._ +import edu.uci.ics.amber.engine.common.virtualidentity.ActorVirtualIdentity // The following pattern is a good practice of enum in scala // We've always used this pattern in the codebase // https://nrinaudo.github.io/scala-best-practices/definitions/adt.html // https://nrinaudo.github.io/scala-best-practices/adts/product_with_serializable.html -class WorkerStateManager(initialState: WorkerState = UNINITIALIZED) +class WorkerStateManager(actorId: ActorVirtualIdentity, initialState: WorkerState = UNINITIALIZED) extends StateManager[WorkerState]( + actorId, Map( UNINITIALIZED -> Set(READY), READY -> Set(PAUSED, RUNNING, COMPLETED), diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/error/ErrorUtils.scala b/core/amber/src/main/scala/edu/uci/ics/amber/error/ErrorUtils.scala index bfb4756e53a..d61055a3ff7 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/error/ErrorUtils.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/error/ErrorUtils.scala @@ -3,6 +3,7 @@ package edu.uci.ics.amber.error import com.google.protobuf.timestamp.Timestamp import edu.uci.ics.amber.engine.architecture.worker.controlcommands.ConsoleMessage import edu.uci.ics.amber.engine.architecture.worker.controlcommands.ConsoleMessageType.ERROR +import edu.uci.ics.amber.engine.common.VirtualIdentityUtils import edu.uci.ics.amber.engine.common.virtualidentity.ActorVirtualIdentity import java.time.Instant @@ -49,4 +50,16 @@ object ErrorUtils { } } + def getOperatorFromActorIdOpt( + actorIdOpt: Option[ActorVirtualIdentity] + ): (String, String) = { + var operatorId = "unknown operator" + var workerId = "" + if (actorIdOpt.isDefined) { + operatorId = VirtualIdentityUtils.getPhysicalOpId(actorIdOpt.get).logicalOpId.id + workerId = actorIdOpt.get.name + } + (operatorId, workerId) + } + } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ExecutionResultService.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ExecutionResultService.scala index 0b67141fc20..2050e6f5a74 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ExecutionResultService.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ExecutionResultService.scala @@ -4,8 +4,10 @@ import akka.actor.Cancellable import com.fasterxml.jackson.annotation.{JsonTypeInfo, JsonTypeName} import com.fasterxml.jackson.databind.node.ObjectNode import com.typesafe.scalalogging.LazyLogging -import edu.uci.ics.amber.engine.architecture.controller.ControllerEvent.ExecutionStateUpdate -import edu.uci.ics.amber.engine.architecture.controller.promisehandlers.FatalErrorHandler.FatalError +import edu.uci.ics.amber.engine.architecture.controller.ControllerEvent.{ + ExecutionStateUpdate, + FatalError +} import edu.uci.ics.amber.engine.common.{AmberConfig, AmberRuntime} import edu.uci.ics.amber.engine.common.client.AmberClient import edu.uci.ics.amber.engine.common.virtualidentity.OperatorIdentity diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ExecutionStatsService.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ExecutionStatsService.scala index b6da0f7da51..de06103c7bf 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ExecutionStatsService.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/service/ExecutionStatsService.scala @@ -5,13 +5,13 @@ import com.typesafe.scalalogging.LazyLogging import edu.uci.ics.amber.engine.architecture.controller.Controller.WorkflowRecoveryStatus import edu.uci.ics.amber.engine.architecture.controller.ControllerEvent.{ ExecutionStatsUpdate, + FatalError, WorkerAssignmentUpdate } -import edu.uci.ics.amber.engine.architecture.controller.promisehandlers.FatalErrorHandler.FatalError import edu.uci.ics.amber.engine.architecture.worker.statistics.PortTupleCountMapping -import edu.uci.ics.amber.engine.common.{AmberConfig, VirtualIdentityUtils} +import edu.uci.ics.amber.engine.common.AmberConfig import edu.uci.ics.amber.engine.common.client.AmberClient -import edu.uci.ics.amber.error.ErrorUtils.getStackTraceWithAllCauses +import edu.uci.ics.amber.error.ErrorUtils.{getOperatorFromActorIdOpt, getStackTraceWithAllCauses} import edu.uci.ics.texera.Utils import edu.uci.ics.texera.Utils.maptoStatusCode import edu.uci.ics.texera.web.model.jooq.generated.tables.pojos.WorkflowRuntimeStatistics @@ -268,12 +268,7 @@ class ExecutionStatsService( client .registerCallback[FatalError]((evt: FatalError) => { client.shutdown() - var operatorId = "unknown operator" - var workerId = "" - if (evt.fromActor.isDefined) { - operatorId = VirtualIdentityUtils.getPhysicalOpId(evt.fromActor.get).logicalOpId.id - workerId = evt.fromActor.get.name - } + val (operatorId, workerId) = getOperatorFromActorIdOpt(evt.fromActor) stateStore.statsStore.updateState(stats => stats.withEndTimeStamp(System.currentTimeMillis()) ) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/service/WorkflowService.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/service/WorkflowService.scala index ad1dc1982f7..714d958c618 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/service/WorkflowService.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/service/WorkflowService.scala @@ -8,12 +8,13 @@ import edu.uci.ics.amber.engine.architecture.worker.WorkflowWorker.{ StateRestoreConfig } import edu.uci.ics.amber.engine.common.AmberConfig +import edu.uci.ics.amber.engine.common.amberexception.WorkflowRuntimeException import edu.uci.ics.amber.engine.common.virtualidentity.{ ChannelMarkerIdentity, ExecutionIdentity, WorkflowIdentity } -import edu.uci.ics.amber.error.ErrorUtils.getStackTraceWithAllCauses +import edu.uci.ics.amber.error.ErrorUtils.{getOperatorFromActorIdOpt, getStackTraceWithAllCauses} import edu.uci.ics.texera.web.model.websocket.event.TexeraWebSocketEvent import edu.uci.ics.texera.web.model.websocket.request.WorkflowExecuteRequest import edu.uci.ics.texera.web.service.WorkflowService.mkWorkflowStateId @@ -198,6 +199,13 @@ class WorkflowService( ) val errorHandler: Throwable => Unit = { t => { + val fromActorOpt = t match { + case ex: WorkflowRuntimeException => + ex.relatedWorkerId + case other => + None + } + val (operatorId, workerId) = getOperatorFromActorIdOpt(fromActorOpt) logger.error("error during execution", t) executionStateStore.statsStore.updateState(stats => stats.withEndTimeStamp(System.currentTimeMillis()) @@ -209,7 +217,8 @@ class WorkflowService( Timestamp(Instant.now), t.toString, getStackTraceWithAllCauses(t), - "unknown operator" + operatorId, + workerId ) ) } diff --git a/core/amber/src/test/scala/edu/uci/ics/amber/engine/e2e/DataProcessingSpec.scala b/core/amber/src/test/scala/edu/uci/ics/amber/engine/e2e/DataProcessingSpec.scala index 9cd741b3990..6bdb8865a54 100644 --- a/core/amber/src/test/scala/edu/uci/ics/amber/engine/e2e/DataProcessingSpec.scala +++ b/core/amber/src/test/scala/edu/uci/ics/amber/engine/e2e/DataProcessingSpec.scala @@ -6,9 +6,11 @@ import akka.util.Timeout import ch.vorburger.mariadb4j.DB import com.twitter.util.{Await, Duration, Promise} import edu.uci.ics.amber.clustering.SingleNodeListener -import edu.uci.ics.amber.engine.architecture.controller.ControllerEvent.ExecutionStateUpdate +import edu.uci.ics.amber.engine.architecture.controller.ControllerEvent.{ + ExecutionStateUpdate, + FatalError +} import edu.uci.ics.amber.engine.architecture.controller._ -import edu.uci.ics.amber.engine.architecture.controller.promisehandlers.FatalErrorHandler.FatalError import edu.uci.ics.amber.engine.architecture.controller.promisehandlers.StartWorkflowHandler.StartWorkflow import edu.uci.ics.amber.engine.common.client.AmberClient import edu.uci.ics.amber.engine.common.virtualidentity.OperatorIdentity From 7815b0fa031c8f1a4f1e6640202c3fcc1ac04b13 Mon Sep 17 00:00:00 2001 From: Jiadong Bai <43344272+bobbai00@users.noreply.github.com> Date: Fri, 17 May 2024 15:27:28 -0700 Subject: [PATCH 40/44] Add FileDocument and PartitionDocument (#2659) This PR introduces two classes: `FileDocument` and `PartitionDocument` - `FileDocument`: represent a file residing in the filesystem, implemented based on `apache.vfs` - `PartitionDocument`: represent a file that contains multiple partitions. Each partition is represented using `FileDocument`. It supports APIs for `Iterator[FileDocument]` and retrieve `FileDocument` by index. --- .../engine/common/storage/FileDocument.scala | 111 +++++++++++++ .../storage/partition/PartitionDocument.scala | 77 +++++++++ .../common/storage/FileDocumentSpec.scala | 153 ++++++++++++++++++ .../partition/PartitionDocumentSpec.scala | 71 ++++++++ 4 files changed, 412 insertions(+) create mode 100644 core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/FileDocument.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/partition/PartitionDocument.scala create mode 100644 core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/FileDocumentSpec.scala create mode 100644 core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/partition/PartitionDocumentSpec.scala diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/FileDocument.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/FileDocument.scala new file mode 100644 index 00000000000..61585461697 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/FileDocument.scala @@ -0,0 +1,111 @@ +package edu.uci.ics.amber.engine.common.storage +import org.apache.commons.vfs2.{FileObject, VFS} + +import java.io.{InputStream, OutputStreamWriter} +import java.net.URI +import java.util.concurrent.locks.ReentrantReadWriteLock + +/** + * FileDocument provides methods to read/write a file located on filesystem. + * All methods are THREAD-SAFE implemented using read-write lock: + * - 1 writer at a time: only 1 thread of current JVM can acquire the write lock + * - n reader at a time: multiple threads of current JVM can acquire the read lock + * @param uri the identifier of the file. If file doesn't physically exist, FileDocument will create the file during the constructing phase. + */ +class FileDocument(val uri: URI) extends VirtualDocument[String] { + val file: FileObject = VFS.getManager.resolveFile(uri.toString) + val lock = new ReentrantReadWriteLock() + + // Utility function to wrap code block with read lock + private def withReadLock[T](block: => T): T = { + lock.readLock().lock() + try { + block + } finally { + lock.readLock().unlock() + } + } + + // Utility function to wrap code block with write lock + private def withWriteLock(block: => Unit): Unit = { + lock.writeLock().lock() + try { + block + } finally { + lock.writeLock().unlock() + } + } + + // Check and create the file if it does not exist + withWriteLock { + if (!file.exists()) { + val parentDir = file.getParent + if (parentDir != null && !parentDir.exists()) { + parentDir.createFolder() // Create all necessary parent directories + } + file.createFile() // Create the file if it does not exist + } + } + + /** + * Append the content in the inputStream to the FileDocument. This method is THREAD-SAFE + * @param inputStream the data source input stream + */ + override def write(inputStream: InputStream): Unit = + withWriteLock { + val outStream = file.getContent.getOutputStream(true) + try { + // create a buffer for reading from inputStream + val buffer = new Array[Byte](1024) + // create an Iterator to repeatedly call inputStream.read, and direct buffered data to file + Iterator + .continually(inputStream.read(buffer)) + .takeWhile(_ != -1) + .foreach(outStream.write(buffer, 0, _)) + } finally { + outStream.close() + } + } + + /** + * Append the content in the given string to the FileDocument. This method is THREAD-SAFE + * @param item the content to append + */ + override def setItem(item: String): Unit = + withWriteLock { + val outStream = file.getContent.getOutputStream(true) + val writer = new OutputStreamWriter(outStream) + try { + writer.write(item) + writer.flush() + } finally { + writer.close() + outStream.close() + } + } + + /** + * Read content in the file document as the InputStream. This method is THREAD-SAFE + * @return the input stream of content in the FileDocument. Due to the constraint of getInputStream, there may be only 1 input/output stream at any time + */ + override def asInputStream(): InputStream = + withReadLock { + if (!file.exists()) { + throw new RuntimeException(f"File $uri doesn't exist") + } + file.getContent.getInputStream + } + + override def getURI: URI = uri + + /** + * Physically remove the file specified by the URI. This method is THREAD-SAFE + */ + override def remove(): Unit = + withWriteLock { + if (!file.exists()) { + throw new RuntimeException(f"File $uri doesn't exist") + } + file.delete() + } +} diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/partition/PartitionDocument.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/partition/PartitionDocument.scala new file mode 100644 index 00000000000..acb17c22459 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/partition/PartitionDocument.scala @@ -0,0 +1,77 @@ +package edu.uci.ics.amber.engine.common.storage.partition + +import edu.uci.ics.amber.engine.common.storage.{FileDocument, VirtualDocument} + +import java.net.URI + +/** + * PartitionDocument is a storage object that consists #numOfPartition physical files as its underlying data storage. + * Each underlying file's URI is in the format of {partitionDocumentURI}_{index}. + * + * PartitionDocument only support getting the FileDocument that corresponds to the single partition either by index or by iterator. + * To write over the partition, you should get the FileDocument first, then call write-related methods over it. FileDocument guarantees the thread-safe read/write. + * + * @param uri the id of this partition document. Note that this URI does not physically corresponds to a file. + * @param numOfPartition number of partitions + */ +class PartitionDocument(val uri: URI, val numOfPartition: Int) + extends VirtualDocument[FileDocument] { + + /** + * Utility functions to generate the partition URI by index + * @param i index of the partition + * @return the URI of the partition + */ + private def getPartitionURI(i: Int): URI = { + if (i < 0 || i >= numOfPartition) { + throw new RuntimeException(f"Index $i out of bound") + } + new URI(s"${uri}_$i") + } + + override def getURI: URI = + throw new RuntimeException( + "Partition Document doesn't physically exist. It is invalid to acquire its URI" + ) + + /** + * Get the partition by index i. + * This method is THREAD-UNSAFE, as multiple threads can get any partition by index. But the returned FileDocument is thread-safe + * @param i index starting from 0 + * @return FileDocument corresponds to the certain partition + */ + override def getItem(i: Int): FileDocument = { + new FileDocument(getPartitionURI(i)) + } + + /** + * Get the iterator of partitions. + * This method is THREAD-UNSAFE, as multiple threads can get the iterator and loop through all partitions. But the returned FileDocument is thread-safe + * @return an iterator that return the FileDocument corresponds to the certain partition + */ + override def get(): Iterator[FileDocument] = + new Iterator[FileDocument] { + private var i: Int = 0 + + override def hasNext: Boolean = i < numOfPartition + + override def next(): FileDocument = { + if (!hasNext) { + throw new NoSuchElementException("No more partitions") + } + val document = new FileDocument(getPartitionURI(i)) + i += 1 + document + } + } + + /** + * Remove all partitions. + * This method is THREAD-UNSAFE. But FileDocument's remove is thread-safe + */ + override def remove(): Unit = { + for (i <- 0 until numOfPartition) { + getItem(i).remove() + } + } +} diff --git a/core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/FileDocumentSpec.scala b/core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/FileDocumentSpec.scala new file mode 100644 index 00000000000..11c9d3528e4 --- /dev/null +++ b/core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/FileDocumentSpec.scala @@ -0,0 +1,153 @@ +package edu.uci.ics.texera.workflow.common.storage + +import edu.uci.ics.amber.engine.common.storage.FileDocument + +import java.net.URI +import java.nio.file.{Files, Paths} +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.BeforeAndAfter +import org.scalatest.concurrent.ScalaFutures.convertScalaFuture +import org.scalatest.matchers.should.Matchers + +import java.io.{ByteArrayInputStream, ByteArrayOutputStream, InputStream} +import scala.concurrent.ExecutionContext.Implicits.global +import scala.concurrent.Future +import scala.util.Using + +class FileDocumentSpec extends AnyFlatSpec with Matchers with BeforeAndAfter { + + var tempFileURI: URI = _ + var fileDocument: FileDocument = _ + + val initialContent = "Initial Content" + val newContent = "New Content" + before { + // Generate a path for a temporary file without actually creating the file + val tempPath = Files.createTempFile("", "") + tempFileURI = tempPath.toUri + fileDocument = new FileDocument(tempFileURI) + + val contentStream = new ByteArrayInputStream(initialContent.getBytes) + // Write initial content to file + fileDocument.write(contentStream) + contentStream.close() + } + + after { + // Delete the temporary file + Files.deleteIfExists(Paths.get(tempFileURI)) + } + + private def readAllBytes(inputStream: InputStream): Array[Byte] = { + val buffer = new ByteArrayOutputStream() + val data = new Array[Byte](1024) + var nRead = 0 + while ({ + nRead = inputStream.read(data, 0, data.length) + nRead != -1 + }) { + buffer.write(data, 0, nRead) + } + buffer.flush() + buffer.toByteArray + } + + "FileDocument" should "correctly report its URI" in { + fileDocument.getURI should be(tempFileURI) + } + + it should "allow reading from the file" in { + val content = Using(fileDocument.asInputStream()) { inStream => + new String(readAllBytes(inStream)) + }.getOrElse(fail("Failed to read from the file")) + + content should equal(initialContent) + } + + it should "allow writing to the file" in { + fileDocument.setItem(newContent) + + // Read back the content + val content = Using(fileDocument.asInputStream()) { inStream => + new String(readAllBytes(inStream)) + }.getOrElse(fail("Failed to read from the FileDocument")) + + content should be(initialContent + newContent) + } + + it should "remove the file successfully" in { + // Remove the file using FileDocument's remove method + fileDocument.remove() + Files.exists(Paths.get(tempFileURI)) should be(false) + } + + it should "handle concurrent writes safely" in { + val numberOfThreads = 10 + val futures = (1 to numberOfThreads).map { _ => + Future { + val contentStream = new ByteArrayInputStream(s"Content from thread".getBytes) + // multiple document of the same URI try to do write here + new FileDocument(tempFileURI).write(contentStream) + } + } + Future + .sequence(futures) + .map { _ => + val content = Using(fileDocument.asInputStream()) { inStream => + new String(readAllBytes(inStream)) + }.getOrElse(fail("Failed to read from the FileDocument")) + content should include("Content from thread") + } + .futureValue + } + + it should "handle concurrent reads and writes safely" in { + Future { + val contentStream = new ByteArrayInputStream(newContent.getBytes) + fileDocument.write(contentStream) + } + + val readers: Seq[Future[String]] = (1 to 5).map { _ => + Future { + Using(fileDocument.asInputStream()) { inStream => + new String(readAllBytes(inStream)) + }.getOrElse(fail("Failed to read from the FileDocument")) + } + } + + Future + .sequence(readers) + .map { results => + results.foreach { result => + result should be(initialContent + newContent) + } + } + .futureValue + } + + it should "handle multiple remove calls gracefully" in { + // Remove the file for the first time + fileDocument.remove() + Files.exists(Paths.get(tempFileURI)) should be(false) + + // Attempt to remove the file again and catch the exception + val exception = intercept[RuntimeException] { + fileDocument.remove() + } + + exception.getMessage should include(s"File $tempFileURI doesn't exist") + } + + it should "correctly write and read a large amount of data" in { + // Generate a large string of 20,000 characters + val largeContent = "A" * 20000 + fileDocument.setItem(largeContent) + + // Read back the content + val content = Using(fileDocument.asInputStream()) { inStream => + new String(readAllBytes(inStream)) + }.getOrElse(fail("Failed to read from the FileDocument")) + + content should be(initialContent + largeContent) + } +} diff --git a/core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/partition/PartitionDocumentSpec.scala b/core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/partition/PartitionDocumentSpec.scala new file mode 100644 index 00000000000..d02a9e3e1ee --- /dev/null +++ b/core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/partition/PartitionDocumentSpec.scala @@ -0,0 +1,71 @@ +package edu.uci.ics.texera.workflow.common.storage.partition + +import edu.uci.ics.amber.engine.common.storage.partition.PartitionDocument + +import java.net.URI +import java.nio.file.{Files, Path, Paths} +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.BeforeAndAfter +import org.scalatest.matchers.should.Matchers + +import java.io.{ByteArrayOutputStream, InputStream} +import scala.util.Using + +class PartitionDocumentSpec extends AnyFlatSpec with Matchers with BeforeAndAfter { + + var baseTempURI: Path = _ + var partitionDocument: PartitionDocument = _ + val numOfPartitions: Int = 5 + + private def readAllBytes(inputStream: InputStream): Array[Byte] = { + val buffer = new ByteArrayOutputStream() + val data = new Array[Byte](1024) + var nRead = 0 + while ({ + nRead = inputStream.read(data, 0, data.length) + nRead != -1 + }) { + buffer.write(data, 0, nRead) + } + buffer.flush() + buffer.toByteArray + } + + before { + // Create a temporary directory for the base URI + baseTempURI = Files.createTempDirectory("partitionTest").resolve("partitionDoc") + partitionDocument = new PartitionDocument(baseTempURI.toUri, numOfPartitions) + } + + after { + // Clean up: remove all files and the directory + partitionDocument.remove() + } + + "PartitionDocument" should "write and read content correctly for each partition" in { + // Write to each partition + val iterator = partitionDocument.get() + var i = 0 + while (iterator.hasNext) { + iterator.next().setItem(s"Content for partition $i") + i += 1 + } + + // Verify each partition's content + for (i <- 0 until numOfPartitions) { + val doc = partitionDocument.getItem(i) + val content = Using(doc.asInputStream()) { inStream => + new String(readAllBytes(inStream)) + }.getOrElse(fail("Failed to read from the partition")) + content should be(s"Content for partition $i") + } + } + + it should "remove all partitions successfully" in { + partitionDocument.remove() + for (i <- 0 until numOfPartitions) { + val uri = new URI(s"${baseTempURI.toUri}_$i") + Files.exists(Paths.get(uri)) should be(false) + } + } +} From cf5a50959e92552afe0fddf34becfdbfbb906800 Mon Sep 17 00:00:00 2001 From: Kevin Wu <94423044+SaltDonkey@users.noreply.github.com> Date: Sun, 19 May 2024 00:21:17 -0700 Subject: [PATCH 41/44] Add R Source UDF and R UDF (Table API) to Texera (#2644) This PR is for the official inclusion of an R UDF and R Source UDF into Texera that can support R code in Texera workflows and can support Texera's Table API. Tuple API is currently not supported for R UDF. -------------- # Software versions required/supported: Python - 3.9.18 rpy2 (Python pacakge) - 3.5.11 rpy2-arrow (Python package) - 0.0.8 R - 4.3.3 reticulate (R package) - 1.36.1 arrow (R package) - 14.0.01 -------------- # Use cases/user requirements: - First the user must make sure that their Python and R versions are configured in the udf.conf file located at [/core/amber/src/main/resources/udf.conf](https://github.com/Texera/texera/pull/2644/commits/c8e35e9ee5fb360358797108bb24297567eb7d4a) - To use the R Source UDF: - This should be used when the user wishes to write R code to provide source data to any pipeline that use R UDFs. - The user does not need any input. The output in the R-UDF must be an R object that can be easily converted to a data.frame, more specifically, such that they can produce tuples. - When the operator is finished, the output is an Arrow Table - To use the R UDF: - This should be used when the user wishes to receive some input data, read and modify it and then return either different data or the same input data. - The user should expect an input of both a Table and a port - Currently the port argument is unused, although this may be used in the future - When the operator is finished, the output is an Arrow Table with any modifications/accesses from the R-UDF. ------------- # Showcase: ![](https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExeThyaDM3NDV2amthaGZ0aGgzOWhybDhnaGhjZDlxYXUwNTFtcHBtdyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/EKampxbueDk7UM5U83/giphy.gif) ![](https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExOTFmOXRwd2F1OXNwNW1hNHB5MHBtN3VjYnI4cjd6ZWpicWNlazI5biZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Gf9QtXcSTMvQNQ3Tqd/giphy.gif) --------- Co-authored-by: Yicong Huang <17627829+Yicong-Huang@users.noreply.github.com> --- .github/workflows/github-action-build.yml | 10 + core/amber/requirements.txt | 4 +- .../architecture/worker/controlcommands.proto | 3 +- .../control/initialize_executor_handler.py | 4 +- .../architecture/managers/executor_manager.py | 23 +- .../main/python/core/models/RTableExecutor.py | 114 ++++ .../python/core/models/test_RTableExecutor.py | 521 ++++++++++++++++++ .../engine/architecture/worker/__init__.py | 3 +- .../main/python/texera_run_python_worker.py | 8 +- .../resources/{python_udf.conf => udf.conf} | 5 + .../promisehandlers/ModifyLogicHandler.scala | 2 +- .../deploysemantics/PhysicalOp.scala | 6 +- .../pythonworker/PythonWorkflowWorker.scala | 7 +- .../ControlCommandConvertUtils.scala | 4 +- .../metadata/OperatorGroupConstants.scala | 1 + .../workflow/common/operators/LogicalOp.scala | 4 + .../workflow/operators/udf/r/RUDFOpDesc.scala | 170 ++++++ .../operators/udf/r/RUDFSourceOpDesc.java | 116 ++++ .../controlcommands/ControlCommandV2.scala | 42 +- .../ControlcommandsProto.scala | 99 ++-- .../code-editor.component.ts | 17 +- .../workflow-graph/model/workflow-graph.ts | 3 + core/gui/src/assets/operator_images/RUDF.png | Bin 0 -> 10458 bytes .../src/assets/operator_images/RUDFSource.png | Bin 0 -> 10458 bytes 24 files changed, 1092 insertions(+), 74 deletions(-) create mode 100644 core/amber/src/main/python/core/models/RTableExecutor.py create mode 100644 core/amber/src/main/python/core/models/test_RTableExecutor.py rename core/amber/src/main/resources/{python_udf.conf => udf.conf} (90%) create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/r/RUDFOpDesc.scala create mode 100644 core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/r/RUDFSourceOpDesc.java create mode 100644 core/gui/src/assets/operator_images/RUDF.png create mode 100644 core/gui/src/assets/operator_images/RUDFSource.png diff --git a/.github/workflows/github-action-build.yml b/.github/workflows/github-action-build.yml index 47ce71a1f24..df26b412cc6 100644 --- a/.github/workflows/github-action-build.yml +++ b/.github/workflows/github-action-build.yml @@ -91,6 +91,16 @@ jobs: steps: - name: Checkout Texera uses: actions/checkout@v2 + - name: Set up R for R-UDF + uses: r-lib/actions/setup-r@v2 + with: + r-version: '4.3.3' + - name: Install R dependencies for R-UDF + run: | + Rscript -e 'install.packages("dplyr", repos = "http://cran.rstudio.com/")' + Rscript -e 'install.packages("arrow", version = "14.0.0.1", repos = "http://cran.rstudio.com/")' + Rscript -e 'install.packages("reticulate", version = "1.36.1", repos = "http://cran.rstudio.com/")' + - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: diff --git a/core/amber/requirements.txt b/core/amber/requirements.txt index 05094ee5be2..a07f0753371 100644 --- a/core/amber/requirements.txt +++ b/core/amber/requirements.txt @@ -25,4 +25,6 @@ python-lsp-server[websockets] bidict==0.22.0 cached_property psutil -transformers \ No newline at end of file +transformers +rpy2==3.5.11 +rpy2-arrow==0.0.8 \ No newline at end of file diff --git a/core/amber/src/main/protobuf/edu/uci/ics/amber/engine/architecture/worker/controlcommands.proto b/core/amber/src/main/protobuf/edu/uci/ics/amber/engine/architecture/worker/controlcommands.proto index 634779cf2ef..a39c269bd79 100644 --- a/core/amber/src/main/protobuf/edu/uci/ics/amber/engine/architecture/worker/controlcommands.proto +++ b/core/amber/src/main/protobuf/edu/uci/ics/amber/engine/architecture/worker/controlcommands.proto @@ -60,7 +60,8 @@ message LinkOrdinal { message InitializeExecutorV2 { string code = 1; - bool is_source = 2; + string language = 2; + bool is_source = 3; } message UpdateExecutorV2 { diff --git a/core/amber/src/main/python/core/architecture/handlers/control/initialize_executor_handler.py b/core/amber/src/main/python/core/architecture/handlers/control/initialize_executor_handler.py index 5ef7a22a0c0..72626dc216f 100644 --- a/core/amber/src/main/python/core/architecture/handlers/control/initialize_executor_handler.py +++ b/core/amber/src/main/python/core/architecture/handlers/control/initialize_executor_handler.py @@ -7,5 +7,7 @@ class InitializeExecutorHandler(ControlHandler): cmd = InitializeExecutorV2 def __call__(self, context: Context, command: cmd, *args, **kwargs): - context.executor_manager.initialize_executor(command.code, command.is_source) + context.executor_manager.initialize_executor( + command.code, command.is_source, command.language + ) return None diff --git a/core/amber/src/main/python/core/architecture/managers/executor_manager.py b/core/amber/src/main/python/core/architecture/managers/executor_manager.py index fe055bd79cd..9fbb8263019 100644 --- a/core/amber/src/main/python/core/architecture/managers/executor_manager.py +++ b/core/amber/src/main/python/core/architecture/managers/executor_manager.py @@ -105,20 +105,33 @@ def is_concrete_operator(cls: type) -> bool: and not inspect.isabstract(cls) ) - def initialize_executor(self, code: str, is_source: bool) -> None: + def initialize_executor(self, code: str, is_source: bool, language: str) -> None: """ Initialize the executor with the given code. The output schema is decided by the user. - :param code: The string version of python code, containing one Operator + :param code: The string version of the code, containing one Operator class declaration. :param is_source: Indicating if the operator is used as a source operator. + :param language: The language of the operator code. :param output_schema: the raw mapping of output schema, name -> type_str. :return: """ - executor: type(Operator) = self.load_executor_definition(code) - self.executor = executor() - self.executor.is_source = is_source + if language == "r": + # Have to import it here and not at the top in case R_HOME from udf.conf + # is not defined, otherwise an error will occur + # If R_HOME is not defined and rpy2 cannot find the + # R_HOME environment variable, an error will occur here + from core.models.RTableExecutor import RTableSourceExecutor, RTableExecutor + + if is_source: + self.executor = RTableSourceExecutor(code) + else: + self.executor = RTableExecutor(code) + else: + executor: type(Operator) = self.load_executor_definition(code) + self.executor = executor() + self.executor.is_source = is_source assert ( isinstance(self.executor, SourceOperator) == self.executor.is_source ), "Please use SourceOperator API for source operators." diff --git a/core/amber/src/main/python/core/models/RTableExecutor.py b/core/amber/src/main/python/core/models/RTableExecutor.py new file mode 100644 index 00000000000..f358f1c061a --- /dev/null +++ b/core/amber/src/main/python/core/models/RTableExecutor.py @@ -0,0 +1,114 @@ +import pyarrow as pa +import rpy2.robjects as robjects +from rpy2_arrow.arrow import rarrow_to_py_table, converter as arrow_converter +from rpy2.robjects import default_converter +from rpy2.robjects.conversion import localconverter as local_converter +import typing +from typing import Iterator, Optional, Union +from core.models import ArrowTableTupleProvider, Tuple, TupleLike, Table, TableLike +from core.models.operator import SourceOperator, TableOperator + + +class RTableExecutor(TableOperator): + """ + An executor that can execute R code on Arrow tables. + """ + + is_source = False + + _arrow_to_r_dataframe = robjects.r( + "function(table) { return (as.data.frame(table)) }" + ) + + _r_dataframe_to_arrow = robjects.r( + """ + library(arrow) + function(df) { return (arrow::as_arrow_table(df)) } + """ + ) + + def __init__(self, r_code: str): + """ + Initialize the RTableExecutor with R code. + + Args: + r_code (str): R code to be executed. + """ + super().__init__() + with local_converter(default_converter): + self._func: typing.Callable[[pa.Table], pa.Table] = robjects.r(r_code) + + def process_table(self, table: Table, port: int) -> Iterator[Optional[TableLike]]: + """ + Process an input Table using the provided R function. + The Table is represented as a pandas.DataFrame. + + :param table: Table, a table to be processed. + :param port: int, input port index of the current Tuple. + Currently unused in R-UDF + :return: Iterator[Optional[TableLike]], producing one TableLike object at a + time, or None. + """ + input_pyarrow_table = pa.Table.from_pandas(table) + with local_converter(arrow_converter): + input_r_dataframe = RTableExecutor._arrow_to_r_dataframe( + input_pyarrow_table + ) + output_r_dataframe = self._func(input_r_dataframe, port) + output_rarrow_table = RTableExecutor._r_dataframe_to_arrow( + output_r_dataframe + ) + output_pyarrow_table = rarrow_to_py_table(output_rarrow_table) + + for field_accessor in ArrowTableTupleProvider(output_pyarrow_table): + yield Tuple( + {name: field_accessor for name in output_pyarrow_table.column_names} + ) + + +class RTableSourceExecutor(SourceOperator): + """ + A source operator that produces an R Table or Table-like object using R code. + """ + + is_source = True + _source_output_to_arrow = robjects.r( + """ + library(arrow) + function(source_output) { + return (arrow::as_arrow_table(as.data.frame(source_output))) + } + """ + ) + + def __init__(self, r_code: str): + """ + Initialize the RTableSourceExecutor with R code. + + Args: + r_code (str): R code to be executed. + """ + super().__init__() + # Use the local converter from rpy2 to load in the R function given by the user + with local_converter(default_converter): + self._func = robjects.r(r_code) + + def produce(self) -> Iterator[Union[TupleLike, TableLike, None]]: + """ + Produce Table using the provided R function. + Used by the source operator only. + + :return: Iterator[Union[TupleLike, TableLike, None]], producing + one TupleLike object, one TableLike object, or None, at a time. + """ + with local_converter(arrow_converter): + output_table = self._func() + output_rarrow_table = RTableSourceExecutor._source_output_to_arrow( + output_table + ) + output_pyarrow_table = rarrow_to_py_table(output_rarrow_table) + + for field_accessor in ArrowTableTupleProvider(output_pyarrow_table): + yield Tuple( + {name: field_accessor for name in output_pyarrow_table.column_names} + ) diff --git a/core/amber/src/main/python/core/models/test_RTableExecutor.py b/core/amber/src/main/python/core/models/test_RTableExecutor.py new file mode 100644 index 00000000000..ba1a6c413ea --- /dev/null +++ b/core/amber/src/main/python/core/models/test_RTableExecutor.py @@ -0,0 +1,521 @@ +import pandas +import pytest +import rpy2.rinterface_lib.embedded +from core.models import Tuple, Table +from core.models.RTableExecutor import RTableSourceExecutor, RTableExecutor + + +class TestRTableExecutor: + @pytest.fixture + def source_executor_empty(self): + return """ + function() { + df <- data.frame( + col1 = character(), + col2 = numeric(), + col3 = logical() + ) + return (df) + } + """ + + @pytest.fixture + def source_executor_NA(self): + # This should work with no issues + # since you can store NA in a data.frame + # and then convert the data.frame to Arrow Table with + # one Tuple with value Tuple({"source_output": None}) + return """ + function() { + return (NA) + } + """ + + @pytest.fixture + def udf_executor_return_NA(self): + # This should fail since the conversion back + # to Arrow will be impossible + return """ + function(table, port) { + return (NA) + } + """ + + @pytest.fixture + def udf_executor_simple_return(self): + return """ + function(table, port) { + return (table) + } + """ + + @pytest.fixture + def udf_executor_empty_add_row(self): + return """ + function(table, port) { + new_row <- data.frame( + col1 = "TEST", + col2 = 12.3, + col3 = TRUE + ) + table <- rbind(table, new_row) + return (table) + } + """ + + @pytest.fixture + def source_executor_null_values(self): + return """ + function() { + df <- data.frame( + col1 = character(), + col2 = numeric(), + col3 = logical() + ) + df[1:3,] <- NA + return (df) + } + """ + + @pytest.fixture + def udf_executor_null_values_return(self): + return """ + function(table, port) { + return (table) + } + """ + + @pytest.fixture + def udf_executor_null_values_add_row(self): + return """ + function(table, port) { + new_row <- data.frame( + col1 = NA, + col2 = NA, + col3 = NA + ) + table <- rbind(table, new_row) + return (table) + } + """ + + @pytest.fixture + def target_tuples_null_values(self): + tuple_1 = Tuple({"col1": None, "col2": None, "col3": None}) + tuple_2 = Tuple({"col1": None, "col2": None, "col3": None}) + tuple_3 = Tuple({"col1": None, "col2": None, "col3": None}) + return [tuple_1, tuple_2, tuple_3] + + @pytest.fixture + def pandas_target_df_simple(self): + data = { + "Name": ["Alice", "Bob", "Charlie"], + "Age": [25, 30, 35], + "City": ["New York", "Los Angeles", "Chicago"], + } + df = pandas.DataFrame(data) + return df + + @pytest.fixture + def target_tuples_simple(self, pandas_target_df_simple): + tuples = [] + for index, row in pandas_target_df_simple.iterrows(): + tuples.append(Tuple(row)) + return tuples + + @pytest.fixture + def source_executor_simple(self): + return """ + function() { + df <- data.frame( + Name = c("Alice", "Bob", "Charlie"), + Age = c(25, 30, 35), + City = c("New York", "Los Angeles", "Chicago") + ) + return (df) + } + """ + + @pytest.fixture + def udf_executor_simple_extract_row(self): + return """ + function(table, port) { + bob_row <- table[table$Name == "Bob", ] + return (bob_row) + } + """ + + @pytest.fixture + def udf_executor_simple_update_row(self): + return """ + function(table, port) { + table[table$Name == "Bob", "Age"] <- 18 + return (table) + } + """ + + @pytest.fixture + def udf_executor_simple_add_row(self): + return """ + function(table, port) { + new_row <- list(Name = "Test", Age = 0, City = "Irvine") + new_df <- rbind(table, new_row) + return (new_df) + } + """ + + @pytest.fixture + def source_executor_df_fail(self): + # This Source UDF should raise a TypeError since it cannot + # be converted into a Table-like object + return """ + function() { + glm_model <- glm(mpg ~ wt, data = mtcars, family = gaussian) + return (glm_model) + } + """ + + @pytest.fixture + def target_tuples_like_type(self): + tuple_1 = Tuple({"C.1": 1, "C.2": 2, "C.3": 3}) + tuple_2 = Tuple({"C.1": 11, "C.2": 12, "C.3": 13}) + return [tuple_1, tuple_2] + + @pytest.fixture + def source_executor_df_like_type(self): + return """ + function() { + mdat <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol = 3, byrow = TRUE, + dimnames = list(c("row1", "row2"), + c("C.1", "C.2", "C.3"))) + return (mdat) + } + """ + + @pytest.fixture + def udf_executor_df_like_type_add_row(self): + return """ + function(table, port) { + # Adding a new row + new_row <- c(4, 5, 6) + table <- rbind(table, new_row) + + return (table) + } + """ + + @pytest.fixture + def udf_executor_df_like_type_add_col(self): + return """ + function(table, port) { + # Adding a new col + new_col <- c("AAA", "BBB") + table <- cbind(table, new_col) + + return (table) + } + """ + + def test_source_executor_empty(self, source_executor_empty): + source_executor = RTableSourceExecutor(source_executor_empty) + output = source_executor.produce() + tuples = [tup for tup in output] + assert len(tuples) == 0 + + output_tbl = Table(tuples) + assert output_tbl == Table([]) + + def test_source_executor_NA(self, source_executor_NA): + source_executor = RTableSourceExecutor(source_executor_NA) + output = source_executor.produce() + tuples = [tup for tup in output] + assert len(tuples) == 1 + + output_tbl = Table(tuples) + assert output_tbl == Table([Tuple({"source_output": None})]) + + def test_udf_executor_return_NA_fail( + self, source_executor_empty, udf_executor_return_NA + ): + source_executor = RTableSourceExecutor(source_executor_empty) + input_tbl = Table([tup for tup in source_executor.produce()]) + + with pytest.raises(rpy2.rinterface_lib.embedded.RRuntimeError) as _: + udf_executor = RTableExecutor(udf_executor_return_NA) + output = udf_executor.process_table(input_tbl, 0) + tuples = [out for out in output] + assert tuples is None + + def test_udf_executor_empty_return( + self, source_executor_empty, udf_executor_simple_return + ): + source_executor = RTableSourceExecutor(source_executor_empty) + input_tbl = Table([tup for tup in source_executor.produce()]) + + udf_executor = RTableExecutor(udf_executor_simple_return) + output = udf_executor.process_table(input_tbl, 0) + + tuples = [tup for tup in output] + assert len(tuples) == 0 + + output_tbl = Table(tuples) + assert output_tbl == Table([]) + assert output_tbl == input_tbl + + def test_udf_executor_empty_add_row( + self, source_executor_empty, udf_executor_empty_add_row + ): + source_executor = RTableSourceExecutor(source_executor_empty) + input_tbl = Table([tup for tup in source_executor.produce()]) + + udf_executor = RTableExecutor(udf_executor_empty_add_row) + output = udf_executor.process_table(input_tbl, 0) + + tuples = [tup for tup in output] + target_tuple = Tuple({"col1": "TEST", "col2": 12.3, "col3": True}) + assert len(tuples) == 1 + + output_tbl = Table(tuples) + assert output_tbl == Table([target_tuple]) + + def test_source_executor_null_values( + self, source_executor_null_values, target_tuples_null_values + ): + source_executor = RTableSourceExecutor(source_executor_null_values) + output = source_executor.produce() + tuples = [tup for tup in output] + assert len(tuples) == 3 + + output_tbl = Table(tuples) + assert output_tbl == Table(target_tuples_null_values) + + def test_udf_executor_null_values_return( + self, + source_executor_null_values, + udf_executor_null_values_return, + target_tuples_null_values, + ): + source_executor = RTableSourceExecutor(source_executor_null_values) + input_tbl = Table([tup for tup in source_executor.produce()]) + + udf_executor = RTableExecutor(udf_executor_null_values_return) + output = udf_executor.process_table(input_tbl, 0) + + tuples = [tup for tup in output] + assert len(tuples) == 3 + + output_tbl = Table(tuples) + assert output_tbl == Table(target_tuples_null_values) + + def test_udf_executor_null_values_add_row( + self, + source_executor_null_values, + udf_executor_null_values_add_row, + target_tuples_null_values, + ): + source_executor = RTableSourceExecutor(source_executor_null_values) + input_tbl = Table([tup for tup in source_executor.produce()]) + + udf_executor = RTableExecutor(udf_executor_null_values_add_row) + output = udf_executor.process_table(input_tbl, 0) + + tuples = [tup for tup in output] + target_tuple = Tuple({"col1": None, "col2": None, "col3": None}) + assert len(tuples) == 4 + assert tuples[3] == target_tuple + + output_tbl = Table(tuples) + assert output_tbl == Table(target_tuples_null_values + [target_tuple]) + + def test_source_executor_simple(self, source_executor_simple, target_tuples_simple): + source_executor = RTableSourceExecutor(source_executor_simple) + output = source_executor.produce() + + tuples = [tup for tup in output] + assert len(tuples) == 3 + + for idx, v in enumerate(tuples): + assert v == target_tuples_simple[idx] + + output_tbl = Table(tuples) + assert output_tbl == Table(target_tuples_simple) + + def test_udf_executor_simple( + self, source_executor_simple, udf_executor_simple_return, target_tuples_simple + ): + source_executor = RTableSourceExecutor(source_executor_simple) + input_tbl = Table([tup for tup in source_executor.produce()]) + + udf_executor = RTableExecutor(udf_executor_simple_return) + output = udf_executor.process_table(input_tbl, 0) + + tuples = [tup for tup in output] + assert len(tuples) == 3 + + for idx, v in enumerate(tuples): + assert v == target_tuples_simple[idx] + + output_tbl = Table(tuples) + assert output_tbl == Table(target_tuples_simple) + assert output_tbl == input_tbl + + def test_udf_executor_simple_extract_row( + self, + source_executor_simple, + udf_executor_simple_extract_row, + target_tuples_simple, + ): + source_executor = RTableSourceExecutor(source_executor_simple) + input_tbl = Table([tup for tup in source_executor.produce()]) + + udf_executor = RTableExecutor(udf_executor_simple_extract_row) + output = udf_executor.process_table(input_tbl, 0) + + tuples = [tup for tup in output] + target_tuple = Tuple({"Name": "Bob", "Age": 30, "City": "Los Angeles"}) + assert len(tuples) == 1 + assert tuples[0] == target_tuple + + output_tbl = Table(tuples) + assert output_tbl == Table([target_tuple]) + + def test_udf_executor_simple_update_row( + self, + source_executor_simple, + udf_executor_simple_update_row, + target_tuples_simple, + ): + source_executor = RTableSourceExecutor(source_executor_simple) + input_tbl = Table([tup for tup in source_executor.produce()]) + + udf_executor = RTableExecutor(udf_executor_simple_update_row) + output = udf_executor.process_table(input_tbl, 0) + + tuples = [tup for tup in output] + target_tuple = Tuple({"Name": "Bob", "Age": 18, "City": "Los Angeles"}) + assert len(tuples) == 3 + + for idx, v in enumerate(tuples): + if idx == 1: + assert v == target_tuple + else: + assert v == target_tuples_simple[idx] + + output_tbl = Table(tuples) + assert output_tbl == Table( + [target_tuples_simple[0], target_tuple, target_tuples_simple[2]] + ) + + def test_udf_executor_simple_add_row( + self, source_executor_simple, udf_executor_simple_add_row, target_tuples_simple + ): + source_executor = RTableSourceExecutor(source_executor_simple) + input_tbl = Table([tup for tup in source_executor.produce()]) + + udf_executor = RTableExecutor(udf_executor_simple_add_row) + output = udf_executor.process_table(input_tbl, 0) + + tuples = [tup for tup in output] + target_tuple = Tuple({"Name": "Test", "Age": 0, "City": "Irvine"}) + assert len(tuples) == 4 + + for idx, v in enumerate(tuples): + if idx == len(tuples) - 1: + assert v == target_tuple + else: + assert v == target_tuples_simple[idx] + + output_tbl = Table(tuples) + assert output_tbl == Table( + [tup for tup in target_tuples_simple] + [target_tuple] + ) + + def test_source_executor_fail(self, source_executor_df_fail): + source_executor = RTableSourceExecutor(source_executor_df_fail) + with pytest.raises(rpy2.rinterface_lib.embedded.RRuntimeError) as _: + output = source_executor.produce() + output = [out for out in output] + + def test_source_executor_df_like_type( + self, source_executor_df_like_type, target_tuples_like_type + ): + source_executor = RTableSourceExecutor(source_executor_df_like_type) + output = source_executor.produce() + + tuples = [tup for tup in output] + assert len(tuples) == 2 + + for idx, v in enumerate(tuples): + assert v == target_tuples_like_type[idx] + + output_tbl = Table(tuples) + assert output_tbl == Table(target_tuples_like_type) + + def test_udf_executor_df_like_type( + self, + source_executor_df_like_type, + udf_executor_simple_return, + target_tuples_like_type, + ): + source_executor = RTableSourceExecutor(source_executor_df_like_type) + input_tbl = Table([tup for tup in source_executor.produce()]) + + udf_executor = RTableExecutor(udf_executor_simple_return) + output = udf_executor.process_table(input_tbl, 0) + + tuples = [tup for tup in output] + assert len(tuples) == 2 + + for idx, v in enumerate(tuples): + assert v == target_tuples_like_type[idx] + + output_tbl = Table(tuples) + assert output_tbl == Table(target_tuples_like_type) + assert output_tbl == input_tbl + + def test_udf_executor_df_like_type_add_row( + self, + source_executor_df_like_type, + udf_executor_df_like_type_add_row, + target_tuples_like_type, + ): + source_executor = RTableSourceExecutor(source_executor_df_like_type) + input_tbl = Table([tup for tup in source_executor.produce()]) + + udf_executor = RTableExecutor(udf_executor_df_like_type_add_row) + output = udf_executor.process_table(input_tbl, 0) + + tuples = [tup for tup in output] + target_tuple = Tuple({"C.1": 4, "C.2": 5, "C.3": 6}) + assert len(tuples) == 3 + + for idx, v in enumerate(tuples): + if idx == len(tuples) - 1: + assert v == target_tuple + else: + assert v == target_tuples_like_type[idx] + + output_tbl = Table(tuples) + assert output_tbl == Table(target_tuples_like_type + [target_tuple]) + + def test_udf_executor_df_like_type_add_col( + self, source_executor_df_like_type, udf_executor_df_like_type_add_col + ): + source_executor = RTableSourceExecutor(source_executor_df_like_type) + input_tbl = Table([tup for tup in source_executor.produce()]) + + udf_executor = RTableExecutor(udf_executor_df_like_type_add_col) + output = udf_executor.process_table(input_tbl, 0) + + tuples = [tup for tup in output] + target_tuples = [ + Tuple({"C.1": 1, "C.2": 2, "C.3": 3, "new_col": "AAA"}), + Tuple({"C.1": 11, "C.2": 12, "C.3": 13, "new_col": "BBB"}), + ] + + assert len(tuples) == 2 + for idx, v in enumerate(tuples): + assert v == target_tuples[idx] + + output_tbl = Table(tuples) + assert output_tbl == Table(target_tuples) diff --git a/core/amber/src/main/python/proto/edu/uci/ics/amber/engine/architecture/worker/__init__.py b/core/amber/src/main/python/proto/edu/uci/ics/amber/engine/architecture/worker/__init__.py index 3182e70eb95..f07d4b28902 100644 --- a/core/amber/src/main/python/proto/edu/uci/ics/amber/engine/architecture/worker/__init__.py +++ b/core/amber/src/main/python/proto/edu/uci/ics/amber/engine/architecture/worker/__init__.py @@ -106,7 +106,8 @@ class LinkOrdinal(betterproto.Message): @dataclass(eq=False, repr=False) class InitializeExecutorV2(betterproto.Message): code: str = betterproto.string_field(1) - is_source: bool = betterproto.bool_field(2) + language: str = betterproto.string_field(2) + is_source: bool = betterproto.bool_field(3) @dataclass(eq=False, repr=False) diff --git a/core/amber/src/main/python/texera_run_python_worker.py b/core/amber/src/main/python/texera_run_python_worker.py index d49f15f92ad..eac23c8d7b4 100644 --- a/core/amber/src/main/python/texera_run_python_worker.py +++ b/core/amber/src/main/python/texera_run_python_worker.py @@ -22,9 +22,15 @@ def init_loguru_logger(stream_log_level) -> None: if __name__ == "__main__": - _, worker_id, output_port, logger_level = sys.argv + _, worker_id, output_port, logger_level, r_path = sys.argv init_loguru_logger(logger_level) + # Setting R_HOME environment variable for R-UDF usage + if r_path: + import os + + os.environ["R_HOME"] = r_path + PythonWorker( worker_id=worker_id, host="localhost", output_port=int(output_port) ).run() diff --git a/core/amber/src/main/resources/python_udf.conf b/core/amber/src/main/resources/udf.conf similarity index 90% rename from core/amber/src/main/resources/python_udf.conf rename to core/amber/src/main/resources/udf.conf index ef69963d27d..d0452fdc594 100644 --- a/core/amber/src/main/resources/python_udf.conf +++ b/core/amber/src/main/resources/udf.conf @@ -20,3 +20,8 @@ python { } } } + +r { + # Path to your R home here (if you want to use R-UDF) + path = "" +} diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/promisehandlers/ModifyLogicHandler.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/promisehandlers/ModifyLogicHandler.scala index c60c9d61830..e6d1ee712ff 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/promisehandlers/ModifyLogicHandler.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/controller/promisehandlers/ModifyLogicHandler.scala @@ -30,7 +30,7 @@ trait ModifyLogicHandler { val opExecution = cp.workflowExecution.getRunningRegionExecutions .map(_.getOperatorExecution(msg.newOp.id)) .head - val workerCommand = if (operator.isPythonOperator) { + val workerCommand = if (operator.isPythonBased) { UpdatePythonExecutor( msg.newOp.getPythonCode, isSource = operator.isSourceOperator diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/deploysemantics/PhysicalOp.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/deploysemantics/PhysicalOp.scala index 41531cb01fd..38af9cd6332 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/deploysemantics/PhysicalOp.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/deploysemantics/PhysicalOp.scala @@ -214,11 +214,11 @@ case class PhysicalOp( outputPorts.forall(port => port._2._2.isEmpty) } - def isPythonOperator: Boolean = { + def isPythonBased: Boolean = { opExecInitInfo match { case opExecInfo: OpExecInitInfoWithCode => val (_, language) = opExecInfo.codeGen(0, 0) - language == "python" + language == "python" || language == "r" case _ => false } } @@ -530,7 +530,7 @@ case class PhysicalOp( val locationPreference = this.locationPreference.getOrElse(new RoundRobinPreference()) val preferredAddress = locationPreference.getPreferredLocation(addressInfo, this, workerIndex) - val workflowWorker = if (this.isPythonOperator) { + val workflowWorker = if (this.isPythonBased) { PythonWorkflowWorker.props(workerConfig) } else { WorkflowWorker.props( diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/pythonworker/PythonWorkflowWorker.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/pythonworker/PythonWorkflowWorker.scala index bbde7a14b47..caa69e9bf42 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/pythonworker/PythonWorkflowWorker.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/pythonworker/PythonWorkflowWorker.scala @@ -43,8 +43,10 @@ class PythonWorkflowWorker( .resolve("src") .resolve("main") .resolve("python") - val config: Config = ConfigFactory.load("python_udf") + val config: Config = ConfigFactory.load("udf") val pythonENVPath: String = config.getString("python.path").trim + val RENVPath: String = config.getString("r.path").trim + // Python process private var pythonServerProcess: Process = _ @@ -151,7 +153,8 @@ class PythonWorkflowWorker( udfEntryScriptPath, workerConfig.workerId.name, Integer.toString(pythonProxyServer.getPortNumber.get()), - config.getString("python.log.streamHandler.level") + config.getString("python.log.streamHandler.level"), + RENVPath ) ).run(BasicIO.standard(false)) } diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlCommandConvertUtils.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlCommandConvertUtils.scala index 41c8fee60c2..c0352215680 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlCommandConvertUtils.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlCommandConvertUtils.scala @@ -51,8 +51,10 @@ object ControlCommandConvertUtils { case QueryCurrentInputTuple() => QueryCurrentInputTupleV2() case InitializeExecutor(_, opExecInitInfo, isSource) => + val (code, language) = opExecInitInfo.asInstanceOf[OpExecInitInfoWithCode].codeGen(0, 0) InitializeExecutorV2( - opExecInitInfo.asInstanceOf[OpExecInitInfoWithCode].codeGen(0, 0)._1, + code, + language, isSource ) case ReplayCurrentTuple() => diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorGroupConstants.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorGroupConstants.scala index 49f3ce3aabe..e9e08b91be8 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorGroupConstants.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/metadata/OperatorGroupConstants.scala @@ -18,6 +18,7 @@ object OperatorGroupConstants { final val UDF_GROUP = "User-defined Functions" final val PYTHON_GROUP = "Python" final val JAVA_GROUP = "Java" + final val R_GROUP = "R" /** * The order of the groups to show up in the frontend operator panel. diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala index cf0607f4c81..0136d740c8c 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/common/operators/LogicalOp.scala @@ -1,6 +1,7 @@ package edu.uci.ics.texera.workflow.common.operators import com.fasterxml.jackson.annotation.JsonSubTypes.Type + import com.fasterxml.jackson.annotation.{ JsonIgnore, JsonProperty, @@ -102,6 +103,7 @@ import edu.uci.ics.texera.workflow.operators.udf.python.{ PythonTableReducerOpDesc, PythonUDFOpDescV2 } +import edu.uci.ics.texera.workflow.operators.udf.r.{RUDFOpDesc, RUDFSourceOpDesc} import edu.uci.ics.texera.workflow.operators.union.UnionOpDesc import edu.uci.ics.texera.workflow.operators.unneststring.UnnestStringOpDesc import edu.uci.ics.texera.workflow.operators.visualization.boxPlot.BoxPlotOpDesc @@ -215,6 +217,8 @@ trait StateTransferFunc new Type(value = classOf[FunnelPlotOpDesc], name = "FunnelPlot"), new Type(value = classOf[TablesPlotOpDesc], name = "TablesPlot"), new Type(value = classOf[JavaUDFOpDesc], name = "JavaUDF"), + new Type(value = classOf[RUDFOpDesc], name = "RUDF"), + new Type(value = classOf[RUDFSourceOpDesc], name = "RUDFSource"), new Type(value = classOf[SortOpDesc], name = "Sort"), new Type(value = classOf[SklearnLogisticRegressionOpDesc], name = "SklearnLogisticRegression"), new Type( diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/r/RUDFOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/r/RUDFOpDesc.scala new file mode 100644 index 00000000000..951dfeb3a84 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/r/RUDFOpDesc.scala @@ -0,0 +1,170 @@ +package edu.uci.ics.texera.workflow.operators.udf.r + +import com.fasterxml.jackson.annotation.{JsonProperty, JsonPropertyDescription} +import com.google.common.base.Preconditions +import com.kjetland.jackson.jsonSchema.annotations.JsonSchemaTitle +import edu.uci.ics.amber.engine.architecture.deploysemantics.layer.OpExecInitInfo +import edu.uci.ics.amber.engine.architecture.deploysemantics.{PhysicalOp, SchemaPropagationFunc} +import edu.uci.ics.amber.engine.common.virtualidentity.{ExecutionIdentity, WorkflowIdentity} +import edu.uci.ics.amber.engine.common.workflow.{InputPort, OutputPort, PortIdentity} +import edu.uci.ics.texera.workflow.common.metadata.{OperatorGroupConstants, OperatorInfo} +import edu.uci.ics.texera.workflow.common.operators.{LogicalOp, PortDescription, StateTransferFunc} +import edu.uci.ics.texera.workflow.common.tuple.schema.{Attribute, Schema} +import edu.uci.ics.texera.workflow.common.workflow.{PartitionInfo, UnknownPartition} + +import scala.util.{Success, Try} + +class RUDFOpDesc extends LogicalOp { + @JsonProperty( + required = true, + defaultValue = + "function(table, port) {\n\n" + + "}" + ) + @JsonSchemaTitle("R UDF Script") + @JsonPropertyDescription("Input your code here") + var code: String = "" + + @JsonProperty(required = true, defaultValue = "1") + @JsonSchemaTitle("Worker count") + @JsonPropertyDescription("Specify how many parallel workers to lunch") + var workers: Int = Int.box(1) + + @JsonProperty(required = true, defaultValue = "true") + @JsonSchemaTitle("Retain input columns") + @JsonPropertyDescription("Keep the original input columns?") + var retainInputColumns: Boolean = Boolean.box(false) + + @JsonProperty + @JsonSchemaTitle("Extra output column(s)") + @JsonPropertyDescription( + "Name of the newly added output columns that the UDF will produce, if any" + ) + var outputColumns: List[Attribute] = List() + + override def getPhysicalOp( + workflowId: WorkflowIdentity, + executionId: ExecutionIdentity + ): PhysicalOp = { + Preconditions.checkArgument(workers >= 1, "Need at least 1 worker.", Array()) + val opInfo = this.operatorInfo + val partitionRequirement: List[Option[PartitionInfo]] = if (inputPorts != null) { + inputPorts.map(p => Option(p.partitionRequirement)) + } else { + opInfo.inputPorts.map(_ => None) + } + + val propagateSchema = (inputSchemas: Map[PortIdentity, Schema]) => { + val inputSchema = inputSchemas(operatorInfo.inputPorts.head.id) + val outputSchemaBuilder = Schema.builder() + // keep the same schema from input + if (retainInputColumns) outputSchemaBuilder.add(inputSchema) + // for any javaUDFType, it can add custom output columns (attributes). + if (outputColumns != null) { + if (retainInputColumns) { // check if columns are duplicated + + for (column <- outputColumns) { + if (inputSchema.containsAttribute(column.getName)) + throw new RuntimeException("Column name " + column.getName + " already exists!") + } + } + outputSchemaBuilder.add(outputColumns).build() + } + Map(operatorInfo.outputPorts.head.id -> outputSchemaBuilder.build()) + } + + if (workers > 1) + PhysicalOp + .oneToOnePhysicalOp( + workflowId, + executionId, + operatorIdentifier, + OpExecInitInfo(code, "r") + ) + .withDerivePartition(_ => UnknownPartition()) + .withInputPorts(operatorInfo.inputPorts) + .withOutputPorts(operatorInfo.outputPorts) + .withPartitionRequirement(partitionRequirement) + .withIsOneToManyOp(true) + .withParallelizable(true) + .withSuggestedWorkerNum(workers) + .withPropagateSchema(SchemaPropagationFunc(propagateSchema)) + else + PhysicalOp + .manyToOnePhysicalOp( + workflowId, + executionId, + operatorIdentifier, + OpExecInitInfo(code, "r") + ) + .withDerivePartition(_ => UnknownPartition()) + .withInputPorts(operatorInfo.inputPorts) + .withOutputPorts(operatorInfo.outputPorts) + .withPartitionRequirement(partitionRequirement) + .withIsOneToManyOp(true) + .withParallelizable(false) + .withPropagateSchema(SchemaPropagationFunc(propagateSchema)) + } + + override def operatorInfo: OperatorInfo = { + val inputPortInfo = if (inputPorts != null) { + inputPorts.zipWithIndex.map { + case (portDesc: PortDescription, idx) => + InputPort( + PortIdentity(idx), + displayName = portDesc.displayName, + allowMultiLinks = portDesc.allowMultiInputs, + dependencies = portDesc.dependencies.map(idx => PortIdentity(idx)) + ) + } + } else { + List(InputPort(PortIdentity(), allowMultiLinks = true)) + } + val outputPortInfo = if (outputPorts != null) { + outputPorts.zipWithIndex.map { + case (portDesc, idx) => OutputPort(PortIdentity(idx), displayName = portDesc.displayName) + } + } else { + List(OutputPort()) + } + + OperatorInfo( + "R UDF", + "User-defined function operator in R script", + OperatorGroupConstants.R_GROUP, + inputPortInfo, + outputPortInfo, + dynamicInputPorts = false, + dynamicOutputPorts = false, + supportReconfiguration = false, + allowPortCustomization = false + ) + } + + override def getOutputSchema(schemas: Array[Schema]): Schema = { + val inputSchema = schemas(0) + val outputSchemaBuilder = Schema.Builder() + // keep the same schema from input + if (retainInputColumns) outputSchemaBuilder.add(inputSchema) + if (outputColumns != null) { + if (retainInputColumns) { // check if columns are duplicated + + for (column <- outputColumns) { + if (inputSchema.containsAttribute(column.getName)) + throw new RuntimeException("Column name " + column.getName + " already exists!") + } + } + outputSchemaBuilder.add(outputColumns) + } + outputSchemaBuilder.build() + } + + override def runtimeReconfiguration( + workflowId: WorkflowIdentity, + executionId: ExecutionIdentity, + oldLogicalOp: LogicalOp, + newLogicalOp: LogicalOp + ): Try[(PhysicalOp, Option[StateTransferFunc])] = { + Success(newLogicalOp.getPhysicalOp(workflowId, executionId), None) + } +} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/r/RUDFSourceOpDesc.java b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/r/RUDFSourceOpDesc.java new file mode 100644 index 00000000000..58fe4977211 --- /dev/null +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/udf/r/RUDFSourceOpDesc.java @@ -0,0 +1,116 @@ +package edu.uci.ics.texera.workflow.operators.udf.r; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyDescription; +import com.google.common.base.Preconditions; +import com.kjetland.jackson.jsonSchema.annotations.JsonSchemaTitle; +import edu.uci.ics.amber.engine.architecture.deploysemantics.PhysicalOp; +import edu.uci.ics.amber.engine.architecture.deploysemantics.SchemaPropagationFunc; +import edu.uci.ics.amber.engine.architecture.deploysemantics.layer.OpExecInitInfo; +import edu.uci.ics.amber.engine.common.AmberRuntime; +import edu.uci.ics.amber.engine.common.virtualidentity.ExecutionIdentity; +import edu.uci.ics.amber.engine.common.virtualidentity.WorkflowIdentity; +import edu.uci.ics.amber.engine.common.workflow.InputPort; +import edu.uci.ics.amber.engine.common.workflow.OutputPort; +import edu.uci.ics.amber.engine.common.workflow.PortIdentity; +import edu.uci.ics.texera.workflow.common.metadata.OperatorGroupConstants; +import edu.uci.ics.texera.workflow.common.metadata.OperatorInfo; +import edu.uci.ics.texera.workflow.common.operators.source.SourceOperatorDescriptor; +import edu.uci.ics.texera.workflow.common.tuple.schema.Attribute; +import edu.uci.ics.texera.workflow.common.tuple.schema.Schema; +import edu.uci.ics.texera.workflow.operators.util.OperatorDescriptorUtils; +import scala.Option; +import scala.collection.immutable.Map; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import static java.util.Collections.singletonList; +import static scala.jdk.javaapi.CollectionConverters.asScala; + + +public class RUDFSourceOpDesc extends SourceOperatorDescriptor { + @JsonProperty( + required = true, + defaultValue = + "function() {\n\n" + + "}" + ) + @JsonSchemaTitle("R Source UDF Script") + @JsonPropertyDescription("Input your code here") + public String code; + + @JsonProperty(required = true, defaultValue = "1") + @JsonSchemaTitle("Worker count") + @JsonPropertyDescription("Specify how many parallel workers to lunch") + public Integer workers = 1; + + @JsonProperty() + @JsonSchemaTitle("Columns") + @JsonPropertyDescription("The columns of the source") + public List columns; + + @Override + public PhysicalOp getPhysicalOp(WorkflowIdentity workflowId, ExecutionIdentity executionId) { + OpExecInitInfo exec = OpExecInitInfo.apply(code, "r"); + Preconditions.checkArgument(workers >= 1, "Need at least 1 worker."); + SchemaPropagationFunc func = SchemaPropagationFunc.apply((Function, Map> & Serializable) inputSchemas -> { + // Initialize a Java HashMap + java.util.Map javaMap = new java.util.HashMap<>(); + + javaMap.put(operatorInfo().outputPorts().head().id(), sourceSchema()); + + // Convert the Java Map to a Scala immutable Map + return OperatorDescriptorUtils.toImmutableMap(javaMap); + }); + PhysicalOp physicalOp = PhysicalOp.sourcePhysicalOp( + workflowId, + executionId, + operatorIdentifier(), + exec + ) + .withInputPorts(operatorInfo().inputPorts()) + .withOutputPorts(operatorInfo().outputPorts()) + .withIsOneToManyOp(true) + .withPropagateSchema(func) + .withLocationPreference(Option.empty()); + + + if (workers > 1) { + return physicalOp + .withParallelizable(true) + .withSuggestedWorkerNum(workers); + } else { + return physicalOp.withParallelizable(false); + } + + } + + @Override + public OperatorInfo operatorInfo() { + return new OperatorInfo( + "1-out R UDF", + "User-defined function operator in R script", + OperatorGroupConstants.R_GROUP(), + asScala(new ArrayList()).toList(), + asScala(singletonList(new OutputPort(new PortIdentity(0, false), "", false))).toList(), + false, + false, + false, + false + ); + } + + @Override + public Schema sourceSchema() { + Schema.Builder outputSchemaBuilder = Schema.builder(); + + // for any UDFType, it can add custom output columns (attributes). + if (columns != null) { + outputSchemaBuilder.add(asScala(columns)).build(); + } + return outputSchemaBuilder.build(); + } +} \ No newline at end of file diff --git a/core/amber/src/main/scalapb/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlCommandV2.scala b/core/amber/src/main/scalapb/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlCommandV2.scala index 52f02b3f79d..1333742daf0 100644 --- a/core/amber/src/main/scalapb/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlCommandV2.scala +++ b/core/amber/src/main/scalapb/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlCommandV2.scala @@ -1834,6 +1834,7 @@ object SchedulerTimeSlotEventV2 extends scalapb.GeneratedMessageCompanion[edu.uc @SerialVersionUID(0L) final case class InitializeExecutorV2( code: _root_.scala.Predef.String, + language: _root_.scala.Predef.String, isSource: _root_.scala.Boolean ) extends scalapb.GeneratedMessage with edu.uci.ics.amber.engine.architecture.worker.controlcommands.ControlCommandV2.NonEmpty with scalapb.lenses.Updatable[InitializeExecutorV2] { @transient @@ -1848,10 +1849,17 @@ final case class InitializeExecutorV2( } }; + { + val __value = language + if (!__value.isEmpty) { + __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(2, __value) + } + }; + { val __value = isSource if (__value != false) { - __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(2, __value) + __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(3, __value) } }; __size @@ -1871,14 +1879,21 @@ final case class InitializeExecutorV2( _output__.writeString(1, __v) } }; + { + val __v = language + if (!__v.isEmpty) { + _output__.writeString(2, __v) + } + }; { val __v = isSource if (__v != false) { - _output__.writeBool(2, __v) + _output__.writeBool(3, __v) } }; } def withCode(__v: _root_.scala.Predef.String): InitializeExecutorV2 = copy(code = __v) + def withLanguage(__v: _root_.scala.Predef.String): InitializeExecutorV2 = copy(language = __v) def withIsSource(__v: _root_.scala.Boolean): InitializeExecutorV2 = copy(isSource = __v) def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = { (__fieldNumber: @_root_.scala.unchecked) match { @@ -1887,6 +1902,10 @@ final case class InitializeExecutorV2( if (__t != "") __t else null } case 2 => { + val __t = language + if (__t != "") __t else null + } + case 3 => { val __t = isSource if (__t != false) __t else null } @@ -1896,7 +1915,8 @@ final case class InitializeExecutorV2( _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor) (__field.number: @_root_.scala.unchecked) match { case 1 => _root_.scalapb.descriptors.PString(code) - case 2 => _root_.scalapb.descriptors.PBoolean(isSource) + case 2 => _root_.scalapb.descriptors.PString(language) + case 3 => _root_.scalapb.descriptors.PBoolean(isSource) } } def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToSingleLineUnicodeString(this) @@ -1908,6 +1928,7 @@ object InitializeExecutorV2 extends scalapb.GeneratedMessageCompanion[edu.uci.ic implicit def messageCompanion: scalapb.GeneratedMessageCompanion[edu.uci.ics.amber.engine.architecture.worker.controlcommands.InitializeExecutorV2] = this def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): edu.uci.ics.amber.engine.architecture.worker.controlcommands.InitializeExecutorV2 = { var __code: _root_.scala.Predef.String = "" + var __language: _root_.scala.Predef.String = "" var __isSource: _root_.scala.Boolean = false var _done__ = false while (!_done__) { @@ -1916,13 +1937,16 @@ object InitializeExecutorV2 extends scalapb.GeneratedMessageCompanion[edu.uci.ic case 0 => _done__ = true case 10 => __code = _input__.readStringRequireUtf8() - case 16 => + case 18 => + __language = _input__.readStringRequireUtf8() + case 24 => __isSource = _input__.readBool() case tag => _input__.skipField(tag) } } edu.uci.ics.amber.engine.architecture.worker.controlcommands.InitializeExecutorV2( code = __code, + language = __language, isSource = __isSource ) } @@ -1931,7 +1955,8 @@ object InitializeExecutorV2 extends scalapb.GeneratedMessageCompanion[edu.uci.ic _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.") edu.uci.ics.amber.engine.architecture.worker.controlcommands.InitializeExecutorV2( code = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""), - isSource = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Boolean]).getOrElse(false) + language = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""), + isSource = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).map(_.as[_root_.scala.Boolean]).getOrElse(false) ) case _ => throw new RuntimeException("Expected PMessage") } @@ -1942,19 +1967,24 @@ object InitializeExecutorV2 extends scalapb.GeneratedMessageCompanion[edu.uci.ic def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber) lazy val defaultInstance = edu.uci.ics.amber.engine.architecture.worker.controlcommands.InitializeExecutorV2( code = "", + language = "", isSource = false ) implicit class InitializeExecutorV2Lens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, edu.uci.ics.amber.engine.architecture.worker.controlcommands.InitializeExecutorV2]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, edu.uci.ics.amber.engine.architecture.worker.controlcommands.InitializeExecutorV2](_l) { def code: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.code)((c_, f_) => c_.copy(code = f_)) + def language: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.language)((c_, f_) => c_.copy(language = f_)) def isSource: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.isSource)((c_, f_) => c_.copy(isSource = f_)) } final val CODE_FIELD_NUMBER = 1 - final val IS_SOURCE_FIELD_NUMBER = 2 + final val LANGUAGE_FIELD_NUMBER = 2 + final val IS_SOURCE_FIELD_NUMBER = 3 def of( code: _root_.scala.Predef.String, + language: _root_.scala.Predef.String, isSource: _root_.scala.Boolean ): _root_.edu.uci.ics.amber.engine.architecture.worker.controlcommands.InitializeExecutorV2 = _root_.edu.uci.ics.amber.engine.architecture.worker.controlcommands.InitializeExecutorV2( code, + language, isSource ) // @@protoc_insertion_point(GeneratedMessageCompanion[edu.uci.ics.amber.engine.architecture.worker.InitializeExecutorV2]) diff --git a/core/amber/src/main/scalapb/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlcommandsProto.scala b/core/amber/src/main/scalapb/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlcommandsProto.scala index 3125cb2b6cf..d2c71617e83 100644 --- a/core/amber/src/main/scalapb/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlcommandsProto.scala +++ b/core/amber/src/main/scalapb/edu/uci/ics/amber/engine/architecture/worker/controlcommands/ControlcommandsProto.scala @@ -60,55 +60,56 @@ object ControlcommandsProto extends _root_.scalapb.GeneratedFileObject { Gl0aW9uaW5nIhwKGldvcmtlckV4ZWN1dGlvbkNvbXBsZXRlZFYyIhMKEVF1ZXJ5U3RhdGlzdGljc1YyIhoKGFF1ZXJ5Q3VycmVud ElucHV0VHVwbGVWMiKTAQoLTGlua09yZGluYWwSTwoEbGluaxgBIAEoCzItLmVkdS51Y2kuaWNzLmFtYmVyLmVuZ2luZS5jb21tb 24uUGh5c2ljYWxMaW5rQgziPwkSBGxpbmvwAQFSBGxpbmsSMwoMcG9ydF9vcmRpbmFsGAIgASgDQhDiPw0SC3BvcnRPcmRpbmFsU - gtwb3J0T3JkaW5hbCJhChRJbml0aWFsaXplRXhlY3V0b3JWMhIdCgRjb2RlGAEgASgJQgniPwYSBGNvZGVSBGNvZGUSKgoJaXNfc - 291cmNlGAIgASgIQg3iPwoSCGlzU291cmNlUghpc1NvdXJjZSJdChBVcGRhdGVFeGVjdXRvclYyEh0KBGNvZGUYASABKAlCCeI/B - hIEY29kZVIEY29kZRIqCglpc19zb3VyY2UYAiABKAhCDeI/ChIIaXNTb3VyY2VSCGlzU291cmNlIhYKFFJlcGxheUN1cnJlbnRUd - XBsZVYyIuMCCg5Db25zb2xlTWVzc2FnZRIqCgl3b3JrZXJfaWQYASABKAlCDeI/ChIId29ya2VySWRSCHdvcmtlcklkEksKCXRpb - WVzdGFtcBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCEeI/DhIJdGltZXN0YW1w8AEBUgl0aW1lc3RhbXASaQoIb - XNnX3R5cGUYAyABKA4yQC5lZHUudWNpLmljcy5hbWJlci5lbmdpbmUuYXJjaGl0ZWN0dXJlLndvcmtlci5Db25zb2xlTWVzc2FnZ - VR5cGVCDOI/CRIHbXNnVHlwZVIHbXNnVHlwZRIjCgZzb3VyY2UYBCABKAlCC+I/CBIGc291cmNlUgZzb3VyY2USIAoFdGl0bGUYB - SABKAlCCuI/BxIFdGl0bGVSBXRpdGxlEiYKB21lc3NhZ2UYBiABKAlCDOI/CRIHbWVzc2FnZVIHbWVzc2FnZSKBAQoWUHl0aG9uQ - 29uc29sZU1lc3NhZ2VWMhJnCgdtZXNzYWdlGAEgASgLMjwuZWR1LnVjaS5pY3MuYW1iZXIuZW5naW5lLmFyY2hpdGVjdHVyZS53b - 3JrZXIuQ29uc29sZU1lc3NhZ2VCD+I/DBIHbWVzc2FnZfABAVIHbWVzc2FnZSJHChRFdmFsdWF0ZUV4cHJlc3Npb25WMhIvCgple - HByZXNzaW9uGAEgASgJQg/iPwwSCmV4cHJlc3Npb25SCmV4cHJlc3Npb24iMgoUV29ya2VyRGVidWdDb21tYW5kVjISGgoDY21kG - AEgASgJQgjiPwUSA2NtZFIDY21kIosBCg9Qb3J0Q29tcGxldGVkVjISVgoHcG9ydF9pZBgBIAEoCzItLmVkdS51Y2kuaWNzLmFtY - mVyLmVuZ2luZS5jb21tb24uUG9ydElkZW50aXR5Qg7iPwsSBnBvcnRJZPABAVIGcG9ydElkEiAKBWlucHV0GAIgASgIQgriPwcSB - WlucHV0UgVpbnB1dCKfFAoQQ29udHJvbENvbW1hbmRWMhJyCgxzdGFydF93b3JrZXIYASABKAsyOy5lZHUudWNpLmljcy5hbWJlc - i5lbmdpbmUuYXJjaGl0ZWN0dXJlLndvcmtlci5TdGFydFdvcmtlclYyQhDiPw0SC3N0YXJ0V29ya2VySABSC3N0YXJ0V29ya2VyE - nIKDHBhdXNlX3dvcmtlchgCIAEoCzI7LmVkdS51Y2kuaWNzLmFtYmVyLmVuZ2luZS5hcmNoaXRlY3R1cmUud29ya2VyLlBhdXNlV - 29ya2VyVjJCEOI/DRILcGF1c2VXb3JrZXJIAFILcGF1c2VXb3JrZXISdgoNcmVzdW1lX3dvcmtlchgDIAEoCzI8LmVkdS51Y2kua - WNzLmFtYmVyLmVuZ2luZS5hcmNoaXRlY3R1cmUud29ya2VyLlJlc3VtZVdvcmtlclYyQhHiPw4SDHJlc3VtZVdvcmtlckgAUgxyZ - XN1bWVXb3JrZXISbgoLYXNzaWduX3BvcnQYBCABKAsyOi5lZHUudWNpLmljcy5hbWJlci5lbmdpbmUuYXJjaGl0ZWN0dXJlLndvc - mtlci5Bc3NpZ25Qb3J0VjJCD+I/DBIKYXNzaWduUG9ydEgAUgphc3NpZ25Qb3J0EoIBChBhZGRfcGFydGl0aW9uaW5nGAUgASgLM - j8uZWR1LnVjaS5pY3MuYW1iZXIuZW5naW5lLmFyY2hpdGVjdHVyZS53b3JrZXIuQWRkUGFydGl0aW9uaW5nVjJCFOI/ERIPYWRkU - GFydGl0aW9uaW5nSABSD2FkZFBhcnRpdGlvbmluZxKDAQoRYWRkX2lucHV0X2NoYW5uZWwYBiABKAsyPy5lZHUudWNpLmljcy5hb - WJlci5lbmdpbmUuYXJjaGl0ZWN0dXJlLndvcmtlci5BZGRJbnB1dENoYW5uZWxWMkIU4j8REg9hZGRJbnB1dENoYW5uZWxIAFIPY - WRkSW5wdXRDaGFubmVsEoIBChBxdWVyeV9zdGF0aXN0aWNzGAcgASgLMj8uZWR1LnVjaS5pY3MuYW1iZXIuZW5naW5lLmFyY2hpd - GVjdHVyZS53b3JrZXIuUXVlcnlTdGF0aXN0aWNzVjJCFOI/ERIPcXVlcnlTdGF0aXN0aWNzSABSD3F1ZXJ5U3RhdGlzdGljcxKgA - QoZcXVlcnlfY3VycmVudF9pbnB1dF90dXBsZRgIIAEoCzJGLmVkdS51Y2kuaWNzLmFtYmVyLmVuZ2luZS5hcmNoaXRlY3R1cmUud - 29ya2VyLlF1ZXJ5Q3VycmVudElucHV0VHVwbGVWMkIb4j8YEhZxdWVyeUN1cnJlbnRJbnB1dFR1cGxlSABSFnF1ZXJ5Q3VycmVud - ElucHV0VHVwbGUSdgoNb3Blbl9leGVjdXRvchgJIAEoCzI8LmVkdS51Y2kuaWNzLmFtYmVyLmVuZ2luZS5hcmNoaXRlY3R1cmUud - 29ya2VyLk9wZW5FeGVjdXRvclYyQhHiPw4SDG9wZW5FeGVjdXRvckgAUgxvcGVuRXhlY3V0b3ISegoOcG9ydF9jb21wbGV0ZWQYC - iABKAsyPS5lZHUudWNpLmljcy5hbWJlci5lbmdpbmUuYXJjaGl0ZWN0dXJlLndvcmtlci5Qb3J0Q29tcGxldGVkVjJCEuI/DxINc - G9ydENvbXBsZXRlZEgAUg1wb3J0Q29tcGxldGVkEqABChlzY2hlZHVsZXJfdGltZV9zbG90X2V2ZW50GAsgASgLMkYuZWR1LnVja - S5pY3MuYW1iZXIuZW5naW5lLmFyY2hpdGVjdHVyZS53b3JrZXIuU2NoZWR1bGVyVGltZVNsb3RFdmVudFYyQhviPxgSFnNjaGVkd - WxlclRpbWVTbG90RXZlbnRIAFIWc2NoZWR1bGVyVGltZVNsb3RFdmVudBKOAQoTaW5pdGlhbGl6ZV9leGVjdXRvchgVIAEoCzJCL - mVkdS51Y2kuaWNzLmFtYmVyLmVuZ2luZS5hcmNoaXRlY3R1cmUud29ya2VyLkluaXRpYWxpemVFeGVjdXRvclYyQhfiPxQSEmlua - XRpYWxpemVFeGVjdXRvckgAUhJpbml0aWFsaXplRXhlY3V0b3ISfgoPdXBkYXRlX2V4ZWN1dG9yGBYgASgLMj4uZWR1LnVjaS5pY - 3MuYW1iZXIuZW5naW5lLmFyY2hpdGVjdHVyZS53b3JrZXIuVXBkYXRlRXhlY3V0b3JWMkIT4j8QEg51cGRhdGVFeGVjdXRvckgAU - g51cGRhdGVFeGVjdXRvchKXAQoWcHl0aG9uX2NvbnNvbGVfbWVzc2FnZRgXIAEoCzJELmVkdS51Y2kuaWNzLmFtYmVyLmVuZ2luZ - S5hcmNoaXRlY3R1cmUud29ya2VyLlB5dGhvbkNvbnNvbGVNZXNzYWdlVjJCGeI/FhIUcHl0aG9uQ29uc29sZU1lc3NhZ2VIAFIUc - Hl0aG9uQ29uc29sZU1lc3NhZ2USjwEKFHJlcGxheV9jdXJyZW50X3R1cGxlGBggASgLMkIuZWR1LnVjaS5pY3MuYW1iZXIuZW5na - W5lLmFyY2hpdGVjdHVyZS53b3JrZXIuUmVwbGF5Q3VycmVudFR1cGxlVjJCF+I/FBIScmVwbGF5Q3VycmVudFR1cGxlSABSEnJlc - GxheUN1cnJlbnRUdXBsZRKOAQoTZXZhbHVhdGVfZXhwcmVzc2lvbhgZIAEoCzJCLmVkdS51Y2kuaWNzLmFtYmVyLmVuZ2luZS5hc - mNoaXRlY3R1cmUud29ya2VyLkV2YWx1YXRlRXhwcmVzc2lvblYyQhfiPxQSEmV2YWx1YXRlRXhwcmVzc2lvbkgAUhJldmFsdWF0Z - UV4cHJlc3Npb24SjwEKFHdvcmtlcl9kZWJ1Z19jb21tYW5kGFEgASgLMkIuZWR1LnVjaS5pY3MuYW1iZXIuZW5naW5lLmFyY2hpd - GVjdHVyZS53b3JrZXIuV29ya2VyRGVidWdDb21tYW5kVjJCF+I/FBISd29ya2VyRGVidWdDb21tYW5kSABSEndvcmtlckRlYnVnQ - 29tbWFuZBKnAQoad29ya2VyX2V4ZWN1dGlvbl9jb21wbGV0ZWQYZSABKAsySC5lZHUudWNpLmljcy5hbWJlci5lbmdpbmUuYXJja - Gl0ZWN0dXJlLndvcmtlci5Xb3JrZXJFeGVjdXRpb25Db21wbGV0ZWRWMkId4j8aEhh3b3JrZXJFeGVjdXRpb25Db21wbGV0ZWRIA - FIYd29ya2VyRXhlY3V0aW9uQ29tcGxldGVkElcKBW5vX29wGI9OIAEoCzI0LmVkdS51Y2kuaWNzLmFtYmVyLmVuZ2luZS5hcmNoa - XRlY3R1cmUud29ya2VyLk5vT3BWMkIJ4j8GEgRub09wSABSBG5vT3BCDgoMc2VhbGVkX3ZhbHVlKkUKEkNvbnNvbGVNZXNzYWdlV - HlwZRIJCgVQUklOVBAAEgkKBUVSUk9SEAESCwoHQ09NTUFORBACEgwKCERFQlVHR0VSEANCCeI/BkgAWAB4AWIGcHJvdG8z""" + gtwb3J0T3JkaW5hbCKMAQoUSW5pdGlhbGl6ZUV4ZWN1dG9yVjISHQoEY29kZRgBIAEoCUIJ4j8GEgRjb2RlUgRjb2RlEikKCGxhb + md1YWdlGAIgASgJQg3iPwoSCGxhbmd1YWdlUghsYW5ndWFnZRIqCglpc19zb3VyY2UYAyABKAhCDeI/ChIIaXNTb3VyY2VSCGlzU + 291cmNlIl0KEFVwZGF0ZUV4ZWN1dG9yVjISHQoEY29kZRgBIAEoCUIJ4j8GEgRjb2RlUgRjb2RlEioKCWlzX3NvdXJjZRgCIAEoC + EIN4j8KEghpc1NvdXJjZVIIaXNTb3VyY2UiFgoUUmVwbGF5Q3VycmVudFR1cGxlVjIi4wIKDkNvbnNvbGVNZXNzYWdlEioKCXdvc + mtlcl9pZBgBIAEoCUIN4j8KEgh3b3JrZXJJZFIId29ya2VySWQSSwoJdGltZXN0YW1wGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmL + lRpbWVzdGFtcEIR4j8OEgl0aW1lc3RhbXDwAQFSCXRpbWVzdGFtcBJpCghtc2dfdHlwZRgDIAEoDjJALmVkdS51Y2kuaWNzLmFtY + mVyLmVuZ2luZS5hcmNoaXRlY3R1cmUud29ya2VyLkNvbnNvbGVNZXNzYWdlVHlwZUIM4j8JEgdtc2dUeXBlUgdtc2dUeXBlEiMKB + nNvdXJjZRgEIAEoCUIL4j8IEgZzb3VyY2VSBnNvdXJjZRIgCgV0aXRsZRgFIAEoCUIK4j8HEgV0aXRsZVIFdGl0bGUSJgoHbWVzc + 2FnZRgGIAEoCUIM4j8JEgdtZXNzYWdlUgdtZXNzYWdlIoEBChZQeXRob25Db25zb2xlTWVzc2FnZVYyEmcKB21lc3NhZ2UYASABK + AsyPC5lZHUudWNpLmljcy5hbWJlci5lbmdpbmUuYXJjaGl0ZWN0dXJlLndvcmtlci5Db25zb2xlTWVzc2FnZUIP4j8MEgdtZXNzY + Wdl8AEBUgdtZXNzYWdlIkcKFEV2YWx1YXRlRXhwcmVzc2lvblYyEi8KCmV4cHJlc3Npb24YASABKAlCD+I/DBIKZXhwcmVzc2lvb + lIKZXhwcmVzc2lvbiIyChRXb3JrZXJEZWJ1Z0NvbW1hbmRWMhIaCgNjbWQYASABKAlCCOI/BRIDY21kUgNjbWQiiwEKD1BvcnRDb + 21wbGV0ZWRWMhJWCgdwb3J0X2lkGAEgASgLMi0uZWR1LnVjaS5pY3MuYW1iZXIuZW5naW5lLmNvbW1vbi5Qb3J0SWRlbnRpdHlCD + uI/CxIGcG9ydElk8AEBUgZwb3J0SWQSIAoFaW5wdXQYAiABKAhCCuI/BxIFaW5wdXRSBWlucHV0Ip8UChBDb250cm9sQ29tbWFuZ + FYyEnIKDHN0YXJ0X3dvcmtlchgBIAEoCzI7LmVkdS51Y2kuaWNzLmFtYmVyLmVuZ2luZS5hcmNoaXRlY3R1cmUud29ya2VyLlN0Y + XJ0V29ya2VyVjJCEOI/DRILc3RhcnRXb3JrZXJIAFILc3RhcnRXb3JrZXIScgoMcGF1c2Vfd29ya2VyGAIgASgLMjsuZWR1LnVja + S5pY3MuYW1iZXIuZW5naW5lLmFyY2hpdGVjdHVyZS53b3JrZXIuUGF1c2VXb3JrZXJWMkIQ4j8NEgtwYXVzZVdvcmtlckgAUgtwY + XVzZVdvcmtlchJ2Cg1yZXN1bWVfd29ya2VyGAMgASgLMjwuZWR1LnVjaS5pY3MuYW1iZXIuZW5naW5lLmFyY2hpdGVjdHVyZS53b + 3JrZXIuUmVzdW1lV29ya2VyVjJCEeI/DhIMcmVzdW1lV29ya2VySABSDHJlc3VtZVdvcmtlchJuCgthc3NpZ25fcG9ydBgEIAEoC + zI6LmVkdS51Y2kuaWNzLmFtYmVyLmVuZ2luZS5hcmNoaXRlY3R1cmUud29ya2VyLkFzc2lnblBvcnRWMkIP4j8MEgphc3NpZ25Qb + 3J0SABSCmFzc2lnblBvcnQSggEKEGFkZF9wYXJ0aXRpb25pbmcYBSABKAsyPy5lZHUudWNpLmljcy5hbWJlci5lbmdpbmUuYXJja + Gl0ZWN0dXJlLndvcmtlci5BZGRQYXJ0aXRpb25pbmdWMkIU4j8REg9hZGRQYXJ0aXRpb25pbmdIAFIPYWRkUGFydGl0aW9uaW5nE + oMBChFhZGRfaW5wdXRfY2hhbm5lbBgGIAEoCzI/LmVkdS51Y2kuaWNzLmFtYmVyLmVuZ2luZS5hcmNoaXRlY3R1cmUud29ya2VyL + kFkZElucHV0Q2hhbm5lbFYyQhTiPxESD2FkZElucHV0Q2hhbm5lbEgAUg9hZGRJbnB1dENoYW5uZWwSggEKEHF1ZXJ5X3N0YXRpc + 3RpY3MYByABKAsyPy5lZHUudWNpLmljcy5hbWJlci5lbmdpbmUuYXJjaGl0ZWN0dXJlLndvcmtlci5RdWVyeVN0YXRpc3RpY3NWM + kIU4j8REg9xdWVyeVN0YXRpc3RpY3NIAFIPcXVlcnlTdGF0aXN0aWNzEqABChlxdWVyeV9jdXJyZW50X2lucHV0X3R1cGxlGAggA + SgLMkYuZWR1LnVjaS5pY3MuYW1iZXIuZW5naW5lLmFyY2hpdGVjdHVyZS53b3JrZXIuUXVlcnlDdXJyZW50SW5wdXRUdXBsZVYyQ + hviPxgSFnF1ZXJ5Q3VycmVudElucHV0VHVwbGVIAFIWcXVlcnlDdXJyZW50SW5wdXRUdXBsZRJ2Cg1vcGVuX2V4ZWN1dG9yGAkgA + SgLMjwuZWR1LnVjaS5pY3MuYW1iZXIuZW5naW5lLmFyY2hpdGVjdHVyZS53b3JrZXIuT3BlbkV4ZWN1dG9yVjJCEeI/DhIMb3Blb + kV4ZWN1dG9ySABSDG9wZW5FeGVjdXRvchJ6Cg5wb3J0X2NvbXBsZXRlZBgKIAEoCzI9LmVkdS51Y2kuaWNzLmFtYmVyLmVuZ2luZ + S5hcmNoaXRlY3R1cmUud29ya2VyLlBvcnRDb21wbGV0ZWRWMkIS4j8PEg1wb3J0Q29tcGxldGVkSABSDXBvcnRDb21wbGV0ZWQSo + AEKGXNjaGVkdWxlcl90aW1lX3Nsb3RfZXZlbnQYCyABKAsyRi5lZHUudWNpLmljcy5hbWJlci5lbmdpbmUuYXJjaGl0ZWN0dXJlL + ndvcmtlci5TY2hlZHVsZXJUaW1lU2xvdEV2ZW50VjJCG+I/GBIWc2NoZWR1bGVyVGltZVNsb3RFdmVudEgAUhZzY2hlZHVsZXJUa + W1lU2xvdEV2ZW50Eo4BChNpbml0aWFsaXplX2V4ZWN1dG9yGBUgASgLMkIuZWR1LnVjaS5pY3MuYW1iZXIuZW5naW5lLmFyY2hpd + GVjdHVyZS53b3JrZXIuSW5pdGlhbGl6ZUV4ZWN1dG9yVjJCF+I/FBISaW5pdGlhbGl6ZUV4ZWN1dG9ySABSEmluaXRpYWxpemVFe + GVjdXRvchJ+Cg91cGRhdGVfZXhlY3V0b3IYFiABKAsyPi5lZHUudWNpLmljcy5hbWJlci5lbmdpbmUuYXJjaGl0ZWN0dXJlLndvc + mtlci5VcGRhdGVFeGVjdXRvclYyQhPiPxASDnVwZGF0ZUV4ZWN1dG9ySABSDnVwZGF0ZUV4ZWN1dG9yEpcBChZweXRob25fY29uc + 29sZV9tZXNzYWdlGBcgASgLMkQuZWR1LnVjaS5pY3MuYW1iZXIuZW5naW5lLmFyY2hpdGVjdHVyZS53b3JrZXIuUHl0aG9uQ29uc + 29sZU1lc3NhZ2VWMkIZ4j8WEhRweXRob25Db25zb2xlTWVzc2FnZUgAUhRweXRob25Db25zb2xlTWVzc2FnZRKPAQoUcmVwbGF5X + 2N1cnJlbnRfdHVwbGUYGCABKAsyQi5lZHUudWNpLmljcy5hbWJlci5lbmdpbmUuYXJjaGl0ZWN0dXJlLndvcmtlci5SZXBsYXlDd + XJyZW50VHVwbGVWMkIX4j8UEhJyZXBsYXlDdXJyZW50VHVwbGVIAFIScmVwbGF5Q3VycmVudFR1cGxlEo4BChNldmFsdWF0ZV9le + HByZXNzaW9uGBkgASgLMkIuZWR1LnVjaS5pY3MuYW1iZXIuZW5naW5lLmFyY2hpdGVjdHVyZS53b3JrZXIuRXZhbHVhdGVFeHByZ + XNzaW9uVjJCF+I/FBISZXZhbHVhdGVFeHByZXNzaW9uSABSEmV2YWx1YXRlRXhwcmVzc2lvbhKPAQoUd29ya2VyX2RlYnVnX2Nvb + W1hbmQYUSABKAsyQi5lZHUudWNpLmljcy5hbWJlci5lbmdpbmUuYXJjaGl0ZWN0dXJlLndvcmtlci5Xb3JrZXJEZWJ1Z0NvbW1hb + mRWMkIX4j8UEhJ3b3JrZXJEZWJ1Z0NvbW1hbmRIAFISd29ya2VyRGVidWdDb21tYW5kEqcBChp3b3JrZXJfZXhlY3V0aW9uX2Nvb + XBsZXRlZBhlIAEoCzJILmVkdS51Y2kuaWNzLmFtYmVyLmVuZ2luZS5hcmNoaXRlY3R1cmUud29ya2VyLldvcmtlckV4ZWN1dGlvb + kNvbXBsZXRlZFYyQh3iPxoSGHdvcmtlckV4ZWN1dGlvbkNvbXBsZXRlZEgAUhh3b3JrZXJFeGVjdXRpb25Db21wbGV0ZWQSVwoFb + m9fb3AYj04gASgLMjQuZWR1LnVjaS5pY3MuYW1iZXIuZW5naW5lLmFyY2hpdGVjdHVyZS53b3JrZXIuTm9PcFYyQgniPwYSBG5vT + 3BIAFIEbm9PcEIOCgxzZWFsZWRfdmFsdWUqRQoSQ29uc29sZU1lc3NhZ2VUeXBlEgkKBVBSSU5UEAASCQoFRVJST1IQARILCgdDT + 01NQU5EEAISDAoIREVCVUdHRVIQA0IJ4j8GSABYAHgBYgZwcm90bzM=""" ).mkString) lazy val scalaDescriptor: _root_.scalapb.descriptors.FileDescriptor = { val scalaProto = com.google.protobuf.descriptor.FileDescriptorProto.parseFrom(ProtoBytes) diff --git a/core/gui/src/app/workspace/component/code-editor-dialog/code-editor.component.ts b/core/gui/src/app/workspace/component/code-editor-dialog/code-editor.component.ts index 561ba279957..3d79c078b94 100644 --- a/core/gui/src/app/workspace/component/code-editor-dialog/code-editor.component.ts +++ b/core/gui/src/app/workspace/component/code-editor-dialog/code-editor.component.ts @@ -52,6 +52,7 @@ export class CodeEditorComponent implements AfterViewInit, SafeStyle, OnDestroy changeLanguage(newLanguage: string) { this.language = newLanguage; + console.log("change to ", newLanguage); if (this.editor) { monaco.editor.setModelLanguage(this.editor.getModel(), newLanguage); } @@ -66,7 +67,15 @@ export class CodeEditorComponent implements AfterViewInit, SafeStyle, OnDestroy ) { const currentOperatorId = this.workflowActionService.getJointGraphWrapper().getCurrentHighlightedOperatorIDs()[0]; const operatorType = this.workflowActionService.getTexeraGraph().getOperator(currentOperatorId).operatorType; - this.changeLanguage(operatorType === "JavaUDF" ? "java" : "python"); + + console.log(operatorType); + if (operatorType === "RUDFSource" || operatorType === "RUDF") { + this.changeLanguage("r"); + } else if (operatorType === "PythonUDFV2" || operatorType === "PythonUDFSourceV2") { + this.changeLanguage("python"); + } else { + this.changeLanguage("java"); + } } ngAfterViewInit() { @@ -82,6 +91,8 @@ export class CodeEditorComponent implements AfterViewInit, SafeStyle, OnDestroy .get("operatorProperties") as YType> ).get("code") as YText; + console.log("added this code ", this.code); + this.workflowVersionService .getDisplayParticularVersionStream() .pipe(takeUntil(this.workflowVersionStreamSubject)) @@ -155,7 +166,9 @@ export class CodeEditorComponent implements AfterViewInit, SafeStyle, OnDestroy ); } this.editor = editor; - this.connectLanguageServer(); + if (this.language == "python") { + this.connectLanguageServer(); + } } private connectLanguageServer() { diff --git a/core/gui/src/app/workspace/service/workflow-graph/model/workflow-graph.ts b/core/gui/src/app/workspace/service/workflow-graph/model/workflow-graph.ts index 0a073c82049..c4119db4fc7 100644 --- a/core/gui/src/app/workspace/service/workflow-graph/model/workflow-graph.ts +++ b/core/gui/src/app/workspace/service/workflow-graph/model/workflow-graph.ts @@ -808,13 +808,16 @@ export class WorkflowGraph { * @param newProperty new property to set, the new y-object created from this will replace the old structure. */ public setOperatorProperty(operatorID: string, newProperty: object): void { + console.log("setting ", operatorID, newProperty); if (!this.hasOperator(operatorID)) { throw new Error(`operator with ID ${operatorID} doesn't exist`); } + console.log("setting ", operatorID, newProperty); const previousProperty = this.getSharedOperatorType(operatorID).get( "operatorProperties" ) as YType; + // set the new copy back to the operator ID map updateYTypeFromObject(previousProperty, newProperty); } diff --git a/core/gui/src/assets/operator_images/RUDF.png b/core/gui/src/assets/operator_images/RUDF.png new file mode 100644 index 0000000000000000000000000000000000000000..17e40672f8493e8f0178c8ed05800e10fca01b76 GIT binary patch literal 10458 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 Q*gycg%=em=o6s-*4@!!G>i_@% literal 0 HcmV?d00001 diff --git a/core/gui/src/assets/operator_images/RUDFSource.png b/core/gui/src/assets/operator_images/RUDFSource.png new file mode 100644 index 0000000000000000000000000000000000000000..17e40672f8493e8f0178c8ed05800e10fca01b76 GIT binary patch literal 10458 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 Q*gycg%=em=o6s-*4@!!G>i_@% literal 0 HcmV?d00001 From e6042eb8e8a3aa8464fe2cdc9537ab666d876a5a Mon Sep 17 00:00:00 2001 From: Jiadong Bai <43344272+bobbai00@users.noreply.github.com> Date: Sun, 19 May 2024 16:29:00 -0700 Subject: [PATCH 42/44] Refine VirtualDocument APIs and PartitionDocument implementation (#2669) This PR first changes the VirtualDocument APIs, by replacing all the function names containing`write`/`set`, which are requiring to do append write, to `append`. It also modifies the `PartitionDocument` and `FileDocument` by adding a type parameter `T`. Using this T, the `FileDocument` supports iterator and get by index to provide caller more convenient way of doing read. --- .../engine/common/storage/FileDocument.scala | 76 ++++++++++++++++--- .../common/storage/VirtualDocument.scala | 17 +++-- .../storage/partition/PartitionDocument.scala | 15 ++-- .../common/storage/FileDocumentSpec.scala | 12 +-- .../partition/PartitionDocumentSpec.scala | 58 ++++++++------ 5 files changed, 124 insertions(+), 54 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/FileDocument.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/FileDocument.scala index 61585461697..b6d191e6dc3 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/FileDocument.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/FileDocument.scala @@ -1,23 +1,33 @@ package edu.uci.ics.amber.engine.common.storage +import com.twitter.chill.{KryoPool, ScalaKryoInstantiator} +import edu.uci.ics.amber.engine.common.storage.FileDocument.kryoPool import org.apache.commons.vfs2.{FileObject, VFS} -import java.io.{InputStream, OutputStreamWriter} +import java.io.InputStream import java.net.URI import java.util.concurrent.locks.ReentrantReadWriteLock +object FileDocument { + // Initialize KryoPool as a static object + private val kryoPool = KryoPool.withByteArrayOutputStream(10, new ScalaKryoInstantiator) +} + /** * FileDocument provides methods to read/write a file located on filesystem. * All methods are THREAD-SAFE implemented using read-write lock: * - 1 writer at a time: only 1 thread of current JVM can acquire the write lock * - n reader at a time: multiple threads of current JVM can acquire the read lock + * + * The type parameter T is used to specify the iterable data item stored in the File. FileDocument provides easy ways of setting/iterating these data items + * * @param uri the identifier of the file. If file doesn't physically exist, FileDocument will create the file during the constructing phase. */ -class FileDocument(val uri: URI) extends VirtualDocument[String] { +class FileDocument[T >: Null <: AnyRef](val uri: URI) extends VirtualDocument[T] { val file: FileObject = VFS.getManager.resolveFile(uri.toString) val lock = new ReentrantReadWriteLock() // Utility function to wrap code block with read lock - private def withReadLock[T](block: => T): T = { + private def withReadLock[M](block: => M): M = { lock.readLock().lock() try { block @@ -49,9 +59,10 @@ class FileDocument(val uri: URI) extends VirtualDocument[String] { /** * Append the content in the inputStream to the FileDocument. This method is THREAD-SAFE + * This method will NOT do any serialization. So the it is invalid to use getItem and iterator to get T from the document. * @param inputStream the data source input stream */ - override def write(inputStream: InputStream): Unit = + override def appendStream(inputStream: InputStream): Unit = withWriteLock { val outStream = file.getContent.getOutputStream(true) try { @@ -68,22 +79,67 @@ class FileDocument(val uri: URI) extends VirtualDocument[String] { } /** - * Append the content in the given string to the FileDocument. This method is THREAD-SAFE + * Append the content in the given object to the FileDocument. This method is THREAD-SAFE + * Each record will be stored as . * @param item the content to append */ - override def setItem(item: String): Unit = + override def append(item: T): Unit = withWriteLock { val outStream = file.getContent.getOutputStream(true) - val writer = new OutputStreamWriter(outStream) + val dataOutStream = new java.io.DataOutputStream(outStream) try { - writer.write(item) - writer.flush() + // write the length and the raw bytes in + val serializedBytes = kryoPool.toBytesWithClass(item) + dataOutStream.writeInt(serializedBytes.length) + dataOutStream.write(serializedBytes) } finally { - writer.close() + dataOutStream.close() outStream.close() } } + /** + * get the ith data item. The returned value will be deserialized using kyro + * + * @param i index starting from 0 + * @return data item of type T + */ + override def getItem(i: Int): T = { + val iterator = get() + iterator.drop(i).next() + } + + /** + * get the iterator of data items of type T. Each returned item will be deserialized using kyro + * @return an iterator that return data item of type T + */ + override def get(): Iterator[T] = { + lazy val input = new com.twitter.chill.Input(asInputStream()) + new Iterator[T] { + var record: T = internalNext() + + private def internalNext(): T = { + try { + val len = input.readInt() + val bytes = input.readBytes(len) + kryoPool.fromBytes(bytes).asInstanceOf[T] + } catch { + case _: Throwable => + input.close() + null + } + } + + override def next(): T = { + val currentRecord = record + record = internalNext() + currentRecord + } + + override def hasNext: Boolean = record != null + } + } + /** * Read content in the file document as the InputStream. This method is THREAD-SAFE * @return the input stream of content in the FileDocument. Due to the constraint of getInputStream, there may be only 1 input/output stream at any time diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/VirtualDocument.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/VirtualDocument.scala index 082e8b790b9..734a539f07e 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/VirtualDocument.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/VirtualDocument.scala @@ -32,32 +32,33 @@ abstract class VirtualDocument[T >: Null <: AnyRef] { def get(): Iterator[T] = throw new NotImplementedError("get method is not implemented") /** - * append one data item to the document + * set ith item * @param item the data item */ - def setItem(item: T): Unit = + def setItem(i: Int, item: T): Unit = throw new NotImplementedError("setItem method is not implemented") /** - * set ith item + * append one data item to the document + * * @param item the data item */ - def setItem(i: Int, item: T): Unit = + def append(item: T): Unit = throw new NotImplementedError("setItem method is not implemented") /** * append data items from the iterator to the document * @param items iterator for the data item */ - def write(items: Iterator[T]): Unit = - throw new NotImplementedError("write method is not implemented") + def append(items: Iterator[T]): Unit = + throw new NotImplementedError("append method is not implemented") /** * append the file content with an opened input stream * @param inputStream the data source input stream */ - def write(inputStream: InputStream): Unit = - throw new NotImplementedError("write method is not implemented") + def appendStream(inputStream: InputStream): Unit = + throw new NotImplementedError("append method is not implemented") /** * convert document as an input stream diff --git a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/partition/PartitionDocument.scala b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/partition/PartitionDocument.scala index acb17c22459..eb4932841d7 100644 --- a/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/partition/PartitionDocument.scala +++ b/core/amber/src/main/scala/edu/uci/ics/amber/engine/common/storage/partition/PartitionDocument.scala @@ -11,11 +11,12 @@ import java.net.URI * PartitionDocument only support getting the FileDocument that corresponds to the single partition either by index or by iterator. * To write over the partition, you should get the FileDocument first, then call write-related methods over it. FileDocument guarantees the thread-safe read/write. * + * The Type parameter T is used to specify the type of data item stored in the partition * @param uri the id of this partition document. Note that this URI does not physically corresponds to a file. * @param numOfPartition number of partitions */ -class PartitionDocument(val uri: URI, val numOfPartition: Int) - extends VirtualDocument[FileDocument] { +class PartitionDocument[T >: Null <: AnyRef](val uri: URI, val numOfPartition: Int) + extends VirtualDocument[FileDocument[T]] { /** * Utility functions to generate the partition URI by index @@ -40,7 +41,7 @@ class PartitionDocument(val uri: URI, val numOfPartition: Int) * @param i index starting from 0 * @return FileDocument corresponds to the certain partition */ - override def getItem(i: Int): FileDocument = { + override def getItem(i: Int): FileDocument[T] = { new FileDocument(getPartitionURI(i)) } @@ -49,17 +50,17 @@ class PartitionDocument(val uri: URI, val numOfPartition: Int) * This method is THREAD-UNSAFE, as multiple threads can get the iterator and loop through all partitions. But the returned FileDocument is thread-safe * @return an iterator that return the FileDocument corresponds to the certain partition */ - override def get(): Iterator[FileDocument] = - new Iterator[FileDocument] { + override def get(): Iterator[FileDocument[T]] = + new Iterator[FileDocument[T]] { private var i: Int = 0 override def hasNext: Boolean = i < numOfPartition - override def next(): FileDocument = { + override def next(): FileDocument[T] = { if (!hasNext) { throw new NoSuchElementException("No more partitions") } - val document = new FileDocument(getPartitionURI(i)) + val document = new FileDocument[T](getPartitionURI(i)) i += 1 document } diff --git a/core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/FileDocumentSpec.scala b/core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/FileDocumentSpec.scala index 11c9d3528e4..df5338d4985 100644 --- a/core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/FileDocumentSpec.scala +++ b/core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/FileDocumentSpec.scala @@ -17,7 +17,7 @@ import scala.util.Using class FileDocumentSpec extends AnyFlatSpec with Matchers with BeforeAndAfter { var tempFileURI: URI = _ - var fileDocument: FileDocument = _ + var fileDocument: FileDocument[String] = _ val initialContent = "Initial Content" val newContent = "New Content" @@ -29,7 +29,7 @@ class FileDocumentSpec extends AnyFlatSpec with Matchers with BeforeAndAfter { val contentStream = new ByteArrayInputStream(initialContent.getBytes) // Write initial content to file - fileDocument.write(contentStream) + fileDocument.appendStream(contentStream) contentStream.close() } @@ -65,7 +65,7 @@ class FileDocumentSpec extends AnyFlatSpec with Matchers with BeforeAndAfter { } it should "allow writing to the file" in { - fileDocument.setItem(newContent) + fileDocument.appendStream(new ByteArrayInputStream(newContent.getBytes)) // Read back the content val content = Using(fileDocument.asInputStream()) { inStream => @@ -87,7 +87,7 @@ class FileDocumentSpec extends AnyFlatSpec with Matchers with BeforeAndAfter { Future { val contentStream = new ByteArrayInputStream(s"Content from thread".getBytes) // multiple document of the same URI try to do write here - new FileDocument(tempFileURI).write(contentStream) + new FileDocument(tempFileURI).appendStream(contentStream) } } Future @@ -104,7 +104,7 @@ class FileDocumentSpec extends AnyFlatSpec with Matchers with BeforeAndAfter { it should "handle concurrent reads and writes safely" in { Future { val contentStream = new ByteArrayInputStream(newContent.getBytes) - fileDocument.write(contentStream) + fileDocument.appendStream(contentStream) } val readers: Seq[Future[String]] = (1 to 5).map { _ => @@ -141,7 +141,7 @@ class FileDocumentSpec extends AnyFlatSpec with Matchers with BeforeAndAfter { it should "correctly write and read a large amount of data" in { // Generate a large string of 20,000 characters val largeContent = "A" * 20000 - fileDocument.setItem(largeContent) + fileDocument.appendStream(new ByteArrayInputStream(largeContent.getBytes)) // Read back the content val content = Using(fileDocument.asInputStream()) { inStream => diff --git a/core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/partition/PartitionDocumentSpec.scala b/core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/partition/PartitionDocumentSpec.scala index d02a9e3e1ee..533d3fb96cb 100644 --- a/core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/partition/PartitionDocumentSpec.scala +++ b/core/amber/src/test/scala/edu/uci/ics/texera/workflow/common/storage/partition/PartitionDocumentSpec.scala @@ -1,36 +1,18 @@ package edu.uci.ics.texera.workflow.common.storage.partition import edu.uci.ics.amber.engine.common.storage.partition.PartitionDocument - import java.net.URI import java.nio.file.{Files, Path, Paths} import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.BeforeAndAfter import org.scalatest.matchers.should.Matchers -import java.io.{ByteArrayOutputStream, InputStream} -import scala.util.Using - class PartitionDocumentSpec extends AnyFlatSpec with Matchers with BeforeAndAfter { var baseTempURI: Path = _ - var partitionDocument: PartitionDocument = _ + var partitionDocument: PartitionDocument[String] = _ val numOfPartitions: Int = 5 - private def readAllBytes(inputStream: InputStream): Array[Byte] = { - val buffer = new ByteArrayOutputStream() - val data = new Array[Byte](1024) - var nRead = 0 - while ({ - nRead = inputStream.read(data, 0, data.length) - nRead != -1 - }) { - buffer.write(data, 0, nRead) - } - buffer.flush() - buffer.toByteArray - } - before { // Create a temporary directory for the base URI baseTempURI = Files.createTempDirectory("partitionTest").resolve("partitionDoc") @@ -47,16 +29,14 @@ class PartitionDocumentSpec extends AnyFlatSpec with Matchers with BeforeAndAfte val iterator = partitionDocument.get() var i = 0 while (iterator.hasNext) { - iterator.next().setItem(s"Content for partition $i") + iterator.next().append(s"Content for partition $i") i += 1 } // Verify each partition's content for (i <- 0 until numOfPartitions) { val doc = partitionDocument.getItem(i) - val content = Using(doc.asInputStream()) { inStream => - new String(readAllBytes(inStream)) - }.getOrElse(fail("Failed to read from the partition")) + val content = doc.getItem(0) content should be(s"Content for partition $i") } } @@ -68,4 +48,36 @@ class PartitionDocumentSpec extends AnyFlatSpec with Matchers with BeforeAndAfte Files.exists(Paths.get(uri)) should be(false) } } + + it should "append items and read using iterator" in { + // Append items to each partition + for (i <- 0 until numOfPartitions) { + val doc = partitionDocument.getItem(i) + doc.append(s"First content for partition $i") + doc.append(s"Second content for partition $i") + } + + // Verify the content using iterator + for (i <- 0 until numOfPartitions) { + val doc = partitionDocument.getItem(i) + val iterator = doc.get() + iterator.next() should be(s"First content for partition $i") + iterator.next() should be(s"Second content for partition $i") + } + } + + it should "append items and get the first item correctly" in { + // Append items to each partition + for (i <- 0 until numOfPartitions) { + val doc = partitionDocument.getItem(i) + doc.append(s"First content for partition $i") + doc.append(s"Second content for partition $i") + } + + // Verify the first item in each partition + for (i <- 0 until numOfPartitions) { + val doc = partitionDocument.getItem(i) + doc.getItem(0) should be(s"First content for partition $i") + } + } } From 8bedb44cb6325822c9a67b70e23f1114e25b9fe1 Mon Sep 17 00:00:00 2001 From: Shengquan Ni <13672781+shengquan-ni@users.noreply.github.com> Date: Tue, 21 May 2024 21:41:27 -0700 Subject: [PATCH 43/44] Add wid as a param of the websocket url (#2673) as title. --- .../service/workflow-websocket/workflow-websocket.service.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/gui/src/app/workspace/service/workflow-websocket/workflow-websocket.service.ts b/core/gui/src/app/workspace/service/workflow-websocket/workflow-websocket.service.ts index ca45f744499..85abf64c2cc 100644 --- a/core/gui/src/app/workspace/service/workflow-websocket/workflow-websocket.service.ts +++ b/core/gui/src/app/workspace/service/workflow-websocket/workflow-websocket.service.ts @@ -67,8 +67,10 @@ export class WorkflowWebsocketService { public openWebsocket(wId: number) { const websocketUrl = getWebsocketUrl(WorkflowWebsocketService.TEXERA_WEBSOCKET_ENDPOINT, "") + + "?wid=" + + wId + (environment.userSystemEnabled && AuthService.getAccessToken() !== null - ? "?access-token=" + AuthService.getAccessToken() + ? "&access-token=" + AuthService.getAccessToken() : ""); this.websocket = webSocket(websocketUrl); // setup reconnection logic From 5d03929e14c0871806f53fe06905127405b98a0e Mon Sep 17 00:00:00 2001 From: Zhe Yuan <86388854+MiuMiuMiue@users.noreply.github.com> Date: Wed, 22 May 2024 20:48:42 -0700 Subject: [PATCH 44/44] Result Panel Improvements (#2665) This PR resets the margins of each visualization plot in the result panel. The title of each plot is removed, and the name of each operator will be displayed in the result panel title (once the operator is highlighted). This PR also modifies the python console display, making it consistent with the result panel. https://github.com/Texera/texera/assets/86388854/f5e8f69e-f00a-40a0-8e09-4c052045be48 --------- Co-authored-by: mengw15 <125719918+mengw15@users.noreply.github.com> Co-authored-by: Xinyuan Lin --- .../visualization/DotPlot/DotPlotOpDesc.scala | 64 +++++++--------- .../ScatterMatrixChartOpDesc.scala | 11 +-- .../barChart/BarChartOpDesc.scala | 76 +++++++++---------- .../visualization/boxPlot/BoxPlotOpDesc.scala | 9 +-- .../bubbleChart/BubbleChartOpDesc.scala | 10 +-- .../dumbbellPlot/DumbbellPlotOpDesc.scala | 12 +-- .../filledAreaPlot/FilledAreaPlotOpDesc.scala | 8 +- .../funnelPlot/FunnelPlotOpDesc.scala | 7 +- .../ganttChart/GanttChartOpDesc.scala | 1 + .../visualization/heatMap/HeatMapOpDesc.scala | 6 +- .../hierarchychart/HierarchyChartOpDesc.scala | 1 + .../histogram/HistogramChartOpDesc.scala | 15 +--- .../lineChart/LineChartOpDesc.scala | 11 +-- .../pieChart/PieChartOpDesc.scala | 9 +-- .../scatter3DChart/Scatter3dChartOpDesc.scala | 8 +- .../scatterplot/ScatterplotOpDesc.scala | 3 +- .../tablesChart/TablesPlotOpDesc.scala | 1 + .../DotPlot/DotPlotOpDescSpec.scala | 69 +++-------------- .../bubbleChart/BubbleChartOpDescSpec.scala | 5 +- .../console-frame.component.html | 66 ++++++++-------- .../console-frame.component.scss | 11 ++- .../result-panel/result-panel.component.html | 4 +- .../result-panel/result-panel.component.ts | 20 +++++ .../result-table-frame.component.html | 3 +- .../result-table-frame.component.ts | 3 + .../visualization-frame-content.component.ts | 6 +- core/gui/src/styles.scss | 4 + 27 files changed, 177 insertions(+), 266 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/DotPlot/DotPlotOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/DotPlot/DotPlotOpDesc.scala index 9c3f940e596..415779abd41 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/DotPlot/DotPlotOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/DotPlot/DotPlotOpDesc.scala @@ -20,11 +20,6 @@ class DotPlotOpDesc extends VisualizationOperator with PythonOperatorDescriptor @AutofillAttributeName var countAttribute: String = "" - @JsonProperty(value = "Title", required = true) - @JsonSchemaTitle("Title") - @JsonPropertyDescription("Title for the Dot Plot Visualization") - var title: String = "" - override def getOutputSchema(schemas: Array[Schema]): Schema = { Schema.builder().add(new Attribute("html-content", AttributeType.STRING)).build() } @@ -46,43 +41,38 @@ class DotPlotOpDesc extends VisualizationOperator with PythonOperatorDescriptor | | fig.update_traces(marker=dict(size=12, line=dict(width=2, color='DarkSlateGrey'))) | - | fig.update_layout(title='$title', - | xaxis_title='Counts', - | yaxis_title='$countAttribute', - | yaxis=dict(showline=True, showgrid=False, showticklabels=True), - | xaxis=dict(showline=True, showgrid=True, showticklabels=True), - | height=800) + | fig.update_layout(margin=dict(t=0, b=0, l=0, r=0)) |""".stripMargin } override def generatePythonCode(): String = { val finalCode = s""" - |from pytexera import * - | - |import plotly.express as px - |import plotly.graph_objects as go - |import plotly.io - | - |class ProcessTableOperator(UDFTableOperator): - | - | def render_error(self, error_msg): - | return '''

DotPlot is not available.

- |

Reasons are: {}

- | '''.format(error_msg) - | - | @overrides - | def process_table(self, table: Table, port: int) -> Iterator[Optional[TableLike]]: - | if table.empty: - | yield {'html-content': self.render_error("Input table is empty.")} - | return - | ${createPlotlyFigure()} - | if table.empty: - | yield {'html-content': self.render_error("No valid rows left (every row has at least 1 missing value).")} - | return - | # convert fig to html content - | html = plotly.io.to_html(fig, include_plotlyjs='cdn', auto_play=False) - | yield {'html-content': html} - |""".stripMargin + |from pytexera import * + | + |import plotly.express as px + |import plotly.graph_objects as go + |import plotly.io + | + |class ProcessTableOperator(UDFTableOperator): + | + | def render_error(self, error_msg): + | return '''

DotPlot is not available.

+ |

Reasons are: {}

+ | '''.format(error_msg) + | + | @overrides + | def process_table(self, table: Table, port: int) -> Iterator[Optional[TableLike]]: + | if table.empty: + | yield {'html-content': self.render_error("Input table is empty.")} + | return + | ${createPlotlyFigure()} + | if table.empty: + | yield {'html-content': self.render_error("No valid rows left (every row has at least 1 missing value).")} + | return + | # convert fig to html content + | html = plotly.io.to_html(fig, include_plotlyjs='cdn', auto_play=False) + | yield {'html-content': html} + |""".stripMargin finalCode } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/ScatterMatrixChart/ScatterMatrixChartOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/ScatterMatrixChart/ScatterMatrixChartOpDesc.scala index bd89ddbabe2..fb3eb977a19 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/ScatterMatrixChart/ScatterMatrixChartOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/ScatterMatrixChart/ScatterMatrixChartOpDesc.scala @@ -38,11 +38,6 @@ class ScatterMatrixChartOpDesc extends VisualizationOperator with PythonOperator @AutofillAttributeName var color: String = "" - @JsonProperty(value = "title", required = true, defaultValue = "Scatter Matrix Chart") - @JsonSchemaTitle("Title") - @JsonPropertyDescription("the title of the matrix chart") - var title: String = "Scatter Matrix Chart" - override def getOutputSchema(schemas: Array[Schema]): Schema = { Schema.builder().add(new Attribute("html-content", AttributeType.STRING)).build() } @@ -62,11 +57,7 @@ class ScatterMatrixChartOpDesc extends VisualizationOperator with PythonOperator val list_Attributes = selectedAttributes.map(attribute => s""""$attribute"""").mkString(",") s""" | fig = px.scatter_matrix(table, dimensions=[$list_Attributes], color='$color') - | fig.update_layout( - | title='$title', - | width=800, - | height=800 - | ) + | fig.update_layout(margin=dict(t=0, b=0, l=0, r=0)) |""".stripMargin } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/barChart/BarChartOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/barChart/BarChartOpDesc.scala index a0a6c472b13..24eb0966924 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/barChart/BarChartOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/barChart/BarChartOpDesc.scala @@ -24,11 +24,6 @@ import edu.uci.ics.texera.workflow.operators.visualization.{ """) class BarChartOpDesc extends VisualizationOperator with PythonOperatorDescriptor { - @JsonProperty(defaultValue = "Bar Graph Visual") - @JsonSchemaTitle("Title") - @JsonPropertyDescription("Add a title to your visualization") - var title: String = "" - @JsonProperty(value = "value", required = true) @JsonSchemaTitle("Value Column") @JsonPropertyDescription("the value associated with each category") @@ -84,41 +79,42 @@ class BarChartOpDesc extends VisualizationOperator with PythonOperatorDescriptor isCategoryColumn = "True" val finalCode = s""" - |from pytexera import * - | - |import plotly.express as px - |import pandas as pd - |import plotly.graph_objects as go - |import plotly.io - |import json - |import pickle - |import plotly - | - |class ProcessTableOperator(UDFTableOperator): - | - | # Generate custom error message as html string - | def render_error(self, error_msg) -> str: - | return '''

Bar chart is not available.

- |

Reason is: {}

- | '''.format(error_msg) - | - | @overrides - | def process_table(self, table: Table, port: int) -> Iterator[Optional[TableLike]]: - | ${manipulateTable()} - | if not table.empty and '$fields' != '$value': - | if $isHorizontalOrientation: - | fig = go.Figure(px.bar(table, y='$fields', x='$value', color="$categoryColumn" if $isCategoryColumn else None, orientation = 'h', title='$title')) - | else: - | fig = go.Figure(px.bar(table, y='$value', x='$fields', color="$categoryColumn" if $isCategoryColumn else None, title='$title')) - | html = plotly.io.to_html(fig, include_plotlyjs = 'cdn', auto_play = False) - | # use latest plotly lib in html - | #html = html.replace('https://cdn.plot.ly/plotly-2.3.1.min.js', 'https://cdn.plot.ly/plotly-2.18.2.min.js') - | elif '$fields' == '$value': - | html = self.render_error('Fields should not have the same value.') - | elif table.empty: - | html = self.render_error('Table should not have any empty/null values or fields.') - | yield {'html-content':html} - | """.stripMargin + |from pytexera import * + | + |import plotly.express as px + |import pandas as pd + |import plotly.graph_objects as go + |import plotly.io + |import json + |import pickle + |import plotly + | + |class ProcessTableOperator(UDFTableOperator): + | + | # Generate custom error message as html string + | def render_error(self, error_msg) -> str: + | return '''

Bar chart is not available.

+ |

Reason is: {}

+ | '''.format(error_msg) + | + | @overrides + | def process_table(self, table: Table, port: int) -> Iterator[Optional[TableLike]]: + | ${manipulateTable()} + | if not table.empty and '$fields' != '$value': + | if $isHorizontalOrientation: + | fig = go.Figure(px.bar(table, y='$fields', x='$value', color="$categoryColumn" if $isCategoryColumn else None, orientation = 'h')) + | else: + | fig = go.Figure(px.bar(table, y='$value', x='$fields', color="$categoryColumn" if $isCategoryColumn else None)) + | fig.update_layout(margin=dict(l=0, r=0, t=0, b=0)) + | html = plotly.io.to_html(fig, include_plotlyjs = 'cdn', auto_play = False) + | # use latest plotly lib in html + | #html = html.replace('https://cdn.plot.ly/plotly-2.3.1.min.js', 'https://cdn.plot.ly/plotly-2.18.2.min.js') + | elif '$fields' == '$value': + | html = self.render_error('Fields should not have the same value.') + | elif table.empty: + | html = self.render_error('Table should not have any empty/null values or fields.') + | yield {'html-content':html} + | """.stripMargin finalCode } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/boxPlot/BoxPlotOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/boxPlot/BoxPlotOpDesc.scala index 261fab8e5cc..46cacae2f7b 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/boxPlot/BoxPlotOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/boxPlot/BoxPlotOpDesc.scala @@ -23,11 +23,6 @@ import edu.uci.ics.texera.workflow.operators.visualization.{ """) class BoxPlotOpDesc extends VisualizationOperator with PythonOperatorDescriptor { - @JsonProperty(defaultValue = "Box Plot Visual") - @JsonSchemaTitle("Title") - @JsonPropertyDescription("Add a title to your visualization") - var title: String = "" - @JsonProperty(value = "value", required = true) @JsonSchemaTitle("Value Column") @JsonPropertyDescription("Data Column for Boxplot") @@ -77,9 +72,7 @@ class BoxPlotOpDesc extends VisualizationOperator with PythonOperatorDescriptor | else: | fig = px.box(table, y='$value',boxmode="overlay", points='all') | fig.update_traces(quartilemethod="${quertiletype.getQuartiletype}", jitter=0, col=1) - | - | - | + | fig.update_layout(margin=dict(t=0, b=0, l=0, r=0)) |""".stripMargin } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/bubbleChart/BubbleChartOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/bubbleChart/BubbleChartOpDesc.scala index 6ca2fde65bc..9e7d30e1c20 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/bubbleChart/BubbleChartOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/bubbleChart/BubbleChartOpDesc.scala @@ -37,11 +37,6 @@ class BubbleChartOpDesc extends VisualizationOperator with PythonOperatorDescrip @JsonPropertyDescription("Data column to determine bubble size") @AutofillAttributeName var zValue: String = "" - @JsonProperty(value = "title", required = true) - @JsonSchemaTitle("Title") - @JsonPropertyDescription("Title of Chart") - var title: String = "My Bubble Chart" - @JsonProperty(value = "enableColor", defaultValue = "false") @JsonSchemaTitle("Enable Color") @JsonPropertyDescription("Colors bubbles using a data column") @@ -80,9 +75,9 @@ class BubbleChartOpDesc extends VisualizationOperator with PythonOperatorDescrip assert(xValue.nonEmpty && yValue.nonEmpty && zValue.nonEmpty) s""" | if '$enableColor' == 'true': - | fig = go.Figure(px.scatter(table, x='$xValue', y='$yValue', size='$zValue', size_max=100, title='$title', color='$colorCategory')) + | fig = go.Figure(px.scatter(table, x='$xValue', y='$yValue', size='$zValue', size_max=100, color='$colorCategory')) | else: - | fig = go.Figure(px.scatter(table, x='$xValue', y='$yValue', size='$zValue', size_max=100, title='$title')) + | fig = go.Figure(px.scatter(table, x='$xValue', y='$yValue', size='$zValue', size_max=100)) |""".stripMargin } @@ -113,6 +108,7 @@ class BubbleChartOpDesc extends VisualizationOperator with PythonOperatorDescrip | if table.empty: | yield {'html-content': self.render_error("No valid rows left (every row has at least 1 missing value).")} | return + | fig.update_layout(margin=dict(l=0, r=0, b=0, t=0)) | html = plotly.io.to_html(fig, include_plotlyjs = 'cdn', auto_play = False) | yield {'html-content':html} |""".stripMargin diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/dumbbellPlot/DumbbellPlotOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/dumbbellPlot/DumbbellPlotOpDesc.scala index 52e7d876dc3..e15ba89b0d1 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/dumbbellPlot/DumbbellPlotOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/dumbbellPlot/DumbbellPlotOpDesc.scala @@ -27,11 +27,6 @@ import scala.jdk.CollectionConverters.CollectionHasAsScala """) class DumbbellPlotOpDesc extends VisualizationOperator with PythonOperatorDescriptor { - @JsonProperty(value = "title", required = false, defaultValue = "DumbbellPlot Visualization") - @JsonSchemaTitle("Title") - @JsonPropertyDescription("the title of this dumbbell plots") - var title: String = "DumbbellPlot Visualization" - @JsonProperty(value = "categoryColumnName", required = true) @JsonSchemaTitle("Category Column Name") @JsonPropertyDescription("the name of the category column") @@ -106,12 +101,10 @@ class DumbbellPlotOpDesc extends VisualizationOperator with PythonOperatorDescri | name=entity, | line=dict(color=color))) | - | fig.update_layout(title="${title}", - | xaxis_title="${measurementColumnName}", + | fig.update_layout(xaxis_title="${measurementColumnName}", | yaxis_title="${comparedColumnName}", | yaxis=dict(categoryorder='array', categoryarray=entityNames), - | ${showLegendsOption}, - | height=20 * len(entityNames) + | ${showLegendsOption} | ) |""".stripMargin } @@ -168,6 +161,7 @@ class DumbbellPlotOpDesc extends VisualizationOperator with PythonOperatorDescri | ${createPlotlyDumbbellLineFigure()} | ${addPlotlyDots()} | # convert fig to html content + | fig.update_layout(margin=dict(l=0, r=0, b=60, t=0)) | html = plotly.io.to_html(fig, include_plotlyjs='cdn', auto_play=False) | yield {'html-content': html} | diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/filledAreaPlot/FilledAreaPlotOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/filledAreaPlot/FilledAreaPlotOpDesc.scala index 4df90eda74d..3e5ee2523dc 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/filledAreaPlot/FilledAreaPlotOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/filledAreaPlot/FilledAreaPlotOpDesc.scala @@ -14,11 +14,6 @@ import edu.uci.ics.texera.workflow.operators.visualization.{ class FilledAreaPlotOpDesc extends VisualizationOperator with PythonOperatorDescriptor { - @JsonProperty(required = true) - @JsonSchemaTitle("Title") - @JsonPropertyDescription("Title of our plot") - var title: String = "" - @JsonProperty(required = true) @JsonSchemaTitle("X-axis Attribute") @JsonPropertyDescription("The attribute for your x-axis") @@ -74,7 +69,7 @@ class FilledAreaPlotOpDesc extends VisualizationOperator with PythonOperatorDesc val lineGroupArg = if (lineGroup.nonEmpty) s""", line_group="$lineGroup"""" else "" s""" - | fig = px.area(table, x="$x", y="$y", title="$title"$colorArg$facetColumnArg$lineGroupArg) + | fig = px.area(table, x="$x", y="$y"$colorArg$facetColumnArg$lineGroupArg) |""".stripMargin } @@ -121,6 +116,7 @@ class FilledAreaPlotOpDesc extends VisualizationOperator with PythonOperatorDesc | | if error == "": | ${createPlotlyFigure()} + | fig.update_layout(margin=dict(l=0, r=0, b=0, t=0)) | | html = plotly.io.to_html(fig, include_plotlyjs='cdn', auto_play=False) | yield {'html-content': html} diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/funnelPlot/FunnelPlotOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/funnelPlot/FunnelPlotOpDesc.scala index 0168ab5c4c2..b9d025b8397 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/funnelPlot/FunnelPlotOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/funnelPlot/FunnelPlotOpDesc.scala @@ -20,10 +20,6 @@ import edu.uci.ics.texera.workflow.operators.visualization.{ } """) class FunnelPlotOpDesc extends VisualizationOperator with PythonOperatorDescriptor { - @JsonProperty(value = "title", required = true, defaultValue = "Funnel Plot") - @JsonSchemaTitle("Plot Title") - @JsonPropertyDescription("The value for the plot title") - var title: String = "Funnel Plot" @JsonProperty(required = true) @JsonSchemaTitle("X Column") @@ -63,12 +59,11 @@ class FunnelPlotOpDesc extends VisualizationOperator with PythonOperatorDescript s""" | fig = go.Figure(px.funnel(table, x ="$x", y = "$y"$colorArg)) | fig.update_layout( - | title='$title', | scene=dict( | xaxis_title='X: $x', | yaxis_title='Y: $y', | ), - | margin=dict(t=40, b=30, l=10, r=10) + | margin=dict(t=0, b=0, l=0, r=0) | ) |""".stripMargin } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/ganttChart/GanttChartOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/ganttChart/GanttChartOpDesc.scala index 81d5e828a5b..0a10312c8bd 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/ganttChart/GanttChartOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/ganttChart/GanttChartOpDesc.scala @@ -76,6 +76,7 @@ class GanttChartOpDesc extends VisualizationOperator with PythonOperatorDescript s""" | fig = px.timeline(table, x_start='$start', x_end='$finish', y='$task' $colorSetting) | fig.update_yaxes(autorange='reversed') + | fig.update_layout(margin=dict(t=0, b=0, l=0, r=0)) |""".stripMargin } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/heatMap/HeatMapOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/heatMap/HeatMapOpDesc.scala index 962151e2b98..e7354aa12d5 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/heatMap/HeatMapOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/heatMap/HeatMapOpDesc.scala @@ -13,10 +13,6 @@ import edu.uci.ics.texera.workflow.operators.visualization.{ } class HeatMapOpDesc extends VisualizationOperator with PythonOperatorDescriptor { - @JsonProperty(defaultValue = "HeatMap", required = true) - @JsonSchemaTitle("Title") - @JsonPropertyDescription("Add a title to your visualization") - var title: String = "" @JsonProperty(value = "x", required = true) @JsonSchemaTitle("Value X Column") @@ -55,7 +51,7 @@ class HeatMapOpDesc extends VisualizationOperator with PythonOperatorDescriptor assert(value.nonEmpty) s""" | heatmap = go.Heatmap(z=table["$value"],x=table["$x"],y=table["$y"]) - | layout = go.Layout(title='$title') + | layout = go.Layout(margin=dict(l=0, r=0, b=0, t=0)) | fig = go.Figure(data=[heatmap], layout=layout) |""".stripMargin } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/hierarchychart/HierarchyChartOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/hierarchychart/HierarchyChartOpDesc.scala index f9782a1e32b..5670db7aef9 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/hierarchychart/HierarchyChartOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/hierarchychart/HierarchyChartOpDesc.scala @@ -105,6 +105,7 @@ class HierarchyChartOpDesc extends VisualizationOperator with PythonOperatorDesc | return | ${createPlotlyFigure()} | # convert fig to html content + | fig.update_layout(margin=dict(l=0, r=0, b=0, t=0)) | html = plotly.io.to_html(fig, include_plotlyjs='cdn', auto_play=False) | yield {'html-content': html} |""".stripMargin diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/histogram/HistogramChartOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/histogram/HistogramChartOpDesc.scala index bfac3d18624..63e06f0f0ce 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/histogram/HistogramChartOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/histogram/HistogramChartOpDesc.scala @@ -13,11 +13,6 @@ import edu.uci.ics.texera.workflow.operators.visualization.{ } class HistogramChartOpDesc extends VisualizationOperator with PythonOperatorDescriptor { - @JsonProperty(required = false, defaultValue = "Histogram Chart") - @JsonSchemaTitle("Title") - @JsonPropertyDescription("Add a title to your histogram chart.") - var title: String = "Histogram Chart" - @JsonProperty(value = "value", required = true) @JsonSchemaTitle("Value Column") @JsonPropertyDescription("Column for counting values.") @@ -36,13 +31,6 @@ class HistogramChartOpDesc extends VisualizationOperator with PythonOperatorDesc @AutofillAttributeName var separateBy: String = "" - /** - * This method is to be implemented to generate the actual Python source code - * based on operators predicates. - * - * @return a String representation of the executable Python source code. - */ - override def operatorInfo: OperatorInfo = OperatorInfo( "Histogram Chart", @@ -60,7 +48,8 @@ class HistogramChartOpDesc extends VisualizationOperator with PythonOperatorDesc if (separateBy.nonEmpty) categoryParam = s", facet_col = '$separateBy'" s""" - | fig = px.histogram(table, x = '$value', title = '$title', text_auto = True $colorParam $categoryParam) + | fig = px.histogram(table, x = '$value', text_auto = True $colorParam $categoryParam) + | fig.update_layout(margin=dict(l=0, r=0, t=0, b=0)) |""".stripMargin } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/lineChart/LineChartOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/lineChart/LineChartOpDesc.scala index d5329731313..c06966e8c11 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/lineChart/LineChartOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/lineChart/LineChartOpDesc.scala @@ -16,11 +16,6 @@ import scala.jdk.CollectionConverters.ListHasAsScala class LineChartOpDesc extends VisualizationOperator with PythonOperatorDescriptor { - @JsonProperty(value = "title", required = false, defaultValue = "Line Chart") - @JsonSchemaTitle("Plot Title") - @JsonPropertyDescription("The value for the plot tile") - var title: String = "" - @JsonProperty(value = "yLabel", required = false, defaultValue = "Y Axis") @JsonSchemaTitle("Y Label") @JsonPropertyDescription("the label for y axis") @@ -74,9 +69,9 @@ class LineChartOpDesc extends VisualizationOperator with PythonOperatorDescripto s""" | fig = go.Figure() | ${linesPart.mkString("\n ")} - | fig.update_layout(title='$title', - | xaxis_title='$xLabel', - | yaxis_title='$yLabel') + | fig.update_layout(margin=dict(t=0, b=0, l=0, r=0), + | xaxis_title='$xLabel', + | yaxis_title='$yLabel') |""".stripMargin } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/pieChart/PieChartOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/pieChart/PieChartOpDesc.scala index 59a8c033108..f1d99e9a3b8 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/pieChart/PieChartOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/pieChart/PieChartOpDesc.scala @@ -36,11 +36,6 @@ class PieChartOpDesc extends VisualizationOperator with PythonOperatorDescriptor @AutofillAttributeName var name: String = "" - @JsonProperty(value = "title", required = false, defaultValue = "PieChart Visualization") - @JsonSchemaTitle("Title") - @JsonPropertyDescription("the title of this pie chart") - var title: String = "PieChart Visualization" - override def getOutputSchema(schemas: Array[Schema]): Schema = { Schema.builder().add(new Attribute("html-content", AttributeType.STRING)).build() } @@ -64,9 +59,9 @@ class PieChartOpDesc extends VisualizationOperator with PythonOperatorDescriptor def createPlotlyFigure(): String = { assert(value.nonEmpty) s""" - | fig = px.pie(table, names='$name', values='$value', title='$title') + | fig = px.pie(table, names='$name', values='$value') | fig.update_traces(textposition='inside', textinfo='percent+label') - | fig.update_layout(margin=dict(t=40, b=30, l=10, r=10)) + | fig.update_layout(margin=dict(t=0, b=0, l=0, r=0)) |""".stripMargin } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/scatter3DChart/Scatter3dChartOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/scatter3DChart/Scatter3dChartOpDesc.scala index d51c1f3220b..09f342032f7 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/scatter3DChart/Scatter3dChartOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/scatter3DChart/Scatter3dChartOpDesc.scala @@ -20,11 +20,6 @@ import edu.uci.ics.texera.workflow.operators.visualization.{ } """) class Scatter3dChartOpDesc extends VisualizationOperator with PythonOperatorDescriptor { - @JsonProperty(value = "title", required = true, defaultValue = "Scatter3D Chart") - @JsonSchemaTitle("Plot Title") - @JsonPropertyDescription("The value for the plot title") - var title: String = "Scatter3D Chart" - @JsonProperty(value = "x", required = true) @JsonSchemaTitle("X Column") @JsonPropertyDescription("Data column for the x-axis") @@ -74,13 +69,12 @@ class Scatter3dChartOpDesc extends VisualizationOperator with PythonOperatorDesc | )]) | fig.update_traces(marker=dict(size=5, opacity=0.8)) | fig.update_layout( - | title='$title', | scene=dict( | xaxis_title='X: $x', | yaxis_title='Y: $y', | zaxis_title='Z: $z' | ), - | margin=dict(t=40, b=30, l=10, r=10) + | margin=dict(t=0, b=0, l=0, r=0) | ) |""".stripMargin } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/scatterplot/ScatterplotOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/scatterplot/ScatterplotOpDesc.scala index a87dced657f..4b714f310f9 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/scatterplot/ScatterplotOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/scatterplot/ScatterplotOpDesc.scala @@ -78,7 +78,8 @@ class ScatterplotOpDesc extends VisualizationOperator with PythonOperatorDescrip val colorColExpr = if (colorColumn.nonEmpty) { s"color='$colorColumn'" } else { "" } s""" - | fig = go.Figure(px.scatter(table, x='$xColumn', y='$yColumn', $colorColExpr)) + | fig = go.Figure(px.scatter(table, x='$xColumn', y='$yColumn')) + | fig.update_layout(margin=dict(l=0, r=0, t=0, b=0)) |""".stripMargin } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/tablesChart/TablesPlotOpDesc.scala b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/tablesChart/TablesPlotOpDesc.scala index a38670e0f66..b677a00e922 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/tablesChart/TablesPlotOpDesc.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/workflow/operators/visualization/tablesChart/TablesPlotOpDesc.scala @@ -69,6 +69,7 @@ class TablesPlotOpDesc extends VisualizationOperator with PythonOperatorDescript | | ${createPlotlyFigure()} + | fig.update_layout(margin=dict(l=0, r=0, b=0, t=0)) | html_content = plotly.io.to_html(fig, include_plotlyjs='cdn') | yield {'html-content': html_content} """.stripMargin diff --git a/core/amber/src/test/scala/edu/uci/ics/texera/workflow/operators/visualization/DotPlot/DotPlotOpDescSpec.scala b/core/amber/src/test/scala/edu/uci/ics/texera/workflow/operators/visualization/DotPlot/DotPlotOpDescSpec.scala index 50654d4ab34..302a61e9ad9 100644 --- a/core/amber/src/test/scala/edu/uci/ics/texera/workflow/operators/visualization/DotPlot/DotPlotOpDescSpec.scala +++ b/core/amber/src/test/scala/edu/uci/ics/texera/workflow/operators/visualization/DotPlot/DotPlotOpDescSpec.scala @@ -2,6 +2,7 @@ package edu.uci.ics.texera.workflow.operators.visualization.DotPlot import org.scalatest.BeforeAndAfter import org.scalatest.flatspec.AnyFlatSpec + class DotPlotOpDescSpec extends AnyFlatSpec with BeforeAndAfter { var opDesc: DotPlotOpDesc = _ @@ -9,65 +10,15 @@ class DotPlotOpDescSpec extends AnyFlatSpec with BeforeAndAfter { opDesc = new DotPlotOpDesc() } - it should "generate Plotly figure code in Python" in { - opDesc.countAttribute = "count_attribute" - opDesc.title = "Styled Categorical Dot Plot" - val expectedFigureCode = - s""" - | table = table.groupby(['count_attribute'])['count_attribute'].count().reset_index(name='counts') - | fig = px.strip(table, x='counts', y='count_attribute', orientation='h', color='count_attribute', - | color_discrete_sequence=px.colors.qualitative.Dark2) - | - | fig.update_traces(marker=dict(size=12, line=dict(width=2, color='DarkSlateGrey'))) - | - | fig.update_layout(title='Styled Categorical Dot Plot', - | xaxis_title='Counts', - | yaxis_title='count_attribute', - | yaxis=dict(showline=True, showgrid=False, showticklabels=True), - | xaxis=dict(showline=True, showgrid=True, showticklabels=True), - | height=800) - |""".stripMargin - - assert(opDesc.createPlotlyFigure() === expectedFigureCode) - } - - it should "generate Python code with the provided CountAttribute" in { - opDesc.countAttribute = "count_attribute" - val expectedPythonCode = - s""" - |from pytexera import * - | - |import plotly.express as px - |import plotly.graph_objects as go - |import plotly.io - | - |class ProcessTableOperator(UDFTableOperator): - | - | def render_error(self, error_msg): - | return '''

DotPlot is not available.

- |

Reasons are: {}

- | '''.format(error_msg) - | - | @overrides - | def process_table(self, table: Table, port: int) -> Iterator[Optional[TableLike]]: - | if table.empty: - | yield {'html-content': self.render_error("Input table is empty.")} - | return - | ${opDesc.createPlotlyFigure()} - | if table.empty: - | yield {'html-content': self.render_error("No valid rows left (every row has at least 1 missing value).")} - | return - | # convert fig to html content - | html = plotly.io.to_html(fig, include_plotlyjs='cdn', auto_play=False) - | yield {'html-content': html} - |""".stripMargin - - val generatedPythonCode = opDesc.generatePythonCode() - - assert(generatedPythonCode === expectedPythonCode) - } + it should "generate a plotly python figure with count aggregation" in { + opDesc.countAttribute = "column1" - it should "not be parallelizable" in { - assert(!opDesc.parallelizable()) + assert( + opDesc + .createPlotlyFigure() + .contains( + "table = table.groupby(['column1'])['column1'].count().reset_index(name='counts')" + ) + ) } } diff --git a/core/amber/src/test/scala/edu/uci/ics/texera/workflow/operators/visualization/bubbleChart/BubbleChartOpDescSpec.scala b/core/amber/src/test/scala/edu/uci/ics/texera/workflow/operators/visualization/bubbleChart/BubbleChartOpDescSpec.scala index 35832924fd1..d27cf10fedd 100644 --- a/core/amber/src/test/scala/edu/uci/ics/texera/workflow/operators/visualization/bubbleChart/BubbleChartOpDescSpec.scala +++ b/core/amber/src/test/scala/edu/uci/ics/texera/workflow/operators/visualization/bubbleChart/BubbleChartOpDescSpec.scala @@ -9,18 +9,17 @@ class BubbleChartOpDescSpec extends AnyFlatSpec with BeforeAndAfter { opDesc = new BubbleChartOpDesc() } - it should "generate a plotly python figure with 3 columns and a title" in { + it should "generate a plotly python figure with 3 columns" in { opDesc.xValue = "column1" opDesc.yValue = "column2" opDesc.zValue = "column3" - opDesc.title = "myTitle" opDesc.enableColor = false assert( opDesc .createPlotlyFigure() .contains( - "fig = go.Figure(px.scatter(table, x='column1', y='column2', size='column3', size_max=100, title='myTitle'))" + "fig = go.Figure(px.scatter(table, x='column1', y='column2', size='column3', size_max=100))" ) ) } diff --git a/core/gui/src/app/workspace/component/result-panel/console-frame/console-frame.component.html b/core/gui/src/app/workspace/component/result-panel/console-frame/console-frame.component.html index 63468d80c62..bb18c5c8b01 100644 --- a/core/gui/src/app/workspace/component/result-panel/console-frame/console-frame.component.html +++ b/core/gui/src/app/workspace/component/result-panel/console-frame/console-frame.component.html @@ -108,17 +108,14 @@
+ style="display: flex" + nzcol + nz-span="12"> {{(entry.timestamp.seconds * 1000 + entry.timestamp.nanos * 0.000001) | date : "M-d-yy, HH:mm:ss.SSS"}} -
-
- + [nzAddOnBefore]="addOnBeforeTemplate" + class="console-input-container"> +
+ + + +
- diff --git a/core/gui/src/app/workspace/component/result-panel/console-frame/console-frame.component.scss b/core/gui/src/app/workspace/component/result-panel/console-frame/console-frame.component.scss index 723a8b43de3..b84eb83a0bf 100644 --- a/core/gui/src/app/workspace/component/result-panel/console-frame/console-frame.component.scss +++ b/core/gui/src/app/workspace/component/result-panel/console-frame/console-frame.component.scss @@ -9,7 +9,10 @@ } .console-list-container { - height: 200px; + position: fixed; + height: calc(100% - 130px); + min-height: 20px; + width: calc(100% - 130px); border: 1px solid #e8e8e8; border-radius: 2px; overflow: auto; @@ -82,3 +85,9 @@ } } } + +.console-input-container { + position: fixed; + bottom: 20px; + left: 125px; +} diff --git a/core/gui/src/app/workspace/component/result-panel/result-panel.component.html b/core/gui/src/app/workspace/component/result-panel/result-panel.component.html index a895bd4b846..553ddd93efc 100644 --- a/core/gui/src/app/workspace/component/result-panel/result-panel.component.html +++ b/core/gui/src/app/workspace/component/result-panel/result-panel.component.html @@ -39,7 +39,7 @@ nz-menu-item (click)="openPanel()" *ngIf="!width" - nz-tooltip="Result Panel"> + nz-tooltip="Result Panel: {{operatorTitle}}"> @@ -50,7 +50,7 @@ id="title" cdkDragHandle *ngIf="width"> - Result Panel + Result Panel: {{operatorTitle}}

{ this.rerenderResultPanel(); this.changeDetectorRef.detectChanges(); + this.registerOperatorDisplayNameChangeHandler(); }); } @@ -220,6 +222,24 @@ export class ResultPanelComponent implements OnInit, OnDestroy { } } + private registerOperatorDisplayNameChangeHandler(): void { + if (this.currentOperatorId) { + const operator = this.workflowActionService.getTexeraGraph().getOperator(this.currentOperatorId); + this.operatorTitle = operator.customDisplayName ?? ""; + this.workflowActionService + .getTexeraGraph() + .getOperatorDisplayNameChangedStream() + .pipe(untilDestroyed(this)) + .subscribe(({ operatorID, newDisplayName }) => { + console.log(operatorID); + console.log(this.currentOperatorId); + if (operatorID === this.currentOperatorId) { + this.operatorTitle = newDisplayName; + } + }); + } + } + private static needRerenderOnStateChange(event: { previous: ExecutionStateInfo; current: ExecutionStateInfo; diff --git a/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.html b/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.html index 01acd878c3b..55f3a3d6526 100644 --- a/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.html +++ b/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.html @@ -25,7 +25,8 @@

Empty result set

+ style="text-align: center" + nzWidth="widthPercent"> {{ column.header }} diff --git a/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.ts b/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.ts index 2b6daeea714..061cb43b4b1 100644 --- a/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.ts +++ b/core/gui/src/app/workspace/component/result-panel/result-table-frame/result-table-frame.component.ts @@ -47,6 +47,7 @@ export class ResultTableFrameComponent implements OnInit, OnChanges { currentPageIndex: number = 1; totalNumTuples: number = 0; pageSize = 5; + widthPercent: string = ""; constructor( private executeWorkflowService: ExecuteWorkflowService, @@ -88,6 +89,8 @@ export class ResultTableFrameComponent implements OnInit, OnChanges { } return; } + let columnCount = this.currentColumns?.length; + if (columnCount) this.widthPercent = (1 / columnCount) * 100 + "%"; this.isFrontPagination = false; this.totalNumTuples = opUpdate.totalNumTuples; if (opUpdate.dirtyPageIndices.includes(this.currentPageIndex)) { diff --git a/core/gui/src/app/workspace/component/visualization-panel-content/visualization-frame-content.component.ts b/core/gui/src/app/workspace/component/visualization-panel-content/visualization-frame-content.component.ts index 15289f60049..3ec6a25d905 100644 --- a/core/gui/src/app/workspace/component/visualization-panel-content/visualization-frame-content.component.ts +++ b/core/gui/src/app/workspace/component/visualization-panel-content/visualization-frame-content.component.ts @@ -54,12 +54,10 @@ export class VisualizationFrameContentComponent implements AfterContentInit { const doc = parser.parseFromString(Object(data[0])["html-content"], "text/html"); doc.documentElement.style.height = "100%"; - doc.body.style.height = "100%"; + doc.body.style.height = "95%"; const firstDiv = doc.body.querySelector("div"); - if (firstDiv) { - firstDiv.style.height = "100%"; - } + if (firstDiv) firstDiv.style.height = "100%"; const serializer = new XMLSerializer(); const newHtmlString = serializer.serializeToString(doc); diff --git a/core/gui/src/styles.scss b/core/gui/src/styles.scss index 545917056fc..d413e250da0 100644 --- a/core/gui/src/styles.scss +++ b/core/gui/src/styles.scss @@ -68,3 +68,7 @@ hr { .ant-collapse-content-box { padding: 0 !important; } + +.ant-tabs-tabpane { + padding-right: 24px; +}