code: def refund(self, amount=None, reason=None):
  		
  		charge_obj = self.api_retrieve().refund(
  			amount=self._calculate_refund_amount(amount=amount), reason=reason
  		)
  		return self.__class__.sync_from_stripe_data(charge_obj)
docs: Initiate a refund. If amount is not provided, then this will be a full refund.
  
  		:param amount: A positive decimal amount representing how much of this charge
  			to refund. Can only refund up to the unrefunded amount remaining of the charge.
  		:trye amount: Decimal
  		:param reason: String indicating the reason for the refund. If set, possible values
  			are ``duplicate``, ``fraudulent``, and ``requested_by_customer``. Specifying
  			``fraudulent`` as the reason when you believe the charge to be fraudulent will
  			help Stripe improve their fraud detection algorithms.
  
  		:return: Stripe charge object
  		:rtype: dict