Merge pull request #465 from oasis-open/equivalence-documentation

Equivalence module documentation fix
pull/1/head
Chris Lenk 2020-10-18 22:03:35 -04:00 committed by GitHub
commit cfb518a84b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 64 additions and 40 deletions

3
.gitignore vendored
View File

@ -55,7 +55,8 @@ coverage.xml
# Sphinx documentation # Sphinx documentation
docs/_build/ docs/_build/
.ipynb_checkpoints .ipynb_checkpoints
default_sem_eq_weights.rst graph_default_sem_eq_weights.rst
object_default_sem_eq_weights.rst
# PyBuilder # PyBuilder
target/ target/

View File

@ -1,5 +1,5 @@
comparison comparison
============== ============================================
.. automodule:: stix2.equivalence.pattern.compare.comparison .. automodule:: stix2.equivalence.pattern.compare.comparison
:members: :members:

View File

@ -1,5 +1,5 @@
observation observation
============== =============================================
.. automodule:: stix2.equivalence.pattern.compare.observation .. automodule:: stix2.equivalence.pattern.compare.observation
:members: :members:

View File

@ -0,0 +1,5 @@
compare
=================================
.. automodule:: stix2.equivalence.pattern.compare
:members:

View File

@ -0,0 +1,5 @@
transform
===================================
.. automodule:: stix2.equivalence.pattern.transform
:members:

View File

@ -1,5 +1,5 @@
comparison comparison
============== ==============================================
.. automodule:: stix2.equivalence.pattern.transform.comparison .. automodule:: stix2.equivalence.pattern.transform.comparison
:members: :members:

View File

@ -1,5 +1,5 @@
observation observation
============== ===============================================
.. automodule:: stix2.equivalence.pattern.transform.observation .. automodule:: stix2.equivalence.pattern.transform.observation
:members: :members:

View File

@ -1,5 +1,5 @@
specials specials
============== ============================================
.. automodule:: stix2.equivalence.pattern.transform.specials .. automodule:: stix2.equivalence.pattern.transform.specials
:members: :members:

View File

@ -1,5 +1,5 @@
graph graph
===== =======================
.. automodule:: stix2.equivalence.graph .. automodule:: stix2.equivalence.graph
:members: :members:

View File

@ -1,5 +1,5 @@
object object
====== ========================
.. automodule:: stix2.equivalence.object .. automodule:: stix2.equivalence.object
:members: :members:

View File

@ -8,7 +8,8 @@ from six import class_types
from sphinx.ext.autodoc import ClassDocumenter from sphinx.ext.autodoc import ClassDocumenter
from stix2.base import _STIXBase from stix2.base import _STIXBase
from stix2.environment import WEIGHTS from stix2.equivalence.graph import GRAPH_WEIGHTS
from stix2.equivalence.object import WEIGHTS
from stix2.version import __version__ from stix2.version import __version__
sys.path.insert(0, os.path.abspath('..')) sys.path.insert(0, os.path.abspath('..'))
@ -62,12 +63,19 @@ latex_documents = [
] ]
# Add a formatted version of environment.WEIGHTS # Add a formatted version of environment.WEIGHTS
default_sem_eq_weights = json.dumps(WEIGHTS, indent=4, default=lambda o: o.__name__) object_default_sem_eq_weights = json.dumps(WEIGHTS, indent=4, default=lambda o: o.__name__)
default_sem_eq_weights = default_sem_eq_weights.replace('\n', '\n ') object_default_sem_eq_weights = object_default_sem_eq_weights.replace('\n', '\n ')
default_sem_eq_weights = default_sem_eq_weights.replace(' "', ' ') object_default_sem_eq_weights = object_default_sem_eq_weights.replace(' "', ' ')
default_sem_eq_weights = default_sem_eq_weights.replace('"\n', '\n') object_default_sem_eq_weights = object_default_sem_eq_weights.replace('"\n', '\n')
with open('default_sem_eq_weights.rst', 'w') as f: with open('object_default_sem_eq_weights.rst', 'w') as f:
f.write(".. code-block:: py\n\n {}\n\n".format(default_sem_eq_weights)) f.write(".. code-block:: python\n\n {}\n\n".format(object_default_sem_eq_weights))
graph_default_sem_eq_weights = json.dumps(GRAPH_WEIGHTS, indent=4, default=lambda o: o.__name__)
graph_default_sem_eq_weights = graph_default_sem_eq_weights.replace('\n', '\n ')
graph_default_sem_eq_weights = graph_default_sem_eq_weights.replace(' "', ' ')
graph_default_sem_eq_weights = graph_default_sem_eq_weights.replace('"\n', '\n')
with open('graph_default_sem_eq_weights.rst', 'w') as f:
f.write(".. code-block:: python\n\n {}\n\n".format(graph_default_sem_eq_weights))
def get_property_type(prop): def get_property_type(prop):

View File

@ -2165,15 +2165,17 @@
"The weights dictionary should contain both the weight and the comparison function for each property. You may use the default weights and functions, or provide your own.\n", "The weights dictionary should contain both the weight and the comparison function for each property. You may use the default weights and functions, or provide your own.\n",
"\n", "\n",
"##### Existing comparison functions\n", "##### Existing comparison functions\n",
"For reference, here is a list of the comparison functions already built in the codebase (found in [stix2/environment.py](../api/stix2.environment.rst#stix2.environment.Environment)):\n", "For reference, here is a list of the comparison functions already built in the codebase (found in [stix2/equivalence/object](../api/equivalence/stix2.equivalence.object.rst#module-stix2.equivalence.object)):\n",
"\n", "\n",
" - [custom_pattern_based](../api/stix2.environment.rst#stix2.environment.custom_pattern_based)\n", " - [custom_pattern_based](../api/equivalence/stix2.equivalence.object.rst#stix2.equivalence.object.custom_pattern_based)\n",
" - [exact_match](../api/stix2.environment.rst#stix2.environment.exact_match)\n", " - [exact_match](../api/equivalence/stix2.equivalence.object.rst#stix2.equivalence.object.exact_match)\n",
" - [partial_external_reference_based](../api/stix2.environment.rst#stix2.environment.partial_external_reference_based)\n", " - [list_reference_check](../api/equivalence/stix2.equivalence.object.rst#stix2.equivalence.object.list_reference_check)\n",
" - [partial_list_based](../api/stix2.environment.rst#stix2.environment.partial_list_based)\n", " - [partial_external_reference_based](../api/equivalence/stix2.equivalence.object.rst#stix2.equivalence.object.partial_external_reference_based)\n",
" - [partial_location_distance](../api/stix2.environment.rst#stix2.environment.partial_location_distance)\n", " - [partial_list_based](../api/equivalence/stix2.equivalence.object.rst#stix2.equivalence.object.partial_list_based)\n",
" - [partial_string_based](../api/stix2.environment.rst#stix2.environment.partial_string_based)\n", " - [partial_location_distance](../api/equivalence/stix2.equivalence.object.rst#stix2.equivalence.object.partial_location_distance)\n",
" - [partial_timestamp_based](../api/stix2.environment.rst#stix2.environment.partial_timestamp_based)\n", " - [partial_string_based](../api/equivalence/stix2.equivalence.object.rst#stix2.equivalence.object.partial_string_based)\n",
" - [partial_timestamp_based](../api/equivalence/stix2.equivalence.object.rst#stix2.equivalence.object.partial_timestamp_based)\n",
" - [reference_check](../api/equivalence/stix2.equivalence.object.rst#stix2.equivalence.object.reference_check)\n",
"\n", "\n",
"For instance, if we wanted to compare two of the `ThreatActor`s from before, but use our own weights, then we could do the following:" "For instance, if we wanted to compare two of the `ThreatActor`s from before, but use our own weights, then we could do the following:"
] ]

View File

@ -1,5 +1,6 @@
bumpversion bumpversion
ipython ipython
nbconvert<6
nbsphinx==0.4.3 nbsphinx==0.4.3
pre-commit pre-commit
pygments<3,>=2.4.1 pygments<3,>=2.4.1

View File

@ -4,7 +4,7 @@ import copy
from .datastore import CompositeDataSource, DataStoreMixin from .datastore import CompositeDataSource, DataStoreMixin
from .equivalence.graph import graphically_equivalent from .equivalence.graph import graphically_equivalent
from .equivalence.object import ( # noqa: F401 from .equivalence.object import ( # noqa: F401
check_property_present, custom_pattern_based, exact_match, WEIGHTS, check_property_present, custom_pattern_based, exact_match,
list_reference_check, partial_external_reference_based, partial_list_based, list_reference_check, partial_external_reference_based, partial_list_based,
partial_location_distance, partial_string_based, partial_timestamp_based, partial_location_distance, partial_string_based, partial_timestamp_based,
reference_check, semantically_equivalent, reference_check, semantically_equivalent,
@ -220,9 +220,9 @@ class Environment(DataStoreMixin):
or methods can be fine tuned for a particular use case. or methods can be fine tuned for a particular use case.
Note: Note:
Default weights_dict: Default weight_dict:
.. include:: ../default_sem_eq_weights.rst .. include:: ../object_default_sem_eq_weights.rst
Note: Note:
This implementation follows the Semantic Equivalence Committee Note. This implementation follows the Semantic Equivalence Committee Note.
@ -258,9 +258,9 @@ class Environment(DataStoreMixin):
or methods can be fine tuned for a particular use case. or methods can be fine tuned for a particular use case.
Note: Note:
Default weights_dict: Default weight_dict:
.. include:: ../default_sem_eq_weights.rst .. include:: ../graph_default_sem_eq_weights.rst
Note: Note:
This implementation follows the Semantic Equivalence Committee Note. This implementation follows the Semantic Equivalence Committee Note.

View File

@ -1,3 +1,4 @@
"""Python APIs for STIX 2 Graph-based Semantic Equivalence."""
import logging import logging
from ..object import ( from ..object import (
@ -36,7 +37,7 @@ def graphically_equivalent(ds1, ds2, prop_scores={}, **weight_dict):
Note: Note:
Default weights_dict: Default weights_dict:
.. include:: ../default_sem_eq_weights.rst .. include:: ../../graph_default_sem_eq_weights.rst
Note: Note:
This implementation follows the Semantic Equivalence Committee Note. This implementation follows the Semantic Equivalence Committee Note.
@ -133,4 +134,4 @@ GRAPH_WEIGHTS.update({
"ds2": None, "ds2": None,
"max_depth": 1, "max_depth": 1,
}, },
}) #: :autodoc-skip: }) # :autodoc-skip:

View File

@ -1,3 +1,4 @@
"""Python APIs for STIX 2 Object-based Semantic Equivalence."""
import logging import logging
import time import time
@ -32,7 +33,7 @@ def semantically_equivalent(obj1, obj2, prop_scores={}, **weight_dict):
Note: Note:
Default weights_dict: Default weights_dict:
.. include:: ../default_sem_eq_weights.rst .. include:: ../../object_default_sem_eq_weights.rst
Note: Note:
This implementation follows the Semantic Equivalence Committee Note. This implementation follows the Semantic Equivalence Committee Note.
@ -448,4 +449,4 @@ WEIGHTS = {
"_internal": { "_internal": {
"ignore_spec_version": False, "ignore_spec_version": False,
}, },
} #: :autodoc-skip: } # :autodoc-skip:

View File

@ -1,7 +1,7 @@
"""Python APIs for STIX 2 Pattern Semantic Equivalence. """Python APIs for STIX 2 Pattern Semantic Equivalence.
.. autosummary:: .. autosummary::
:toctree: patterns :toctree: pattern
compare compare
transform transform