ParlAI icon indicating copy to clipboard operation
ParlAI copied to clipboard

Unable to execute display_data for task self_feeding due to AttributeError of missing attribute DefaultTeacher

Open mfekadu opened this issue 4 years ago • 6 comments

Bug description

I wanted to try out the dataset described in id : SelfFeedingChatbot but I ran into an error when I tried to run the display_data script.

detatils from /parlai/tasks/task_list.py

https://github.com/facebookresearch/ParlAI/blob/ac2ac9b66b9b8afe022ba8482899c95334b5023d/parlai/tasks/task_list.py#L462-L473

Reproduction steps

I ran this script

python3 -m parlai.scripts.display_data -t self_feeding

Then I got this error:

$ ~/ParlAI$ sudo python3 -m parlai.scripts.display_data -t self_feeding
Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/mfekadu/ParlAI/parlai/scripts/display_data.py", line 113, in <module>
    DisplayData.main()
  File "/home/mfekadu/ParlAI/parlai/scripts/script.py", line 79, in main
    return cls._run_args(None)
  File "/home/mfekadu/ParlAI/parlai/scripts/script.py", line 63, in _run_args
    opt = parser.parse_args(args=args, print_args=False)
  File "/home/mfekadu/ParlAI/parlai/core/params.py", line 1009, in parse_args
    self.add_extra_args(args)
  File "/home/mfekadu/ParlAI/parlai/core/params.py", line 841, in add_extra_args
    self.add_task_args(task)
  File "/home/mfekadu/ParlAI/parlai/core/params.py", line 777, in add_task_args
    agent = load_teacher_module(t)
  File "/home/mfekadu/ParlAI/parlai/core/loader.py", line 290, in load_teacher_module
    teacher_class = getattr(task_module, teacher)
AttributeError: module 'parlai.tasks.self_feeding.agents' has no attribute 'DefaultTeacher'

Expected behavior

A clean download and display of data, just like the squad example in the readme

Additional context

I noticed the same AttributeError show up in #2100

here is my full history from clone 🧬 to bug 🐛
  494  git clone https://github.com/facebookresearch/ParlAI.git ~/ParlAI
  495  cd ~/ParlAI; python setup.py develop
  496  ls
  497  python3 setup.py develop
  498  sudo python3 setup.py develop
  499  python -m parlai.scripts.display_data -t squad
  500  python3 -m parlai.scripts.display_data -t squad
  501  python3 -m parlai.scripts.display_data -t personachat
  502  python3 -m parlai.scripts.display_data -t personachat -n 100
  503  cat /home/mfekadu/ParlAI/data/Persona-Chat/personachat/train_self_original.txt
  504  python3 -m parlai.scripts.display_data -t SelfFeedingChatbot
  505  python3 -m parlai.scripts.display_data -t self_feeding
  506* python3 -m parlai.scripts.
  507  python3 -m parlai.scripts.display_data -t self_feeding
  508  python3 -m parlai.scripts.display_data --help
  509  python3 -m parlai.scripts.display_data -t self_feeding
  510  sudo python3 -m parlai.scripts.display_data -t self_feeding
  511  history
squad worked just fine by the way, thanks for that!
$ ~/ParlAI$ python3 -m parlai.scripts.display_data -t squad
16:23:54 INFO | creating task(s): squad
loading: /home/mfekadu/ParlAI/data/SQuAD/train-v1.1.json
- - - NEW EPISODE: squad - - -
Architecturally, the school has a Catholic character. Atop the Main Building's gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend "Venite Ad Me Omnes". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive (and in a direct line that connects through 3 statues and the Gold Dome), is a simple, modern stone statue of Mary.
To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France?
   Saint Bernadette Soubirous
- - - NEW EPISODE: squad - - -
Architecturally, the school has a Catholic character. Atop the Main Building's gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend "Venite Ad Me Omnes". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive (and in a direct line that connects through 3 statues and the Gold Dome), is a simple, modern stone statue of Mary.
What is in front of the Notre Dame Main Building?
   a copper statue of Christ
- - - NEW EPISODE: squad - - -
Architecturally, the school has a Catholic character. Atop the Main Building's gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend "Venite Ad Me Omnes". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive (and in a direct line that connects through 3 statues and the Gold Dome), is a simple, modern stone statue of Mary.
The Basilica of the Sacred heart at Notre Dame is beside to which structure?
   the Main Building
- - - NEW EPISODE: squad - - -
Architecturally, the school has a Catholic character. Atop the Main Building's gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend "Venite Ad Me Omnes". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive (and in a direct line that connects through 3 statues and the Gold Dome), is a simple, modern stone statue of Mary.
What is the Grotto at Notre Dame?
   a Marian place of prayer and reflection
- - - NEW EPISODE: squad - - -
Architecturally, the school has a Catholic character. Atop the Main Building's gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend "Venite Ad Me Omnes". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive (and in a direct line that connects through 3 statues and the Gold Dome), is a simple, modern stone statue of Mary.
What sits on top of the Main Building at Notre Dame?
   a golden statue of the Virgin Mary
- - - NEW EPISODE: squad - - -
As at most other universities, Notre Dame's students run a number of news media outlets. The nine student-run outlets include three newspapers, both a radio and television station, and several magazines and journals. Begun as a one-page journal in September 1876, the Scholastic magazine is issued twice monthly and claims to be the oldest continuous collegiate publication in the United States. The other magazine, The Juggler, is released twice a year and focuses on student literature and artwork. The Dome yearbook is published annually. The newspapers have varying publication interests, with The Observer published daily and mainly reporting university and other news, and staffed by students from both Notre Dame and Saint Mary's College. Unlike Scholastic and The Dome, The Observer is an independent publication and does not have a faculty advisor or any editorial oversight from the University. In 1987, when some students believed that The Observer began to show a conservative bias, a liberal newspaper, Common Sense was published. Likewise, in 2003, when other students believed that the paper showed a liberal bias, the conservative paper Irish Rover went into production. Neither paper is published as often as The Observer; however, all three are distributed to all students. Finally, in Spring 2008 an undergraduate journal for political science research, Beyond Politics, made its debut.
When did the Scholastic Magazine of Notre dame begin publishing?
   September 1876
- - - NEW EPISODE: squad - - -
As at most other universities, Notre Dame's students run a number of news media outlets. The nine student-run outlets include three newspapers, both a radio and television station, and several magazines and journals. Begun as a one-page journal in September 1876, the Scholastic magazine is issued twice monthly and claims to be the oldest continuous collegiate publication in the United States. The other magazine, The Juggler, is released twice a year and focuses on student literature and artwork. The Dome yearbook is published annually. The newspapers have varying publication interests, with The Observer published daily and mainly reporting university and other news, and staffed by students from both Notre Dame and Saint Mary's College. Unlike Scholastic and The Dome, The Observer is an independent publication and does not have a faculty advisor or any editorial oversight from the University. In 1987, when some students believed that The Observer began to show a conservative bias, a liberal newspaper, Common Sense was published. Likewise, in 2003, when other students believed that the paper showed a liberal bias, the conservative paper Irish Rover went into production. Neither paper is published as often as The Observer; however, all three are distributed to all students. Finally, in Spring 2008 an undergraduate journal for political science research, Beyond Politics, made its debut.
How often is Notre Dame's the Juggler published?
   twice
- - - NEW EPISODE: squad - - -
As at most other universities, Notre Dame's students run a number of news media outlets. The nine student-run outlets include three newspapers, both a radio and television station, and several magazines and journals. Begun as a one-page journal in September 1876, the Scholastic magazine is issued twice monthly and claims to be the oldest continuous collegiate publication in the United States. The other magazine, The Juggler, is released twice a year and focuses on student literature and artwork. The Dome yearbook is published annually. The newspapers have varying publication interests, with The Observer published daily and mainly reporting university and other news, and staffed by students from both Notre Dame and Saint Mary's College. Unlike Scholastic and The Dome, The Observer is an independent publication and does not have a faculty advisor or any editorial oversight from the University. In 1987, when some students believed that The Observer began to show a conservative bias, a liberal newspaper, Common Sense was published. Likewise, in 2003, when other students believed that the paper showed a liberal bias, the conservative paper Irish Rover went into production. Neither paper is published as often as The Observer; however, all three are distributed to all students. Finally, in Spring 2008 an undergraduate journal for political science research, Beyond Politics, made its debut.
What is the daily student paper at Notre Dame called?
   The Observer
- - - NEW EPISODE: squad - - -
As at most other universities, Notre Dame's students run a number of news media outlets. The nine student-run outlets include three newspapers, both a radio and television station, and several magazines and journals. Begun as a one-page journal in September 1876, the Scholastic magazine is issued twice monthly and claims to be the oldest continuous collegiate publication in the United States. The other magazine, The Juggler, is released twice a year and focuses on student literature and artwork. The Dome yearbook is published annually. The newspapers have varying publication interests, with The Observer published daily and mainly reporting university and other news, and staffed by students from both Notre Dame and Saint Mary's College. Unlike Scholastic and The Dome, The Observer is an independent publication and does not have a faculty advisor or any editorial oversight from the University. In 1987, when some students believed that The Observer began to show a conservative bias, a liberal newspaper, Common Sense was published. Likewise, in 2003, when other students believed that the paper showed a liberal bias, the conservative paper Irish Rover went into production. Neither paper is published as often as The Observer; however, all three are distributed to all students. Finally, in Spring 2008 an undergraduate journal for political science research, Beyond Politics, made its debut.
How many student news papers are found at Notre Dame?
   three
- - - NEW EPISODE: squad - - -
As at most other universities, Notre Dame's students run a number of news media outlets. The nine student-run outlets include three newspapers, both a radio and television station, and several magazines and journals. Begun as a one-page journal in September 1876, the Scholastic magazine is issued twice monthly and claims to be the oldest continuous collegiate publication in the United States. The other magazine, The Juggler, is released twice a year and focuses on student literature and artwork. The Dome yearbook is published annually. The newspapers have varying publication interests, with The Observer published daily and mainly reporting university and other news, and staffed by students from both Notre Dame and Saint Mary's College. Unlike Scholastic and The Dome, The Observer is an independent publication and does not have a faculty advisor or any editorial oversight from the University. In 1987, when some students believed that The Observer began to show a conservative bias, a liberal newspaper, Common Sense was published. Likewise, in 2003, when other students believed that the paper showed a liberal bias, the conservative paper Irish Rover went into production. Neither paper is published as often as The Observer; however, all three are distributed to all students. Finally, in Spring 2008 an undergraduate journal for political science research, Beyond Politics, made its debut.
In what year did the student paper Common Sense begin publication at Notre Dame?
   1987
16:23:55 INFO | loaded 87599 episodes with a total of 87599 examples
$ ~/ParlAI$
same bug occurs when running script directly (rather than module)
$ python3 scripts/display_data.py --task self_feeding
Traceback (most recent call last):
  File "scripts/display_data.py", line 113, in <module>
    DisplayData.main()
  File "/home/mfekadu/ParlAI/parlai/scripts/script.py", line 79, in main
    return cls._run_args(None)
  File "/home/mfekadu/ParlAI/parlai/scripts/script.py", line 63, in _run_args
    opt = parser.parse_args(args=args, print_args=False)
  File "/home/mfekadu/ParlAI/parlai/core/params.py", line 1009, in parse_args
    self.add_extra_args(args)
  File "/home/mfekadu/ParlAI/parlai/core/params.py", line 841, in add_extra_args
    self.add_task_args(task)
  File "/home/mfekadu/ParlAI/parlai/core/params.py", line 777, in add_task_args
    agent = load_teacher_module(t)
  File "/home/mfekadu/ParlAI/parlai/core/loader.py", line 290, in load_teacher_module
    teacher_class = getattr(task_module, teacher)
AttributeError: module 'parlai.tasks.self_feeding.agents' has no attribute 'DefaultTeacher'

Questions

  • Why is a "Teacher" needed for a download script? Does display_data do more than download?

Workaround

Since I really just wanted to download the data, I found the ParlAI/projects/self_feeding/README.md to be super helpful!

the download seems to have just worked!
(~/ParlAI) $ python3 projects/self_feeding/download_data.py
[building data: /home/mfekadu/ParlAI/data/self_feeding]
16:41:58 INFO | Downloading http://parl.ai/downloads/self_feeding/self_feeding_v031.tar.gz to /home/mfekadu/ParlAI/data/self_feeding/self_feeding_v031.tar.gz
Downloading self_feeding_v031.tar.gz: 100%|██████████████████████████| 214M/214M [00:04<00:00, 52.5MB/s]
interactive pre-trained model works too

https://github.com/facebookresearch/ParlAI/blob/master/projects/self_feeding/README.md#chat-with-a-pretrained-model

$ ~/ParlAI$ python3 projects/self_feeding/interactive.py --model-file zoo:self_feeding/hh131k_hb60k_fb60k_st1k/model --no-cuda
17:50:17 WARN | overriding opt['subtasks'] to ['dialog', 'satisfaction'] (previously: ['dialog', 'feedback', 'satisfaction'])
17:50:17 WARN | overriding opt['interactive'] to True (previously: False)
17:50:17 WARN | overriding opt['prev_response_filter'] to True (previously: False)
17:50:17 WARN | overriding opt['partial_load'] to True (previously: False)
17:50:17 WARN | overriding opt['eval_candidates'] to fixed (previously: inline)
17:50:17 WARN | overriding opt['encode_candidate_vecs'] to True (previously: False)
17:50:17 WARN | overriding opt['fixed_candidates_path'] to /home/mfekadu/ParlAI/data/self_feeding/convai2_cands.txt (previously: None)
17:50:17 WARN | overriding opt['no_cuda'] to True (previously: False)
17:50:17 WARN | Old model: overriding `add_double_person_tokens` to True.
[ Setting interactive mode defaults... ]
17:50:17 INFO | loading dictionary from /home/mfekadu/ParlAI/data/models/self_feeding/hh131k_hb60k_fb60k_st1k/model.dict
17:50:17 INFO | num words = 23617
17:50:17 INFO | SelfFeeding: full interactive mode on.
17:50:19 INFO | Total parameters: 17,383,693 (16,462,093 trainable)
17:50:19 INFO | Loading existing model parameters from /home/mfekadu/ParlAI/data/models/self_feeding/hh131k_hb60k_fb60k_st1k/model
WARNING: could not load entire --init-model; loading partially instead.
17:50:19 INFO | Loading fixed candidate set from /home/mfekadu/ParlAI/data/self_feeding/convai2_cands.txt
17:50:19 INFO | Loading fixed candidate set vectors from /home/mfekadu/ParlAI/data/models/self_feeding/hh131k_hb60k_fb60k_st1k/model.convai2_cands.vecs
17:50:19 INFO | Loading fixed candidate set encodings from /home/mfekadu/ParlAI/data/models/self_feeding/hh131k_hb60k_fb60k_st1k/model.convai2_cands.encs
/usr/local/lib/python3.6/dist-packages/torch-1.4.0-py3.6-linux-x86_64.egg/torch/nn/_reduction.py:43: UserWarning: size_average and reduce args will be deprecated, please use reduction='sum' instead.
  warnings.warn(warning.format(ret))
17:50:19 INFO | creating task(s): parlai.agents.local_human.local_human:LocalHumanAgent
Enter [DONE] if you want to end the episode, [EXIT] to quit.
[ optional arguments: ]
[  share_word_embeddings: True ]
[ Main ParlAI Arguments: ]
[  batchsize: 128 ]
[  datapath: /home/mfekadu/ParlAI/data ]
[  datatype: train ]
[  download_path: /home/mfekadu/ParlAI/downloads ]
[  dynamic_batching: None ]
[  hide_labels: False ]
[  image_mode: raw ]
[  init_opt: None ]
[  loglevel: info ]
[  multitask_weights: [1] ]
[  numthreads: 1 ]
[  show_advanced_args: False ]
[  task: self_feeding:all:train ]
[ ParlAI Model Arguments: ]
[  dict_class: parlai.core.dict:DictionaryAgent ]
[  init_model: None ]
[  model: projects.self_feeding.self_feeding_agent:SelfFeedingAgent ]
[  model_file: /home/mfekadu/ParlAI/data/models/self_feeding/hh131k_hb60k_fb60k_st1k/model ]
[ Local Human Arguments: ]
[  local_human_candidates_file: None ]
[  single_turn: False ]
[ ParlAI Image Preprocessing Arguments: ]
[  image_cropsize: 224 ]
[  image_size: 256 ]
[ TorchAgent Arguments: ]
[  add_p1_after_newln: False ]
[  delimiter:
 ]
[  embedding_projection: random ]
[  embedding_type: fasttext_cc ]
[  force_fp16_tokens: False ]
[  fp16: False ]
[  fp16_impl: apex ]
[  gpu: -1 ]
[  history_add_global_end_token: None ]
[  history_size: 2 ]
[  interactive_mode: True ]
[  label_truncate: None ]
[  no_cuda: True ]
[  person_tokens: False ]
[  rank_candidates: True ]
[  split_lines: False ]
[  text_truncate: None ]
[  truncate: 1024 ]
[  use_reply: label ]
[ Optimizer Arguments: ]
[  adafactor_eps: (1e-30, 0.001) ]
[  adam_eps: 1e-08 ]
[  betas: [0.9, 0.999] ]
[  gradient_clip: 0.1 ]
[  learningrate: 0.0025 ]
[  momentum: 0 ]
[  nesterov: True ]
[  nus: [0.7] ]
[  optimizer: adamax ]
[  weight_decay: None ]
[ Learning Rate Scheduler: ]
[  invsqrt_lr_decay_gamma: -1 ]
[  lr_scheduler: invsqrt ]
[  lr_scheduler_decay: 0.5 ]
[  lr_scheduler_patience: 3 ]
[  max_lr_steps: -1 ]
[  update_freq: -1 ]
[  warmup_rate: 0.0001 ]
[  warmup_updates: 500 ]
[ TorchRankerAgent: ]
[  candidates: batch ]
[  cap_num_predictions: 100 ]
[  encode_candidate_vecs: True ]
[  encode_candidate_vecs_batchsize: 256 ]
[  eval_candidates: fixed ]
[  fixed_candidate_vecs: reuse ]
[  fixed_candidates_path: /home/mfekadu/ParlAI/data/self_feeding/convai2_cands.txt ]
[  ignore_bad_candidates: False ]
[  inference: max ]
[  init_model: None ]
[  interactive_candidates: fixed ]
[  rank_top_k: -1 ]
[  repeat_blocking_heuristic: True ]
[  return_cand_scores: False ]
[  topk: 5 ]
[  train_predict: False ]
[ Transformer Arguments: ]
[  activation: relu ]
[  attention_dropout: 0.0 ]
[  data_parallel: False ]
[  dropout: 0.0 ]
[  embedding_size: 300 ]
[  embeddings_scale: False ]
[  ffn_size: 32 ]
[  learn_embeddings: True ]
[  learn_positional_embeddings: False ]
[  memory_attention: sqrt ]
[  model_parallel: False ]
[  n_decoder_layers: -1 ]
[  n_encoder_layers: -1 ]
[  n_heads: 2 ]
[  n_layers: 2 ]
[  n_positions: None ]
[  n_segments: 0 ]
[  normalize_sent_emb: False ]
[  output_scaling: 1.0 ]
[  reduction_type: mean ]
[  relu_dropout: 0.0 ]
[  share_encoders: True ]
[  use_memories: False ]
[  variant: aiayn ]
[  wrap_memory_encoder: False ]
[ Dictionary Arguments: ]
[  bpe_debug: False ]
[  dict_endtoken: __end__ ]
[  dict_file: /home/mfekadu/ParlAI/data/models/self_feeding/hh131k_hb60k_fb60k_st1k/model.dict ]
[  dict_initpath: None ]
[  dict_language: english ]
[  dict_lower: False ]
[  dict_max_ngram_size: -1 ]
[  dict_maxtokens: 250000 ]
[  dict_minfreq: 0 ]
[  dict_nulltoken: __null__ ]
[  dict_starttoken: __start__ ]
[  dict_textfields: text,labels ]
[  dict_tokenizer: re ]
[  dict_unktoken: __unk__ ]
[ BPEHelper Arguments: ]
[  bpe_add_prefix_space: None ]
[  bpe_merge: None ]
[  bpe_vocab: None ]
[ Self Feeding Model: ]
[  sat_head_layers: 1 ]
[  share_fee_embeddings: True ]
[  share_fee_x_encoder: True ]
[  share_fee_y_encoder: True ]
[  share_sat_embeddings: False ]
[  share_sat_encoder: False ]
[ Self-feeding Agent: ]
[  add_double_person_tokens: True ]
[  dia_weight: 1.0 ]
[  display_sat_estimate: False ]
[  fee_weight: 1.0 ]
[  freeze_base: False ]
[  interactive: True ]
[  partial_load: True ]
[  prev_response_filter: True ]
[  prev_response_negatives: False ]
[  rating_frequency: 0.01 ]
[  rating_gap: 0.05 ]
[  rating_threshold: 0.5 ]
[  request_feedback: False ]
[  request_rating: False ]
[  sat_weight: 1.0 ]
[  subtasks: ['dialog', 'satisfaction'] ]
[  target_class: 0 ]
[ Self-feeding Variants: ]
[  regex: False ]
[  uncertainty_predictor: False ]
[  uncertainty_style: gap ]
[  uncertainty_threshold: 0.5 ]
Enter Your Message: Hello, Friend!
17:50:27 WARN | [ Executing eval mode with a common set of fixed candidates (n = 127712). ]
[SelfFeeding]: helloooo ! !
Enter Your Message: how are you?
[SelfFeeding]: i am doing better now . just had a mild asthma attack
Enter Your Message: omg! scary! glad you're feeling better :)
[SelfFeeding]: i am scared too ! we can face our fears together .
Enter Your Message: 💪✌️☮️🕊
[SelfFeeding]: how you doing my names ted
Enter Your Message: lol
[SelfFeeding]: lol
Enter Your Message:

mfekadu avatar Jun 17 '20 16:06 mfekadu

Thanks for the really thorough bug report, so nice.

It looks like that paper assumed that you were always providing the specific teacher. In the other datasets, we designate one of the variations to be the DefaultTeacher

A potential patch I can submit later:

diff --git a/parlai/tasks/self_feeding/agents.py b/parlai/tasks/self_feeding/agents.py
index 1a0a6196..287d276e 100644
--- a/parlai/tasks/self_feeding/agents.py
+++ b/parlai/tasks/self_feeding/agents.py
@@ -352,3 +352,7 @@ class AllTeacher(SelfFeedingMTLTeacher):
     @staticmethod
     def add_cmdline_args(argparser):
         SelfFeedingTeacher.add_cmdline_args(argparser)
+
+
+class DefaultTeacher(AllTeacher):
+    pass

stephenroller avatar Jun 17 '20 20:06 stephenroller

This issue has not had activity in 30 days. Please feel free to reopen if you have more issues. You may apply the "never-stale" tag to prevent this from happening.

github-actions[bot] avatar Jul 18 '20 00:07 github-actions[bot]

I still need to submit this pr

stephenroller avatar Jul 18 '20 02:07 stephenroller

This issue has not had activity in 30 days. Please feel free to reopen if you have more issues. You may apply the "never-stale" tag to prevent this from happening.

github-actions[bot] avatar Aug 18 '20 00:08 github-actions[bot]

Ugh

stephenroller avatar Aug 18 '20 00:08 stephenroller

Bad bot

stephenroller avatar Aug 26 '20 00:08 stephenroller

closing as this project is archived

klshuster avatar Nov 09 '22 22:11 klshuster