#水杉天梯——助教使用手册
本手册主要展示了助教创建一个作业，上传作业需要的评测文件，上传作业需要的数
据集的具体流程，以及如何修改上传的数据集和编辑已创建作业。手册中针对多阶段
的文件结果提交给出了命名规范，规定了模板文件中的打包函数。
##一、创建作业
###作业描述部分
该部分将详细介绍表单中每个字段的含义，以及应该如何填写。
![avatar](./figure/1.png)
**作业名称——中文名**：对应作业名。
**作业名称——英文名**：提交表单后生成的**zip压缩包名称**。
**图标**:如不上传，将使用默认的logo作为作业logo。（仅支持常用图片格式）
###Web Page部分
![avatar](./figure/2.png)
![avatar](./figure/3.png)
**概述，数据描述，评估，限制条件**使用的是富文本编辑器，可以对文本框中的内容进行加粗，斜体，调整字体大小，上色等操作。
![avatar](./figure/4.png)
这些文本框的内容将会以**html**的形式展现在生成的作业界面上。对应关系为：
**概述**对应——**Overview**；**评估**对应——**Evaluation**;**限制条件**对应——**Terms and Condictions**；**数据描述**对应——**Get Data**。下图用红框圈出。
![avatar](./figure/5.png)
![avatar](./figure/6.png)
###多阶段部分
设置了多阶段机制，允许一次作业分多个阶段提交。
**(解释：多个阶段可以理解为一次作业的两个部分，例如实现svm/决策树分别完成同一个分类任务，将会对应两个leaderboard)**
![avatar](./figure/7.png)
**每日最高提交数**：该作业允许每日最高的提交数。
**最高提交数**：该作业开始到结束期间允许的提交数之和。
**阶段数量**：填写该作业分为几个阶段。填写完以后点击确认，会自动生成相应数量的阶段填写框。
![avatar](./figure/8.png)
点击确认后，会出现对应数量的阶段内容框，每个阶段需要填写：
**代码评测文件**：.py格式，助教自定义填写，如需参考可点击超链接。
**作业的参考预测文件**：助教上传用于评测的正确结果文件。
**每个阶段的开始时间**：当前阶段学生可以提交文件的开始时间。
![avatar](./figure/9.png)
生成的作业将会分为多个阶段。点击每个阶段，可以提交对应阶段需要上传的文件。

**对于评测示例文件的补充说明**：

**文件定位**：若交由本系统进行评测，该段代码无需改动。若在本地测试，则直接修改路径即可。
![avatar](./figure/10.png)
**文件读取**：需要读取学生结果(prediction.txt)和参考结果(true.txt)，注意学生结果文件的命名应要求学生固定命名(可在Jupyter模板文件中写好)，参考结果文件命名在作业创建中上传的文件名一致。
![avatar](./figure/11.png)
![avatar](./figure/12.png)
![avatar](./figure/13.png)
两个文件里的数据内容格式应保持一致，通过修改自定义的read_txt函数来读取不同的格式。
![avatar](./figure/14.png)
**结果评测**：编写自定义的calculate_metric函数以满足不同的指标评测。（如果需要得到多个指标的结果，可自行丰富，得到多个score），以下为计算准确率的示例。
![avatar](./figure/15.png)
![avatar](./figure/16.png)
**结果输出**：输出文件要求写入规定名为(scores.txt)的文件，不能修改。输出文件的每一行代表对应的一个指标的分数结果，指标名、和小数点位数应与作业创建leaderboard处的填写内容一致。
![avatar](./figure/17.png)
![avatar](./figure/18.png)
**请助教在写完Evaluate.py后先在本地试运行，输出文件结果无误后再进行上传！**
###排行榜部分
![avatar](./figure/19.png)
**评估指标个数**：填写作业提交的评估指标个数，有的作业可能需要不只一个评估指标。填写评估指标个数将生成下图所示的指标框。
**评估标签**：填写评估标签名，如ACC,Precision,Recall等。
**数据格式**：保留几位小数。
**排序**：指标排序是升序还是降序。只能填**asc或desc**。
###其他
![avatar](./figure/20.png)

**作业权限**：选择作业参与是否需要助教同意。如选择是，则参与作业需要助教后台审批，如选择否，则申请参与作业后自动通过请求。
开始时间，截至时间：填写作业开始和结束的时间。
![avatar](./figure/21.png)
点击生成zip文件，将生成一个zip压缩包，点击上图中蓝色超链接生成压缩包。（**表单中除了图标可以不填，其余所有均为必填选项。**）
下载得到压缩包以后，点击上传zip文件，将生成一个新的作业。（**压缩包文件名不能含中文，空格等。**）
![avatar](./figure/22.png)
上传成功后，可以点击蓝色view超链接，查看具体作业信息。
##编辑作业
如果需要编辑，在作业详情界面中点击选项——编辑。
![avatar](./figure/23.png)
备注：编辑页面表单数量较多，此处只挑选助教有可能修改的部分做详细讲述，如需更深层次的编辑，请参考     
 https://github.com/codalab/codalab-competitions/wiki/Organizer_Codalab-competition-YAML-definition-language 
修改字段内容。
###作业描述部分
![avatar](./figure/25.png)
参考第一部分创建作业的作业描述部分。
**Title**对应——**作业的中文名**。
**Description**对应——**描述**。
##Web Page部分
![avatar](./figure/26.png)

编辑Web Pages，对应关系如一中Web Pages部分。
###多阶段部分
![avatar](./figure/27.png)
**Start Date(UTC)**：修改每个phase的开始时间。
**Maximum Submissions(per User)**：修改作业最多允许的提交数之和。
**Max Submissions(per User) per day**：修改作业每人每天最多允许的提交数。
###排行榜部分
![avatar](./figure/28.png)
![avatar](./figure/29.png)
**Key Label**必须**相同**，对应——**评估标签**。
**Numberic format**对应——**数据格式**。
**Sorting**对应——**排序**
###其他
![avatar](./figure/30.png)
**Organizers need to approve the new teams**对应——第一部分中的作业权限。
A**nonymous leaderboard**——排行榜用户名是否匿名

![avatar](./figure/32.png)
**Disallow leaderboard modifying**——提交是否可以被修改
**Force submission to leaderboard**——学生是否需要人工提交结果
![avatar](./figure/33.png)
**Registration Required**——学生是否需要经过助教同意才能参与作业
![avatar](./figure/34.png)
如果提交的结果比过去成绩好，则自动将当前结果提交到排行榜
##上传数据集
点击上传数据集按钮打开面板
![avatar](./figure/35.png)
![avatar](./figure/36.png)
点击选择文件选择数据集压缩包，然后点击提交按钮进行提交。
提交按钮下方会显示上传进度，提交完成后会有对话框提示完成。
![avatar](./figure/37.png)
数据集格式说明：
文件中需要包含input文件夹，其中放置数据集，可以有一个模板性的notebook文件
参考格式如下：
![avatar](./figure/38.png)
需要注意的是，压缩时需要选中这一级目录下所有文件及文件夹进行压缩，而不是对上一级目录进行压缩
上传后，学生视角的目录如下图所示：
![avatar](./figure/39.png)
其中read_only_sample文件为只读文件，作为备份
多阶段提交需要注意，需要额外加一个output文件夹，该目录下的结构如下图所示：
![avatar](./figure/40.png)
![avatar](./figure/41.png)
有几个阶段就添加多少个phase_x文件夹。phase_x文件夹用于保存学生对应第x阶段代码输出结果。
##四、重置数据集
点击重置Jupyter按钮，可以将该作业对应的notebook删除，学生打开notebook时会以最新上传的数据集作为模板。
![avatar](./figure/42.png)
使用情形：上传数据集有误需要更新时，已有学生打开了notebook，重新上传数据集不会更新已打开notebook的文件，需要点击该按钮解决。
![avatar](./figure/43.png)
![avatar](./figure/44.png)
##五、下载学生代码
![avatar](./figure/45.png)
点击学生代码按钮即可下载
![avatar](./figure/46.png)
可以下载所有学生的代码，学生文件以学号命名
![avatar](./figure/47.png)
学生编写的notebook文件或py文件都会在对应目录下。
##六、模板notebook文件说明
模板文件中包含三块内容：
1.具体题目的程序逻辑

![avatar](./figure/48.png)
2.输出程序，output_string存储程序输出结果， phase_id为阶段id，每个阶段的程序输出分开存放
![avatar](./figure/49.png)
3.打包程序
![avatar](./figure/50.png)
需要改变的主要是第一部分，后两部分为固定代码，使学生按照系统规定地输出结果和打包结果。
![avatar](./figure/51.png)
点击submit按钮可以将prediction_phase_1.zip提交到phase1的排行榜中。