;
8 |
9 | beforeEach(async(() => {
10 | TestBed.configureTestingModule({
11 | declarations: [ SkynetComponent ]
12 | })
13 | .compileComponents();
14 | }));
15 |
16 | beforeEach(() => {
17 | fixture = TestBed.createComponent(SkynetComponent);
18 | component = fixture.componentInstance;
19 | fixture.detectChanges();
20 | });
21 |
22 | it('should create', () => {
23 | expect(component).toBeTruthy();
24 | });
25 | });
26 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/skynet/skynet/skynet.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-skynet',
5 | templateUrl: './skynet.component.html',
6 | styleUrls: ['./skynet.component.css']
7 | })
8 | export class SkynetComponent implements OnInit {
9 |
10 | constructor() { }
11 |
12 | ngOnInit() {
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/skynet/space/space-add-dialog.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Name
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Content
12 |
21 |
22 |
23 |
24 |
25 | Error:
26 |
27 | {{error}}
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/skynet/space/space-run-dialog.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | File changes
8 |
17 |
18 |
19 |
20 |
21 | Error:
22 |
23 | {{error}}
24 |
25 |
26 |
27 |
28 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/skynet/space/space.component.css:
--------------------------------------------------------------------------------
1 | table {
2 | width: 100%;
3 | min-width: 800px;
4 | }
5 |
6 | .column {
7 | float: left;
8 | width: 45%;
9 | }
10 |
11 | /* Clear floats after the columns */
12 | .row:after {
13 | content: "";
14 | display: table;
15 | clear: both;
16 | }
17 |
18 | .mat-header-cell{
19 | text-align: center !important;
20 | }
21 |
22 | .disable-text-selection {
23 | -webkit-touch-callout: none;
24 | -webkit-user-select: none;
25 | -khtml-user-select: none;
26 | -moz-user-select: none;
27 | -ms-user-select: none;
28 | user-select: none;
29 | }
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/skynet/space/space.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { SpaceComponent } from './space.component';
4 |
5 | describe('SpaceComponent', () => {
6 | let component: SpaceComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async(() => {
10 | TestBed.configureTestingModule({
11 | declarations: [ SpaceComponent ]
12 | })
13 | .compileComponents();
14 | }));
15 |
16 | beforeEach(() => {
17 | fixture = TestBed.createComponent(SpaceComponent);
18 | component = fixture.componentInstance;
19 | fixture.detectChanges();
20 | });
21 |
22 | it('should create', () => {
23 | expect(component).toBeTruthy();
24 | });
25 | });
26 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task-detail/step/step.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lightforever/mlcomp/c78fdb77ec9c4ec8ff11beea50b90cab20903ad9/mlcomp/server/front/src/app/task/task-detail/step/step.component.css
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task-detail/step/step.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { StepComponent } from './step.component';
4 |
5 | describe('StepComponent', () => {
6 | let component: StepComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async(() => {
10 | TestBed.configureTestingModule({
11 | declarations: [ StepComponent ]
12 | })
13 | .compileComponents();
14 | }));
15 |
16 | beforeEach(() => {
17 | fixture = TestBed.createComponent(StepComponent);
18 | component = fixture.componentInstance;
19 | fixture.detectChanges();
20 | });
21 |
22 | it('should create', () => {
23 | expect(component).toBeTruthy();
24 | });
25 | });
26 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task-detail/task-detail-routing.module.ts:
--------------------------------------------------------------------------------
1 | import {NgModule} from '@angular/core';
2 | import {RouterModule, Routes} from '@angular/router';
3 |
4 | import {TaskDetailComponent} from "./task-detail/task-detail.component";
5 | import {LogComponent} from "../../log/log.component";
6 | import {ReportsComponent} from "../../report/reports/reports.component";
7 | import {StepComponent} from "./step/step.component";
8 |
9 | const routes: Routes = [
10 | {
11 |
12 | path: '',
13 | component: TaskDetailComponent,
14 | children: [
15 | {path: 'report', component: ReportsComponent},
16 | {path: 'step', component: StepComponent},
17 | {path: 'logs', component: LogComponent}
18 | ]
19 |
20 |
21 | }
22 | ];
23 |
24 | @NgModule({
25 | imports: [
26 | RouterModule.forChild(routes)
27 | ],
28 | exports: [
29 | RouterModule
30 | ]
31 | })
32 | export class TaskDetailRoutingModule {
33 | }
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task-detail/task-detail.module.ts:
--------------------------------------------------------------------------------
1 | import {NgModule} from '@angular/core';
2 |
3 | import {TaskDetailRoutingModule} from './task-detail-routing.module';
4 | import {SharedModule} from "../../shared.module";
5 | import {TaskDetailComponent} from "./task-detail/task-detail.component";
6 | import { StepComponent } from './step/step.component';
7 |
8 | @NgModule({
9 | imports: [
10 | TaskDetailRoutingModule,
11 | SharedModule
12 | ],
13 | declarations: [
14 | TaskDetailComponent,
15 | StepComponent
16 | ]
17 | })
18 | export class TaskDetailModule {
19 | }
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task-detail/task-detail/task-detail.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lightforever/mlcomp/c78fdb77ec9c4ec8ff11beea50b90cab20903ad9/mlcomp/server/front/src/app/task/task-detail/task-detail/task-detail.component.css
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task-detail/task-detail/task-detail.component.html:
--------------------------------------------------------------------------------
1 | Task detail
2 |
3 |
7 |
8 |
9 |
10 | 0">
11 |
Child tasks
12 |
13 |
16 |
17 |
18 |
19 |
20 |
26 |
27 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task-detail/task-detail/task-detail.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { TaskDetailComponent } from './task-detail.component';
4 |
5 | describe('TaskDetailComponent', () => {
6 | let component: TaskDetailComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async(() => {
10 | TestBed.configureTestingModule({
11 | declarations: [ TaskDetailComponent ]
12 | })
13 | .compileComponents();
14 | }));
15 |
16 | beforeEach(() => {
17 | fixture = TestBed.createComponent(TaskDetailComponent);
18 | component = fixture.componentInstance;
19 | fixture.detectChanges();
20 | });
21 |
22 | it('should create', () => {
23 | expect(component).toBeTruthy();
24 | });
25 | });
26 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task-routing.module.ts:
--------------------------------------------------------------------------------
1 | import {NgModule} from '@angular/core';
2 | import {RouterModule, Routes} from '@angular/router';
3 | import {TasksComponent} from "./tasks/tasks.component";
4 | import {TaskComponent} from "./task/task.component";
5 |
6 | const routes: Routes = [
7 | {
8 | path: '',
9 | component: TaskComponent,
10 | children: [
11 | {path: 'task-detail/:id', loadChildren: './task-detail/task-detail.module#TaskDetailModule'},
12 | {path: '', component: TasksComponent}
13 | ]
14 | }
15 | ];
16 |
17 | @NgModule({
18 | imports: [
19 | RouterModule.forChild(routes)
20 | ],
21 | exports: [
22 | RouterModule
23 | ]
24 | })
25 | export class TaskRoutingModule {
26 | }
27 |
28 |
29 | /*
30 | Copyright Google LLC. All Rights Reserved.
31 | Use of this source code is governed by an MIT-style license that
32 | can be found in the LICENSE file at http://angular.io/license
33 | */
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task-table/task-info-dialog.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lightforever/mlcomp/c78fdb77ec9c4ec8ff11beea50b90cab20903ad9/mlcomp/server/front/src/app/task/task-table/task-info-dialog.component.css
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task-table/task-info-dialog.component.html:
--------------------------------------------------------------------------------
1 |
2 | Pid: {{data.pid}}
3 |
4 |
5 |
6 | Worker index: {{data.worker_index}}
7 |
8 |
9 |
10 | GPU assigned: {{data.gpu_assigned}}
11 |
12 |
13 |
14 | Celery id: {{data.celery_id}}
15 |
16 |
17 |
18 |
19 | Additional info:
20 |
21 |
22 |
{{data.additional_info}}
23 |
24 |
25 |
26 |
27 |
28 |
29 | Result:
30 |
31 |
32 |
{{data.result}}
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task-table/task-info-dialog.component.ts:
--------------------------------------------------------------------------------
1 | import {Component, Inject} from "@angular/core";
2 | import {MAT_DIALOG_DATA} from "@angular/material";
3 | import {TaskService} from "../task.service";
4 | import {TaskInfo} from "../../models";
5 |
6 | @Component({
7 | selector: 'task-info-dialog.component.css',
8 | templateUrl: 'task-info-dialog.component.html',
9 | })
10 | export class TaskInfoDialogComponent {
11 | error: string;
12 |
13 | constructor(
14 | @Inject(MAT_DIALOG_DATA) public data: TaskInfo,
15 | public service: TaskService) {
16 |
17 | this.service.info(data.id).subscribe(res => {
18 | this.data = res;
19 | });
20 | }
21 |
22 | }
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task-table/task-table.component.css:
--------------------------------------------------------------------------------
1 | table {
2 | width: 100%;
3 | min-width: 1580px;
4 | }
5 |
6 | .mat-form-field {
7 | font-size: 14px;
8 | width: 100%;
9 | }
10 |
11 | td{
12 | text-align: center;
13 | }
14 |
15 | ::ng-deep .mat-sort-header-container{
16 | display:flex;
17 | justify-content:center;
18 | text-align: center;
19 | margin-left: 12px !important;
20 | }
21 |
22 | .mat-header-cell{
23 | text-align: center !important;
24 | }
25 |
26 | mat-icon{
27 | cursor: pointer;
28 | }
29 |
30 | .checkbox-section {
31 | display: flex;
32 | align-content: center;
33 | align-items: center;
34 | height: 60px;
35 | }
36 |
37 | .checkbox-margin {
38 | margin: 0 10px;
39 | }
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task.module.ts:
--------------------------------------------------------------------------------
1 | import {NgModule} from '@angular/core';
2 | import {TaskDetailModule} from './task-detail/task-detail.module';
3 | import {TaskRoutingModule} from './task-routing.module'
4 | import {SharedModule} from "../shared.module";
5 | import {TaskComponent} from "./task/task.component";
6 |
7 | @NgModule({
8 | imports: [
9 | TaskRoutingModule,
10 | TaskDetailModule,
11 | SharedModule
12 | ],
13 | declarations: [
14 | TaskComponent
15 | ]
16 | })
17 | export class TaskModule {
18 | }
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task/task.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lightforever/mlcomp/c78fdb77ec9c4ec8ff11beea50b90cab20903ad9/mlcomp/server/front/src/app/task/task/task.component.css
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task/task.component.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task/task.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { TaskComponent } from './dag.component';
4 |
5 | describe('DagComponent', () => {
6 | let component: TaskComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async(() => {
10 | TestBed.configureTestingModule({
11 | declarations: [ TaskComponent ]
12 | })
13 | .compileComponents();
14 | }));
15 |
16 | beforeEach(() => {
17 | fixture = TestBed.createComponent(TaskComponent);
18 | component = fixture.componentInstance;
19 | fixture.detectChanges();
20 | });
21 |
22 | it('should create', () => {
23 | expect(component).toBeTruthy();
24 | });
25 | });
26 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/task/task.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-task',
5 | templateUrl: './task.component.html',
6 | styleUrls: ['./task.component.css']
7 | })
8 | export class TaskComponent implements OnInit {
9 |
10 | constructor() { }
11 |
12 | ngOnInit() {
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/tasks/tasks.component.css:
--------------------------------------------------------------------------------
1 | table {
2 | width: 100%;
3 | min-width: 1580px;
4 | }
5 |
6 | .mat-form-field {
7 | font-size: 14px;
8 | width: 100%;
9 | }
10 |
11 | td{
12 | text-align: center;
13 | }
14 |
15 | ::ng-deep .mat-sort-header-container{
16 | display:flex;
17 | justify-content:center;
18 | text-align: center;
19 | margin-left: 12px !important;
20 | }
21 |
22 | .mat-header-cell{
23 | text-align: center !important;
24 | }
25 |
26 | mat-icon{
27 | cursor: pointer;
28 | }
29 |
30 | .checkbox-section {
31 | display: flex;
32 | align-content: center;
33 | align-items: center;
34 | height: 60px;
35 | }
36 |
37 | .checkbox-margin {
38 | margin: 0 10px;
39 | }
40 |
41 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/app/task/tasks/tasks.component.spec.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lightforever/mlcomp/c78fdb77ec9c4ec8ff11beea50b90cab20903ad9/mlcomp/server/front/src/app/task/tasks/tasks.component.spec.ts
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/img/delete.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
38 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/img/mlcomp_icon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lightforever/mlcomp/c78fdb77ec9c4ec8ff11beea50b90cab20903ad9/mlcomp/server/front/src/assets/img/mlcomp_icon.jpg
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/img/mlcomp_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lightforever/mlcomp/c78fdb77ec9c4ec8ff11beea50b90cab20903ad9/mlcomp/server/front/src/assets/img/mlcomp_logo.png
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/img/model.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/img/restart.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
39 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/img/stop.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
41 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/prettify/lang-go.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Copyright (C) 2010 Google Inc.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["pln",/^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])+(?:\'|$)|`[^`]*(?:`|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\r\n]*|\/\*[\s\S]*?\*\/)/],["pln",/^(?:[^\/\"\'`]|\/(?![\/\*]))+/i]]),["go"]);
18 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/prettify/lang-latex.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Copyright (C) 2011 Martin S.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^%[^\r\n]*/,null,"%"]],[["kwd",/^\\[a-zA-Z@]+/],["kwd",/^\\./],["typ",/^[$&]/],["lit",/[+-]?(?:\.\d+|\d+(?:\.\d*)?)(cm|em|ex|in|pc|pt|bp|mm)/i],["pun",/^[{}()\[\]=]+/]]),["latex","tex"]);
18 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/prettify/lang-ll.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Copyright (C) 2013 Nikhil Dabas
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^!?\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["com",/^;[^\r\n]*/,null,";"]],[["pln",/^[%@!](?:[-a-zA-Z$._][-a-zA-Z$._0-9]*|\d+)/],["kwd",/^[A-Za-z_][0-9A-Za-z_]*/,null],["lit",/^\d+\.\d+/],["lit",/^(?:\d+|0[xX][a-fA-F0-9]+)/],["pun",/^[()\[\]{},=*<>:]|\.\.\.$/]]),["llvm","ll"]);
18 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/prettify/lang-llvm.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Copyright (C) 2013 Nikhil Dabas
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^!?\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["com",/^;[^\r\n]*/,null,";"]],[["pln",/^[%@!](?:[-a-zA-Z$._][-a-zA-Z$._0-9]*|\d+)/],["kwd",/^[A-Za-z_][0-9A-Za-z_]*/,null],["lit",/^\d+\.\d+/],["lit",/^(?:\d+|0[xX][a-fA-F0-9]+)/],["pun",/^[()\[\]{},=*<>:]|\.\.\.$/]]),["llvm","ll"]);
18 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/prettify/lang-proto.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Copyright (C) 2006 Google Inc.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 | PR.registerLangHandler(PR.sourceDecorator({keywords:"bytes,default,double,enum,extend,extensions,false,group,import,max,message,option,optional,package,repeated,required,returns,rpc,service,syntax,to,true",types:/^(bool|(double|s?fixed|[su]?int)(32|64)|float|string)\b/,cStyleComments:!0}),["proto"]);
18 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/prettify/lang-rd.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Copyright (C) 2012 Jeffrey Arnold
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^%[^\r\n]*/,null,"%"]],[["lit",/^\\(?:cr|l?dots|R|tab)\b/],["kwd",/^\\[a-zA-Z@]+/],["kwd",/^#(?:ifn?def|endif)/],["pln",/^\\[{}]/],["pun",/^[{}()\[\]]+/]]),["Rd","rd"]);
18 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/prettify/lang-tex.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Copyright (C) 2011 Martin S.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^%[^\r\n]*/,null,"%"]],[["kwd",/^\\[a-zA-Z@]+/],["kwd",/^\\./],["typ",/^[$&]/],["lit",/[+-]?(?:\.\d+|\d+(?:\.\d*)?)(cm|em|ex|in|pc|pt|bp|mm)/i],["pun",/^[{}()\[\]=]+/]]),["latex","tex"]);
18 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/prettify/lang-yaml.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Copyright (C) 2015 ribrdb @ code.google.com
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 | PR.registerLangHandler(PR.createSimpleLexer([["pun",/^[:|>?]+/,null,":|>?"],["dec",/^%(?:YAML|TAG)[^#\r\n]+/,null,"%"],["typ",/^[&]\S+/,null,"&"],["typ",/^!\S*/,null,"!"],["str",/^"(?:[^\\"]|\\.)*(?:"|$)/,null,'"'],["str",/^'(?:[^']|'')*(?:'|$)/,null,"'"],["com",/^#[^\r\n]*/,null,"#"],["pln",/^\s+/,null," \t\r\n"]],[["dec",/^(?:---|\.\.\.)(?:[\r\n]|$)/],["pun",/^-/],["kwd",/^[\w-]+:[ \r\n]/],["pln",
18 | /^\w+/]]),["yaml","yml"]);
19 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/prettify/lang-yml.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Copyright (C) 2015 ribrdb @ code.google.com
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 | PR.registerLangHandler(PR.createSimpleLexer([["pun",/^[:|>?]+/,null,":|>?"],["dec",/^%(?:YAML|TAG)[^#\r\n]+/,null,"%"],["typ",/^[&]\S+/,null,"&"],["typ",/^!\S*/,null,"!"],["str",/^"(?:[^\\"]|\\.)*(?:"|$)/,null,'"'],["str",/^'(?:[^']|'')*(?:'|$)/,null,"'"],["com",/^#[^\r\n]*/,null,"#"],["pln",/^\s+/,null," \t\r\n"]],[["dec",/^(?:---|\.\.\.)(?:[\r\n]|$)/],["pun",/^-/],["kwd",/^[\w-]+:[ \r\n]/],["pln",
18 | /^\w+/]]),["yaml","yml"]);
19 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/prettify/prettify.css:
--------------------------------------------------------------------------------
1 | .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.clo,.opn,.pun{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.kwd,.tag,.typ{font-weight:700}.str{color:#060}.kwd{color:#006}.com{color:#600;font-style:italic}.typ{color:#404}.lit{color:#044}.clo,.opn,.pun{color:#440}.tag{color:#006}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:decimal !important}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/prettify/skins/desert.css:
--------------------------------------------------------------------------------
1 | pre .atn,pre .kwd,pre .tag{font-weight:700}pre.prettyprint{display:block;background-color:#333}pre .nocode{background-color:none;color:#000}pre .str{color:#ffa0a0}pre .kwd{color:khaki}pre .com{color:#87ceeb}pre .typ{color:#98fb98}pre .lit{color:#cd5c5c}pre .pln,pre .pun{color:#fff}pre .tag{color:khaki}pre .atn{color:#bdb76b}pre .atv{color:#ffa0a0}pre .dec{color:#98fb98}ol.linenums{margin-top:0;margin-bottom:0;color:#AEAEAE}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}@media print{pre.prettyprint{background-color:none}code .str,pre .str{color:#060}code .kwd,pre .kwd{color:#006;font-weight:700}code .com,pre .com{color:#600;font-style:italic}code .typ,pre .typ{color:#404;font-weight:700}code .lit,pre .lit{color:#044}code .pun,pre .pun{color:#440}code .pln,pre .pln{color:#000}code .tag,pre .tag{color:#006;font-weight:700}code .atn,pre .atn{color:#404}code .atv,pre .atv{color:#060}}
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/prettify/skins/sons-of-obsidian.css:
--------------------------------------------------------------------------------
1 | .str{color:#EC7600}.kwd{color:#93C763}.com{color:#66747B}.typ{color:#678CB1}.lit{color:#FACD22}.pln,.pun{color:#F1F2F3}.tag{color:#8AC763}.atn{color:#E0E2E4}.atv{color:#EC7600}.dec{color:purple}pre.prettyprint{border:0 solid #888}ol.linenums{margin-top:0;margin-bottom:0}.prettyprint{background:#000}li.L0,li.L1,li.L2,li.L3,li.L4,li.L5,li.L6,li.L7,li.L8,li.L9{color:#555;list-style-type:decimal}li.L1,li.L3,li.L5,li.L7,li.L9{background:#111}@media print{.kwd,.tag,.typ{font-weight:700}.str{color:#060}.kwd{color:#006}.com{color:#600;font-style:italic}.typ{color:#404}.lit{color:#044}.pun{color:#440}.pln{color:#000}.tag{color:#006}.atn{color:#404}.atv{color:#060}}
--------------------------------------------------------------------------------
/mlcomp/server/front/src/assets/prettify/skins/sunburst.css:
--------------------------------------------------------------------------------
1 | code .str,pre .str{color:#65B042}code .kwd,pre .kwd{color:#E28964}code .com,pre .com{color:#AEAEAE;font-style:italic}code .typ,pre .typ{color:#89bdff}code .lit,pre .lit{color:#3387CC}code .pln,code .pun,pre .pln,pre .pun{color:#fff}code .tag,pre .tag{color:#89bdff}code .atn,pre .atn{color:#bdb76b}code .atv,pre .atv{color:#65B042}code .dec,pre .dec{color:#3387CC}code.prettyprint,pre.prettyprint{background-color:#000;border-radius:8px}pre.prettyprint{width:95%;margin:1em auto;padding:1em;white-space:pre-wrap}ol.linenums{margin-top:0;margin-bottom:0;color:#AEAEAE}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}@media print{code .str,pre .str{color:#060}code .kwd,pre .kwd{color:#006;font-weight:700}code .com,pre .com{color:#600;font-style:italic}code .typ,pre .typ{color:#404;font-weight:700}code .lit,pre .lit{color:#044}code .pun,pre .pun{color:#440}code .pln,pre .pln{color:#000}code .tag,pre .tag{color:#006;font-weight:700}code .atn,pre .atn{color:#404}code .atv,pre .atv{color:#060}}
--------------------------------------------------------------------------------
/mlcomp/server/front/src/browserslist:
--------------------------------------------------------------------------------
1 | # This file is currently used by autoprefixer to adjust CSS to support the below specified browsers
2 | # For additional information regarding the format and rule options, please see:
3 | # https://github.com/browserslist/browserslist#queries
4 | #
5 | # For IE 9-11 support, please remove 'not' from the last line of the file and adjust as needed
6 |
7 | > 0.5%
8 | last 2 versions
9 | Firefox ESR
10 | not dead
11 | not IE 9-11
12 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/environments/environment.prod.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | production: true
3 | };
4 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/environments/environment.ts:
--------------------------------------------------------------------------------
1 | // This file can be replaced during build by using the `fileReplacements` array.
2 | // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.
3 | // The list of file replacements can be found in `angular.json`.
4 |
5 | export const environment = {
6 | production: false
7 | };
8 |
9 | /*
10 | * For easier debugging in development mode, you can import the following file
11 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
12 | *
13 | * This import should be commented out in production mode because it will have a negative impact
14 | * on performance if an error is thrown.
15 | */
16 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI.
17 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | MLComp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/karma.conf.js:
--------------------------------------------------------------------------------
1 | // Karma configuration file, see link for more information
2 | // https://karma-runner.github.io/1.0/config/configuration-file.html
3 |
4 | module.exports = function (config) {
5 | config.set({
6 | basePath: '',
7 | frameworks: ['jasmine', '@angular-devkit/build-angular'],
8 | plugins: [
9 | require('karma-jasmine'),
10 | require('karma-chrome-launcher'),
11 | require('karma-jasmine-html-reporter'),
12 | require('karma-coverage-istanbul-reporter'),
13 | require('@angular-devkit/build-angular/plugins/karma')
14 | ],
15 | client: {
16 | clearContext: false // leave Jasmine Spec Runner output visible in browser
17 | },
18 | coverageIstanbulReporter: {
19 | dir: require('path').join(__dirname, '../coverage'),
20 | reports: ['html', 'lcovonly'],
21 | fixWebpackSourcePaths: true
22 | },
23 | reporters: ['progress', 'kjhtml'],
24 | port: 9876,
25 | colors: true,
26 | logLevel: config.LOG_INFO,
27 | autoWatch: true,
28 | browsers: ['Chrome'],
29 | singleRun: false
30 | });
31 | };
32 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/main.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode } from '@angular/core';
2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
3 |
4 | import { AppModule } from './app/app.module';
5 | import { environment } from './environments/environment';
6 |
7 | if (environment.production) {
8 | enableProdMode();
9 | }
10 |
11 | platformBrowserDynamic().bootstrapModule(AppModule);
12 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/test.ts:
--------------------------------------------------------------------------------
1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files
2 |
3 | import 'zone.js/dist/zone-testing';
4 | import { getTestBed } from '@angular/core/testing';
5 | import {
6 | BrowserDynamicTestingModule,
7 | platformBrowserDynamicTesting
8 | } from '@angular/platform-browser-dynamic/testing';
9 |
10 | declare const require: any;
11 |
12 | // First, initialize the Angular testing environment.
13 | getTestBed().initTestEnvironment(
14 | BrowserDynamicTestingModule,
15 | platformBrowserDynamicTesting()
16 | );
17 | // Then we find all the tests.
18 | const context = require.context('./', true, /\.spec\.ts$/);
19 | // And load the modules.
20 | context.keys().map(context);
21 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out-tsc/app",
5 | "types": []
6 | },
7 | "exclude": [
8 | "test.ts",
9 | "**/*.spec.ts",
10 | "**/*.avoid.ts",
11 | "**/*.0.ts",
12 | "**/*.1.ts",
13 | "**/*.1b.ts",
14 | "**/*.2.ts",
15 | "**/*.3.ts",
16 | "**/*.4.ts",
17 | "**/*.5.ts",
18 | "**/*.6.ts",
19 | "**/*.7.ts"
20 | ]
21 | }
--------------------------------------------------------------------------------
/mlcomp/server/front/src/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out-tsc/spec",
5 | "types": [
6 | "jasmine",
7 | "node"
8 | ]
9 | },
10 | "files": [
11 | "test.ts",
12 | "polyfills.ts"
13 | ],
14 | "include": [
15 | "**/*.spec.ts",
16 | "**/*.d.ts"
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/mlcomp/server/front/src/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tslint.json",
3 | "rules": {
4 | "directive-selector": [
5 | true,
6 | "attribute",
7 | "app",
8 | "camelCase"
9 | ],
10 | "component-selector": [
11 | true,
12 | "element",
13 | "app",
14 | "kebab-case"
15 | ]
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/mlcomp/server/front/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compileOnSave": false,
3 | "compilerOptions": {
4 | "baseUrl": "./",
5 | "outDir": "./dist/out-tsc",
6 | "sourceMap": true,
7 | "declaration": false,
8 | "module": "es2015",
9 | "moduleResolution": "node",
10 | "emitDecoratorMetadata": true,
11 | "experimentalDecorators": true,
12 | "importHelpers": true,
13 | "target": "es5",
14 | "typeRoots": [
15 | "node_modules/@types"
16 | ],
17 | "lib": [
18 | "es2018",
19 | "dom"
20 | ]
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/mlcomp/server/tests/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lightforever/mlcomp/c78fdb77ec9c4ec8ff11beea50b90cab20903ad9/mlcomp/server/tests/__init__.py
--------------------------------------------------------------------------------
/mlcomp/utils/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lightforever/mlcomp/c78fdb77ec9c4ec8ff11beea50b90cab20903ad9/mlcomp/utils/__init__.py
--------------------------------------------------------------------------------
/mlcomp/utils/img.py:
--------------------------------------------------------------------------------
1 | from typing import Tuple
2 |
3 | import numpy as np
4 | import cv2
5 |
6 |
7 | def resize_saving_ratio(img: np.array, size: Tuple[int, int]):
8 | if not size:
9 | return img
10 | if size[0] and img.shape[0] > size[0]:
11 | k = size[0] / img.shape[0]
12 | img = cv2.resize(img, (int(k * img.shape[1]), size[0]))
13 | if size[1] and img.shape[1] > size[1]:
14 | k = size[1] / img.shape[1]
15 | img = cv2.resize(img, (size[1], int(k * img.shape[0])))
16 | return img
17 |
18 |
19 | __all__ = ['resize_saving_ratio']
20 |
--------------------------------------------------------------------------------
/mlcomp/utils/schedule.py:
--------------------------------------------------------------------------------
1 | import atexit
2 |
3 | from apscheduler.schedulers.background import BackgroundScheduler
4 |
5 |
6 | def start_schedule(jobs):
7 | scheduler = BackgroundScheduler()
8 | for func, interval in jobs:
9 | scheduler.add_job(func=func, trigger='interval', seconds=interval,
10 | max_instances=1)
11 | scheduler.start()
12 |
13 | # Shut down the scheduler when exiting the app
14 | atexit.register(lambda: scheduler.shutdown())
15 |
--------------------------------------------------------------------------------
/mlcomp/utils/tests.py:
--------------------------------------------------------------------------------
1 | import pytest
2 | from importlib import reload
3 | import shutil
4 |
5 | import mlcomp
6 | from mlcomp import ROOT_FOLDER
7 | from mlcomp.db.core import Session
8 | from mlcomp.migration.manage import migrate
9 |
10 |
11 | @pytest.fixture()
12 | def session():
13 | if ROOT_FOLDER:
14 | shutil.rmtree(ROOT_FOLDER)
15 | reload(mlcomp)
16 |
17 | migrate()
18 | res = Session.create_session()
19 | yield res
20 |
--------------------------------------------------------------------------------
/mlcomp/worker/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lightforever/mlcomp/c78fdb77ec9c4ec8ff11beea50b90cab20903ad9/mlcomp/worker/__init__.py
--------------------------------------------------------------------------------
/mlcomp/worker/app.py:
--------------------------------------------------------------------------------
1 | from __future__ import absolute_import, unicode_literals
2 | from celery import Celery
3 | import os
4 | import sys
5 |
6 | from mlcomp import REDIS_PASSWORD, REDIS_HOST, REDIS_PORT
7 |
8 | sys.path.insert(0, os.path.dirname(__file__))
9 |
10 | broker = f'redis://:{REDIS_PASSWORD}@{REDIS_HOST}:{REDIS_PORT}/0'
11 |
12 | app = Celery(
13 | 'mlcomp',
14 | broker=broker,
15 | backend=broker,
16 | include=['mlcomp.worker.tasks']
17 | )
18 | __all__ = ['app']
19 |
--------------------------------------------------------------------------------
/mlcomp/worker/executors/__init__.py:
--------------------------------------------------------------------------------
1 | # flake8: noqa
2 | from .base import StepWrap, Executor
3 |
--------------------------------------------------------------------------------
/mlcomp/worker/executors/base/__init__.py:
--------------------------------------------------------------------------------
1 | from .step import StepWrap
2 | from .executor import Executor
3 |
4 | __all__ = ['StepWrap', 'Executor']
5 |
--------------------------------------------------------------------------------
/mlcomp/worker/executors/catalyst_/__init__.py:
--------------------------------------------------------------------------------
1 | from .catalyst_ import Catalyst
2 |
3 | __all__ = ['Catalyst']
4 |
--------------------------------------------------------------------------------
/mlcomp/worker/reports/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lightforever/mlcomp/c78fdb77ec9c4ec8ff11beea50b90cab20903ad9/mlcomp/worker/reports/__init__.py
--------------------------------------------------------------------------------
/mlcomp/worker/tests/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lightforever/mlcomp/c78fdb77ec9c4ec8ff11beea50b90cab20903ad9/mlcomp/worker/tests/__init__.py
--------------------------------------------------------------------------------
/pytest.ini:
--------------------------------------------------------------------------------
1 | [pytest]
2 | norecursedirs = build docker docs examples mlcomp/server/front dist
3 | addopts = -p no:warnings
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | Pillow<7
2 | PyYAML>=5.1
3 | redis
4 | setuptools>=41.0.1
5 | click>=7.0
6 | psutil>=5.6.2
7 | GPUtil==1.4.0
8 | pathspec>=0.5.9
9 | apscheduler>=3.6.0
10 | sqlalchemy>=1.3.4
11 | celery>=4.3.0
12 | kaggle>=1.5.3
13 | scipy>=1.3.0
14 | flask>=1.0.2
15 | requests
16 | flask_cors>=3.0.6
17 | sqlalchemy_serializer==1.3.1
18 | scikit-learn>=0.21.2
19 | psycopg2-binary>=2.8.2
20 | tiffile
21 | albumentations>=0.2.3
22 | sqlalchemy-migrate>=0.12.0
23 | cython
24 | supervisor>=4.0.4
25 | torchvision>=0.4.2
26 | torch>=1.0.0
27 | numpy>=1.18.0
28 | pandas>=0.25.3
29 | tqdm>=4.39.0
30 | simplejson>=3.13.2
31 |
32 | # For describing
33 | jupyter
34 | networkx>=2.2
35 |
36 | # For tests
37 | pytest>=5.0.1
38 | pytest-xdist>=1.29.0
39 |
40 | # Application level
41 | pretrainedmodels>=0.7.4
42 |
43 | catalyst==20.3.1
--------------------------------------------------------------------------------
/teamcity/deploy.sh:
--------------------------------------------------------------------------------
1 | pip install sphinx sphinx-autobuild
2 |
3 | mkdir -p builds/
4 | sphinx-build -b html ./docs/ builds/ -W --keep-going
5 |
6 | COMMENT=$(git log -1 --pretty=%B)
7 |
8 | cp -a builds $TEMP/builds
9 |
10 | cd $TEMP
11 |
12 | git clone --single-branch --branch gh-pages https://GH_TOKEN:$GH_TOKEN@github.com/catalyst-team/mlcomp.git
13 |
14 | cd mlcomp
15 | rm -rf *
16 | cp -a $TEMP/builds/* .
17 |
18 | if [ $GIT_BRANCH == 'refs/heads/master' ]; then
19 | git config --global user.email "teamcity@catalyst.github"
20 | git config --global user.name "Teamcity"
21 | git add .
22 | git commit -m "$COMMENT"
23 | git push
24 | fi
--------------------------------------------------------------------------------
/teamcity/tests.sh:
--------------------------------------------------------------------------------
1 | pip install -r requirements.txt
2 |
3 | pip install flake8 flake8-quotes yapf
4 |
5 | pip install -U pytest pytest-xdist
6 |
7 | pytest -v --forked --numprocesses=auto
--------------------------------------------------------------------------------
/yapf.sh:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lightforever/mlcomp/c78fdb77ec9c4ec8ff11beea50b90cab20903ad9/yapf.sh
--------------------------------------------------------------------------------