org.cpsolver.studentsct.model

## Class Section

- java.lang.Object
- - org.cpsolver.ifs.assignment.context.AbstractClassWithContext<Request,Enrollment,Section.SectionContext>
  - - org.cpsolver.studentsct.model.Section

- All Implemented Interfaces:
    Comparable<Section>, AssignmentComparable<Section,Request,Enrollment>, CanHoldContext, CanInheritContext<Request,Enrollment,Section.SectionContext>, HasAssignmentContext<Request,Enrollment,Section.SectionContext>, SctAssignment
  Direct Known Subclasses:
    OnlineSection

      public class Section
      extends AbstractClassWithContext<Request,Enrollment,Section.SectionContext>
      implements SctAssignment, AssignmentComparable<Section,Request,Enrollment>, CanInheritContext<Request,Enrollment,Section.SectionContext>

  Representation of a class. Each section contains id, name, scheduling subpart, time/room placement, and a limit. Optionally, parent-child relation between sections can be defined.
  Each student requesting a course needs to be enrolled in a class of each subpart of a selected configuration. In the case of parent-child relation between classes, if a student is enrolled in a section that has a parent section defined, he/she has to be enrolled in the parent section as well. If there is a parent-child relation between two sections, the same relation is defined on their subparts as well, i.e., if section A is a parent section B, subpart of section A isa parent of subpart of section B.
  Version:
    StudentSct 1.3 (Student Sectioning)
    Copyright (C) 2007 - 2014 Tomáš Müller
    muller@unitime.org
    http://muller.unitime.org
    This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
    This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public License along with this library; if not see http://www.gnu.org/licenses/.
  Author:
    Tomáš Müller

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `class` | `Section.SectionContext`

  - ### Field Summary

    - ### Fields inherited from interface org.cpsolver.ifs.assignment.context.CanHoldContext

      `sMaxSize`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `Section(long id, int limit, String name, Subpart subpart, Placement placement, List<Instructor> instructors, Section parent)` Constructor
    `Section(long id, int limit, String name, Subpart subpart, Placement placement, Section parent, Instructor... instructors)` Constructor
    `Section(long id, int limit, String name, Subpart subpart, Placement placement, String instructorIds, String instructorNames, Section parent)` Deprecated.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addIgnoreConflictWith(long sectionId)` Add section id of a section that student conflicts are to be ignored with
    `void` | `assigned(Assignment<Request,Enrollment> assignment, Enrollment enrollment)` Called when an enrollment with this section is assigned to a request
    `void` | `clearReservationCache()` Clear reservation information that was cached on this section
    `int` | `compareById(SctAssignment a)` Sections first, then by `Request.getId()`
    `int` | `compareTo(Assignment<Request,Enrollment> assignment, Section s)` Compare two sections, prefer sections with lower penalty and more open space
    `int` | `compareTo(Section s)` Compare two sections, prefer sections with lower penalty
    `Section.SectionContext` | `createAssignmentContext(Assignment<Request,Enrollment> assignment)` Create a new assignment context for the given assignment.
    `boolean` | `equals(Object o)`
    `Choice` | `getChoice()` Choice matching this section
    `protected int` | `getDayOfWeekOffset()`
    `Set<Enrollment>` | `getEnrollments(Assignment<Request,Enrollment> assignment)` Set of assigned enrollments
    `double` | `getEnrollmentTotalWeight(Assignment<Request,Enrollment> assignment, Request excludeRequest)` Enrollment weight including over the limit enrollments.
    `double` | `getEnrollmentWeight(Assignment<Request,Enrollment> assignment, Request excludeRequest)` Enrollment weight -- weight of all requests which have an enrollment that contains this section, excluding the given one.
    `long` | `getId()` Section id
    `Set<Long>` | `getIgnoreConflictWithSectionIds()` Returns a set of ids of sections that student conflicts are to be ignored with (between this section and the others)
    `String` | `getInstructorNames(String delim)` Instructor names
    `List<Instructor>` | `getInstructors()` Instructors assigned to this section
    `int` | `getLimit()` Section limit.
    `String` | `getLongName()` Deprecated.
    `String` | `getLongName(boolean useAmPm)` Long name: subpart name + time long name + room names + instructor names
    `double` | `getMaxEnrollmentWeight(Assignment<Request,Enrollment> assignment)` Maximal weight of a single enrollment in the section
    `double` | `getMinEnrollmentWeight(Assignment<Request,Enrollment> assignment)` Minimal weight of a single enrollment in the section
    `Model<Request,Enrollment>` | `getModel()` Get the model.
    `String` | `getName()` Section name
    `String` | `getName(long courseId)` Return course-dependent section name
    `Map<Long,String>` | `getNameByCourse()` Return course-dependent section names
    `String` | `getNote()` Section note
    `int` | `getNrRooms()` Number of rooms in which the section meet.
    `double` | `getOnlineSectioningPenalty(Assignment<Request,Enrollment> assignment)` Online sectioning penalty.
    `Section` | `getParent()` Parent section of this section (can be null).
    `double` | `getPenalty()` Return penalty which is added to an enrollment that contains this section.
    `Placement` | `getPlacement()` Time/room placement of the section.
    `List<Reservation>` | `getReservations()` Get reservations for this section
    `List<RoomLocation>` | `getRooms()` Room placement -- list of `RoomLocation`
    `List<Reservation>` | `getSectionReservations()` Get reservations that require this section
    `double` | `getSpaceExpected()` Return the amount of space of this section that is expected to be taken by incoming students.
    `double` | `getSpaceHeld()` Return the amount of space of this section that is held for incoming students.
    `Subpart` | `getSubpart()` Scheduling subpart to which this section belongs
    `TimeLocation` | `getTime()` Time placement of the section.
    `double` | `getTotalUnreservedSpace()` Total space in the section that cannot be used by any section reservation
    `List<Unavailability>` | `getUnavailabilities()` List of student unavailabilities
    `double` | `getUnreservedSpace(Assignment<Request,Enrollment> assignment, Request excludeRequest)` Available space in the section that is not reserved by any section reservation
    `int` | `hashCode()`
    `boolean` | `hasInstructors()` Has any instructors assigned
    `boolean` | `hasTime()` Check if the class has a time assignment (is not arranged hours)
    `Section.SectionContext` | `inheritAssignmentContext(Assignment<Request,Enrollment> assignment, Section.SectionContext parentContext)` Create a new assignment context for the given assignment.
    `boolean` | `isAllowOverlap()` Return true if overlaps are allowed, but the number of overlapping slots should be minimized.
    `boolean` | `isCancelled()` Return cancelled flag of the class.
    `boolean` | `isEnabled()` Return enabled flag of the class.
    `boolean` | `isEnabled(Student student)` Return enabled flag of the class.
    `boolean` | `isModalityPreferred(Student student)`
    `boolean` | `isOnline()` Return whether the class is online.
    `boolean` | `isOverlapping(SctAssignment assignment)` True, if this section overlaps with the given assignment in time and space
    `boolean` | `isOverlapping(Set<? extends SctAssignment> assignments)` True, if this section overlaps with one of the given set of assignments in time and space
    `boolean` | `isPast()` Return past flag of the class.
    `boolean` | `isToIgnoreStudentConflictsWith(long sectionId)` Returns true if student conflicts between this section and the given one are to be ignored
    `int` | `nrInstructors()` Return number of instructors of this section
    `boolean` | `sameChoice(Section section)` True if the time assignment as well as the instructor(s) are the same
    `boolean` | `sameInstructionalType(Section section)` True if the instructional type is the same
    `boolean` | `sameInstructors(Section section)` True if the instructor(s) are the same
    `boolean` | `sameTime(Section section)` True if the time assignment is the same
    `void` | `setCancelled(boolean cancelled)` Set cancelled flag of the class.
    `void` | `setEnabled(boolean enabled)` Set enabled flag of the class.
    `void` | `setLimit(int limit)` Set section limit
    `void` | `setName(long courseId, String name)` Set course-dependent section name
    `void` | `setName(String name)` Set section name
    `void` | `setNote(String note)` Section note
    `void` | `setOnline(boolean online)` Set whether the class is online.
    `void` | `setPast(boolean past)` Set past flag of the class.
    `void` | `setPenalty(double penalty)` Set penalty which is added to an enrollment that contains this section.
    `void` | `setPlacement(Placement placement)` Set time/room placement of the section.
    `void` | `setSpaceExpected(double spaceExpected)` Set the amount of space of this section that is expected to be taken by incoming students.
    `void` | `setSpaceHeld(double spaceHeld)` Set the amount of space of this section that is held for incoming students.
    `String` | `toString()`
    `void` | `unassigned(Assignment<Request,Enrollment> assignment, Enrollment enrollment)` Called when an enrollment with this section is unassigned from a request

    - ### Methods inherited from class org.cpsolver.ifs.assignment.context.AbstractClassWithContext

      `getAssignmentContextReference, getContext, getContext, setAssignmentContextReference`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### Section

          public Section(long id,
                         int limit,
                         String name,
                         Subpart subpart,
                         Placement placement,
                         List<Instructor> instructors,
                         Section parent)

      Constructor
      Parameters:
        `id` - section unique id
        `limit` - section limit, i.e., the maximal number of students that can be enrolled in this section at the same time
        `name` - section name
        `subpart` - subpart of this section
        `placement` - time/room placement
        `instructors` - assigned instructor(s)
        `parent` - parent section -- if there is a parent section defined, a student that is enrolled in this section has to be enrolled in the parent section as well. Also, the same relation needs to be defined between subpart of this section and the subpart of the parent section

    - #### Section

          public Section(long id,
                         int limit,
                         String name,
                         Subpart subpart,
                         Placement placement,
                         Section parent,
                         Instructor... instructors)

      Constructor
      Parameters:
        `id` - section unique id
        `limit` - section limit, i.e., the maximal number of students that can be enrolled in this section at the same time
        `name` - section name
        `subpart` - subpart of this section
        `placement` - time/room placement
        `instructors` - assigned instructor(s)
        `parent` - parent section -- if there is a parent section defined, a student that is enrolled in this section has to be enrolled in the parent section as well. Also, the same relation needs to be defined between subpart of this section and the subpart of the parent section

    - #### Section

          @Deprecated
          public Section(long id,
                                     int limit,
                                     String name,
                                     Subpart subpart,
                                     Placement placement,
                                     String instructorIds,
                                     String instructorNames,
                                     Section parent)

      Deprecated.

  - ### Method Detail

    - #### getId

          public long getId()

      Section id
      Specified by:
        `getId` in interface `SctAssignment`
      Returns:
        section unique id

    - #### getLimit

          public int getLimit()

      Section limit. This is defines the maximal number of students that can be enrolled into this section at the same time. It is -1 in the case of an unlimited section
      Returns:
        class limit

    - #### setLimit

          public void setLimit(int limit)

      Set section limit
      Parameters:
        `limit` - class limit

    - #### getName

          public String getName()

      Section name
      Returns:
        class name

    - #### setName

          public void setName(String name)

      Set section name
      Parameters:
        `name` - class name

    - #### getSubpart

          public Subpart getSubpart()

      Scheduling subpart to which this section belongs
      Returns:
        scheduling subpart

    - #### getParent

          public Section getParent()

      Parent section of this section (can be null). If there is a parent section defined, a student that is enrolled in this section has to be enrolled in the parent section as well. Also, the same relation needs to be defined between subpart of this section and the subpart of the parent section.
      Returns:
        parent class

    - #### getPlacement

          public Placement getPlacement()

      Time/room placement of the section. This can be null, for arranged sections.
      Returns:
        time and room assignment of this class

    - #### setPlacement

          public void setPlacement(Placement placement)

      Set time/room placement of the section. This can be null, for arranged sections.
      Parameters:
        `placement` - time and room assignment of this class

    - #### getTime

          public TimeLocation getTime()

      Time placement of the section.
      Specified by:
        `getTime` in interface `SctAssignment`
      Returns:
        time assignment

    - #### hasTime

          public boolean hasTime()

      Check if the class has a time assignment (is not arranged hours)

    - #### sameInstructionalType

          public boolean sameInstructionalType(Section section)

      True if the instructional type is the same

    - #### sameTime

          public boolean sameTime(Section section)

      True if the time assignment is the same

    - #### sameInstructors

          public boolean sameInstructors(Section section)

      True if the instructor(s) are the same

    - #### sameChoice

          public boolean sameChoice(Section section)

      True if the time assignment as well as the instructor(s) are the same

    - #### getNrRooms

          public int getNrRooms()

      Number of rooms in which the section meet.
      Specified by:
        `getNrRooms` in interface `SctAssignment`
      Returns:
        number of rooms in which a section meets

    - #### getRooms

          public List<RoomLocation> getRooms()

      Room placement -- list of `RoomLocation`
      Specified by:
        `getRooms` in interface `SctAssignment`
      Returns:
        list of `RoomLocation`

    - #### isOverlapping

          public boolean isOverlapping(SctAssignment assignment)

      True, if this section overlaps with the given assignment in time and space
      Specified by:
        `isOverlapping` in interface `SctAssignment`
      Parameters:
        `assignment` - another assignment
      Returns:
        true if there is an overlap

    - #### isOverlapping

          public boolean isOverlapping(Set<? extends SctAssignment> assignments)

      True, if this section overlaps with one of the given set of assignments in time and space
      Specified by:
        `isOverlapping` in interface `SctAssignment`
      Parameters:
        `assignments` - a set of assignments
      Returns:
        true if one of them overlaps

    - #### assigned

          public void assigned(Assignment<Request,Enrollment> assignment,
                               Enrollment enrollment)

      Called when an enrollment with this section is assigned to a request
      Specified by:
        `assigned` in interface `SctAssignment`
      Parameters:
        `assignment` - current assignment
        `enrollment` - an enrollment that was just assigned

    - #### unassigned

          public void unassigned(Assignment<Request,Enrollment> assignment,
                                 Enrollment enrollment)

      Called when an enrollment with this section is unassigned from a request
      Specified by:
        `unassigned` in interface `SctAssignment`
      Parameters:
        `assignment` - current assignment
        `enrollment` - an enrollment that was just unassigned

    - #### getLongName

          public String getLongName(boolean useAmPm)

      Long name: subpart name + time long name + room names + instructor names
      Parameters:
        `useAmPm` - use 12-hour format
      Returns:
        long name

    - #### getLongName

          @Deprecated
          public String getLongName()

      Deprecated.

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Object`

    - #### getInstructors

          public List<Instructor> getInstructors()

      Instructors assigned to this section
      Returns:
        list of instructors

    - #### hasInstructors

          public boolean hasInstructors()

      Has any instructors assigned
      Returns:
        return true if there is at least one instructor assigned

    - #### nrInstructors

          public int nrInstructors()

      Return number of instructors of this section
      Returns:
        number of assigned instructors

    - #### getInstructorNames

          public String getInstructorNames(String delim)

      Instructor names
      Parameters:
        `delim` - delimiter
      Returns:
        instructor names

    - #### getPenalty

          public double getPenalty()

      Return penalty which is added to an enrollment that contains this section.
      Returns:
        online penalty

    - #### setPenalty

          public void setPenalty(double penalty)

      Set penalty which is added to an enrollment that contains this section.
      Parameters:
        `penalty` - online penalty

    - #### compareTo

          public int compareTo(Assignment<Request,Enrollment> assignment,
                               Section s)

      Compare two sections, prefer sections with lower penalty and more open space
      Specified by:
        `compareTo` in interface `AssignmentComparable<Section,Request,Enrollment>`
      Parameters:
        `assignment` - current assignment
        `s` - other instance
      Returns:
        comparison of this instance and the given one

    - #### compareTo

          public int compareTo(Section s)

      Compare two sections, prefer sections with lower penalty
      Specified by:
        `compareTo` in interface `Comparable<Section>`
      Specified by:
        `compareTo` in interface `AssignmentComparable<Section,Request,Enrollment>`

    - #### getSpaceHeld

          public double getSpaceHeld()

      Return the amount of space of this section that is held for incoming students. This attribute is computed during the batch sectioning (it is the overall weight of dummy students enrolled in this section) and it is being updated with each incomming student during the online sectioning.
      Returns:
        space held

    - #### setSpaceHeld

          public void setSpaceHeld(double spaceHeld)

      Set the amount of space of this section that is held for incoming students. See `getSpaceHeld()` for more info.
      Parameters:
        `spaceHeld` - space held

    - #### getSpaceExpected

          public double getSpaceExpected()

      Return the amount of space of this section that is expected to be taken by incoming students. This attribute is computed during the batch sectioning (for each dummy student that can attend this section (without any conflict with other enrollments of that student), 1 / x where x is the number of such sections of this subpart is added to this value). Also, this value is being updated with each incoming student during the online sectioning.
      Returns:
        space expected

    - #### setSpaceExpected

          public void setSpaceExpected(double spaceExpected)

      Set the amount of space of this section that is expected to be taken by incoming students. See `getSpaceExpected()` for more info.
      Parameters:
        `spaceExpected` - space expected

    - #### getOnlineSectioningPenalty

          public double getOnlineSectioningPenalty(Assignment<Request,Enrollment> assignment)

      Online sectioning penalty.
      Parameters:
        `assignment` - current assignment
      Returns:
        online sectioning penalty

    - #### isAllowOverlap

          public boolean isAllowOverlap()

      Return true if overlaps are allowed, but the number of overlapping slots should be minimized. This can be changed on the subpart, using `Subpart.setAllowOverlap(boolean)`.
      Specified by:
        `isAllowOverlap` in interface `SctAssignment`
      Returns:
        true, if overlaps are allowed

    - #### compareById

          public int compareById(SctAssignment a)

      Sections first, then by `Request.getId()`
      Specified by:
        `compareById` in interface `SctAssignment`
      Parameters:
        `a` - another section assignment
      Returns:
        comparison

    - #### getUnreservedSpace

          public double getUnreservedSpace(Assignment<Request,Enrollment> assignment,
                                           Request excludeRequest)

      Available space in the section that is not reserved by any section reservation
      Parameters:
        `assignment` - current assignment
        `excludeRequest` - excluding given request (if not null)
      Returns:
        unreserved space in this class

    - #### getTotalUnreservedSpace

          public double getTotalUnreservedSpace()

      Total space in the section that cannot be used by any section reservation
      Returns:
        total unreserved space in this class

    - #### getReservations

          public List<Reservation> getReservations()

      Get reservations for this section
      Returns:
        reservations that can use this class

    - #### getSectionReservations

          public List<Reservation> getSectionReservations()

      Get reservations that require this section
      Returns:
        reservations that must use this class

    - #### clearReservationCache

          public void clearReservationCache()

      Clear reservation information that was cached on this section

    - #### getName

          public String getName(long courseId)

      Return course-dependent section name
      Parameters:
        `courseId` - course offering unique id
      Returns:
        course dependent class name

    - #### setName

          public void setName(long courseId,
                              String name)

      Set course-dependent section name
      Parameters:
        `courseId` - course offering unique id
        `name` - course dependent class name

    - #### getNameByCourse

          public Map<Long,String> getNameByCourse()

      Return course-dependent section names
      Returns:
        map of course-dependent class names

    - #### equals

          public boolean equals(Object o)

      Overrides:
        `equals` in class `Object`

    - #### hashCode

          public int hashCode()

      Overrides:
        `hashCode` in class `Object`

    - #### getNote

          public String getNote()

      Section note
      Returns:
        scheduling note

    - #### setNote

          public void setNote(String note)

      Section note
      Parameters:
        `note` - scheduling note

    - #### addIgnoreConflictWith

          public void addIgnoreConflictWith(long sectionId)

      Add section id of a section that student conflicts are to be ignored with
      Parameters:
        `sectionId` - class unique id

    - #### isToIgnoreStudentConflictsWith

          public boolean isToIgnoreStudentConflictsWith(long sectionId)

      Returns true if student conflicts between this section and the given one are to be ignored
      Parameters:
        `sectionId` - class unique id
      Returns:
        true if student conflicts between these two sections are to be ignored

    - #### getIgnoreConflictWithSectionIds

          public Set<Long> getIgnoreConflictWithSectionIds()

      Returns a set of ids of sections that student conflicts are to be ignored with (between this section and the others)
      Returns:
        set of class unique ids of the sections that student conflicts are to be ignored with

    - #### getEnrollments

          public Set<Enrollment> getEnrollments(Assignment<Request,Enrollment> assignment)

      Set of assigned enrollments
      Specified by:
        `getEnrollments` in interface `SctAssignment`
      Parameters:
        `assignment` - current assignments
      Returns:
        a list of assigned enrollments (of this request) that contains this assignment

    - #### getEnrollmentWeight

          public double getEnrollmentWeight(Assignment<Request,Enrollment> assignment,
                                            Request excludeRequest)

      Enrollment weight -- weight of all requests which have an enrollment that contains this section, excluding the given one. See `Request.getWeight()`.
      Parameters:
        `assignment` - current assignment
        `excludeRequest` - course request to ignore, if any
      Returns:
        enrollment weight

    - #### getEnrollmentTotalWeight

          public double getEnrollmentTotalWeight(Assignment<Request,Enrollment> assignment,
                                                 Request excludeRequest)

      Enrollment weight including over the limit enrollments. That is enrollments that have reservation with `Reservation.canBatchAssignOverLimit()` set to true.
      Parameters:
        `assignment` - current assignment
        `excludeRequest` - course request to ignore, if any
      Returns:
        enrollment weight

    - #### getMaxEnrollmentWeight

          public double getMaxEnrollmentWeight(Assignment<Request,Enrollment> assignment)

      Maximal weight of a single enrollment in the section
      Parameters:
        `assignment` - current assignment
      Returns:
        maximal enrollment weight

    - #### getMinEnrollmentWeight

          public double getMinEnrollmentWeight(Assignment<Request,Enrollment> assignment)

      Minimal weight of a single enrollment in the section
      Parameters:
        `assignment` - current assignment
      Returns:
        minimal enrollment weight

    - #### isCancelled

          public boolean isCancelled()

      Return cancelled flag of the class.
      Returns:
        true if the class is cancelled

    - #### setCancelled

          public void setCancelled(boolean cancelled)

      Set cancelled flag of the class.
      Parameters:
        `cancelled` - true if the class is cancelled

    - #### isPast

          public boolean isPast()

      Return past flag of the class.
      Returns:
        true if the class is in the past and should be avoided when possible

    - #### setPast

          public void setPast(boolean past)

      Set past flag of the class.
      Parameters:
        `past` - true if the class is in the past and should be avoided when possible

    - #### isEnabled

          public boolean isEnabled()

      Return enabled flag of the class. Use `isEnabled(Student)` where applicable.
      Returns:
        true if the class is enabled for student scheduling

    - #### isEnabled

          public boolean isEnabled(Student student)

      Return enabled flag of the class. Also check student class dates.
      Returns:
        true if the class is enabled for student scheduling

    - #### getDayOfWeekOffset

          protected int getDayOfWeekOffset()

    - #### setEnabled

          public void setEnabled(boolean enabled)

      Set enabled flag of the class.
      Parameters:
        `enabled` - true if the class is enabled for student scheduling

    - #### isOnline

          public boolean isOnline()

      Return whether the class is online.
      Returns:
        true if the class is online

    - #### isModalityPreferred

          public boolean isModalityPreferred(Student student)

    - #### setOnline

          public void setOnline(boolean online)

      Set whether the class is online.
      Parameters:
        `online` - true if the class is online

    - #### getModel

          public Model<Request,Enrollment> getModel()

      Description copied from class: `AbstractClassWithContext`
      Get the model. This is used to create an assignment context if needed.
      Specified by:
        `getModel` in class `AbstractClassWithContext<Request,Enrollment,Section.SectionContext>`
      Returns:
        model

    - #### createAssignmentContext

          public Section.SectionContext createAssignmentContext(Assignment<Request,Enrollment> assignment)

      Description copied from interface: `HasAssignmentContext`
      Create a new assignment context for the given assignment. If there are already some variables assigned in the value, the method should make sure that the context is appropriately initialized.
      Specified by:
        `createAssignmentContext` in interface `HasAssignmentContext<Request,Enrollment,Section.SectionContext>`
      Parameters:
        `assignment` - an assignment for which there needs to be an assignment context
      Returns:
        a new instance of the assignment context, filled according to the given assignment

    - #### inheritAssignmentContext

          public Section.SectionContext inheritAssignmentContext(Assignment<Request,Enrollment> assignment,
                                                                 Section.SectionContext parentContext)

      Description copied from interface: `CanInheritContext`
      Create a new assignment context for the given assignment. This method can be used to clone the parent context if desired.
      Specified by:
        `inheritAssignmentContext` in interface `CanInheritContext<Request,Enrollment,Section.SectionContext>`
      Parameters:
        `assignment` - an assignment for which there needs to be an assignment context
        `parentContext` - context of the parent assignment
      Returns:
        a new instance of the assignment context, filled according to the given assignment

    - #### getChoice

          public Choice getChoice()

      Choice matching this section
      Returns:
        choice matching this section

    - #### getUnavailabilities

          public List<Unavailability> getUnavailabilities()

      List of student unavailabilities
      Returns:
        student unavailabilities