20
votes

When using doxygen to generate C++ inheritance diagrams, I've noticed that the diagrams can be incomplete.

If several projects are documented using tag files to allow cross-referencing, doxygen will successfully show all base classes that exist in other tag files, but it will not show derived classes if they are in other tag files. The derived classes shown are always only the classes that exist in the current project.

Example project 1 code:

class A {};

class B : public A {};

class C : public A {};

Example project 2 code:

#include <proj1.h>

class D : public A {};

class E : public A {};

class F : public E {};

An inheritance diagram of A from project 1, using a tag file from project 2 - where is D, E & F?

enter image description here

An inheritance diagram of E from project 2, using a tag file from project 1 - parent class A is shown.

enter image description here

Is there a setting to tell doxygen to generate complete inheritance graphs across projects when tag files are used?

1
This could be a doxygen bug. - Nicol Bolas
Not sure if it will help you across multiple objects but have you tried Graphviz? - DPD
@DPD Yes, doxygen is using Graphviz (specifically the tool dot) to generate those graphs, if I understand you correctly. - Drew Dormann
Sorry for the typo , it should have read "across multiple projects". - DPD
Not sure whether or not this question is of interest, but as far as I can see when setting HAVE_DOT=YES the correct graph is shown. When not setting the HAVE_DOT=YES the D, E and F are missing. - albert

1 Answers

-2
votes

using this doxyfile settings generated with eclox module in eclipse has no problem , compare with yours :


    # Doxyfile 1.6.3

    # This file describes the settings to be used by the documentation system
    # doxygen (www.doxygen.org) for a project
    #
    # All text after a hash (#) is considered a comment and will be ignored
    # The format is:
    #       TAG = value [value, ...]
    # For lists items can also be appended using:
    #       TAG += value [value, ...]
    # Values that contain spaces should be placed between quotes (" ")

    #---------------------------------------------------------------------------
    # Project related configuration options
    DOXYFILE_ENCODING      = UTF-8

    PROJECT_NAME           =

    PROJECT_NUMBER         =


    OUTPUT_DIRECTORY       =


    CREATE_SUBDIRS         = NO

    OUTPUT_LANGUAGE        = English

    BRIEF_MEMBER_DESC      = YES
    REPEAT_BRIEF           = YES


    ALWAYS_DETAILED_SEC    = NO
    INLINE_INHERITED_MEMB  = NO

    FULL_PATH_NAMES        = YES
    STRIP_FROM_PATH        =

    STRIP_FROM_INC_PATH    =

    SHORT_NAMES            = NO
    JAVADOC_AUTOBRIEF      = NO

    QT_AUTOBRIEF           = NO

    MULTILINE_CPP_IS_BRIEF = NO


    INHERIT_DOCS           = YES


    SEPARATE_MEMBER_PAGES  = NO

    TAB_SIZE               = 8
    ALIASES                =


    OPTIMIZE_OUTPUT_FOR_C  = NO

    OPTIMIZE_OUTPUT_JAVA   = NO

    OPTIMIZE_FOR_FORTRAN   = NO


    OPTIMIZE_OUTPUT_VHDL   = NO
    EXTENSION_MAPPING      =


    BUILTIN_STL_SUPPORT    = NO


    CPP_CLI_SUPPORT        = NO

    SIP_SUPPORT            = NO


    IDL_PROPERTY_SUPPORT   = YES

    DISTRIBUTE_GROUP_DOC   = NO


    SUBGROUPING            = YES

    TYPEDEF_HIDES_STRUCT   = NO

    SYMBOL_CACHE_SIZE      = 0

    #---------------------------------------------------------------------------
    # Build related configuration options
    #---------------------------------------------------------------------------


    EXTRACT_ALL            = NO


    EXTRACT_PRIVATE        = NO


    EXTRACT_STATIC         = NO


    EXTRACT_LOCAL_CLASSES  = YES

    EXTRACT_LOCAL_METHODS  = NO


    EXTRACT_ANON_NSPACES   = NO

    HIDE_UNDOC_MEMBERS     = NO

    HIDE_UNDOC_CLASSES     = NO


    HIDE_FRIEND_COMPOUNDS  = NO

    HIDE_IN_BODY_DOCS      = NO



    INTERNAL_DOCS          = NO

    CASE_SENSE_NAMES       = YES
    HIDE_SCOPE_NAMES       = NO   
    SHOW_INCLUDE_FILES     = YES


    FORCE_LOCAL_INCLUDES   = NO

    INLINE_INFO            = YES


    SORT_MEMBER_DOCS       = YES


    SORT_BRIEF_DOCS        = NO


    SORT_MEMBERS_CTORS_1ST = NO


    SORT_GROUP_NAMES       = NO


    SORT_BY_SCOPE_NAME     = NO


    GENERATE_TODOLIST      = YES


    GENERATE_TESTLIST      = YES


    GENERATE_BUGLIST       = YES


    GENERATE_DEPRECATEDLIST= YES



    ENABLED_SECTIONS       =

    # The MAX_INITIALIZER_LINES tag determines the maximum number of lines
    # the initial value of a variable or define consists of for it to appear in
    # the documentation. If the initializer consists of more lines than specified
    # here it will be hidden. Use a value of 0 to hide initializers completely.
    # The appearance of the initializer of individual variables and defines in the
    # documentation can be controlled using \showinitializer or \hideinitializer
    # command in the documentation regardless of this setting.

    MAX_INITIALIZER_LINES  = 30

    # Set the SHOW_USED_FILES tag to NO to disable the list of files generated
    # at the bottom of the documentation of classes and structs. If set to YES the
    # list will mention the files that were used to generate the documentation.

    SHOW_USED_FILES        = YES

    # If the sources in your project are distributed over multiple directories
    # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
    # in the documentation. The default is NO.

    SHOW_DIRECTORIES       = NO

    # Set the SHOW_FILES tag to NO to disable the generation of the Files page.
    # This will remove the Files entry from the Quick Index and from the
    # Folder Tree View (if specified). The default is YES.

    SHOW_FILES             = YES

    # Set the SHOW_NAMESPACES tag to NO to disable the generation of the
    # Namespaces page.
    # This will remove the Namespaces entry from the Quick Index
    # and from the Folder Tree View (if specified). The default is YES.

    SHOW_NAMESPACES        = YES

    # The FILE_VERSION_FILTER tag can be used to specify a program or script that
    # doxygen should invoke to get the current version for each file (typically from
    # the version control system). Doxygen will invoke the program by executing (via
    # popen()) the command  , where  is the value of
    # the FILE_VERSION_FILTER tag, and  is the name of an input file
    # provided by doxygen. Whatever the program writes to standard output
    # is used as the file version. See the manual for examples.

    FILE_VERSION_FILTER    =

    # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
    # doxygen. The layout file controls the global structure of the generated output files
    # in an output format independent way. The create the layout file that represents
    # doxygen's defaults, run doxygen with the -l option. You can optionally specify a
    # file name after the option, if omitted DoxygenLayout.xml will be used as the name
    # of the layout file.

    LAYOUT_FILE            =

    #---------------------------------------------------------------------------
    # configuration options related to warning and progress messages
    #---------------------------------------------------------------------------

    # The QUIET tag can be used to turn on/off the messages that are generated
    # by doxygen. Possible values are YES and NO. If left blank NO is used.

    QUIET                  = NO

    # The WARNINGS tag can be used to turn on/off the warning messages that are
    # generated by doxygen. Possible values are YES and NO. If left blank
    # NO is used.

    WARNINGS               = YES

    # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
    # for undocumented members. If EXTRACT_ALL is set to YES then this flag will
    # automatically be disabled.

    WARN_IF_UNDOCUMENTED   = YES

    # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
    # potential errors in the documentation, such as not documenting some
    # parameters in a documented function, or documenting parameters that
    # don't exist or using markup commands wrongly.

    WARN_IF_DOC_ERROR      = YES

    # This WARN_NO_PARAMDOC option can be abled to get warnings for
    # functions that are documented, but have no documentation for their parameters
    # or return value. If set to NO (the default) doxygen will only warn about
    # wrong or incomplete parameter documentation, but not about the absence of
    # documentation.

    WARN_NO_PARAMDOC       = NO

    # The WARN_FORMAT tag determines the format of the warning messages that
    # doxygen can produce. The string should contain the $file, $line, and $text
    # tags, which will be replaced by the file and line number from which the
    # warning originated and the warning text. Optionally the format may contain
    # $version, which will be replaced by the version of the file (if it could
    # be obtained via FILE_VERSION_FILTER)

    WARN_FORMAT            = "$file:$line: $text"

    # The WARN_LOGFILE tag can be used to specify a file to which warning
    # and error messages should be written. If left blank the output is written
    # to stderr.

    WARN_LOGFILE           =

    #---------------------------------------------------------------------------
    # configuration options related to the input files
    #---------------------------------------------------------------------------

    # The INPUT tag can be used to specify the files and/or directories that contain
    # documented source files. You may enter file names like "myfile.cpp" or
    # directories like "/usr/src/myproject". Separate the files or directories
    # with spaces.

    INPUT                  =

    # This tag can be used to specify the character encoding of the source files
    # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
    # also the default input encoding. Doxygen uses libiconv (or the iconv built
    # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
    # the list of possible encodings.

    INPUT_ENCODING         = UTF-8

    # If the value of the INPUT tag contains directories, you can use the
    # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
    # and *.h) to filter out the source-files in the directories. If left
    # blank the following patterns are tested:
    # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
    # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90

    FILE_PATTERNS          =

    # The RECURSIVE tag can be used to turn specify whether or not subdirectories
    # should be searched for input files as well. Possible values are YES and NO.
    # If left blank NO is used.

    RECURSIVE              = NO

    # The EXCLUDE tag can be used to specify files and/or directories that should
    # excluded from the INPUT source files. This way you can easily exclude a
    # subdirectory from a directory tree whose root is specified with the INPUT tag.

    EXCLUDE                =

    # The EXCLUDE_SYMLINKS tag can be used select whether or not files or
    # directories that are symbolic links (a Unix filesystem feature) are excluded
    # from the input.

    EXCLUDE_SYMLINKS       = NO

    # If the value of the INPUT tag contains directories, you can use the
    # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
    # certain files from those directories. Note that the wildcards are matched
    # against the file with absolute path, so to exclude all test directories
    # for example use the pattern */test/*

    EXCLUDE_PATTERNS       =

    # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
    # (namespaces, classes, functions, etc.) that should be excluded from the
    # output. The symbol name can be a fully qualified name, a word, or if the
    # wildcard * is used, a substring. Examples: ANamespace, AClass,
    # AClass::ANamespace, ANamespace::*Test

    EXCLUDE_SYMBOLS        =

    # The EXAMPLE_PATH tag can be used to specify one or more files or
    # directories that contain example code fragments that are included (see
    # the \include command).

    EXAMPLE_PATH           =

    # If the value of the EXAMPLE_PATH tag contains directories, you can use the
    # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
    # and *.h) to filter out the source-files in the directories. If left
    # blank all files are included.

    EXAMPLE_PATTERNS       =

    # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
    # searched for input files to be used with the \include or \dontinclude
    # commands irrespective of the value of the RECURSIVE tag.
    # Possible values are YES and NO. If left blank NO is used.

    EXAMPLE_RECURSIVE      = NO

    # The IMAGE_PATH tag can be used to specify one or more files or
    # directories that contain image that are included in the documentation (see
    # the \image command).

    IMAGE_PATH             =

    # The INPUT_FILTER tag can be used to specify a program that doxygen should
    # invoke to filter for each input file. Doxygen will invoke the filter program
    # by executing (via popen()) the command  , where 
    # is the value of the INPUT_FILTER tag, and  is the name of an
    # input file. Doxygen will then use the output that the filter program writes
    # to standard output.
    # If FILTER_PATTERNS is specified, this tag will be
    # ignored.

    INPUT_FILTER           =

    # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
    # basis.
    # Doxygen will compare the file name with each pattern and apply the
    # filter if there is a match.
    # The filters are a list of the form:
    # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
    # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
    # is applied to all files.

    FILTER_PATTERNS        =

    # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
    # INPUT_FILTER) will be used to filter the input files when producing source
    # files to browse (i.e. when SOURCE_BROWSER is set to YES).

    FILTER_SOURCE_FILES    = NO

    #---------------------------------------------------------------------------
    # configuration options related to source browsing
    #---------------------------------------------------------------------------

    # If the SOURCE_BROWSER tag is set to YES then a list of source files will
    # be generated. Documented entities will be cross-referenced with these sources.
    # Note: To get rid of all source code in the generated output, make sure also
    # VERBATIM_HEADERS is set to NO.

    SOURCE_BROWSER         = NO

    # Setting the INLINE_SOURCES tag to YES will include the body
    # of functions and classes directly in the documentation.

    INLINE_SOURCES         = NO

    # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
    # doxygen to hide any special comment blocks from generated source code
    # fragments. Normal C and C++ comments will always remain visible.

    STRIP_CODE_COMMENTS    = YES

    # If the REFERENCED_BY_RELATION tag is set to YES
    # then for each documented function all documented
    # functions referencing it will be listed.

    REFERENCED_BY_RELATION = NO

    # If the REFERENCES_RELATION tag is set to YES
    # then for each documented function all documented entities
    # called/used by that function will be listed.

    REFERENCES_RELATION    = NO

    # If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
    # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
    # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
    # link to the source code.
    # Otherwise they will link to the documentation.

    REFERENCES_LINK_SOURCE = YES

    # If the USE_HTAGS tag is set to YES then the references to source code
    # will point to the HTML generated by the htags(1) tool instead of doxygen
    # built-in source browser. The htags tool is part of GNU's global source
    # tagging system (see http://www.gnu.org/software/global/global.html). You
    # will need version 4.8.6 or higher.

    USE_HTAGS              = NO

    # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
    # will generate a verbatim copy of the header file for each class for
    # which an include is specified. Set to NO to disable this.

    VERBATIM_HEADERS       = YES

    #---------------------------------------------------------------------------
    # configuration options related to the alphabetical class index
    #---------------------------------------------------------------------------

    # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
    # of all compounds will be generated. Enable this if the project
    # contains a lot of classes, structs, unions or interfaces.

    ALPHABETICAL_INDEX     = NO

    # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
    # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
    # in which this list will be split (can be a number in the range [1..20])

    COLS_IN_ALPHA_INDEX    = 5

    # In case all classes in a project start with a common prefix, all
    # classes will be put under the same header in the alphabetical index.
    # The IGNORE_PREFIX tag can be used to specify one or more prefixes that
    # should be ignored while generating the index headers.

    IGNORE_PREFIX          =

    #---------------------------------------------------------------------------
    # configuration options related to the HTML output
    #---------------------------------------------------------------------------

    # If the GENERATE_HTML tag is set to YES (the default) Doxygen will
    # generate HTML output.

    GENERATE_HTML          = YES

    # The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
    # If a relative path is entered the value of OUTPUT_DIRECTORY will be
    # put in front of it. If left blank `html' will be used as the default path.

    HTML_OUTPUT            = html

    # The HTML_FILE_EXTENSION tag can be used to specify the file extension for
    # each generated HTML page (for example: .htm,.php,.asp). If it is left blank
    # doxygen will generate files with .html extension.

    HTML_FILE_EXTENSION    = .html

    # The HTML_HEADER tag can be used to specify a personal HTML header for
    # each generated HTML page. If it is left blank doxygen will generate a
    # standard header.

    HTML_HEADER            =

    # The HTML_FOOTER tag can be used to specify a personal HTML footer for
    # each generated HTML page. If it is left blank doxygen will generate a
    # standard footer.

    HTML_FOOTER            =

    # The HTML_STYLESHEET tag can be used to specify a user-defined cascading
    # style sheet that is used by each HTML page. It can be used to
    # fine-tune the look of the HTML output. If the tag is left blank doxygen
    # will generate a default style sheet. Note that doxygen will try to copy
    # the style sheet file to the HTML output directory, so don't put your own
    # stylesheet in the HTML output directory as well, or it will be erased!

    HTML_STYLESHEET        =

    # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
    # page will contain the date and time when the page was generated. Setting
    # this to NO can help when comparing the output of multiple runs.

    HTML_TIMESTAMP         = YES

    # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
    # files or namespaces will be aligned in HTML using tables. If set to
    # NO a bullet list will be used.

    HTML_ALIGN_MEMBERS     = YES

    # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
    # documentation will contain sections that can be hidden and shown after the
    # page has loaded. For this to work a browser that supports
    # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
    # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).

    HTML_DYNAMIC_SECTIONS  = NO


    GENERATE_DOCSET        = NO

    DOCSET_FEEDNAME        = "Doxygen generated docs"


    DOCSET_BUNDLE_ID       = org.doxygen.Project


    GENERATE_HTMLHELP      = NO

    CHM_FILE               =

    HHC_LOCATION           =


    GENERATE_CHI           = NO


    CHM_INDEX_ENCODING     =

    BINARY_TOC             = NO

    TOC_EXPAND             = NO

    GENERATE_QHP           = NO


    QCH_FILE               =

    QHP_NAMESPACE          = org.doxygen.Project

    QHP_VIRTUAL_FOLDER     = doc

    QHP_CUST_FILTER_NAME   =


    QHP_CUST_FILTER_ATTRS  =

    QHP_SECT_FILTER_ATTRS  =


    QHG_LOCATION           =

    GENERATE_ECLIPSEHELP   = NO


    ECLIPSE_DOC_ID         = org.doxygen.Project


    DISABLE_INDEX          = NO

    ENUM_VALUES_PER_LINE   = 4

    GENERATE_TREEVIEW      = NO


    USE_INLINE_TREES       = NO
    TREEVIEW_WIDTH         = 250
    FORMULA_FONTSIZE       = 10

    SEARCHENGINE           = YES


    SERVER_BASED_SEARCH    = NO


    GENERATE_LATEX         = YES
    LATEX_OUTPUT           = latex

    LATEX_CMD_NAME         = latex

    MAKEINDEX_CMD_NAME     = makeindex


    COMPACT_LATEX          = NO

    PAPER_TYPE             = a4wide


    EXTRA_PACKAGES         =

    LATEX_HEADER           =

    PDF_HYPERLINKS         = YES


    USE_PDFLATEX           = YES
    LATEX_BATCHMODE        = NO



    LATEX_HIDE_INDICES     = NO

    LATEX_SOURCE_CODE      = NO

    #---------------------------------------------------------------------------
    # configuration options related to the RTF output
    #---------------------------------------------------------------------------


    GENERATE_RTF           = NO



    RTF_OUTPUT             = rtf



    COMPACT_RTF            = NO


    RTF_HYPERLINKS         = NO


    RTF_STYLESHEET_FILE    =

    RTF_EXTENSIONS_FILE    =

    #---------------------------------------------------------------------------
    # configuration options related to the man page output
    #---------------------------------------------------------------------------

    GENERATE_MAN           = NO

    MAN_OUTPUT             = man

    MAN_EXTENSION          = .3

    MAN_LINKS              = NO

    #---------------------------------------------------------------------------
    # configuration options related to the XML output
    #---------------------------------------------------------------------------


    GENERATE_XML           = NO


    XML_OUTPUT             = xml


    XML_SCHEMA             =

    XML_DTD                =

    XML_PROGRAMLISTING     = YES

    #---------------------------------------------------------------------------
    # configuration options for the AutoGen Definitions output
    #---------------------------------------------------------------------------
    GENERATE_AUTOGEN_DEF   = NO

    #---------------------------------------------------------------------------
    # configuration options related to the Perl module output
    #---------------------------------------------------------------------------

    GENERATE_PERLMOD       = NO


    PERLMOD_LATEX          = NO


    PERLMOD_PRETTY         = YES


    PERLMOD_MAKEVAR_PREFIX =

    #---------------------------------------------------------------------------
    # Configuration options related to the preprocessor
    #---------------------------------------------------------------------------
    ENABLE_PREPROCESSING   = YES


    MACRO_EXPANSION        = NO

    EXPAND_ONLY_PREDEF     = NO

    SEARCH_INCLUDES        = YES
    INCLUDE_PATH           =


    INCLUDE_FILE_PATTERNS  =
    PREDEFINED             =


    EXPAND_AS_DEFINED      =

    SKIP_FUNCTION_MACROS   = YES

    #---------------------------------------------------------------------------
    # Configuration::additions related to external references
    #---------------------------------------------------------------------------

    TAGFILES               =

    GENERATE_TAGFILE       =


    ALLEXTERNALS           = NO

    EXTERNAL_GROUPS        = YES



    PERL_PATH              = /usr/bin/perl

    #---------------------------------------------------------------------------
    # Configuration options related to the dot tool
    #---------------------------------------------------------------------------

    # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
    # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
    # or super classes. Setting the tag to NO turns the diagrams off. Note that
    # this option is superseded by the HAVE_DOT option below. This is only a
    # fallback. It is recommended to install and use dot, since it yields more
    # powerful graphs.

    CLASS_DIAGRAMS         = YES

    # You can define message sequence charts within doxygen comments using the \msc
    # command. Doxygen will then run the mscgen tool (see
    # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
    # documentation. The MSCGEN_PATH tag allows you to specify the directory where
    # the mscgen tool resides. If left empty the tool is assumed to be found in the
    # default search path.

    MSCGEN_PATH            =


    HIDE_UNDOC_RELATIONS   = YES

    HAVE_DOT               = NO

    DOT_FONTNAME           = FreeSans

    DOT_FONTSIZE           = 10
    DOT_FONTPATH           =


    CLASS_GRAPH            = YES



    COLLABORATION_GRAPH    = YES



    GROUP_GRAPHS           = YES

    UML_LOOK               = NO


    TEMPLATE_RELATIONS     = NO


    INCLUDE_GRAPH          = YES


    INCLUDED_BY_GRAPH      = YES


    CALL_GRAPH             = NO



    CALLER_GRAPH           = NO



    GRAPHICAL_HIERARCHY    = YES



    DIRECTORY_GRAPH        = YES


    DOT_IMAGE_FORMAT       = png



    DOT_PATH               =



    DOTFILE_DIRS           =


    DOT_GRAPH_MAX_NODES    = 50



    MAX_DOT_GRAPH_DEPTH    = 0


    DOT_TRANSPARENT        = NO



    DOT_MULTI_TARGETS      = YES



    GENERATE_LEGEND        = YES


    DOT_CLEANUP            = YES