honeybee-core 1.61.17__tar.gz → 1.61.18__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {honeybee_core-1.61.17/honeybee_core.egg-info → honeybee_core-1.61.18}/PKG-INFO +1 -1
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/aperture.py +33 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/door.py +33 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/face.py +39 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/room.py +27 -11
- {honeybee_core-1.61.17 → honeybee_core-1.61.18/honeybee_core.egg-info}/PKG-INFO +1 -1
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/.github/workflows/ci.yaml +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/.github/workflows/dependency-release.yaml +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/.gitignore +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/.releaserc.json +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/CODE_OF_CONDUCT.md +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/CONTRIBUTING.md +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/LICENSE +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/MANIFEST.in +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/README.md +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/deploy.sh +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/dev-requirements.txt +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/docs/_build/.nojekyll +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/docs/_build/README.md +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/docs/_build/docs/README.md +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/docs/_static/custom.css +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/docs/_templates/layout.html +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/docs/cli/index.rst +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/docs/conf.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/docs/index.rst +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/__init__.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/__main__.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/_base.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/_basewithshade.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/_lockable.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/altnumber.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/boundarycondition.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/checkdup.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/cli/__init__.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/cli/compare.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/cli/create.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/cli/edit.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/cli/lib.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/cli/setconfig.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/cli/validate.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/colorobj.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/config.json +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/config.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/dictutil.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/extensionutil.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/facetype.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/logutil.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/model.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/orientation.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/properties.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/search.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/shade.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/shademesh.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/typing.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/units.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/writer/__init__.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/writer/aperture.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/writer/door.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/writer/face.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/writer/model.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/writer/room.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/writer/shade.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee/writer/shademesh.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee_core.egg-info/SOURCES.txt +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee_core.egg-info/dependency_links.txt +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee_core.egg-info/entry_points.txt +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee_core.egg-info/requires.txt +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/honeybee_core.egg-info/top_level.txt +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/requirements.txt +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/setup.cfg +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/setup.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/__init__.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/aperture_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/boundary_condition_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/cli_compare_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/cli_create_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/cli_edit_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/cli_validate_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/colorobj_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/config_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/dictutil_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/door_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/face_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/facetype_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/ShoeBox.json +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/bad_geometry_model.hbjson +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/colliding_room_volumes.hbjson +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/compare_model_1.hbjson +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/compare_model_2.hbjson +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/complex_polyfaces.json +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/minor_geometry/existing_model.hbjson +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/minor_geometry/updated_model.hbjson +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/mismatched_area_adj.hbjson +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/model_with_adiabatic.hbjson +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/model_with_holes.hbjson +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/model_without_adjacency.hbjson +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/nonascii_face.json +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/polygons_for_gap_boundary.json +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/room_for_window_offset.hbjson +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/single_family_home.hbjson +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/lockable_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/model_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/orientation_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/room_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/search_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/shade_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/shademesh_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/stl/cube_ascii.stl +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/stl/cube_binary.stl +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/typing_test.py +0 -0
- {honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/units_test.py +0 -0
|
@@ -818,6 +818,39 @@ class Aperture(_BaseWithShade):
|
|
|
818
818
|
return full_msg
|
|
819
819
|
return [] if detailed else ''
|
|
820
820
|
|
|
821
|
+
def check_degenerate(self, tolerance=0.01, raise_exception=True, detailed=False):
|
|
822
|
+
"""Check whether the Aperture is degenerate with effectively zero area.
|
|
823
|
+
|
|
824
|
+
Note that, while the Aperture may have an area larger than the tolerance,
|
|
825
|
+
removing colinear vertices within the tolerance would create a geometry
|
|
826
|
+
smaller than the tolerance.
|
|
827
|
+
|
|
828
|
+
Args:
|
|
829
|
+
tolerance: The minimum difference between the coordinate values of two
|
|
830
|
+
vertices at which they can be considered equivalent. Default: 0.01,
|
|
831
|
+
suitable for objects in meters.
|
|
832
|
+
raise_exception: If True, a ValueError will be raised if the object
|
|
833
|
+
intersects with itself. Default: True.
|
|
834
|
+
detailed: Boolean for whether the returned object is a detailed list of
|
|
835
|
+
dicts with error info or a string with a message. (Default: False).
|
|
836
|
+
|
|
837
|
+
Returns:
|
|
838
|
+
A string with the message or a list with a dictionary if detailed is True.
|
|
839
|
+
"""
|
|
840
|
+
msg = 'Aperture "{}" is degenerate and should be deleted.'.format(
|
|
841
|
+
self.full_id)
|
|
842
|
+
try: # see if it is self-intersecting because of a duplicate vertex
|
|
843
|
+
new_geo = self.geometry.remove_colinear_vertices(tolerance)
|
|
844
|
+
if new_geo.area > tolerance:
|
|
845
|
+
return [] if detailed else '' # valid
|
|
846
|
+
except AssertionError:
|
|
847
|
+
pass # degenerate subface; treat it as degenerate
|
|
848
|
+
full_msg = self._validation_message(
|
|
849
|
+
msg, raise_exception, detailed, '000103',
|
|
850
|
+
error_type='Zero-Area Geometry')
|
|
851
|
+
return full_msg
|
|
852
|
+
return [] if detailed else ''
|
|
853
|
+
|
|
821
854
|
def display_dict(self):
|
|
822
855
|
"""Get a list of DisplayFace3D dictionaries for visualizing the object."""
|
|
823
856
|
base = [self._display_face(self.geometry, self.type_color)]
|
|
@@ -575,6 +575,39 @@ class Door(_BaseWithShade):
|
|
|
575
575
|
return full_msg
|
|
576
576
|
return [] if detailed else ''
|
|
577
577
|
|
|
578
|
+
def check_degenerate(self, tolerance=0.01, raise_exception=True, detailed=False):
|
|
579
|
+
"""Check whether the Door is degenerate with effectively zero area.
|
|
580
|
+
|
|
581
|
+
Note that, while the Door may have an area larger than the tolerance,
|
|
582
|
+
removing colinear vertices within the tolerance would create a geometry
|
|
583
|
+
smaller than the tolerance.
|
|
584
|
+
|
|
585
|
+
Args:
|
|
586
|
+
tolerance: The minimum difference between the coordinate values of two
|
|
587
|
+
vertices at which they can be considered equivalent. Default: 0.01,
|
|
588
|
+
suitable for objects in meters.
|
|
589
|
+
raise_exception: If True, a ValueError will be raised if the object
|
|
590
|
+
intersects with itself. Default: True.
|
|
591
|
+
detailed: Boolean for whether the returned object is a detailed list of
|
|
592
|
+
dicts with error info or a string with a message. (Default: False).
|
|
593
|
+
|
|
594
|
+
Returns:
|
|
595
|
+
A string with the message or a list with a dictionary if detailed is True.
|
|
596
|
+
"""
|
|
597
|
+
msg = 'Door "{}" is degenerate and should be deleted.'.format(
|
|
598
|
+
self.full_id)
|
|
599
|
+
try: # see if it is self-intersecting because of a duplicate vertex
|
|
600
|
+
new_geo = self.geometry.remove_colinear_vertices(tolerance)
|
|
601
|
+
if new_geo.area > tolerance:
|
|
602
|
+
return [] if detailed else '' # valid
|
|
603
|
+
except AssertionError:
|
|
604
|
+
pass # degenerate subface; treat it as degenerate
|
|
605
|
+
full_msg = self._validation_message(
|
|
606
|
+
msg, raise_exception, detailed, '000103',
|
|
607
|
+
error_type='Zero-Area Geometry')
|
|
608
|
+
return full_msg
|
|
609
|
+
return [] if detailed else ''
|
|
610
|
+
|
|
578
611
|
def display_dict(self):
|
|
579
612
|
"""Get a list of DisplayFace3D dictionaries for visualizing the object."""
|
|
580
613
|
base = [self._display_face(self.geometry, self.type_color)]
|
|
@@ -130,6 +130,13 @@ class Face(_BaseWithShade):
|
|
|
130
130
|
assert data['type'] == 'Face', 'Expected Face dictionary. ' \
|
|
131
131
|
'Got {}.'.format(data['type'])
|
|
132
132
|
|
|
133
|
+
# remove any invalid holes from the geometry
|
|
134
|
+
geo_dict = data['geometry']
|
|
135
|
+
if 'holes' in geo_dict and geo_dict['holes'] is not None:
|
|
136
|
+
for i, hole_list in enumerate(geo_dict['holes']):
|
|
137
|
+
if len(hole_list) < 3:
|
|
138
|
+
geo_dict['holes'].pop(i)
|
|
139
|
+
|
|
133
140
|
# first serialize it with an outdoor boundary condition
|
|
134
141
|
face_type = face_types.by_name(data['face_type'])
|
|
135
142
|
face = cls(data['identifier'], Face3D.from_dict(data['geometry']),
|
|
@@ -2039,6 +2046,38 @@ class Face(_BaseWithShade):
|
|
|
2039
2046
|
return full_msg
|
|
2040
2047
|
return [] if detailed else ''
|
|
2041
2048
|
|
|
2049
|
+
def check_degenerate(self, tolerance=0.01, raise_exception=True, detailed=False):
|
|
2050
|
+
"""Check whether the Face is degenerate with effectively zero area.
|
|
2051
|
+
|
|
2052
|
+
Note that, while the Face may have an area larger than the tolerance,
|
|
2053
|
+
removing colinear vertices within the tolerance would create a geometry
|
|
2054
|
+
smaller than the tolerance.
|
|
2055
|
+
|
|
2056
|
+
Args:
|
|
2057
|
+
tolerance: The minimum difference between the coordinate values of two
|
|
2058
|
+
vertices at which they can be considered equivalent. Default: 0.01,
|
|
2059
|
+
suitable for objects in meters.
|
|
2060
|
+
raise_exception: If True, a ValueError will be raised if the object
|
|
2061
|
+
intersects with itself. Default: True.
|
|
2062
|
+
detailed: Boolean for whether the returned object is a detailed list of
|
|
2063
|
+
dicts with error info or a string with a message. (Default: False).
|
|
2064
|
+
|
|
2065
|
+
Returns:
|
|
2066
|
+
A string with the message or a list with a dictionary if detailed is True.
|
|
2067
|
+
"""
|
|
2068
|
+
msg = 'Face "{}" is degenerate and should be deleted.'.format(self.full_id)
|
|
2069
|
+
try: # see if it is self-intersecting because of a duplicate vertex
|
|
2070
|
+
new_geo = self.geometry.remove_colinear_vertices(tolerance)
|
|
2071
|
+
if new_geo.area > tolerance:
|
|
2072
|
+
return [] if detailed else '' # valid
|
|
2073
|
+
except AssertionError:
|
|
2074
|
+
pass # degenerate face; treat it as degenerate
|
|
2075
|
+
full_msg = self._validation_message(
|
|
2076
|
+
msg, raise_exception, detailed, '000103',
|
|
2077
|
+
error_type='Zero-Area Geometry')
|
|
2078
|
+
return full_msg
|
|
2079
|
+
return [] if detailed else ''
|
|
2080
|
+
|
|
2042
2081
|
def display_dict(self):
|
|
2043
2082
|
"""Get a list of DisplayFace3D dictionaries for visualizing the object."""
|
|
2044
2083
|
base = [self._display_face(self.punched_geometry, self.type_color)]
|
|
@@ -1155,7 +1155,7 @@ class Room(_BaseWithShade):
|
|
|
1155
1155
|
"""Remove colinear and duplicate vertices from this object's Faces and Sub-faces.
|
|
1156
1156
|
|
|
1157
1157
|
If degenerate geometry is found in the process of removing colinear vertices,
|
|
1158
|
-
an exception will be raised
|
|
1158
|
+
an exception will be raised unless delete_degenerate is True.
|
|
1159
1159
|
|
|
1160
1160
|
Args:
|
|
1161
1161
|
tolerance: The minimum distance between a vertex and the boundary segments
|
|
@@ -1628,13 +1628,19 @@ class Room(_BaseWithShade):
|
|
|
1628
1628
|
"""
|
|
1629
1629
|
# if the room has the correct number of faces, test the envelope geometry
|
|
1630
1630
|
if len(self._faces) >= 4 and self.volume > tolerance:
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1631
|
+
msgs, final_faces = [], []
|
|
1632
|
+
for face in self._faces:
|
|
1633
|
+
face_msg = face.check_degenerate(tolerance, False, detailed)
|
|
1634
|
+
if not face_msg:
|
|
1635
|
+
final_faces.append(face)
|
|
1636
|
+
msgs.append(face_msg)
|
|
1637
|
+
for ap in face._apertures:
|
|
1638
|
+
msgs.append(ap.check_degenerate(tolerance, False, detailed))
|
|
1639
|
+
for dr in face._doors:
|
|
1640
|
+
msgs.append(dr.check_degenerate(tolerance, False, detailed))
|
|
1641
|
+
if len(final_faces) < 4:
|
|
1642
|
+
deg_msg = 'Room "{}" is degenerate with zero volume. ' \
|
|
1643
|
+
'It should be deleted'.format(self.full_id)
|
|
1638
1644
|
if detailed:
|
|
1639
1645
|
deg_msg = [{
|
|
1640
1646
|
'type': 'ValidationError',
|
|
@@ -1646,9 +1652,19 @@ class Room(_BaseWithShade):
|
|
|
1646
1652
|
'element_name': [self.display_name],
|
|
1647
1653
|
'message': deg_msg
|
|
1648
1654
|
}]
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1655
|
+
msgs.append(deg_msg)
|
|
1656
|
+
full_msgs = [msg for msg in msgs if msg]
|
|
1657
|
+
if len(full_msgs) == 0:
|
|
1658
|
+
return [] if detailed else ''
|
|
1659
|
+
elif detailed:
|
|
1660
|
+
return [m for megs in full_msgs for m in megs]
|
|
1661
|
+
full_msg = 'Room "{}" contains degenerate geometry.' \
|
|
1662
|
+
'\n {}'.format(self.full_id, '\n '.join(full_msgs))
|
|
1663
|
+
if raise_exception and len(full_msgs) != 0:
|
|
1664
|
+
raise ValueError(full_msg)
|
|
1665
|
+
return full_msg
|
|
1666
|
+
|
|
1667
|
+
# otherwise, report the room as invalid
|
|
1652
1668
|
msg = 'Room "{}" is degenerate with zero volume. It should be deleted'.format(
|
|
1653
1669
|
self.full_id)
|
|
1654
1670
|
return self._validation_message(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/minor_geometry/existing_model.hbjson
RENAMED
|
File without changes
|
{honeybee_core-1.61.17 → honeybee_core-1.61.18}/tests/json/minor_geometry/updated_model.hbjson
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|