class_docstr: A class representing a Project object.
  
  Attributes:
      id: (int) The ID of the project.
      archived: (Mutable, bool) True if experiment is archived, else false.
      description: (Mutable, str) The description of the project.
      n_active_experiments: (int) The number of active experiments in the project.
      n_experiments: (Mutable, int) The number of experiments in the project.
      name: (Mutable, str) Human-friendly name of the project.
      notes: (Mutable, List[Dict[str,str]) Notes about the project. As determined upstream,
          each note is a dict with exactly the keys "name" and "contents".
      username: (Mutable, str) The username of the project owner.
      workspace_id: (int) The ID of the workspace this project belongs to.
class_docstr_tok: ["A","class","representing","a","Project","object",".","Attributes",":","id",":","(","int",")","The","ID","of","the","project",".","archived",":","(","Mutable",",","bool",")","True","if","experiment","is","archived",",","else","false",".","description",":","(","Mutable",",","str",")","The","description","of","the","project",".","n_active_experiments",":","(","int",")","The","number","of","active","experiments","in","the","project",".","n_experiments",":","(","Mutable",",","int",")","The","number","of","experiments","in","the","project",".","name",":","(","Mutable",",","str",")","Human-friendly","name","of","the","project",".","notes",":","(","Mutable",",","List","[","Dict","[","str",",","str","]",")","Notes","about","the","project",".","As","determined","upstream",",","each","note","is","a","dict","with","exactly","the","keys","``","name","''","and","``","contents","''",".","username",":","(","Mutable",",","str",")","The","username","of","the","project","owner",".","workspace_id",":","(","int",")","The","ID","of","the","workspace","this","project","belongs","to","."]
docstr: Remove a note from the project.
  
  Because there is not yet functionality on the backend to remove a single note, this method:
  1. fetches current notes for this project from the master.
  2. removes the note with the passed name from the list of notes.
  3. sends the updated list of notes to the master.
  
  WARNING:
  On exit, the object's notes attribute matches the updated master's notes, possibly
  reflecting changes to the project that have happened since the project was last hydrated
  from master.
  
  Args:
      name: The name of the note to remove. Note names are not necessarily unique within a
          project. This function can only remove notes with unique names. If you need to
          remove a note whose name isn't unique to this project, you must use the web UI.
  
  Raises:
      ValueError: If one of
          - no note with the passed name is found
          - multiple notes with the passed name are found
docstr_tok: ["Remove","a","note","from","the","project",".","Because","there","is","not","yet","functionality","on","the","backend","to","remove","a","single","note",",","this","method",":","1.","fetches","current","notes","for","this","project","from","the","master",".","2.","removes","the","note","with","the","passed","name","from","the","list","of","notes",".","3.","sends","the","updated","list","of","notes","to","the","master",".","WARNING",":","On","exit",",","the","object","'s","notes","attribute","matches","the","updated","master","'s","notes",",","possibly","reflecting","changes","to","the","project","that","have","happened","since","the","project","was","last","hydrated","from","master",".","Args",":","name",":","The","name","of","the","note","to","remove",".","Note","names","are","not","necessarily","unique","within","a","project",".","This","function","can","only","remove","notes","with","unique","names",".","If","you","need","to","remove","a","note","whose","name","is","n't","unique","to","this","project",",","you","must","use","the","web","UI",".","Raises",":","ValueError",":","If","one","of","-","no","note","with","the","passed","name","is","found","-","multiple","notes","with","the","passed","name","are","found"]
code: def remove_note(self, name: str) -> None:
      """Remove a note from the project.
  
      Because there is not yet functionality on the backend to remove a single note, this method:
      1. fetches current notes for this project from the master.
      2. removes the note with the passed name from the list of notes.
      3. sends the updated list of notes to the master.
  
      WARNING:
      On exit, the object's notes attribute matches the updated master's notes, possibly
      reflecting changes to the project that have happened since the project was last hydrated
      from master.
  
      Args:
          name: The name of the note to remove. Note names are not necessarily unique within a
              project. This function can only remove notes with unique names. If you need to
              remove a note whose name isn't unique to this project, you must use the web UI.
  
      Raises:
          ValueError: If one of
              - no note with the passed name is found
              - multiple notes with the passed name are found
      """
      fresh_notes = list(
          bindings.get_GetProject(
              session=self._session, id=self.id
          ).project.notes
      )
  
      matching_indexes = [
          i for i, note in enumerate(fresh_notes) if note.name == name
      ]
  
      if len(matching_indexes) == 0:
          raise ValueError(
              f"No note with name '{name}' found to remove."
          )
  
      if len(matching_indexes) > 1:
          raise ValueError(
              f"Multiple notes with name '{name}' found. Use the web UI to perform this action."
          )
  
      fresh_notes.pop(matching_indexes[0])
  
      request_body = bindings.v1PutProjectNotesRequest(
          notes=fresh_notes, projectId=self.id
      )
      resp = bindings.put_PutProjectNotes(
          session=self._session, body=request_body, projectId=self.id
      )
  
      self.notes = [note.to_json() for note in resp.notes]
  
file_path: determined/harness/determined/common/experimental/project.py
imports: import itertools
  from typing import Dict, List, Optional
  from determined.common import api
  from determined.common.api import bindings
  from determined.common.experimental import experiment
label_desc: Use image node_id 11 for calling the Project obj's underlying member method code with example usage: obj.remove_note(name) without return types