{"action":"created","comment":{"url":"https://api.github.com/repos/ladybug-tools/ladybug/pulls/comments/223783300","pull_request_review_id":162995044,"id":223783300,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMzc4MzMwMA==","diff_hunk":"@@ -0,0 +1,1109 @@\n+from .location import Location\n+from .futil import write_to_file\n+from .dt import DateTime\n+from .header import Header\n+from .datacollection import DataCollection\n+from .datatype import DataPoint\n+from .analysisperiod import AnalysisPeriod\n+from .sunpath import Sunpath\n+\n+from .skymodel import ashrae_revised_clear_sky\n+from .skymodel import ashrae_clear_sky\n+from .skymodel import energyplus_horizontal_infrared\n+\n+from .psychrometrics import rel_humid_from_db_dpt\n+from .psychrometrics import dew_point_from_db_hr\n+from .psychrometrics import dew_point_from_db_enth\n+from .psychrometrics import dew_point_from_db_wb\n+\n+import math\n+import os\n+import re\n+import codecs\n+import platform\n+\n+day_types = ['SummerDesignDay', 'WinterDesignDay', 'Sunday', 'Monday',\n+             'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Holiday',\n+             'CustomDay1', 'CustomDay2']\n+h_types = ['Wetbulb', 'Dewpoint', 'HumidityRatio', 'Enthalpy']\n+sky_types = ['ASHRAEClearSky', 'ASHRAETau', 'ZhangHuang', 'Schedule']\n+comments = ['!- Name',\n+            '!- Month',\n+            '!- Day of Month',\n+            '!- Day Type',\n+            '!- Max Dry-Bulb Temp [C]',\n+            '!- Daily Dry-Bulb Temp Range [C]',\n+            '!- Dry-Bulb Temp Range Modifier Type',\n+            '!- Dry-Bulb Temp Range Modifier Schedule Name',\n+            '!- Humidity Condition Type',\n+            '!- Wetbulb/Dewpoint at Max Dry-Bulb [C]',\n+            '!- Humidity Indicating Day Schedule Name',\n+            '!- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}',\n+            '!- Enthalpy at Maximum Dry-Bulb {J/kg}',\n+            '!- Daily Wet-Bulb Temperature Range [deltaC]',\n+            '!- Barometric Pressure [Pa]',\n+            '!- Wind Speed {m/s}',\n+            '!- Wind Direction [Degrees; N=0, S=180]',\n+            '!- Rain [Yes/No]',\n+            '!- Snow on ground [Yes/No]',\n+            '!- Daylight Savings Time Indicator',\n+            '!- Solar Model Indicator',\n+            '!- Beam Solar Day Schedule Name',\n+            '!- Diffuse Solar Day Schedule Name',\n+            '!- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub)',\n+            '!- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud)',\n+            '!- Clearness [0.0 to 1.2]']\n+temp_multipliers = [0.82, 0.88, 0.92, 0.95, 0.98, 1, 0.98, 0.91, 0.74,\n+                    0.55, 0.38, 0.23, 0.13, 0.05, 0, 0, 0.06, 0.14, 0.24,\n+                    0.39, 0.5, 0.59, 0.68, 0.75]\n+\n+\n+class Ddy(object):\n+    \"\"\"Import data from a local .ddy file.\n+\n+    properties:\n+        location: A Ladybug location object\n+        design_days: A list of the design days in the ddy file.\n+        file_path: Optional file path into which ddy file can be written.\n+    \"\"\"\n+    # TODO: set the default file path to use the ladybug default folder.\n+    def __init__(self, location, design_days=[], file_path=None):\n+        \"\"\"Initalize the class.\"\"\"\n+        self.location = location\n+        self.design_days = design_days\n+        self.file_path = file_path or 'C:\\\\ladybug\\\\unnamed.ddy'\n+\n+    @classmethod\n+    def from_ddy_file(cls, file_path):\n+        \"\"\"Initalize from a ddy file object from an existing ddy file.\n+\n+        args:\n+            file_path: A full string to the .ddy file.\n+        \"\"\"\n+        # defaults\n+        location = None\n+        design_days = []\n+\n+        # check that the file is there\n+        if not os.path.isfile(file_path):\n+            raise ValueError(\n+                'Cannot find an ddy file at {}'.format(file_path))\n+\n+        # check the python version and open the file\n+        try:\n+            iron_python = True if platform.python_implementation() == 'IronPython' \\\n+                else False\n+        except Exception:\n+            iron_python = True\n+\n+        if iron_python:\n+            ddywin = codecs.open(file_path, 'r')\n+        else:\n+            ddywin = codecs.open(file_path, 'r', encoding='utf-8', errors='ignore')\n+\n+        try:\n+            ddytxt = ddywin.read()\n+            location_format = re.compile(\n+                r\"(Site:Location,(.|\\n)*?((;\\s*!)|(;\\s*\\n)|(;\\n)))\")\n+            design_day_format = re.compile(\n+                r\"(SizingPeriod:DesignDay,(.|\\n)*?((;\\s*!)|(;\\s*\\n)|(;\\n)))\")\n+            location_matches = location_format.findall(ddytxt)\n+            des_day_matches = design_day_format.findall(ddytxt)\n+        except Exception as e:\n+            import traceback\n+            raise Exception('{}\\n{}'.format(e, traceback.format_exc()))\n+        else:\n+            # build design day and location objects\n+            location = Location.from_location(location_matches[0][0])\n+            design_days = [DesignDay.from_ep_string(\n+                match[0], location) for match in des_day_matches]\n+        finally:\n+            ddywin.close()\n+\n+        return cls(location, design_days, file_path)\n+\n+    @classmethod\n+    def from_design_day(cls, design_day):\n+        \"\"\"Initalize from a ddy file object from a ladybug design day object.\n+        \"\"\"\n+        return cls(design_day.location, [design_day])\n+\n+    def save(self, folder=None, file_name=None):\n+        \"\"\"Save ddy object as a .ddy file.\"\"\"\n+        # check file_path\n+        if not folder:\n+            folder = self.folder\n+        if not file_name:\n+            file_name = os.path.splitext(self.file_name)[0] + '_modified.ddy'\n+        full_path = os.path.join(folder, file_name)\n+\n+        # write all data into the file\n+        # write the file\n+        data = self.location.ep_style_location_string + '\\n\\n'\n+        for d_day in self.design_days:\n+            data = data + d_day.ep_style_string + '\\n\\n'\n+        write_to_file(full_path, data, True)\n+\n+    def filter_by_keyword(self, keyword):\n+        \"\"\"Return a list of ddys that have a certain keyword in their name.\n+\n+        This is useful for selecting out design days from a ddy file that are\n+        for a specific type of condition (for example, .4% cooling design days)\n+        \"\"\"\n+        filtered_days = []\n+        for des_day in self.design_days:\n+            if keyword in des_day.name:\n+                filtered_days.append(des_day)\n+        return filtered_days\n+\n+    @property\n+    def file_path(self):\n+        \"\"\"Get or set path to ddy file.\"\"\"\n+        return self._file_path\n+\n+    @property\n+    def folder(self):\n+        \"\"\"Get ddy file folder.\"\"\"\n+        return self._folder\n+\n+    @property\n+    def file_name(self):\n+        \"\"\"Get ddy file name.\"\"\"\n+        return self._file_name\n+\n+    @file_path.setter\n+    def file_path(self, ddy_file_path):\n+        self._file_path = os.path.normpath(ddy_file_path)\n+\n+        if not ddy_file_path.lower().endswith('.ddy'):\n+            self._file_path = self._file_path + '.ddy'\n+\n+        self._folder, self._file_name = os.path.split(self.file_path)\n+\n+    @property\n+    def location(self):\n+        \"\"\"Get or set the location.\"\"\"\n+        return self._location\n+\n+    @location.setter\n+    def location(self, data):\n+        assert hasattr(data, 'isLocation'), 'Expected' \\\n+            ' Location type. Got {}'.format(str(data))\n+        self._location = data\n+\n+    @property\n+    def design_days(self):\n+        \"\"\"Get or set the design_days.\"\"\"\n+        return self._design_days\n+\n+    @design_days.setter\n+    def design_days(self, data):\n+        assert isinstance(data, list), 'Expected' \\\n+            ' a list of design days. Got {}'.format(str(data))\n+        for item in data:\n+            assert hasattr(item, 'isDesignDay'), 'Expected' \\\n+                ' DesignDay type. Got {}'.format(str(item))\n+        self._design_days = data\n+        for dd in self._design_days:\n+            dd.location = self._location\n+\n+    @property\n+    def isDdy(self):\n+        \"\"\"Return True.\"\"\"\n+        return True\n+\n+    def ToString(self):\n+        \"\"\"Overwrite .NET ToString.\"\"\"\n+        return self.__repr__()\n+\n+    def __repr__(self):\n+        \"\"\"Ddy object representation.\"\"\"\n+        return \"Ddy File - {} [# days: {}]\".format(\n+            self.location.city, str(len(self._design_days)))\n+\n+\n+# TODO: add a property for hourly horizontal infrared radiation.\n+class DesignDay(object):\n+    \"\"\"An object representing design day conditions.\n+\n+    properties:\n+        name: A text string to set the name of the design day\n+        day_type: Choose from 'SummerDesignDay', 'WinterDesignDay' or other\n+            EnergyPlus days\n+        location: Location for the design day\n+        dry_bulb_condition: Ladyubug DryBulbCondition object\n+        humidity_condition: Ladyubug HumidityCondition object\n+        wind_condition: Ladyubug WindCondition object\n+        sky_condition: Ladybug SkyCondition object\n+    \"\"\"\n+\n+    def __init__(self, name, day_type, location, dry_bulb_condition, humidity_condition,\n+                 wind_condition, sky_condition):\n+        \"\"\"Initalize the class.\"\"\"\n+        self.name = str(name)\n+        self.day_type = day_type\n+        self.location = location\n+        self.dry_bulb_condition = dry_bulb_condition\n+        self.humidity_condition = humidity_condition\n+        self.wind_condition = wind_condition\n+        self.sky_condition = sky_condition\n+\n+    @classmethod\n+    def from_ep_string(cls, ep_string, location):\n+        \"\"\"Initalize from an EnergyPlus string of a SizingPeriod:DesignDay.\n+\n+        args:\n+            ep_string: A full string representing a SizingPeriod:DesignDay.\n+        \"\"\"\n+        # format the object into a list of properties\n+        ep_lines = ep_string.split('\\n')\n+        lines = [l.split('!')[0].strip().replace(',', '') for l in ep_lines]\n+\n+        # check to be sure that we have a valid ddy object\n+        assert len(lines) == 27 or len(lines) == 26, \"Number \" \\\n+            \"of lines of text [{}] does not correspond\" \\\n+            \" to an EP Design Day [26 or 27]\".format(\n+                len(lines))\n+\n+        # extract primary properties\n+        lines[-1] = lines[-1].split(';')[0]\n+        name = lines[1]\n+        day_type = lines[4]\n+\n+        # extract dry bulb temperatures\n+        dry_bulb_condition = DryBulbCondition(\n+            float(lines[5]), float(lines[6]), lines[7], lines[8])\n+\n+        # extract humidity conditions\n+        h_type = lines[9]\n+        h_val = 0 if lines[10] == '' else float(lines[10])\n+        if h_type == 'HumidityRatio':\n+            h_val = float(lines[12])\n+        elif h_type == 'Enthalpy':\n+            h_val = float(lines[13])\n+        humidity_condition = HumidityCondition(\n+            h_type, h_val, float(lines[15]), lines[11])\n+\n+        # extract wind conditions\n+        wind_condition = WindCondition(\n+            float(lines[16]), float(lines[17]), lines[18], lines[19])\n+\n+        # extract the sky conditions\n+        sky_model = lines[21]\n+        if sky_model == 'ASHRAEClearSky':\n+            sky_condition = OriginalClearSkyCondition(\n+                int(lines[2]), int(lines[3]), float(lines[26]), lines[20])\n+        elif sky_model == 'ASHRAETau':\n+            sky_condition = RevisedClearSkyCondition(\n+                int(lines[2]), int(lines[3]), float(lines[24]),\n+                float(lines[25]), lines[20])\n+        else:\n+            sky_condition = SkyCondition(\n+                sky_model, int(lines[2]), int(lines[3]), lines[20])\n+        if sky_model == 'Schedule':\n+            sky_condition.beam_shced = lines[22]\n+            sky_condition.diff_shced = lines[23]\n+\n+        return cls(name, day_type, location, dry_bulb_condition,\n+                   humidity_condition, wind_condition, sky_condition)\n+\n+    @classmethod\n+    def from_design_day_properties(cls, name, day_type, location, analysis_period,\n+                                   dry_bulb_max, dry_bulb_range, humidity_type,\n+                                   humidity_value, barometric_p, wind_speed, wind_dir,\n+                                   sky_model, sky_properties):\n+        \"\"\"Create a design day object from various key properties.\n+\n+        Args:\n+            name: A text string to set the name of the design day\n+            day_type: Choose from 'SummerDesignDay', 'WinterDesignDay' or other\n+                EnergyPlus days\n+            location: Location for the design day\n+            analysis_period: Analysis period for the design day\n+            dry_bulb_max: Maximum dry bulb temperature over the design day (in C).\n+            dry_bulb_range: Dry bulb range over the design day (in C).\n+            humidity_type: Type of humidity to use. Choose from\n+                Wetbulb, Dewpoint, HumidityRatio, Enthalpy\n+            humidity_value: The value of the condition above.\n+            barometric_p: Barometric pressure in Pa.\n+            wind_speed: Wind speed over the design day in m/s.\n+            wind_dir: Wind direction over the design day in degrees.\n+            sky_model: Type of solar model to use.  Choose from\n+                ASHRAEClearSky, ASHRAETau\n+            sky_properties: A list of properties describing the sky above.\n+                For ASHRAEClearSky this is a single value for clearness\n+                For ASHRAETau, this is the tau_beam and tau_diffuse\n+        \"\"\"\n+        dry_bulb_condition = DryBulbCondition(\n+            dry_bulb_max, dry_bulb_range)\n+        humidity_condition = HumidityCondition(\n+            humidity_type, humidity_value, barometric_p)\n+        wind_condition = WindCondition(\n+            wind_speed, wind_dir)\n+        if sky_model == 'ASHRAEClearSky':\n+            sky_condition = OriginalClearSkyCondition.from_analysis_period(\n+                analysis_period, sky_properties[0])\n+        elif sky_model == 'ASHRAETau':\n+            sky_condition = RevisedClearSkyCondition.from_analysis_period(\n+                analysis_period, sky_properties[0], sky_properties[-1])\n+        return cls(name, day_type, location, dry_bulb_condition,\n+                   humidity_condition, wind_condition, sky_condition)\n+\n+    @property\n+    def ep_style_string(self):\n+        \"\"\"Serialize object to an EnerygPlus SizingPeriod:DesignDay.\n+\n+        returns:\n+            ep_string: A full string representing a SizingPeriod:DesignDay.\n+        \"\"\"\n+        # Put together the values in the order that they exist in the ddy file\n+        ep_vals = [self.name,\n+                   self.sky_condition.month,\n+                   self.sky_condition.day_of_month,\n+                   self.day_type,\n+                   self.dry_bulb_condition.max_dry_bulb,\n+                   self.dry_bulb_condition.dry_bulb_range,\n+                   self.dry_bulb_condition.modifier_type,\n+                   self.dry_bulb_condition.modifier_schedule,\n+                   self.humidity_condition.hum_type, '',\n+                   self.humidity_condition.schedule, '', '',\n+                   self.humidity_condition.wet_bulb_range,\n+                   self.humidity_condition.barometric_pressure,\n+                   self.wind_condition.wind_speed,\n+                   self.wind_condition.wind_direction,\n+                   self.wind_condition.rain,\n+                   self.wind_condition.snow_on_ground,\n+                   self.sky_condition.daylight_savings_indicator,\n+                   self.sky_condition.solar_model,\n+                   self.sky_condition.beam_shced,\n+                   self.sky_condition.diff_sched, '', '', '']\n+\n+        # assign humidity values based on the type of criteria\n+        if self.humidity_condition.hum_type == 'Wetbulb' or \\\n+                self.humidity_condition.hum_type == 'Dewpoint':\n+                    ep_vals[9] = self.humidity_condition.hum_value\n+        elif self.humidity_condition.hum_type == 'HumidityRatio':\n+            ep_vals[11] = self.humidity_condition.hum_value\n+        elif self.humidity_condition.hum_type == 'Enthalpy':\n+            ep_vals[12] = self.humidity_condition.hum_value\n+\n+        # assign sky condition values based on the solar model\n+        if self.sky_condition.solar_model == 'ASHRAEClearSky':\n+            ep_vals[25] = self.sky_condition.clearness\n+        if self.sky_condition.solar_model == 'ASHRAETau':\n+            ep_vals[23] = self.sky_condition.tau_b\n+            ep_vals[24] = self.sky_condition._tau_d\n+            ep_vals.pop()\n+\n+        # put everything together into one string\n+        ep_string = ' SizingPeriod:DesignDay,\\n'\n+        separator = ','\n+        for i, val in enumerate(ep_vals):\n+            if i == len(ep_vals) - 1:\n+                separator = ';'\n+            spacer = ' ' * (60 - len(str(val)))\n+            ep_string = ep_string + '  ' + str(val) + separator + \\\n+                spacer + comments[i] + '\\n'\n+\n+        return ep_string\n+\n+    @property\n+    def name(self):\n+        \"\"\"Get or set the name.\"\"\"\n+        return self._name\n+\n+    @name.setter\n+    def name(self, data):\n+        assert isinstance(data, str), 'Design day name must be' \\\n+            ' text. Got {}'.format(type(data))\n+        self._name = data\n+\n+    @property\n+    def day_type(self):\n+        \"\"\"Get or set the type of design day.\"\"\"\n+        return self._day_type\n+\n+    @day_type.setter\n+    def day_type(self, data):\n+        assert data in day_types, 'day_type {} is not' \\\n+            ' recognized'.format(str(data))\n+        self._day_type = data\n+\n+    @property\n+    def location(self):\n+        \"\"\"Get or set the location.\"\"\"\n+        return self._location\n+\n+    @location.setter\n+    def location(self, data):\n+        assert hasattr(data, 'isLocation'), 'Expected' \\\n+            ' isLocation type. Got {}'.format(str(data))","path":"ladybug/designday.py","position":440,"original_position":440,"commit_id":"05f2432cb12f5a943e2582b868c063440ff41310","original_commit_id":"05f2432cb12f5a943e2582b868c063440ff41310","user":{"login":"mostaphaRoudsari","id":2915573,"node_id":"MDQ6VXNlcjI5MTU1NzM=","avatar_url":"https://avatars0.githubusercontent.com/u/2915573?v=4","gravatar_id":"","url":"https://api.github.com/users/mostaphaRoudsari","html_url":"https://github.com/mostaphaRoudsari","followers_url":"https://api.github.com/users/mostaphaRoudsari/followers","following_url":"https://api.github.com/users/mostaphaRoudsari/following{/other_user}","gists_url":"https://api.github.com/users/mostaphaRoudsari/gists{/gist_id}","starred_url":"https://api.github.com/users/mostaphaRoudsari/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mostaphaRoudsari/subscriptions","organizations_url":"https://api.github.com/users/mostaphaRoudsari/orgs","repos_url":"https://api.github.com/users/mostaphaRoudsari/repos","events_url":"https://api.github.com/users/mostaphaRoudsari/events{/privacy}","received_events_url":"https://api.github.com/users/mostaphaRoudsari/received_events","type":"User","site_admin":false},"body":"1. `type(data)` will be more informative than `str(data)`.\r\n2. format does convert the type to string automatically.\r\n3. Expected Location not isLocation.","created_at":"2018-10-09T16:57:59Z","updated_at":"2018-10-09T16:57:59Z","html_url":"https://github.com/ladybug-tools/ladybug/pull/70#discussion_r223783300","pull_request_url":"https://api.github.com/repos/ladybug-tools/ladybug/pulls/70","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/ladybug-tools/ladybug/pulls/comments/223783300"},"html":{"href":"https://github.com/ladybug-tools/ladybug/pull/70#discussion_r223783300"},"pull_request":{"href":"https://api.github.com/repos/ladybug-tools/ladybug/pulls/70"}}},"pull_request":{"url":"https://api.github.com/repos/ladybug-tools/ladybug/pulls/70","id":212862810,"node_id":"MDExOlB1bGxSZXF1ZXN0MjEyODYyODEw","html_url":"https://github.com/ladybug-tools/ladybug/pull/70","diff_url":"https://github.com/ladybug-tools/ladybug/pull/70.diff","patch_url":"https://github.com/ladybug-tools/ladybug/pull/70.patch","issue_url":"https://api.github.com/repos/ladybug-tools/ladybug/issues/70","number":70,"state":"open","locked":false,"title":"Added Design Day Parsing Capabilities","user":{"login":"chriswmackey","id":5567574,"node_id":"MDQ6VXNlcjU1Njc1NzQ=","avatar_url":"https://avatars1.githubusercontent.com/u/5567574?v=4","gravatar_id":"","url":"https://api.github.com/users/chriswmackey","html_url":"https://github.com/chriswmackey","followers_url":"https://api.github.com/users/chriswmackey/followers","following_url":"https://api.github.com/users/chriswmackey/following{/other_user}","gists_url":"https://api.github.com/users/chriswmackey/gists{/gist_id}","starred_url":"https://api.github.com/users/chriswmackey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chriswmackey/subscriptions","organizations_url":"https://api.github.com/users/chriswmackey/orgs","repos_url":"https://api.github.com/users/chriswmackey/repos","events_url":"https://api.github.com/users/chriswmackey/events{/privacy}","received_events_url":"https://api.github.com/users/chriswmackey/received_events","type":"User","site_admin":false},"body":"@mostaphaRoudsari ,\r\nThis is that rather large pull request that I had mentioned to you.  It adds the following capabilities:\r\n\r\n- Ability to read in .ddy files and produce editable Design Day objects.\r\n- Create Design Day objects from raw parameters\r\n- Write edited design day objects to a new .ddy file\r\n- Get annual design day objects from the .stat file (essentially allowing us to import most of the other useful data in the stat file that we do not currently import in Ladybug Legacy).\r\n- Produce monthly Design Day objects from stat files, which engineers are what engineers are often using to size zone equipment\r\n- Get hourly data collections of conditions over the design day (this will eventually allow users to visualize design conditions in the same way that they visualize the hourly EPW data).  This may also eventually support the creation of EPW files composed entirely of design days, which can be useful for studies like passive survivability studies.\r\n\r\nIn addition to this, I tired to increase coverage by adding checks for all new code and filling in checks for the psychrometric functions.","created_at":"2018-09-04T05:55:26Z","updated_at":"2018-10-09T16:57:59Z","closed_at":null,"merged_at":null,"merge_commit_sha":"35fa6cd0ee41ed15217ec31fc3be1f46e95c9aad","assignee":{"login":"mostaphaRoudsari","id":2915573,"node_id":"MDQ6VXNlcjI5MTU1NzM=","avatar_url":"https://avatars0.githubusercontent.com/u/2915573?v=4","gravatar_id":"","url":"https://api.github.com/users/mostaphaRoudsari","html_url":"https://github.com/mostaphaRoudsari","followers_url":"https://api.github.com/users/mostaphaRoudsari/followers","following_url":"https://api.github.com/users/mostaphaRoudsari/following{/other_user}","gists_url":"https://api.github.com/users/mostaphaRoudsari/gists{/gist_id}","starred_url":"https://api.github.com/users/mostaphaRoudsari/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mostaphaRoudsari/subscriptions","organizations_url":"https://api.github.com/users/mostaphaRoudsari/orgs","repos_url":"https://api.github.com/users/mostaphaRoudsari/repos","events_url":"https://api.github.com/users/mostaphaRoudsari/events{/privacy}","received_events_url":"https://api.github.com/users/mostaphaRoudsari/received_events","type":"User","site_admin":false},"assignees":[{"login":"mostaphaRoudsari","id":2915573,"node_id":"MDQ6VXNlcjI5MTU1NzM=","avatar_url":"https://avatars0.githubusercontent.com/u/2915573?v=4","gravatar_id":"","url":"https://api.github.com/users/mostaphaRoudsari","html_url":"https://github.com/mostaphaRoudsari","followers_url":"https://api.github.com/users/mostaphaRoudsari/followers","following_url":"https://api.github.com/users/mostaphaRoudsari/following{/other_user}","gists_url":"https://api.github.com/users/mostaphaRoudsari/gists{/gist_id}","starred_url":"https://api.github.com/users/mostaphaRoudsari/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mostaphaRoudsari/subscriptions","organizations_url":"https://api.github.com/users/mostaphaRoudsari/orgs","repos_url":"https://api.github.com/users/mostaphaRoudsari/repos","events_url":"https://api.github.com/users/mostaphaRoudsari/events{/privacy}","received_events_url":"https://api.github.com/users/mostaphaRoudsari/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":268042966,"node_id":"MDU6TGFiZWwyNjgwNDI5NjY=","url":"https://api.github.com/repos/ladybug-tools/ladybug/labels/enhancement","name":"enhancement","color":"84b6eb","default":true},{"id":270590769,"node_id":"MDU6TGFiZWwyNzA1OTA3Njk=","url":"https://api.github.com/repos/ladybug-tools/ladybug/labels/new%20development","name":"new development","color":"006b75","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ladybug-tools/ladybug/pulls/70/commits","review_comments_url":"https://api.github.com/repos/ladybug-tools/ladybug/pulls/70/comments","review_comment_url":"https://api.github.com/repos/ladybug-tools/ladybug/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ladybug-tools/ladybug/issues/70/comments","statuses_url":"https://api.github.com/repos/ladybug-tools/ladybug/statuses/05f2432cb12f5a943e2582b868c063440ff41310","head":{"label":"ladybug-tools:chris","ref":"chris","sha":"05f2432cb12f5a943e2582b868c063440ff41310","user":{"login":"ladybug-tools","id":14942270,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0OTQyMjcw","avatar_url":"https://avatars3.githubusercontent.com/u/14942270?v=4","gravatar_id":"","url":"https://api.github.com/users/ladybug-tools","html_url":"https://github.com/ladybug-tools","followers_url":"https://api.github.com/users/ladybug-tools/followers","following_url":"https://api.github.com/users/ladybug-tools/following{/other_user}","gists_url":"https://api.github.com/users/ladybug-tools/gists{/gist_id}","starred_url":"https://api.github.com/users/ladybug-tools/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ladybug-tools/subscriptions","organizations_url":"https://api.github.com/users/ladybug-tools/orgs","repos_url":"https://api.github.com/users/ladybug-tools/repos","events_url":"https://api.github.com/users/ladybug-tools/events{/privacy}","received_events_url":"https://api.github.com/users/ladybug-tools/received_events","type":"Organization","site_admin":false},"repo":{"id":43558610,"node_id":"MDEwOlJlcG9zaXRvcnk0MzU1ODYxMA==","name":"ladybug","full_name":"ladybug-tools/ladybug","private":false,"owner":{"login":"ladybug-tools","id":14942270,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0OTQyMjcw","avatar_url":"https://avatars3.githubusercontent.com/u/14942270?v=4","gravatar_id":"","url":"https://api.github.com/users/ladybug-tools","html_url":"https://github.com/ladybug-tools","followers_url":"https://api.github.com/users/ladybug-tools/followers","following_url":"https://api.github.com/users/ladybug-tools/following{/other_user}","gists_url":"https://api.github.com/users/ladybug-tools/gists{/gist_id}","starred_url":"https://api.github.com/users/ladybug-tools/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ladybug-tools/subscriptions","organizations_url":"https://api.github.com/users/ladybug-tools/orgs","repos_url":"https://api.github.com/users/ladybug-tools/repos","events_url":"https://api.github.com/users/ladybug-tools/events{/privacy}","received_events_url":"https://api.github.com/users/ladybug-tools/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/ladybug-tools/ladybug","description":":beetle: Core ladybug library","fork":false,"url":"https://api.github.com/repos/ladybug-tools/ladybug","forks_url":"https://api.github.com/repos/ladybug-tools/ladybug/forks","keys_url":"https://api.github.com/repos/ladybug-tools/ladybug/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ladybug-tools/ladybug/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ladybug-tools/ladybug/teams","hooks_url":"https://api.github.com/repos/ladybug-tools/ladybug/hooks","issue_events_url":"https://api.github.com/repos/ladybug-tools/ladybug/issues/events{/number}","events_url":"https://api.github.com/repos/ladybug-tools/ladybug/events","assignees_url":"https://api.github.com/repos/ladybug-tools/ladybug/assignees{/user}","branches_url":"https://api.github.com/repos/ladybug-tools/ladybug/branches{/branch}","tags_url":"https://api.github.com/repos/ladybug-tools/ladybug/tags","blobs_url":"https://api.github.com/repos/ladybug-tools/ladybug/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ladybug-tools/ladybug/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ladybug-tools/ladybug/git/refs{/sha}","trees_url":"https://api.github.com/repos/ladybug-tools/ladybug/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ladybug-tools/ladybug/statuses/{sha}","languages_url":"https://api.github.com/repos/ladybug-tools/ladybug/languages","stargazers_url":"https://api.github.com/repos/ladybug-tools/ladybug/stargazers","contributors_url":"https://api.github.com/repos/ladybug-tools/ladybug/contributors","subscribers_url":"https://api.github.com/repos/ladybug-tools/ladybug/subscribers","subscription_url":"https://api.github.com/repos/ladybug-tools/ladybug/subscription","commits_url":"https://api.github.com/repos/ladybug-tools/ladybug/commits{/sha}","git_commits_url":"https://api.github.com/repos/ladybug-tools/ladybug/git/commits{/sha}","comments_url":"https://api.github.com/repos/ladybug-tools/ladybug/comments{/number}","issue_comment_url":"https://api.github.com/repos/ladybug-tools/ladybug/issues/comments{/number}","contents_url":"https://api.github.com/repos/ladybug-tools/ladybug/contents/{+path}","compare_url":"https://api.github.com/repos/ladybug-tools/ladybug/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ladybug-tools/ladybug/merges","archive_url":"https://api.github.com/repos/ladybug-tools/ladybug/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ladybug-tools/ladybug/downloads","issues_url":"https://api.github.com/repos/ladybug-tools/ladybug/issues{/number}","pulls_url":"https://api.github.com/repos/ladybug-tools/ladybug/pulls{/number}","milestones_url":"https://api.github.com/repos/ladybug-tools/ladybug/milestones{/number}","notifications_url":"https://api.github.com/repos/ladybug-tools/ladybug/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ladybug-tools/ladybug/labels{/name}","releases_url":"https://api.github.com/repos/ladybug-tools/ladybug/releases{/id}","deployments_url":"https://api.github.com/repos/ladybug-tools/ladybug/deployments","created_at":"2015-10-02T14:52:18Z","updated_at":"2018-10-02T16:20:46Z","pushed_at":"2018-10-07T20:34:58Z","git_url":"git://github.com/ladybug-tools/ladybug.git","ssh_url":"git@github.com:ladybug-tools/ladybug.git","clone_url":"https://github.com/ladybug-tools/ladybug.git","svn_url":"https://github.com/ladybug-tools/ladybug","homepage":"","size":2582,"stargazers_count":27,"watchers_count":27,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":14,"mirror_url":null,"archived":false,"open_issues_count":9,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":14,"open_issues":9,"watchers":27,"default_branch":"master"}},"base":{"label":"ladybug-tools:master","ref":"master","sha":"33a0d98fd157a42c3989adbb6aea41df0ab10600","user":{"login":"ladybug-tools","id":14942270,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0OTQyMjcw","avatar_url":"https://avatars3.githubusercontent.com/u/14942270?v=4","gravatar_id":"","url":"https://api.github.com/users/ladybug-tools","html_url":"https://github.com/ladybug-tools","followers_url":"https://api.github.com/users/ladybug-tools/followers","following_url":"https://api.github.com/users/ladybug-tools/following{/other_user}","gists_url":"https://api.github.com/users/ladybug-tools/gists{/gist_id}","starred_url":"https://api.github.com/users/ladybug-tools/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ladybug-tools/subscriptions","organizations_url":"https://api.github.com/users/ladybug-tools/orgs","repos_url":"https://api.github.com/users/ladybug-tools/repos","events_url":"https://api.github.com/users/ladybug-tools/events{/privacy}","received_events_url":"https://api.github.com/users/ladybug-tools/received_events","type":"Organization","site_admin":false},"repo":{"id":43558610,"node_id":"MDEwOlJlcG9zaXRvcnk0MzU1ODYxMA==","name":"ladybug","full_name":"ladybug-tools/ladybug","private":false,"owner":{"login":"ladybug-tools","id":14942270,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0OTQyMjcw","avatar_url":"https://avatars3.githubusercontent.com/u/14942270?v=4","gravatar_id":"","url":"https://api.github.com/users/ladybug-tools","html_url":"https://github.com/ladybug-tools","followers_url":"https://api.github.com/users/ladybug-tools/followers","following_url":"https://api.github.com/users/ladybug-tools/following{/other_user}","gists_url":"https://api.github.com/users/ladybug-tools/gists{/gist_id}","starred_url":"https://api.github.com/users/ladybug-tools/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ladybug-tools/subscriptions","organizations_url":"https://api.github.com/users/ladybug-tools/orgs","repos_url":"https://api.github.com/users/ladybug-tools/repos","events_url":"https://api.github.com/users/ladybug-tools/events{/privacy}","received_events_url":"https://api.github.com/users/ladybug-tools/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/ladybug-tools/ladybug","description":":beetle: Core ladybug library","fork":false,"url":"https://api.github.com/repos/ladybug-tools/ladybug","forks_url":"https://api.github.com/repos/ladybug-tools/ladybug/forks","keys_url":"https://api.github.com/repos/ladybug-tools/ladybug/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ladybug-tools/ladybug/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ladybug-tools/ladybug/teams","hooks_url":"https://api.github.com/repos/ladybug-tools/ladybug/hooks","issue_events_url":"https://api.github.com/repos/ladybug-tools/ladybug/issues/events{/number}","events_url":"https://api.github.com/repos/ladybug-tools/ladybug/events","assignees_url":"https://api.github.com/repos/ladybug-tools/ladybug/assignees{/user}","branches_url":"https://api.github.com/repos/ladybug-tools/ladybug/branches{/branch}","tags_url":"https://api.github.com/repos/ladybug-tools/ladybug/tags","blobs_url":"https://api.github.com/repos/ladybug-tools/ladybug/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ladybug-tools/ladybug/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ladybug-tools/ladybug/git/refs{/sha}","trees_url":"https://api.github.com/repos/ladybug-tools/ladybug/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ladybug-tools/ladybug/statuses/{sha}","languages_url":"https://api.github.com/repos/ladybug-tools/ladybug/languages","stargazers_url":"https://api.github.com/repos/ladybug-tools/ladybug/stargazers","contributors_url":"https://api.github.com/repos/ladybug-tools/ladybug/contributors","subscribers_url":"https://api.github.com/repos/ladybug-tools/ladybug/subscribers","subscription_url":"https://api.github.com/repos/ladybug-tools/ladybug/subscription","commits_url":"https://api.github.com/repos/ladybug-tools/ladybug/commits{/sha}","git_commits_url":"https://api.github.com/repos/ladybug-tools/ladybug/git/commits{/sha}","comments_url":"https://api.github.com/repos/ladybug-tools/ladybug/comments{/number}","issue_comment_url":"https://api.github.com/repos/ladybug-tools/ladybug/issues/comments{/number}","contents_url":"https://api.github.com/repos/ladybug-tools/ladybug/contents/{+path}","compare_url":"https://api.github.com/repos/ladybug-tools/ladybug/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ladybug-tools/ladybug/merges","archive_url":"https://api.github.com/repos/ladybug-tools/ladybug/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ladybug-tools/ladybug/downloads","issues_url":"https://api.github.com/repos/ladybug-tools/ladybug/issues{/number}","pulls_url":"https://api.github.com/repos/ladybug-tools/ladybug/pulls{/number}","milestones_url":"https://api.github.com/repos/ladybug-tools/ladybug/milestones{/number}","notifications_url":"https://api.github.com/repos/ladybug-tools/ladybug/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ladybug-tools/ladybug/labels{/name}","releases_url":"https://api.github.com/repos/ladybug-tools/ladybug/releases{/id}","deployments_url":"https://api.github.com/repos/ladybug-tools/ladybug/deployments","created_at":"2015-10-02T14:52:18Z","updated_at":"2018-10-02T16:20:46Z","pushed_at":"2018-10-07T20:34:58Z","git_url":"git://github.com/ladybug-tools/ladybug.git","ssh_url":"git@github.com:ladybug-tools/ladybug.git","clone_url":"https://github.com/ladybug-tools/ladybug.git","svn_url":"https://github.com/ladybug-tools/ladybug","homepage":"","size":2582,"stargazers_count":27,"watchers_count":27,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":14,"mirror_url":null,"archived":false,"open_issues_count":9,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":14,"open_issues":9,"watchers":27,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ladybug-tools/ladybug/pulls/70"},"html":{"href":"https://github.com/ladybug-tools/ladybug/pull/70"},"issue":{"href":"https://api.github.com/repos/ladybug-tools/ladybug/issues/70"},"comments":{"href":"https://api.github.com/repos/ladybug-tools/ladybug/issues/70/comments"},"review_comments":{"href":"https://api.github.com/repos/ladybug-tools/ladybug/pulls/70/comments"},"review_comment":{"href":"https://api.github.com/repos/ladybug-tools/ladybug/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ladybug-tools/ladybug/pulls/70/commits"},"statuses":{"href":"https://api.github.com/repos/ladybug-tools/ladybug/statuses/05f2432cb12f5a943e2582b868c063440ff41310"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"mostaphaRoudsari"}}