diff --git a/eppy/bunch_subclass.py b/eppy/bunch_subclass.py
index 445576f..ba78e47 100644
--- a/eppy/bunch_subclass.py
+++ b/eppy/bunch_subclass.py
@@ -100,6 +100,7 @@ def addfunctions(abunch):
             "height": fh.height,  # not working correctly
             "width": fh.width,  # not working correctly
             "azimuth": fh.azimuth,
+            "true_azimuth": fh.true_azimuth,
             "tilt": fh.tilt,
             "coords": fh.getcoords,  # needed for debugging
         }
diff --git a/eppy/function_helpers.py b/eppy/function_helpers.py
index c455986..140e569 100644
--- a/eppy/function_helpers.py
+++ b/eppy/function_helpers.py
@@ -57,6 +57,15 @@ def azimuth(ddtt):
     return g_surface.azimuth(coords)
 
 
+def true_azimuth(ddtt):
+    """azimuth of the surface"""
+    idf = ddtt.theidf
+    building_north_axis = idf.idfobjects["building".upper()][0].North_Axis
+    coords = getcoords(ddtt)
+    surface_azimuth = g_surface.azimuth(coords)
+    return g_surface.true_azimuth(building_north_axis, surface_azimuth)
+
+
 def tilt(ddtt):
     """tilt of the surface"""
     coords = getcoords(ddtt)
diff --git a/eppy/geometry/surface.py b/eppy/geometry/surface.py
index 69211f6..8d2bfb9 100644
--- a/eppy/geometry/surface.py
+++ b/eppy/geometry/surface.py
@@ -131,6 +131,12 @@ def azimuth(poly):
         return angle2vecs(vec_azi, vec_n)
 
 
+def true_azimuth(building_north_axis, surface_azimuth):
+    """True azimuth of a polygon poly"""
+    building_north_axis = 0 if building_north_axis == "" else building_north_axis
+    return (building_north_axis + surface_azimuth) % 360
+
+
 def tilt(poly):
     """Tilt of a polygon poly"""
     num = len(poly) - 1

surface.azimuth does not take into account the building.North_Axis
problem: surface.azimuth does not take into account the building.North_Axis

As a step to resolving this issue, we need a function

    def true_azimuth(building_north_axis, surface_azimuth)
        # return "the azimuth based on surface.azimuth and building.North_Axis"



The location of this function should be 

- eppy
    - geometry
        - surface.true_azimuth
        
The unit tests should be in

- eppy
    - tests
        - test_surface.py

This issue is assigned to @airallergy

@airallergy, see https://github.com/santoshphilip/eppy/blob/master/CONTRIBUTING.md and use the second method where you fork the repository and then do a pull request
diff --git a/eppy/tests/geometry_tests/test_surface.py b/eppy/tests/geometry_tests/test_surface.py
index c57fec7..6d5b32c 100644
--- a/eppy/tests/geometry_tests/test_surface.py
+++ b/eppy/tests/geometry_tests/test_surface.py
@@ -106,6 +106,19 @@ def test_azimuth():
         assert almostequal(answer, result, places=3) == True
 
 
+def test_true_azimuth():
+    """test the true azimuth of a polygon poly"""
+    data = (
+        ("", 180, 180),
+        # building_north_axis, surface_azimuth, answer,
+        (20, 0, 20),
+        (240, 180, 60),
+    )
+    for building_north_axis, surface_azimuth, answer in data:
+        result = surface.true_azimuth(building_north_axis, surface_azimuth)
+        assert almostequal(answer, result, places=3) == True
+
+
 def test_tilt():
     """test the tilt of a polygon poly"""
     data = (

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest
pip install --upgrade setuptools pip install --upgrade pip
3.7
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
beautifulsoup4==4.13.3
certifi @ file:///croot/certifi_1671487769961/work/certifi
decorator==5.1.1
-e git+https://github.com/santoshphilip/eppy.git@98e58583dce6c0fcec9c7b1ff1142bae0a67ddc7#egg=eppy
exceptiongroup==1.2.2
future==1.0.0
importlib-metadata==6.7.0
iniconfig==2.0.0
lxml==5.3.1
munch==4.0.0
packaging==24.0
pluggy==1.2.0
pydot3k==1.0.17
pyparsing==3.1.4
pytest==7.4.4
six==1.17.0
soupsieve==2.4.1
tinynumpy==1.2.1
tomli==2.0.1
typing_extensions==4.7.1
zipp==3.15.0

name: eppy
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - beautifulsoup4==4.13.3
      - decorator==5.1.1
      - exceptiongroup==1.2.2
      - future==1.0.0
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - lxml==5.3.1
      - munch==4.0.0
      - packaging==24.0
      - pip==24.0
      - pluggy==1.2.0
      - pydot3k==1.0.17
      - pyparsing==3.1.4
      - pytest==7.4.4
      - setuptools==68.0.0
      - six==1.17.0
      - soupsieve==2.4.1
      - tinynumpy==1.2.1
      - tomli==2.0.1
      - typing-extensions==4.7.1
      - zipp==3.15.0
prefix: /opt/conda/envs/eppy

eppy/tests/geometry_tests/test_surface.py::test_true_azimuth
eppy/tests/geometry_tests/test_surface.py::test_area eppy/tests/geometry_tests/test_surface.py::test_height eppy/tests/geometry_tests/test_surface.py::test_width eppy/tests/geometry_tests/test_surface.py::test_azimuth eppy/tests/geometry_tests/test_surface.py::test_tilt
eppy/bunch_subclass.py eppy/function_helpers.py eppy/geometry/surface.py
eppy/bunch_subclass.py eppy/function_helpers.py eppy/geometry/surface.py