docs: def setuptools_parse_requirements_backport(strs):  # pragma: no cover
      # Copyright (C) 2016 Jason R Coombs <jaraco@jaraco.com>
      #
      # Permission is hereby granted, free of charge, to any person obtaining a copy of
      # this software and associated documentation files (the "Software"), to deal in
      # the Software without restriction, including without limitation the rights to
      # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
      # of the Software, and to permit persons to whom the Software is furnished to do
      # so, subject to the following conditions:
      #
      # The above copyright notice and this permission notice shall be included in all
      # copies or substantial portions of the Software.
      #
      # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      # SOFTWARE.
      """Yield ``Requirement`` objects for each specification in `strs`
  
      `strs` must be a string, or a (possibly-nested) iterable thereof.
      """
      # create a steppable iterator, so we can handle \-continuations
      def yield_lines(strs):
          """Yield non-empty/non-comment lines of a string or sequence"""
          if isinstance(strs, six.string_types):
              for s in strs.splitlines():
                  s = s.strip()
                  # skip blank lines/comments
                  if s and not s.startswith('#'):
                      yield s
          else:
              for ss in strs:
                  for s in yield_lines(ss):
                      yield s
      lines = iter(yield_lines(strs))
  
      for line in lines:
          # Drop comments -- a hash without a space may be in a URL.
          if ' #' in line:
              line = line[:line.find(' #')]
          # If there is a line continuation, drop it, and append the next line.
          if line.endswith('\\'):
              line = line[:-2].strip()
              line += next(lines)
          yield PackagingRequirement(line)