code: def ips(self):
          
          if not hasattr(self, '_ips'):
              result = self._client.get("{}/ips".format(Instance.api_endpoint), model=self)
  
              if not "ipv4" in result:
                  raise UnexpectedResponseError('Unexpected response loading IPs', json=result)
  
              v4pub = []
              for c in result['ipv4']['public']:
                  i = IPAddress(self._client, c['address'], c)
                  v4pub.append(i)
  
              v4pri = []
              for c in result['ipv4']['private']:
                  i = IPAddress(self._client, c['address'], c)
                  v4pri.append(i)
  
              shared_ips = []
              for c in result['ipv4']['shared']:
                  i = IPAddress(self._client, c['address'], c)
                  shared_ips.append(i)
  
              slaac = IPAddress(self._client, result['ipv6']['slaac']['address'],
                                result['ipv6']['slaac'])
              link_local = IPAddress(self._client, result['ipv6']['link_local']['address'],
                                     result['ipv6']['link_local'])
  
              pools = []
              for p in result['ipv6']['global']:
                  pools.append(IPv6Pool(self._client, p['range']))
  
              ips = MappedObject(**{
                  "ipv4": {
                      "public": v4pub,
                      "private": v4pri,
                      "shared": shared_ips,
                  },
                  "ipv6": {
                      "slaac": slaac,
                      "link_local": link_local,
                      "pools": pools,
                  },
              })
  
              self._set('_ips', ips)
  
          return self._ips
docs: The ips related collection is not normalized like the others, so we have to
          make an ad-hoc object to return for its response